单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,专题二 输入输出函数及顺序结构,1,、,数据输入与输出,1.1 printf(),函数,printf,函数的作用是向终端设备(或系统隐含指定的输出设备)上按指定格式进行输出数据。,(一)一般形式为,:,printf(,格式控制串,输出项表,);,1,、格式控制串,是用一对双引号(,“”,)引起的字符串。里面通常包含两种字符:,(,1,)格式字符:以,%,开头,对输出项的输出格式进行说明。,(,2,)普通字符:原样输出。,2,、输出项表,输出项表可以是多个,如果是多个,输出项之间用逗号隔开。使用时,输出项可以使常量、变量或表达式等。,例如,:printf(,“,a=%d,”,x);/,设变量,x,已正确定义,1,、,格式字符,%c,输出一个字符,%d,或,%i,输出带符号的十进制整型数,%u,输出无符号十进制整型数,%s,输出一串字符,%f,输出单精度数,%lf,输出双精度数据,%o,输出无符号八进数整型数,%x,输出无符号十六进制整型数,%e,以指数形式输出单精度实数,,%le,以指数形式输出双精度实数,%p,输出变量的地址,%,输出一个,%,二、使用说明,2,、使用时,,格式字符的类型与输出项的类型,必须一一对应,例,1.main(),int h=12;,float a=56.5;,printf(,“,%d,%f,%d,”,h,a,h*a);,以上输出项中,前两项格式与输出项类型是一致,最后一项格式,%d,跟最后一项输出项,h*a(,为实型,),类型不一致,输出后得不到正确结果。,(3),格式字符的个数与输出项的个数应相同,如果格式字符的个数少于输出项的个数,多余的输出项不会输出,如果说明项的个数多于输出项的个数,多余的格式输出不定值(或,0,),例,1.,如有,:int x=10,y=5;,执行,printf(,“,%d,”,x,y);,格式说明中只有一个,%d,而输出项有,x,y,两项,因此则输出结果为,:10,多余项,y,不输出。,例,2.,如有,:int x=10,y=5;,执行,printf(,“,%d,%d,%d,”,x,y);,格式说明中有三个,%d,而输出项有,x,y,两项,因此则输出结果为,:10,5,,,0023342,其中,0023342,不定值。,(4),格式控制串中,除格式字符以外的其它字符原样输出,例,1,.,main(),int h=12;,float a=5.5,c;,printf(,“,a=%d,b=%f,c,的值为,:%f,”,h,a,h*a);,在以上格式控制串中,a=,,,b=,,,c,的值为:不是格式说明符,属于其它字符,原样输出,运行后结果为:,a=12,,,b=5.5,,,c,的值为,:66.0,(5),指定输出数据所占的宽度,默认右对齐,(%md,%m.nf),/*,未指定宽度按实际宽度输出,*,/,printf(,“,%d,”,425);425,/*,指定宽度为,5,,前面输出两个空格,*,/,printf(,“,%5d,”,425),;,_ _425,/*,指定宽度为,2,不够输出宽度,按实宽度输出,*,/,printf(,“,%2d,”,425);425,/*,未指定宽度按实际宽度输出,(,单精度实数默认为,6,有效位小数位,)*/,printf(,“,%f,”,123.54)123.540000,/*,指定宽度不够输出宽度,按实际宽度输出,*,/,printf(,“,%5f,”,123.54)123.540000,/*,指定宽度为,12,前面输出,2,个空格,*,/,printf(,“,%12f,”,123.54)_ _123.540000,/*,指定总宽度为,8,小数位为,1,位,*,/,printf(,“,%8.1f,”,123.54)_ _ _123.5,/*,指定总宽度为,8,小数位为,3,位,*,/,printf(,“,%8.3f,”,123.54)_123.540,/*,指定总宽度为,8,小数位为,0,位,*,/,printf(,“,%8.0f,”,123.54)_ _ _ _ _124,(6),可在宽度前加,-,号来使输出数据左对齐,printf(,“,%6d#n,”,123)_ _ _123#,printf(,“,%-6d#n,”,123)123_ _ _#,printf(,“,%14.8f#n,”,1.3455)_ _ _ _1.34550000#,printf(,“,%-14.8f#n,”,1.3455)1.34550000_ _ _ _#,1.2 putchar(),函数,putchar(),函数的作用是向终端输出字符,一次只能输出一个字符,它的头文件为,stdio.h,。,例,1.,putchar(,y,);,输出,y,putchar(,n,);,输出一个换行符,putchar(65);,输出大写字母,A,putchar(10);,输出一个换行符(注,:n,的,ASCII,值为,10,),1.3,puts(),函数,puts(),的函数作用是向终端输出字符串,,遇到第一个,0,结束,,,输出字符后自动换行,,它的头文件为,stdio.h,。,例,1.,puts(,“,ASDG,”,);,则输出,ASDG,char a120=,”,abcd0ef,”,则,puts(a1),输出,abcd,练习题,1.,以下叙述中正确的是,A),调用,printf,函数时,必须要有输出项,B),使用,putchar,函数时,必须在之前包含头文件,stdio.h,C),在,C,语言中,整数可以以十二进制、八进制或十六进制的形式输出,D),调用,getchar,函数读入字符时,可以从键盘上输入字符所对应的,ASCII,码,2.,int a=1234;printf(,“,%2dn,”,a);,则输出结果,A,),12 B,),34 C,),1234 D,)提示出错,无结果,3.,有,x=6.7,y=9.5,z=3.3;,则执行,printf(,“,%f,%f,”,x,y,z),则输出为:,A)6.7,,,9.5,,,3.3 B)6.7 9.5 3.3 C)6.7,,,9.5 D)6.7 9.5,B,C,C,4.,以下程序的的输出结果是:,main(),int k=17;,printf(,“,%d,%o,%xn,”,k,k,k);,A.17,021,0 x11 B.17,17,17 C.17,0 x11,021 D.17,21,11,D,5.,有以下程序,其中,%u,表示按无符号整数输出,07,年,4,月,main(),unsigned int x=0 xFFFF;/*x,的初值为十六进制数*,/,printf(%un,x);,程序运行后的输出结果是,A)-1 B)65535 C)32767 D)0 xFFFF,B,6.,已知字符,A,的,ASCII,代码值是,65,字符变量,c1,的值是,A,c2,的值是,D,。执行语句,printf(%d,%d,c1,c2-2);,后,输出结果是,07,年,9,月,A)A,B B)A,68 C)65,66 D)65,68,C,7.,若整型变量,a,和,b,中的值分别为,7,和,9,,要求按以下格式输出,a,和,b,的值:,08,年,9,月,a=7,b=9,请完成输出语句:,printf(【7】,a,b);.,a=%dnb=%d,8.,有以下程序段,08,年,4,月,char ch;int k;,ch=a;k=12;,printf(%c,%d,ch,ch,k);printf(k=%dn,k);,已知字符,a,的,ASCll,十进制代码为,97,,则执行上述程序段后输出结果是,A),因变量类型与格式描述符的类型不匹配输出无定值,B),输出项与格式描述符个数不符,输出为零值或不定值,C)a,97,12k=12,D)a,97,k=12,D,9.,程序段:,int x=12;double y=3.141593;printf(,“,%d%8.6f,”,x,y);,的输出结果是,09,年,3,月,123.141593 B)12 3.141593,C)12,3.141593 D)123.1415930,A,10.,若变量,x,y,已定义为,int,类型且,x,的值为,99,,,y,的值为,9,,请将输入语句,printf(【7】,x/y);,补充完整,使其输出的计算结果形式为:,x/y=11.09,年,3,月,“x/y=%d”,1.4 scanf(),函数,scanf(),函数的作用是向终端设备(或系统隐含指定的输入设备)上输入数据。,一、,scanf,函数的一般形式为,:,scanf(,格式控制串,输入项表,),1,、格式控制串,理解同,printf,函数。,里面有两种字符:,(,1,)格式字符:同,printf,函数,(,2,)普通字符:输入时,一定要原样输入。,2,、输入项表,输入项一定要是地址。,如,:scanf(,“,a=%d,b=%c,”,(1),输入,long,整数时用,%ld,输入,double,型时用,%lf,否则取不到正确数据,(2),格式说明的类型与输入项的类型,要一一对应,.,二、使用说明,(3),输入项一定要是地址。如果是普通,变量,则一定要加地址符,&,如,scanf(,“,%d%d,”,a,b),是错误的,;,如果已经是指针变量,则不需画蛇添足。,例,.,若在定义语句,:int a,b,c,*p=,之后,接着执行以下选项中的语句,则能正确执行的语句是,07,年,9,月,A)scanf(%d,a,b,c);B)scanf(%d%d%d,a,b,c);,C)scanf(%d,p);D)scanf(%d,C,(4),格式字符前可以用一个整数指定输入数据所占宽度,但不可以对实型数指定小数位的宽度,。,如,scanf(,“,%2d%2d,”,&a,&b),是合法的,,但,scanf(,“,%5.3f,%5.2f,”,&a,&b),是非法的。,123456,例,.,有以下程序段,int j;float y;char name50;,scanf(%2d%f%s,当执行上述程序段,从键盘上输入,55566 7777abc,后,y,的值为,07,年,9,月,A)55566.0 B)566.0 C)7777.0 D)566777.0,B,例,1.,如有,int a,b,c;,scanf(“%d%d%d”,要使,a=5,b=6,c=8,它的输入格式可以有以下几种形式:(,表示回车符,),(1)5 6 8 (,间格符为空格,),(2)5(,按,Tab,键,)6(,按,Tab,键,)8,回车,(,间格符为,Tab,键,),(3)5,6,8 (,间格符为回车,),(4)5 6,8 (,间格符为空格与回车混合,),(5)5,6 8 (,间格符为空格与回车混合,),(5),输入,数值数据,之间的间隔符可以是,空格符、制表符,(Tab,键,),、回车键,(6),输入字符数据时,字符之间没有间隔符,即空格、回车、,Tab,按字符读入,例,1.,对,scanf(,“,%c%c%c,”,要使,a=x,b=y,c=z,则一定要输入,:xyz,如输入,x y z,则,a=x,b=,(,空格,),c=z,但要注意:,可以在格式控制串中加入空格、回车、,Tab,作间隔符,这时不能读入,如有,scanf(,“,%c%c%c,”,&a,&b,&c),则输入数据时可以输入,xyz(,之间没有空格,),和,x y z,结果一样。,(7),在交叉输入字符与数值时,要注意输入格式(该点常考,),例,1,.,对,scanf(,“,%d%c%d%c,”,&a,&b,&c,&d),使,a=10 b=,A,c=10 d=,B,正确的输入形式为,:10A10B,或,10A_10B(_,代表空格,),不能输入,10_A_10_B,这样输入把,10,赋给,a,空格赋给,b,c,遇到字母,A,