资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,2024/9/22,31,/38,第,4,章 键盘输入,和屏幕输出,本章学习内容,字符常量与转义字符,字符输出函数,putchar,(),字符输入函数,getchar,(),数据的格式化输出函数,printf,(),数据的格式化输入函数,scanf,(),字符常量,字符常量是用单引号括起来的一个字符,a,是字符常量,而,a,则是一个标识符,3,表示一个字符常量,而,3,则表示一个整数,转义字符,(,Escape Character,),一些特殊字符(无法从键盘输入或者另有他用)用转义字符表示,字符型变量的取值范围取决于计算机系统所使用的字符集,ASCII,(美国标准信息交换码)字符集,规定了每个字符所对应的编码,一个字符以其对应的,ASCII,码的二进制形式存储在内存中,一个字节,保存一个字符(英文字母、数字、符号),字符常数就是一个普通整数,也可参与各种数学运算,每个字符具有一个,0255,之间的数值,可从,ASCII,表查出,注意:,5,和整数,5,的区别,5,的,ASCII,码值是,53,字符常量,4.1,单个字符的输入,/,输出,通过调用标准库函数来实现,#,include,字符输出函数,putchar(ch,),输出,一个,字符,ch,ch,为字符变量名,字符输入函数,getchar,(),无参数,函数值为从输入设备接收的字符,【,例,4.1】,大小写英文字母转换,Press a key and then press Enter: B,b,ch,=,ch,+ (a A);,What does,this statement,mean?,4.2,数据的格式化屏幕输出,格式,printf,(,格式控制字符串,输出项表列,);,printf,(,a=,%d,b=,%f,a, b,);,可以输出若干,任意类型,的数据,函数名,可选输,出表列,普通字符,格式,说明,%c character,以字符形式输出单个字符,%s string,输出一个字符串,%d decimal,以带符号十进制整数输出,%f float,以小数形式输出浮点数(,6,位小数),%e exponent,以标准指数形式输出(,6,位小数),%g,选用,%f,,,%e,中输出宽度较小的一种格式,%o octal,以八进制无符号整数输出(无前导,0,),%x hex,以十六进制无符号整数输出(无前导,0x,),%u unsigned,以十进制无符号整数输出,printf(),格式字符,【,例,4.2】,大小写英文字母转换,Press a key and then press Enter: B,b, 98,m,表示数据占用的最小宽度,数据宽度大于,m,,按实际宽度输出,数据宽度小于,m,时,补空格,n,对实数表示输出,n,位小数,对字符串表示最多输出的字符个数,l,长整型整数,,加在,d,、,o,、,x,、,u,前,L long double,型数,加在,f,、,e,、,g,前,-,改变输出内容的对齐方式,默认为右对齐,printf,(),的格式修饰符,printf,(),的格式修饰符,Format for float:,%f,General format:,%, . ,f,Example:,printf(Value is:%10.4f, 32.6784728);,Value is: 32.6785,10 characters,4 digits,printf,(),的格式修饰符,Example:,printf(Value is:%10f, 32.6784728);,Value is: 32.678473,10 characters,6 digits (default),Example:,printf(Value is:%.3f, 32.6784728,);,Value is:32.678,3 digits,printf,(),的格式修饰符,Input r: 5.3,printf,WITHOUT width or precision specifications:,circumference = 33.300854, area = 88.247263,printf,WITH width and precision specifications:,circumference = 33.30, area = 88.25,【,例,4.3】,计算圆的周长和面积,4.3,数据的格式化键盘输入,格式,scanf,(,格式控制字符串,地址表列,);,scanf,(,%,d,%f, ,格式字符,指定输入数据类型,输入数据,地址表列,非格式字符,输入数据以,分隔,没有时可以,空格,、,Tab,或,回车,分隔,c,以字符形式输入单个字符,s,输入字符串,以非空字符开始,遇第一个,空白字符结束,d,以带符号十进制形式输入整型数据,f,以小数形式输入浮点数,e,以标准指数形式输入,o,以八进制无符号形式输入(无前导,0,),x,以十六进制无符号形式输入(无前导,0x,),scanf(),的格式字符,m,表示数据占用的宽度,l,加在,d,、,o,、,x,、,u,前:输入长整型,加在,f,、,e,前:输入双精度型,L,加在,f,、,e,前:输入,long double,型,scanf,(),的格式修饰符,#,include,main(),int,a, b;,scanf(%d %d, ,printf(a = %d, b = %dn, a, b);,问题,1,:当要求程序输出结果为,a = 12, b = 34,时,用户应该如何输入数据?,12 34,输入数据的格式控制,例,4.4,#,include,main(),int,a, b;,scanf(%d %d, ,printf(a = %d, b = %dn, a, b);,问题,2,:当限定用户输入数据以逗号为分隔符,即输入数据格式为:,12,34,时,应修改程序中的哪条语句?怎样修改?,输入数据的格式控制,例,4.4,#,include,main(),int,a, b;,scanf(%d %d, ,printf(a = %d, b = %dn, a, b);,问题,3,:语句,scanf(%d,%d, ,修改为,scanf(,a,=,%d,b =,%d, ,时,用户应该如何输入数据?,a = 12, b = 34,输入数据的格式控制,例,4.4,#,include,main(),int,a, b;,scanf(%d %d, ,printf(a = %d, b = %dn, a, b);,问题,10,:如果程序第,5,行语句修改为,.,,那么结果又会如何呢?,输入数据的格式控制,例,4.4,a, b,#,include,main(),int,data1, data2, sum;,char,op;,printf(Please enter the expression,data1 + data2n);,scanf(%d%c%d,printf(%d%c%d = %dn,data1, op, data2, data1+data2);,Please enter the expression data1 + data2,第,1,次测试,12 + 3,12 4199288 = 4199300,C,格式符的问题及解决,例,4.5,#,include,main(),int,data1, data2, sum;,char,op;,printf(Please enter the expression,data1 + data2n);,scanf(%d%c%d,printf(%d%c%d = %dn,data1, op, data2, data1+data2);,Please enter the expression data1 + data2,第,2,次测试,12 3,12 3 = 15,C,格式符的问题及解决,例,4.5,#,include,main(),int,data1, data2, sum;,char,op;,printf(Please enter the expression,data1 + data2n);,scanf(%d%c%d,printf(%d%c%d = %dn,data1, op, data2, data1+data2);,Please enter the expression data1 + data2,第,3,次测试,12+3,12+3 = 15,C,格式符的问题及解决,例,4.5,#,include,main(),int,a;,char,b;,float,c;,printf(Please input an integer:);,scanf(%d, ,printf(integer: %dn, a);,printf(Please input a character:);,scanf(%c, ,printf(character: %cn, b);,printf(Please input a float number:);,scanf(%f, ,printf(float: %fn, c);,Please input an integer:,希望得到的运行结果,12,Please input an character,:,a,Please input a float number:,3.5,integer:12,character,:a,float number:3.500000,C,格式符的问题及解决,例,4.6,#,include,main(),int,a;,char,b;,float,c;,printf(Please input an integer:);,scanf(%d, ,printf(integer: %dn, a);,printf(Please input a character:);,scanf(%c, ,printf(character: %cn, b);,printf(Please input a float number:);,scanf(%f, ,printf(float: %fn, c);,Please input an integer:,结果好像很奇怪呀!,12,Please input an character,:,a,Please input a float number:,3.5,integer:12,float number:3.500000,C,格式符的问题及解决,例,4.6,#,include,main(),int,a;,char,b;,float,c;,printf(Please input an integer:);,scanf(%d, ,printf(integer: %dn, a);,printf(Please input a character:);,getchar();,/*,将存于缓冲区中的回车字符读入,避免被后面的变量作为有效字符读入*,/,scanf(%,c, ,printf(character: %cn, b);,printf(Please input a float number:);,scanf(%f, ,printf(float: %fn, c);,Please input an integer:,程序修改后得到的运行结果,12,Please input an character,:,a,Please input a float number:,3.5,integer:12,character,:a,float number:3.500000,C,格式符的问题及解决,例,4.6,#,include,main(),int,a;,char,b;,float,c;,printf(Please input an integer:);,scanf(%d, ,printf(integer: %dn, a);,printf(Please input a character:);,scanf,(,“,%c,”,/*,第,2,种解决方案,:,在,%c,前加一个空格,*/,printf(character: %cn, b);,printf(Please input a float number:);,scanf(%f, ,printf(float: %fn, c);,C,格式符的问题及解决,例,4.6,#,include,main(),int,data1, data2, sum;,char,op;,printf(Please enter the expression,data1 + data2n);,scanf(%d,%c,%d,printf(%d%c%d = %dn,data1, op, data2, data1+data2);,12+3,12 + 3,12,+,3,再回头来看例,4.5,如何以任意分隔符输入加法算式?,格式输入函数常见错误,scanf,(,%,d,%f,n,&a,&b,);,scanf,(,%,d,%f,a,b,);,scanf,(,%7,.2f,几点忠告,不要拘泥于细节,不要死记硬背,在使用中慢慢掌握,注意!,本章节作业,P59 4.1 4.2 4.3,
展开阅读全文