本章将学习基本数据类型与输入输出的方法。
首先,请大家先熟悉下面的计算指定的a+b的和并输出的代码。
1 |
|
样例输入:2 3
样例输出:5
在前一篇中讲过的部分就不再赘述,直接从第五行开始讲起。
第五行
int a,b,c;
定义三个变量,分别叫做a,b,c,返回int类型(整型),句末要有分号。可以在定义里赋值,如int a=1,b=1,c=1;
。int后面要有一个空格。
常用数据类型:
short有符号(即表示有正负,下同)短整型,范围-32768~32767(-2^15~2^15-1),只支持整数。
unsigned short无符号短整型,范围0~65535(2^16-1),只支持整数。
int有符号整型,范围-2147483648~2147483647(-2^31~2^31-1),只支持整数。
unsigned int无符号整型,范围0~4294967295(2^32-1),只支持整数。
long long有符号长整型,范围-9223372036854775808~9223372036854775807(-2^63~2^63-1),只支持整数。
unsigned long long无符号长整型,范围0~18446744073709551615(2^64-1),只支持整数。
float单精度,支持小数,有效数字约8位,范围-3.40(10的38次方)~3.40(10的38次方)。
double双精度,支持小数,有效数字约16位,范围-1.79(10的308次方)~1.79(10的308次方)。
char有符号字符型,不支持字符串,范围-128~127。
unsigned char无符号字符型,不支持字符串,范围0~255。
string字符串,在第五章中有具体说明。
bool布尔型,范围true或false,即非0或0。
*当遇见有的程序只写一个unsigned时,默认是unsigned int。
*在没有特殊强调时,整数类型一般用int,超过int的范围时可以使用long long或unsigned long long,别的一般不常用;浮点数类型一般用double,少用float。
标识符:
上文中提到的变量,就是标识符的一种。
对于所有的标识符,均需要满足如下名称要求:
- 只能是字母或下划线开头,严格区分大小写。
- 不可以包含数字或字母或下划线以外的其余符号。
- 不可以是系统正在使用的名称。如在linux系统中time是一个系统变量,则不可以使用time作为变量名称。
变量定义的写法:
- 定义一个int类型的变量a,写作
int a;
- 定义一个long long类型的变量a,写作
long long a;
- 定义一个float类型的变量a,写作
float a;
- 定义一个double类型的变量a,写作
double a;
- 定义一个char类型的变量a,写作
char a;
- 定义一个string类型的变量a,写作
string a;
*string在编程环境中不会变色,但仍是可用类型。
*要使用string类型,需要#include<string>
。
*string的具体用法在第五章中有具体说明。
*定义里可以直接赋值,如int a=123;
*定义里一句可以写多个变量,如int a,b,c;
*如在定义时直接对变量赋值,需要对每个想赋值的变量都赋值。
如:int a,b=1;
则a是未赋值变量,b被赋值为1
再如:int a=2,b=1;
则a被赋值为2,b被赋值为1
第六行
cin
cin>>a>>b;
按顺序输入一个变量a和一个变量b。cin包含在iostream中。句末有分号。
*每输入一个变量都需要写两个>符号(该符号是半角大于号),箭头指向要输入的变量。
*cin和cout会自动识别输入/输出的值的类型,无需特意说明。
*若是使用cstdio头文件的话,需要写成scanf(“%d%d”,&a,&b);
句末有分号,在变量前需加&
这个符号,相邻变量以逗号隔开。"%d"
的意思是按整型来操作,有两个变量所以写两个%d。
*scanf会比cin快一些,在输入量很大(大于10万个数据)时建议使用scanf。printf同理。
scanf
对于scanf和printf,其均满足以下写法:
scanf(格式说明字符串,操作数);
printf(格式说明字符串,操作数);
其中,scanf和printf均可以只写格式说明字符串而不写操作数。当且仅当格式说明字符串中出现格式说明符(又叫占位符)时,才填写操作数。
并且,scanf和cin一样,均会自动跳过回车,且在格式说明符不为%c和%s时均会跳过空格。
示例:
仅格式说明字符串:
scanf("a=b=");
当输入是a=b=时可以正常执行
printf("a=b=");
输出字符串a=b=
仅占位符:
scanf("%d%d",&a,&b);
当输入仅有两个数字时可以正常执行,按格式说明符%d来操作变量a和b
printf("%d",c);
按格式说明符%d来操作变量c
混用:
scanf("a=%d,b=%d",&a,&b);
当输入格式满足例如a=1,b=2
时(就连逗号也不能漏掉),输入取得值1和2,分别赋值给a和b
printf("c=%d",c);
将会原样输出c=,之后将变量c的值按格式说明符%d操作后,输出值
又如,本文开头的代码段可以转化为如下代码段,样例也可转化为对应样例:1
2
3
4
5
6
7
8
9
10
11
using namespace std;
int main()
{
int a,b,c;
scanf(“a=%d,b=%d”,&a,&b);
c=a+b;
printf(“c=%d”,c);
system("pause");
return 0;
}
样例输入:
a=2,b=3
样例输出:
c=5
注意到上文中,scanf的操作数前有加”&”符号,而printf的操作数前没有。关于&,将会在第十章中说明。
附,常见格式说明符:
%d,表示按int类型处理
%lld,表示按long long类型处理
%ull,表示按unsigned long long类型处理
%c,表示按char类型处理
%s,表示按char数组来进行处理(关于数组,后续章节会讲到)
%f,表示按float类型处理
%lf,表示按double类型处理(因为double本质上是long float,所以其格式操作符取long float的缩写)
上述格式操作符均会跳过空格和换行符。也就是说,在使用cin、或在scanf中使用上述格式操作符时,输入的不同值可以使用空格或换行符隔开。
关于格式操作符的特殊操作(以下仅1可以适用于scanf,其余均仅适用于printf):
1、按照指定宽度保留数字的方法:
如对int类型保留4个数字的位宽,格式操作符可选用%4d
*当数字的实际宽度大于要保留的位宽时,按照原宽度输出。所以若是%0d,就是按原宽度输出
*当数字的实际宽度小于要保留的位宽时,将数字右对齐,并在左边补空格填充
2、保留指定位数的小数(直接舍去,并不四舍五入)的方法:
如对double类型保留两位小数,格式操作符可选用%0.2lf
对其中0的说明,参加第1条;而小数点后的2,就表示保留两位小数
此种情况下,0可以省略,如%0.2lf与%.2lf等效
*内部操作是先计算保留小数,再计算保留位宽
*对于小数,小数点也占一个位宽,所以如对于2.15使用格式说明符%4.1lf的话,会因为先计算保留1位小数而变为2.1,此时位宽为3。再因为保留4个位宽,而在2.1前补一个空格后输出
3、可以使用0来代替空格进行填充(填充后需符合保留小数位数的要求,以及不能改变原数字大小):
如对于int类型数字100,使用格式操作符%4d,本来是在左边填充一个空格,如果改用格式操作符%04d的话,就会变成在左边填充一个0,这样执行printf("%04d",100);
就会输出0100
4、可以使用-来实现左对齐
如对于int类型数字100,使用格式操作符%-4d,就会在100右边填充一个空格后输出
但如果使用格式操作符%-04d,并不会在右边填充一个0,因为这样会改变100原本的值,所以输出会是100和一个空格
综上,如果想对一个double类型的变量a,保留5位位宽,保留1位小数,用0填充空位,实现左对齐的话,可以写成:printf("%-05.1lf",a);
第七行
c=a+b;
本句的执行过程是,先计算a+b的值,再赋值给c。本语句称之为赋值语句。赋值语句的等号左边必须是一个可以被赋值的对象。
其中,对于+号,=号,我们均称之为运算符。
常见运算符有:
+
,-
,*
,\
,分别表示加减乘除
=
,表示赋值,先计算等式右边的值,再赋值给左边的对象
%
,表示取模,功能类似于取余数。如int a=100%7;
最终c的值将等于100除以7的余数2
+=
,表示自加运算。如i+=2
,表示i=i+2
。其它的-=
,*=
,/=
,%=
同理
++
,表示自加1运算。如i++,表示i=i+1
。三个或更多加号则不成立,只有两个+号的++可以表示自加运算。
*特别的,++有前置和后置两种写法,如i++和++i,最终都会导致i=i+1。
*当i++或++i单独存在时,它们并无区别。但当它们处于赋值语句中时,会引发差别。
i++是先取得i的值,再自加;++i是先自加,再取得i的值。
如,现在有int i=1,a;
然后令a=i++
,则先取得i的值1,赋值给a,然后i再自加,i变成2,所以执行完后a=1,i=2。
相对的,如现在有int i=1,a;
然后令a=++i
,则i先自加,i变成2,再取得i的值2,赋值给a,所以执行完后a=,2,i=2。
–与++同理。只有加减有这种写法,别的没有。
第二章到此结束。
感谢PTW对本文的援助。
本章练习: