《C语言第二次作业答案.ppt》由会员分享,可在线阅读,更多相关《C语言第二次作业答案.ppt(63页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章基本数据类型、运算符、输入输出函数基本数据类型、运算符、输入输出函数1 数据类型为什么数据要分类为什么数据要分类对数据进行分类,以便让计算机进行相对数据进行分类,以便让计算机进行相应的存储和处理应的存储和处理C语言的基本数据类型有:语言的基本数据类型有:char(字符型)字符型)int(整型)整型)float(实型或浮点型)实型或浮点型)double(双精度实型双精度实型)2 常量概念:概念:程序运行过程中其值不能被改变的量程序运行过程中其值不能被改变的量常量的分类:常量的分类:整型常量整型常量实型常量实型常量字符常量字符常量字符串常量字符串常量符号常量符号常量整型常量整型常量整型常量即
2、整常数整型常量即整常数1.整数整数取值范围:一般占一个机器字,字长取值范围:一般占一个机器字,字长2字节,字节,取值范围为取值范围为-32768+32767表示形式:表示形式:十进制整数十进制整数以非以非0开头的整数开头的整数八进制整数八进制整数以以0开头的整数开头的整数十六进制整数十六进制整数以以0 x或或0X开头的整数开头的整数例:例:-123、456、0123、-0 x1232.长整数长整数取值范围:占四字节取值范围:占四字节2147483648+2147483647表示形式:在整数后面加字母表示形式:在整数后面加字母L或或l例:例:456l、-0456l、0 x456l3.关于无符号数
3、关于无符号数若整数是无符号数,整常量能表示的取值范围若整数是无符号数,整常量能表示的取值范围将相应的扩大一倍将相应的扩大一倍实型常量1.实型常量又称浮点数常量,实型常量又称浮点数常量,只使用十进制只使用十进制,有两种表示形式:有两种表示形式:定点数形式定点数形式由正负号、整数部分、小数点、小数部分组成由正负号、整数部分、小数点、小数部分组成例:例:0.0、12.34、0.123、.123、-123.0、-123.指数形式指数形式由正负号、整数部分、小数点、小数部分、由正负号、整数部分、小数点、小数部分、E(e)后后带或不带正负号的整数组成带或不带正负号的整数组成合法:合法:1e-5、-3.14
4、157E+7、-28e-005、123.45E0非法:非法:E8、3E-5.6、.e2、4e、e2.实型常量不分单、双精度实型常量不分单、双精度,都按双精度都按双精度double型型处理处理字符常量1.字符常量是用字符常量是用一对单引号一对单引号(作为定界符)括起(作为定界符)括起来的一个字符来的一个字符,字符字符不能不能是单引号是单引号、双引号双引号“、反斜杠反斜杠。例如:例如:A,a,5,?,+,!,$。2.字符常量具有数值,即其字符常量具有数值,即其ASCII代码值。如:代码值。如:C=A;与与C=65;等价。等价。3.一种特殊的字符常量转义字符一种特殊的字符常量转义字符(见表见表3-1
5、)一对单引号括起来,里面是反斜线开头,后跟一一对单引号括起来,里面是反斜线开头,后跟一个字符,如个字符,如n。或反斜线开头,后跟一个一到三位或反斜线开头,后跟一个一到三位八进制数,或后跟一个一到二位八进制数,或后跟一个一到二位x开头的十六进制数。开头的十六进制数。常用转义字符符号符号ASCII值值功能功能ddd8进制数表示的进制数表示的ASCII字符字符xhh16进制数表示的进制数表示的ASCII字符字符a7响铃响铃t9水平制表水平制表n10换行换行r13回车回车b8退格退格39单引号单引号34双引号双引号92反斜线反斜线00空字符空字符字符串常量1.字符串常量一对双引号括起来的字符系列。字符
6、串常量一对双引号括起来的字符系列。例例:hello!,program,a,123.452.存储形式存储形式字符串中的每个字符占一个字节,在其尾字符串中的每个字符占一个字节,在其尾部自动追加一个字符部自动追加一个字符0。hello!0104101108108111330符号常量符号常量即用一个特定的符号来代表一个常量符号常量即用一个特定的符号来代表一个常量定义:定义:#define符号常量符号常量常量常量(字符串)(字符串)例:例:#defineR5.179符号常量须符号常量须“先定义,后使用先定义,后使用”,一般用大写字母,一般用大写字母例:例:#definePRICE35#defineNUM
7、10#defineSUMPRICE*NUMmain()printf(total=%dn,SUM);结果:结果:total=3503 变量概念:概念:在程序运行过程中,其值能被改变的量在程序运行过程中,其值能被改变的量。对所使用的变量要对所使用的变量要“先定义、后使用先定义、后使用”(使用使用标识标识符符进行定义进行定义),以便编译时为其分配相应的存储单),以便编译时为其分配相应的存储单元元。普通变量定义形式普通变量定义形式数据类型数据类型变量名表;变量名表;例:例:inta,b;(定义两个整数定义两个整数)分类分类整型变量整型变量、实型变量实型变量、字符型变量字符型变量变量初始化变量初始化C标
8、识符用来标识变量名、符号常量名、函数名、用来标识变量名、符号常量名、函数名、数组名、文件名的有效字符序列。数组名、文件名的有效字符序列。标识符必须由字母或下划线开头,后跟字标识符必须由字母或下划线开头,后跟字母或下划线或数字,字母区分大小写。母或下划线或数字,字母区分大小写。标识符的长度(字符个数)无统一规定,标识符的长度(字符个数)无统一规定,随系统而不同,一般只能识别前随系统而不同,一般只能识别前8个字符。个字符。选择标识符时,提倡使用有意义的英文单选择标识符时,提倡使用有意义的英文单词,注意做到词,注意做到“见名知义见名知义”关键字关键字是由语言规定的具有特定意义的是由语言规定的具有特定
9、意义的字符串,通常也称为字符串,通常也称为保留字保留字,不允许作标,不允许作标识符(见附录)识符(见附录)整型变量数据类型数据类型所占位数所占位数数数值值范范围围int,short16-3276832767(-215215-1)longint32-21474836482147483647(-231231-1)unsignedint16065535(0216-1)unsignedshort16065535(0216-1)unsignedlong3204294967295(0232-1)数据类型说明符:int,short,longmain()int a,b,s;scanf(“%d%d”,&a,&b
10、);s=a+b;printf(“%d”,s);输入:11 22 输出:33实型变量main()floatx,y;x=111111.111;y=222222.222;printf(%fn,x+y);运行结果为运行结果为333333.328125数据类型所占位数数值范围有效数字float3210-37 103867double6410-307 103081516long double12810-4931 1049321819数据类型说明符数据类型说明符:float,double字符型变量一个字符变量在内存中一个字符变量在内存中占一个字节占一个字节将一个字符常量赋值给一个字符变量,将一个字符常量赋值
11、给一个字符变量,实际上是把该字符的实际上是把该字符的ASCII代码放到字代码放到字符变量对应的内存单元中去符变量对应的内存单元中去字符数据与整型数据的存储形式相类似,字符数据与整型数据的存储形式相类似,可以相互赋值或混合运算,可以相互赋值或混合运算,一个字符数一个字符数据既可以以字符形式输出,也可以整数据既可以以字符形式输出,也可以整数形式输出形式输出.数据类型说明符:数据类型说明符:char 例例1 1:main()main()char a,b;char a,b;a=a;b=b;a=a;b=b;printfprintf(%c(%c%cn,%cn,a,b);a,b);printf(printf
12、(%d%d%dn%dn,a,b);,a,b);例例2 2:main()main()intint a;char b;a;char b;a=a;b=98;a=a;b=98;printf(%cprintf(%c%cn,a,b);%cn,a,b);printf(%dprintf(%d%dn,a,b);%dn,a,b);运行结果:a b 97 98变量初始化定义变量时仅为变量分配内存,并不对这部分内存定义变量时仅为变量分配内存,并不对这部分内存进行清空操作,分配作变量的内存中的原值被保留,进行清空操作,分配作变量的内存中的原值被保留,且其值无法确定。因此,变量在参与运算前应且其值无法确定。因此,变量在参
13、与运算前应初始初始化化,赋予初值,以免产生逻辑错误。,赋予初值,以免产生逻辑错误。C语言规定,可以在定义变量的同时给变量赋初值。语言规定,可以在定义变量的同时给变量赋初值。例如:例如:inta=2,c=3;floatpi=3.14;charc1=a,c2=9;如果要对如果要对n个同类型的变量赋相同的初始值,也要个同类型的变量赋相同的初始值,也要分别赋值。分别赋值。例如:例如:inta=10,b=10,c=10;intinta=b=c=10;a=b=c=10;错误!4 运算符和表达式-1-1运算符是告诉编译程序执行特定算术或逻运算符是告诉编译程序执行特定算术或逻辑操作的符号辑操作的符号算术运算符
14、和算术表达式算术运算符和算术表达式赋值运算符和赋值表达式赋值运算符和赋值表达式关系运算符和关系表达式关系运算符和关系表达式逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式条件运算符和条件表达式条件运算符和条件表达式逗号运算符和逗号表达式逗号运算符和逗号表达式4 运算符和表达式-2-2指针运算符指针运算符*sizeof运算符运算符位运算符位运算符*不同类型数据之间的转换不同类型数据之间的转换运算符优先级和结合性运算符优先级和结合性表达式和表达式语句表达式和表达式语句(如何按照条件写表达式如何按照条件写表达式)4.1算术运算符1.加、减、乘、除和取余运算符:加、减、乘、除和取余运算符:+、-、*、/、
15、%除号除号/-当两个整型数相除时,结果为整数(商的整数当两个整型数相除时,结果为整数(商的整数部分)部分)-当被除数和除数只要有一个是实型数时,结果当被除数和除数只要有一个是实型数时,结果为实数的商。为实数的商。取余号取余号%l只能对整型数运算。只能对整型数运算。l比如取整数的个位数:比如取整数的个位数:53%10是是3,取整数的十位数取整数的十位数1253/10%10是是52.自增、自减运算符:自增、自减运算符:+、-用法用法-前置运算前置运算:+或或-用在变量之前,先将变量的用在变量之前,先将变量的值增值增1或减或减1,再将该变量的新值用于表达式中,再将该变量的新值用于表达式中-后置运算后
16、置运算:+或或-用在变量之后,先将变量的用在变量之后,先将变量的值用于表达式中,再将该变量的值增值用于表达式中,再将该变量的值增1或减或减1例:例:i=5+j-;i=5+-j;该运算符该运算符只能用于变量,不能用于常量和表达式只能用于变量,不能用于常量和表达式合法:合法:i+;-j;i=(j+)*5;非法:非法:6-;i=(j*5)+;例例1:main()inta=5,c;c=+a;/*a先增先增1,再运算,再运算*/c=c+a+;/*a先运算,再增先运算,再增1*/printf(a=%dtc=%dn,a,c);结果结果:a=7c=12*例例2:执行下列语句后:执行下列语句后,输出结果是什么输
17、出结果是什么?main()inta=10,b=20,c;c=+a+b-;printf(a=%d,b=%d,c=%d,a,b,c);结果结果:a=11,b=19,c=31算术表达式是用算术运算符和括号将运算对象(常量、是用算术运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合变量和函数等)连接起来的、符合C语法规语法规则的式子,如:则的式子,如:x+a+ba%bn/100%104.2 赋值运算符与赋值表达式1.基本赋值运算符:基本赋值运算符:=由由“=”连接的式子称为赋值表达式。其一般连接的式子称为赋值表达式。其一般形式为:形式为:变量变量=表达式表达式功能是:计算右边表达式的值再赋予
18、左边的功能是:计算右边表达式的值再赋予左边的变变量。量。例如:例如:a=3b=i+-jc=sin(x)+sin(y)赋值运算符具有右结合性。赋值运算符具有右结合性。a=b=c=1可理解为:可理解为:a=(b=(c=1)2.复合赋值运算符:复合赋值运算符:+=、-=、*=、/=、%=(算术运算算术运算)&=、|=、=、=、=(位运算位运算)复合赋值符是在赋值符复合赋值符是在赋值符“=”之前加上其它二之前加上其它二目运算符可构成,执行顺序是:先运算,再目运算符可构成,执行顺序是:先运算,再赋值。赋值。复合赋值表达式的一般形式为:复合赋值表达式的一般形式为:变量变量双目运算符双目运算符=表达式表达式
19、等价于:等价于:变量变量=变量变量双目运算符双目运算符表达式表达式例如例如:a+=5等价等价于于a=a+5x%=8等价于等价于x=x%8n&=m等价于等价于n=n&mx*=y+7等价于等价于x=x*(y+7)x=n+1等价于等价于x=x、=、b的值为的值为0,而而关系表达式关系表达式ab的值为的值为1。这里的这里的0和和1是逻辑值,是逻辑值,它可以作为判断的条件它可以作为判断的条件,也可以和其它的关系表达式做逻辑运算(与、也可以和其它的关系表达式做逻辑运算(与、或、非等),也可以和其它的算术表达式做算或、非等),也可以和其它的算术表达式做算术运算术运算运用关系表达式时的注意事项运用关系表达式时
20、的注意事项1关系表达式中字符型数据按其关系表达式中字符型数据按其ASCII码值参加比较运算码值参加比较运算10030值为值为12运算符两边的表达式可以是算术、字符、赋值、关系、或逻运算符两边的表达式可以是算术、字符、赋值、关系、或逻辑表达式。辑表达式。例:(例:(a+x)(b+y)(x=4)=y+3关系运算符运算时结合方向关系运算符运算时结合方向自左至右自左至右。例:例:若若a=4,b=3,c=2则则x=(abbc)y的值为的值为0。4.4逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式逻辑运算符逻辑运算符用于对逻辑量进行运算,有用于对逻辑量进行运算,有3种:种:&逻辑与:逻辑与:操作数全真时结果
21、才真否则为假操作数全真时结果才真否则为假|逻辑或:逻辑或:操作数全假时结果为假真否则为真操作数全假时结果为假真否则为真!逻辑非:逻辑非:操作数取反操作数取反逻辑表达式逻辑表达式是用逻辑运算符联系起来的表达式。如:是用逻辑运算符联系起来的表达式。如:a&b;a|b;!a;逻辑运算符两边的逻辑运算符两边的操作数操作数认为是逻辑值。非认为是逻辑值。非0为真,为真,0为为假。假。逻辑表达式的逻辑表达式的结果结果也是逻辑值。真为也是逻辑值。真为1,假为,假为0。运用逻辑表达式的注意事项运用逻辑表达式的注意事项判断数值是否为真时,非判断数值是否为真时,非0代表真,代表真,0代表假代表假逻辑运算符两侧的操作
22、数不仅可以是整数,也逻辑运算符两侧的操作数不仅可以是整数,也可以是其他数据类型,只要该类型的数据值最可以是其他数据类型,只要该类型的数据值最终能得到终能得到0或非或非0值值逻辑表达式中,不一定对逻辑运算符两侧的表逻辑表达式中,不一定对逻辑运算符两侧的表达式都求值达式都求值(&、|)数学上的数值区间不能直接用数学上的数值区间不能直接用在在C语言的判断语言的判断条件上条件上如如:数学上的数学上的1x10,不应写成:不应写成:1x=10;而应写成:而应写成:(1x)&(x=10)例例1:intx,y,z,w;x=y=z=-1;w=(+x|+y)&+z;printf(%d,%d,%d,%dn,x,y,
23、z,w);输出是什么?输出是什么?注:注:&前的操作数值若是假,则后面的表达式无需运算前的操作数值若是假,则后面的表达式无需运算|前的操作数值若是真,则后面的表达式无需运算前的操作数值若是真,则后面的表达式无需运算0,0,-1,04.5 条件运算符和条件表达式条件运算符(三目运算符)条件运算符(三目运算符)?:条件表达式的一般形式:条件表达式的一般形式:表达式表达式1?表达式表达式2:表达式表达式3条件表达式求值过程:条件表达式求值过程:注:三个表达式的类型可以不同;表达式注:三个表达式的类型可以不同;表达式1要能得要能得到逻辑值;整个表达式值类型取表达式到逻辑值;整个表达式值类型取表达式2和
24、表达式和表达式3中较高的类型中较高的类型表达式1取表达式2值取表达式3值TF例例1:执行下列程序段后,变量:执行下列程序段后,变量a,b,c的值和的值和x,y的值分别是什么的值分别是什么?intx=10,y=9;inta,b,c;a=(-x=y+)?-x:+y;b=x+;c=y;8,8,109,10*例例2:请写出下列程序的运行结果:请写出下列程序的运行结果main()intx=5,y=6;printf(%dn,(+x=y+)|(x=8)?-x:-y);printf(%d,%d,x,y);结果:结果:55,74.6 逗号运算符和逗号表达式又称顺序运算符,用于把若干表达式组合成又称顺序运算符,用
25、于把若干表达式组合成一个表达式,称之为一个表达式,称之为逗号表达式逗号表达式或或顺序表顺序表达式达式。如:如:3+5,7+9逗号表达式的一般形式:逗号表达式的一般形式:表达式表达式1,表达式表达式2,表达式表达式n表示由左到右依次计算各表达式之值,逗表示由左到右依次计算各表达式之值,逗号表达式之值为号表达式之值为表达式表达式n之值之值。如:如:a=3*5,a*6之值为之值为90 4.7 指针运算符*取址运算符取址运算符&:取出内存单元的地址:取出内存单元的地址例:例:p=&i;表示变量表示变量i的地址赋给指针变量的地址赋给指针变量p,即指针即指针p指向了变量指向了变量i取内容运算符取内容运算符
26、*:取出指针所指向的变量的内:取出指针所指向的变量的内容容,例:例:y=*p;表示指针表示指针p指向的变量值赋给变量指向的变量值赋给变量y*p=x;表示变量表示变量x的值赋给指针所指向的变量的值赋给指针所指向的变量指针运算符示例main()inta=10,b=8,c,d,*p1,*p2;p1=&a;p2=&b;c=*p1+*p2;d=*p1-*p2;printf(a+b=%dn,c);printf(a-b=%dn,d);详细的用法见指针一章详细的用法见指针一章4.8 sizeof运算符功能:功能:用于计算被运算对象所占字节数用于计算被运算对象所占字节数使用格式:使用格式:sizeof(数据类型
27、数据类型)或或sizeof(表达式表达式)例如:例如:sizeof(double)值为值为8sizeof(char)值为值为1floatf;inti,a10;i=sizeof(f);i的值将为的值将为4i=sizeof(a);i的值将为的值将为204.9 不同数据类型之间的转换不同数据类型的常量、变量混合运算时,要先转不同数据类型的常量、变量混合运算时,要先转换成同一类型后进行运算。转换方法有两种:换成同一类型后进行运算。转换方法有两种:1.自动转换自动转换表达式运算时的转换规则表达式运算时的转换规则:longdouble高高doublefloatunsignedlongintlongintu
28、nsignedintintchar,shortint低低例:10+a+i *f -d /e int char float float double long int intfloatfloatdoubledouble赋值号两边的数据类型不同时的转换规则:赋值号两边的数据类型不同时的转换规则:赋值号右边的类型转换成左边的类型。当右边赋值号右边的类型转换成左边的类型。当右边的数据类型比左边长时,右边的数据被截取所的数据类型比左边长时,右边的数据被截取所需的长度。需的长度。见见示例示例2.强制转换强制转换形式:形式:(类型名类型名)操作数操作数其中其中操作数操作数可以是常量、变量或表达式。可以是常量
29、、变量或表达式。例:例:floatx;(int)4.5/3值为值为1(int)x取变量取变量x的整数部分的整数部分x-(int)x取变量取变量x的小数部分的小数部分自动类型转换示例 main()char c;int i;i=11361;/*0 x2c61*/c=i;/*0010110001100001*/printf(%c%d%x,c,c,c);运行结果:a 97 614.10 运算符的优先级和结合性优先级优先级:操作数两边有两个运算符:操作数两边有两个运算符,首先参加优首先参加优先级高的运算符一侧的运算。先级高的运算符一侧的运算。(附录附录)结合性结合性:操作数两侧的运算符优先级相同时:操作
30、数两侧的运算符优先级相同时,C规定了各种运算符的结合方向,即规定了各种运算符的结合方向,即“自左至右自左至右”或或“自右至左自右至左”。(附录附录)即:运算符的结合性是规定连续几个相同优先级即:运算符的结合性是规定连续几个相同优先级的运算符的计算顺序。的运算符的计算顺序。结合性为从左到右时,计算就从左到右逐个进行;结合性为从左到右时,计算就从左到右逐个进行;结合性为从右到左时,计算就从右到左逐个进行。结合性为从右到左时,计算就从右到左逐个进行。例1:y=2+3-4*5+6 5 -20 -15 +6 -9 例2:表达式 a+b+c 等价于 (a+b)+c (左到右)表达式 a=b=c 等价于 a
31、=(b=c)(右到左)表达式*p+等价于 *(p+)(右到左)表达式*+p 等价于*(+p)(右到左)表达式+*p 等价于 +(*p)(右到左)练习:如何用练习:如何用C语言写表达式语言写表达式逻辑或关系表达式逻辑或关系表达式判断某一年是否是闰年判断某一年是否是闰年整数整数x大于大于y且小于等于且小于等于z一个整数是偶数但不能被一个整数是偶数但不能被3整除整除写表达式表示一个字符是一个数字写表达式表示一个字符是一个数字写表达式表示一个字符是一个字母写表达式表示一个字符是一个字母数学表达式数学表达式写一个表达式使得一个小数写一个表达式使得一个小数x四舍五入四舍五入写一个表达式使得一个小数写一个表
32、达式使得一个小数x在小数点后第三位四舍五入在小数点后第三位四舍五入分别写表达式描述一个整数分别写表达式描述一个整数n的个位数、十位数。的个位数、十位数。写出下面的代数式表达式写出下面的代数式表达式表达式:用运算符将运算对象连接起来得式子表达式语句:表达式以分号结束称为表达式语句5 输入输出函数在语言中,所有的数据输入输出都是由库在语言中,所有的数据输入输出都是由库函数完成的。函数完成的。使使 用用 语语 言言 库库 函函 数数 时时,要要 用用 预预 编编 译译 命命 令令#include将有关将有关“头文件头文件”包括到源文件中。包括到源文件中。使使用用标标准准输输入入输输出出库库函函数数时
33、时要要用用到到stdio.h文文件,因此源文件开头应有以下预编译命令:件,因此源文件开头应有以下预编译命令:#include或或#includestdio.h对于下面介绍对于下面介绍的的printf和和scanf函数,考虑到其使函数,考虑到其使用频繁,系统允许在使用这两个函数时可不加用频繁,系统允许在使用这两个函数时可不加上述上述预编译命令预编译命令5.1 格式输入和输出函数1.格式输出函数格式输出函数printf()功能:向显示器输出信息功能:向显示器输出信息使用形式:使用形式:printf(输出格式输出格式,输出表列输出表列);输出格式可由三部分组成:输出格式可由三部分组成:格式说明格式说
34、明、按原样输出的字符按原样输出的字符、转义字符、转义字符 输出表列是需要输出的一些数据,可以是表达式输出表列是需要输出的一些数据,可以是表达式例:例:inta=123;printf(a=%dn,a);有多个输出数据,则:有多个输出数据,则:-输出表列中各输出间用逗号分隔输出表列中各输出间用逗号分隔-格式说明与输出数据的个数相同且一一对应,格式说明与输出数据的个数相同且一一对应,注意左右对齐符号注意左右对齐符号如:如:inti=-5;floatj=98;printf(i=%d,j=%-10.2fn,I,j);printf(i=%d,j=%10.2fn,I,j);输出为输出为:i=-5,j=98.
35、00i=-5,j=98.00例例1:main()inta=345,b=-1;floatv=3.1.415;floatu=3.1416;printf(a=%d,%x,%on,a,a,a);printf(b=%un,b);printf(“%.3f,%6.3f,%-6.3f”,v,v,v,v);printf(“%f,%.3f,%6.3f,%-6.3f”,u,u,u,u);结果为:结果为:a=345,159,531b=655353.141,3.141,3.141 3.141600,3.142,3.142,3.142/*进位问题进位问题*/例例2:main()printf(%3s,%7.2s,%.4s,
36、%-5.3sn,CHINA,CHINA,CHINA,CHINA);结果为:结果为:CHINA,CH,CHIN,CHI说明:说明:当指定的输出宽度小于输出值本身宽度时,则指当指定的输出宽度小于输出值本身宽度时,则指定的输出宽度不起作用,比如上面定的输出宽度不起作用,比如上面%3s的格式规定,的格式规定,但仍然输出字符串但仍然输出字符串CHINA2.格式格式输入函数输入函数scanf()功能:从键盘接受输入信息功能:从键盘接受输入信息使用形式:使用形式:scanf(输入格式输入格式,地址表列地址表列);输入格式输入格式可由二部分组成:可由二部分组成:格式说明格式说明、按原样输入的字符按原样输入的字
37、符格式说明格式说明和输出函数中的输出格式相似和输出函数中的输出格式相似。地址表列由需输入的变量的地址,地址表列由需输入的变量的地址,或字符串首或字符串首地址列表组成。地址列表组成。如:如:inti;scanf(%d,&i);运行时输入:运行时输入:14 有多个数据输入,则:有多个数据输入,则:写语句时:写语句时:-地址表列中各输入变量间用地址表列中各输入变量间用逗号逗号分隔分隔-格式说明与输入变量的个数相同且一一对应格式说明与输入变量的个数相同且一一对应-执行输入语句需要输入数据时:执行输入语句需要输入数据时:数据之间数据之间以一个或多个空格分隔以一个或多个空格分隔比比如如:inti,j;sc
38、anf(%d%d,&i,&j);运行时输入:运行时输入:34 当双引号中有按原样输入的字符,当双引号中有按原样输入的字符,输入时应按原输入时应按原样键入。样键入。如:如:scanf(a=%d,b=%d,&a,&b);运行时输入:运行时输入:a=3,b=4 用用%c格式输入字符,则格式输入字符,则空格和转义字符都作为有效空格和转义字符都作为有效字字符输入符输入如如:scanf(%c%c%c,&c1,&c2,&c3);运行时应输入:运行时应输入:abc 不应输入:不应输入:a b c(a赋给赋给c1,赋给赋给c2,b赋给赋给c3)输入实数时,不能规定输入实数时,不能规定精度精度。如如:scanf(
39、“%7.2f”,&a);不允许。不允许。下面情形之一发生时下面情形之一发生时scanf语句对语句对当前变量当前变量的读操作结束的读操作结束1遇到空格,回车或制表键遇到空格,回车或制表键2宽度限制宽度限制3不合法不匹配的输入不合法不匹配的输入l不合法不匹配的输入将导致不正确的结果不合法不匹配的输入将导致不正确的结果例例1:假设输入:假设输入12345,abc,写出下面程序的运行结果写出下面程序的运行结果main()inta;charch;scanf(“%3d%3c”,&a,&ch);printf(“%d,%c”,a,ch);?例例2:有如下语句:有如下语句scanf(“%d%c%f”,&a,&b
40、,&c);若输入若输入2223a123o.12,那么那么a,b,c的值分别是什么的值分别是什么?若输入若输入a2223asdf34,那那a,b,c的值又分别是什么的值又分别是什么?123,42223,a,123.0001235.2 字符输入输出函数1.字符输出函数字符输出函数putchar()常用形式常用形式:putchar(c)c可以是字符型和整型量,包括转义字符。可以是字符型和整型量,包括转义字符。功能:向终端(显示器)输出一个字符。功能:向终端(显示器)输出一个字符。如:如:#includestdio.hmain()chara;a=b;putchar(65);putchar(n);put
41、char(a);结果结果:Ab2.字符输入函数字符输入函数getchar()常用形式:常用形式:getchar()功能:功能:从终端从终端(或系统隐含指定的输入设备或系统隐含指定的输入设备)输入一个字符输入一个字符例:从键盘输入一个小写字母,转换为大写字母输出。例:从键盘输入一个小写字母,转换为大写字母输出。main()charc;printf(Entercharacter:);c=getchar();putchar(c-32);补:补:位运算符位运算符(第十章第十章)输出格式说明1.输出格式说明由输出格式说明由%后跟一个后跟一个格式字符格式字符组成:组成:%d以十进制整数的实际长度输出以十进
42、制整数的实际长度输出%f以十进制实数形式输出以十进制实数形式输出,小数部分小数部分6位位%c输出单一字符输出单一字符%s输出字符串输出字符串%输出一个百分号输出一个百分号%x以十六进制无符号形式输出整数以十六进制无符号形式输出整数%o以八进制无符号形式输出整数以八进制无符号形式输出整数%u以十进制无符号形式输出整数以十进制无符号形式输出整数%e以指数形式输出实数以指数形式输出实数%g选用选用%f和和%e中输出宽度较短的一种格式中输出宽度较短的一种格式2.输出格式选择项输出格式选择项+结果右对齐结果右对齐-结果左对齐结果左对齐0用于输出数值,不用位置填用于输出数值,不用位置填0(缺省填空格缺省填
43、空格)m指定输出宽度(列数)指定输出宽度(列数).n对实数,表示输出对实数,表示输出n位小数位小数对字符串,表示从左端截取的字符个数对字符串,表示从左端截取的字符个数l用于输出长整型、双精度型用于输出长整型、双精度型L用用于输出长双精度型于输出长双精度型输入格式说明1.输入格式说明由输入格式说明由%后跟一个后跟一个格式字符格式字符组成:组成:%d用于输入十进制整数用于输入十进制整数%x用于输入十六进制整数用于输入十六进制整数%o用于输入八进制整数用于输入八进制整数%c用于输入单个字符用于输入单个字符%s用于输入字符串,以非空白字符开始,空白用于输入字符串,以非空白字符开始,空白字符结束字符结束%f用于输入实数,可用小数或指数形式用于输入实数,可用小数或指数形式2.输入格式选择项输入格式选择项l 用于输入双精度型、长整型用于输入双精度型、长整型L用于输入长双精度型用于输入长双精度型m指定输入数据所占宽度(列数)指定输入数据所占宽度(列数)*指定输入项在读入后不赋给相应的变量指定输入项在读入后不赋给相应的变量课后复习关键字常量(整型,实型,字符型,字符串)变量变量定义关键词:int,long,float,char,double运算符重点:算术,逻辑,关系,条件算术,逻辑,关系,条件输入输出函数printf(),scanf()putchar(),getchar()
限制150内