1、Teacher teaching designCONTENTS 目 录数据的输入函数格式控制字符串附加格式说明符案例分析 仿真演练 数据输入格式明确考点 交流提升数据的输入函数PART 01数据的输入函数数据的输入函数scanf函数称为格式输入函数,它可以按用户指定的格式从键盘上把数据输入到指定的变量中。1、scanf函数的一般形式是:scanf(“格式控制字符串”,地址表列);功能:按“格式控制字符串”的要求,从键盘上把数据输入到变量中。说明:、地址列表中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的。例如:&a,&b【解析】分别表示变量a和变量b 的地址。这个地址就是编译系统在
2、内存中给a,b变量分配的地址。变量的地址是C编译系统分配的,用户不必关心具体的地址是多少。、变量地址表由若干个被输入数据的地址组成,相邻地址之间,用逗号分开。地址表中的地址,可以是变量的地址,也可以是字符数组名或指针变量。和的关系是数量、类型及位置要从左至右一一对应,在格式控制字符串中指定变量接收输入值的位置和格式。例如:从键盘上输入三个整数:scanf(%d,%d,%d”,&a,&b,&c);思考:如果格式控制字符串与变量地址没有一 一对应时,会出现什么结果?如:、scanf(%d,%d,&a,&b,&c);、scanf(%d,&a,&b,&c);格式控制字符串PART 02格式控制字符串格
3、式控制字符串、格式字符串的一般形式为:%*输入数据宽度长度类型其中有方括号的项为任选项。各项的意义如下:类型:表示输入数据的类型,其格式符和意义如输入数据的类型表所示。格式字符意义d输入十进制整数o输入八进制整数x输入十六进制整数u输入无符号十进制整数f或e输入实型数(用小数形式或指数形式)c输入单个字符s输入字符串附加格式说明符PART 03格式举例(1)宽度n:指定输入数据的列宽为n。即,只接收输入数据中相应的n位,赋给对应的变量,多余部分舍去。例如,scanf(%2c%c,&c1,&c2);printf(c1=%c,c2=%cn,c1,c2);如果输入“abcd”,则系统将读取的“ab”
4、中的“a”赋给变量c1;将读取的“cd”中的“c”赋给变量c2,所以printf()函数的输出结果为:c1=a,c2=c。思考:scanf(%5d,&a);输入:12345678 则a的值是 scanf(%4d%4d,&a,&b);输入:12345678 则变量a,b的值是 (2)抑制符号*该字符可以使对应的数据输入后,被抑制,不赋给任何变量。如:scanf(%2d%*2d%2d,&x1,&x2);printf(x1=%d,x2=%dn,x1,x2);如果输入112233,则输出结果为:(3)字符l-%ld.%lo,%lx,%lu,用于输入长整型数据;%lf,%le,用于输入实型数据。(4)字
5、符h-%hd.%ho,%hx,用于输入短整型数据数据输入格式PART 04数据输入格式(1)如果相邻格式说明符之间,没有数据分隔符号(如%d%d),则由键盘输入的数据可以用空格分隔(至少一个),或者用Tab键分隔,或者输入1个数据后按“回车”,然后再输入下个数据。例如,scanf(%d%d,&x1,&x2);如果给x1输入11,给x2输入33,则正确的输入操作为:1133 或者:11 33(2)“格式控制字符串”中出现的普通字符(非格式字符),包括转义字符,需要原样输入。否则产生对应错误,这点务必注意,例如,scanf(%d,%d,&x1,&x2);输入格式为:11,33 scanf(%d:%
6、d,&x1,&x2);输入格式为:11:33 scanf(x1=%d,x2=%dn,&x1,&x2);输入格式为:x1=11,x2=33n注:这样的输入格式是很麻烦的,最好不这样设计。数据输入格式(3)输入数据时,遇到以下情况,该数据被认为输入结束:遇到空格,或者“回车“键,或者“跳格”(Tab)键。指定的输入宽度结束时。如“%5d”,只取5列。遇到非法输入。如,输入数值数据时,遇到非数值符号。(4)使用“%c”输入字符时,不要忽略空格的存在。如,scanf(%c%c,&c1,&c2,);printf(c1=%c,c2=%c n,c1,c2);如果输入:xy,则系统将空格赋值给c1,字母x赋值
7、给c2。思考练习:scanf(%c%c%c,&a,&b,&c);输入为:d e f则a,b,c的值分别是:(5)有以下程序main()int a;printf(input a numbern);scanf(%d,&a);printf(%ld,a);如果输入2时,结果为131074与题意不符,请思考结果不正确的原因?数据输入格式 注意:(1)如果需要实现人机对话的效果,设计数据输入格式时,可以先用printf()函数输出提示信息,再用scanf()函数进行数据输入。例如,把scanf(x1=%d,x2=%dn,&x1,&x2);改为:printf(x1=);scanf(%d,&x1);print
8、f(x2=);scanf(%d,&x2);这样就可以有屏幕提示的效果了。(6)有以下程序main()int a,b,c;printf(input a,b,cn);scanf(%d%d%d,&a,&b,&c);printf(a=%d,b=%d,c=%d,a,b,c);思考如何从键盘上输入数据?学习提示:格式输入输出函数的规定比较繁琐,但不要死记硬背,可以先掌握一些基本的规则,多上机操作,随着以后学习的深入,通过编写和调试程序逐步深入自然地去掌握。明确考点 交流提升PART 05明确考点 交流提升【例1】main()char a,b;printf(input character a,bn);sca
9、nf(%c%c,&a,&b);printf(%c%cn,a,b);思考:如输入M N则变量a,b的值是:;如果赋值不正确如何修改?【例2】#include main()int a,b;char c,ch;printf(Enter integer a and b:);scanf(%d%d,&a,&b);printf(Enter character c and ch:);scanf(%c%c,&c,&ch);printf(a=%d b=%dn,a,b);printf(c=%d ch=%dn,c,ch);运行结果为:Enter integer a and b:123 456Enter charact
10、er c and ch:ABa=123 b=456c=10 ch=65思考:请分析程序运行后,结果产生的原因是?。明确考点 交流提升【例4】有以下程序main()int m,n,p;scanf(m=%dn=%dp=%d,&m,&n,&p);printf(%d%d%dn,m,n,p);若想从键盘上输入数据,使变量M中的值为123,N中的值为456,P中的值为789,则正确的输入是()A)M=123 N=456 P=789 B)M=123 N=456 P=789 C)M=123,N=456,P=789 D)123 456 78【例3】#include main()int a,b;char c,ch
11、;printf(Enter integer a and b:);scanf(%d%d,&a,&b);printf(Enter character c and ch:);scanf(%*c%c%c,&c,&ch);printf(a=%d b=%dn,a,b);printf(c=%c ch=%cn,c,ch);如输入以下数据Enter integer a and b:123 456Enter character c and ch:AB则输出结果是:明确考点 交流提升【例5】有定义语句:int b;char c10;,则正确的输入语句是()A)scanf(%d%s,&b,&c);B)scanf(%d
12、%s,&b,c);C)scanf(“%d%s”,b,c);D)scanf(%d%s,b,&c);【例6】以下程序运行时若从键盘输入:10 20 30。输出结果是()。#includemain()int i=0,j=0,k=0;scanf(%d%*d%d,&i,&j,&k);printf(%d%d%dn,i,j,k);仿真演练 体验探索PART 06仿真演练 体验探索1、有以下程序若运行时从键盘上输入:6,5,65,66,则输出结果是()。main()char a,b,c,d;scanf(%c,%c,%d,%d,&a,&b,&c,&d);printf(%c,%c,%c,%cn,a,b,c,d);
13、A)6,5,A,B B)6,5,65,66 C)6,5,6,5 D)6,5,6,62、已知字母A的ASCII码为65。以下程序运行后的输出结果是()。main()char a,b;a=A+5-3;b=a+6-2;printf(%d%cn,a,b);仿真演练 体验探索3、运行如下程序后其运算结果是()main()char a,b;a=120;b=121;printf(%c,%cn,a,b);printf(%d,%dn,a,b);4、运行如下程序,其结果为()main()char a,b;a=a;b=b;a=a-32;b=b-32;printf(%c,%cn%d,%dn,a,b,a,b);仿真演练 体验探索5、数字字符0的ASCII值为48,若有以下程序运行后的输出结果是()main()char a=1,b=2;printf(%c,b+);printf(%dn,b-a);A)3,2B)50,2C)2,2D)2,506、有以下程序main()char a=a,b;printf(%c,+a);printf(%cn,b=a+);程序运行后的输出结果是()A)b,b B)b,c C)a,b D)a,c