三·常量和变量
常量的定义:
一个常量可以直接调用(如124,‘A’),也可以给常量取个名字用一个标 识符代表它,这就是符号常量。其语法格式为:
const 符号常量=常量字串;
例如:const double PI=3.1415926;
习惯上,符号常量名用大写,而变量名用小写,以便于区别。
使用符号常量的好处:
1)增加了程序的可读性。如看到例2.5程序中,见到PI就可知道它代表圆周率,定义符号常量名时应该尽量使用见名知意的常量名。
2)增加了程序的易改性。如例2.5程序中,只需改动一处,程序中的所有PI都会自动全部代换,做到“一改全改”。
变量的定义:
变量代表了一个存储单元,其中的值是可以改变的,因此称为变量。
一个程序中可能要使用到若干个变量,为了区别不同的变量,必须给每个变量(存储单元)取一个名(称为变量名),该变量(存贮单元)存储的值称为变量的值,变量中能够存储值的类型为变量的类型。
变量名
用一个合法的标识符代表一个变量。如n,m,rot,total 等都是合法变量名。在程序中用到的变量要“先定义后使用”,变量名应遵循自定义标识符的命名规则,并建议使用“见名知义”的原则,即用一些有意义的单词作为变量名。在C++语言,变量名大小写有区别。
用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符。C++语言规定,标识符只能由字母(包含下划线“_”)开头,后面的字符可以是字母或数字。
定义变量的语法格式为:
数据类型 变量表
例
int i=5,j,k; //定义i,j,k为整型变量,
//i赋初值为5,j,k的初值未知。
char a,b,c; //定义a,b,c为字符变量
float x,y,z; //定义x,y,z为实型变量
C++语言允许在定义变量的同时为变量赋初值。
如果对变量未赋初值,则该变量的初值是一个 不可预测的值。
四·标准数据类型
整型
字符型(char)
1、普通表示形式
字符常量是由单个字符组成,所有字符采用ASCII编码,ASCII编码共有128个字符(表2-4)。在程序中,通常用一对单引号将单个字符括起来表示一个字符常量。如:‘a’,‘A’,'0’等。如字符A的序号是65,字符a的序号是97, 字符0的序号的48。
2、转义字符表示形式。
转义字符有三种用法:表示控制字符、表示特殊字符、表示所有字符。常用的转义字符如右表所示。
例 整型数据类型存储空间大小
分别定义int,short类型的变量各一个,并依次输出它们的存储空间大小(单位:字节)。
【参考程序】
#include<iostream>
using namespace std;
int main()
{
int x;
short y;
cout<<sizeof(x)<<" "<<sizeof(y)<<endl;
//sizeof返回一个对象或者类型所占的内存字节数
return 0;
基于char数据的这个特点,它可以和int变量一样做加减运算
例2 大小字母的转换
#include<iostream>
using namespace std;
int main()
{ char c1,c2;
c1='a';
c2='A';
cout<<c1<<" "<<c2<<endl;
c1=c1-32; //小写字母转换大写字母
c2=c2+32; //大写字母转换小写字母
cout<<c1<<" "<<c2<<endl;
}
运行结果:
a A
A a
因为所有小写字母的ASCII值要比对应大写字母的ASCII值大32,所以c1减去32后便得到原来字母的大写形式。反之,c2加上32后便得到原来字母的小写形式。
数据类型转换
1. 混合运算时的类型转换规则
整型、实型、字符型数据间可以混合运算。在这种情况下,需要将不一致的数据类型转换成一致的数据类型,然后进行运算。为了保证运算精度,系统在运算时的转换规则是将存储长度较短的运算对象转成存储长度较长的类型,然后再进行处理。这种转换是系统自动进行的,具体见表
2. 赋值时的类型转换规则
当赋值运算符两侧的数据类型不同时,需进行类型转换,这种转换是系统自动进行的,转换规则如下:
1)float、double型赋值给int型:直接截断小数。
例如,“int i=f+0.6;”,f的值为4.0,右边算术表达式运算后的结果为4.6的double型数据,根据上述转换原则,直接舍弃小数,所以i的值为4。
2)int、char型赋值给float、double型:补足有效位以进行数据类型转换。
例如:“float f=4;”,float为7位有效数字,所以f的值为4.0000000。
3)char型(1字节)赋给int型(4字节):数值赋给int型的低8位,其它位补0。
4)long int型赋值给int型:long int型截断低字节给int型。
5)int型赋值给long int型:赋给long int型的低16位,如果int型的最高位是0,则long int的高16位全为0;如果int型的最高位是1,则long int型的高16位全为1(称为“符号扩展”)。
6)unsigned int型赋值给int型:直接传送数值。
7)非unsigned int型赋值给位数相同的unsigned int型:直接传送数值。
3. 强制类型转换
在C++语言中,还允许强制类型转换,即将某一数据的数据类型转换为指定的另一种数据类型,强制类型转换只是临时转换。强制转换运算符组成的运算表达式的一般形式为:
(类型名)(表达式)
例如:已知有变量定义“int b=7;float a=2.5,c=4.7;”,求下面算术表达式的值。
a+(int)(b/3*(int)(a+c)/2.0)%4
根据运算符的结合性规则,表达式要自左至右执行,b/3为2,2*(int)(a+c)为14,14/2.0为7.0,强制类型转换后为7,7%4为3,a的值2.5与3相加,最终结果为5.5。
浮点数向零舍入
输入一个单精度浮点数,将其向零舍入到整数。说明:向零舍入的含义是,正数向下舍入,负数向上舍入。提示:可以使用强制类型转换来实现。
输入: 输出:
一个单精度浮点数。 一个整数,即向零舍入到整数的结果。
样例输入:
2.3
样例输出:
2
#include<iostream>
using namespace std;
int main()
{
double n;
cin>>n;
cout<<int(n)<<endl;
return 0;
}
数据输入输出
6个最基本的输入、输出函数:
字符输入getchar,字符输出putchar
流输入cin,流输出cout
格式化输入scanf,格式化输出prinf
字符输入函数getchar
getchar函数是接收从键盘输入的单个字符数据。它是一个无参函数,其语法格式为:
getchar();
【说明】
1)通常把输入的字符赋予一个字符变量,构成赋值语句。例如:
char ch;
ch=getchar();
2) getchar函数只能接受单个字符,输入数字也按字符处理。
3)输入多于一个字符时,只接收第一个字符。
4) getchar函数等待用户输入,直到按回车键才结束,可用于暂停程序的运行,直到输入一个回车键。
5)如果在程序中连续有两个以上getchar()函数,应该一次性输入所需字符,最后再按回车键,否则会把回车作为一个字符传给后面的getchar()函数。
利用getchar函数接收键盘输入。
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
char ch;
ch=getchar(); //读入字符
cout<<"input="<<ch<<endl;
}
字符输出函数putchar
putchar函数是字符输出函数,功能是向标准输出设备(如显示器)输出单个字符数据,其语法格式为:
putchar(ch); //其中,ch为一个字符变量或常量。
利用putchar 函数输出字符。
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
char c='B'; //定义字符变量c并赋值'B'
putchar(c); //输出该字符
putchar('\x42'); //用转义字符输出字母'B'
putchar(0x42); //用16进制ASCII码值输出字母'B'
putchar(66); //用10进制ASCII码值输出字母'B'
}
运行结果:BBBB
通过cout流输出数据
cout<<
输出字符串和输出变量的区别
每当我们输出字符串常量的时候,必须用双引号把字符串引起来,以便将它和变量名明显的区分开来。
下面两个语句是不同的:
cout << "Hello" ; //打印字符串Hello到屏幕上cout << Hello ;
cout << Hello; //把变量Hello存储的内容打印到屏幕上
通过cin流读入数据
cin>>
格式化输入函数scanf
格式化输出函数printf
【下节展开】
几种输入输出格式的几点说明
1、cin和cout在Dev C++中只能调用库,而其他输入输出格式要调用<stdio.h>库或库。
2、cin和cout属于C++的概念,调用时涉及输入输出流,而scanf和printf属于C的概念,是C语言的标准输入/输出库中的函数,所以在时效上,scanf和printf优于cin、cout,对于大数据的输入输出,通常情况下应该用scanf、printf。
3、对于普通数据的输入输出,cin和cout比较方便,而在格式化方面,scanf和printf比较容易。cin效率比scanf低很多,尤其输入数据达到20万以上时非常明显,在100万时cin读入就会超时。
4、scanf和printf也缺点,cin和cout能够自动识别变量的数据类型,因此,在进行输入输出时,不需要指定数据类型,printf和scanf函数在输入输出时需指定数据类型。