1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,输入输出语句,在程序的运行过程中,往往需要由用户输入一些数据,这些数据经机器处理后要输出反馈给用户。通过数据的输入输出来实现人与计算机之间的交互,所以在程序设计中,输入输出语句是一类必不可少的重要语句。在,C,语言中,没有专门的输入输出语句,,所有的输入输出操作都是通过对标准,I/O,库函数的调用实现,。最常用的输入输出函数有,scanf(),、,printf(),、,getchar(),、,putchar(),、,ge
2、ts(),、,puts(),。,1,4.1 putchar,函数,当我们要把字符一个一个输出时,可以用,putchar,函数,,它是一个,专门输出字符的函数,。其一般形式是:,该函数的功能是,输出,“,字符表达式,”,的值,。,例如:,putchar,(,A,);输出字符,A,;,putchar,(,A,+1),;输出字符,B,;,在使用标准,I/O,库函数时,要用,预编译命令,“,#inciude,”,将,“,stdio.h,”,文件包含到用户源文件中,即:,stdio.h,是,standard input&output,的缩写,它,包含了与标准,I/O,库函数有关的定义和函数声明,(,具体
3、见编译预处理命令章节,),。在需要使用标准,I/O,库中的函数时,应在程序前使用上述预编译命令。,putchar,(,),#include,2,4.2 printf,函数,4.2.1 printf,函数的格式,printf,函数的一般格式为:,“,输出表列,”,是需要输出的一些数据,可以是表达。例如:,printf(%d%d,a+2,b);,“,格式控制,”,是用双引号括起来的字符串,也称,“,转换控制字符串,”,,它用于控制输出数据的格式。,printf,(,,,),3,“,格式控制,”,包括两种信息:,(,1,)格式说明,由,“,%,”,和格式说明字符组成,如,%d,、,%f,。,表,4.
4、1 printf,格式符,格式字符,说明,d,以带符号的十进制形式输出整型数(正数不输出符号),o,以,8,进制无符号形式输出整型数(不输出前导符,0,),x,以,16,进制无符号形式输出整型数(不输出前导符,0 x,),u,以无符号,10,进制形式输出整型数,c,以字符形式输出,只输出一个字符,s,输出字符串,f,以小数形式输出单、双精度数,隐含输出,6,位小数,e,以标准指数形式输出单、双精度数,数字部分小数位数为,6,位,g,自动选用,%f,或,%e,格式中输出宽度较短的一种格式,不输出无意义的,0,4,(,2,)普通字符,即需要原样输出的字符。,例如:,printf(a=%d b=%d
5、a,b);,在上面双引号中的字符除了,“,%d,”,和,“,%d,”,以外,还有非格式说明的普通字符(,“,a=,”,和,“,b=,”,),它们按原样输出。计算机在执行该语句时,首先输出格式控制串中的,“,a=,”,,然后碰到一个格式说明,“,%d,”,,就从输出表列中取第一个教据项,a,,按格式说明输出该数据项值,然后原样输出格式控制串中的,“,b=,”,,又碰到第二个格式说明,“,%d,”,,取输出表列中的第二个数据项,b,,按格式说明输出其值。,5,4.2.2,格式说明字符,d,格式符,用来控制整型数按十进制形式输出。,%d,,按整型数据的实际长度输出。,%md,,,m,为指定的输出字
6、段的宽度。如果数据的位数,(,包括负号,),小于,m,,则右对齐左端补以空格,若大于,m,,则按实际位数输出。,%-md,,,m,为指定的输出字段的宽度。如果数据的位数小于,m,,则左对齐补以空格,若大于,m,,则按实际位数输出,%ld,,输出长整型数据。,6,o,格式符,以八进制数形式输出整型数据。,数值不带符号,,即将符号也一起作为八进制数的一部分输出。,对长整数(,long,型,),可以用,“,%lo,”,格式输出。,可以指定字段宽度,如,“,%8o,”,。,o,格式符一般用于输出正整数或无符号类型的数据。,7,x,格式符,以,16,进制形式输出整型数据。,不会出现负的十六进制数。,可以
7、用,“,%x,”,输出长整型数。,可以指定输出字段的宽度,如,“,%12x,”,。,x,格式符一般用于输出正整数或无符号类型的数据。,8,u,格式符,用来输出,unsigned,数据,即,无符号数,,以十进制形式输出。,一个有符号整型数,(int,型,),也可以用,%u,格式输出,此时把符号位当作数值看待。,一个,unsigned,型数据也可以用,%d,格式输出,按相互赋值的规则处理。,unsigned,数据也可用,.%o,或,%x,格式输出。,9,c,格式符,用来输出一个字符。,如:,char c=a,;,printf(%c,c),;,输出字符,a,,注意,“,%c,”,的,c,是格式符,逗
8、号右边的,C,是变量名,不要搞混。,一个整数,只要它的值在,0255,范围内,也可以用字符形式输,,在输出前将该整数转换成换成相应的,ASCII,字符,;反之,一个字符数据也可以用整型数形式输出,但输出的是其,ASCII,码值。,10,s,格式符,%s,,,用来输出一个字符串,(,不包括双引号,),。,%ms,,输出的字符串占,m,列,若字符串长度小于,m,,则,“,右对齐,”,,左边补空格。如字符本身长度大于,m,,则突破,m,的限制,将字符串全部输出。,%-ms,,若字符串长度小于,m,,则在,m,列范围内,,“,左对齐,”,,右边补空格。如字符本身长度大于,m,,则突破,m,的限制,将字
9、符串全部输出。,%m.ns,,输出占,m,列,但只取字符串中左端,n,个字符。这,n,个字符输出在,m,列的右侧,左边补空格。,%-m.ns,,其中,m,、,n,含义同上,,n,个字符输出在,m,列范围的左侧,右面补空格。如果,m,省略或,nm,则,m,自动取,n,值,即保证,n,个字符正常输出。,11,f,格式符,用来输出实型数(包括单、双精度数),以小数形式输出。,%f,,不指定字段宽度,由系统自动指定,使整数部分全 部如数输出,并输入,6,位小数。应当注意,并非全部数字都是有效数字,,单精度数的有效位数一般为,7,位,。也就是说单精度数用,%f,格式输出,只有前,7,位是有效的。,双精度
10、数的有效位数一般为,16,位,,双精度数用,%f,格式输出时,只有前,16,位有效。,%m.nf,,指定输出的数据共占,m,列,其中有,n,位小数。,如果数值长度(包括小数点和负号)小于,m,,则采用,“,右对齐,”,输出,左端补空格。如果,m,省略则整数部分按实际宽度如数输出。,%-m.nf,与,%m.nf,基本相同,只是使输出的数值,“,左对齐,”,,右端补空格。,12,e,格式符,以指数形式输出实数。,%e,,不指定输出所占的宽度和数字部分小数位数,由,系统自动指定给出,6,位小数,,指,数部分占,5,位,(如,e+002,),其中,“,e,”,占一位,指数符号占一位,指数占,3,位。数
11、值按标准化指数形式输出(即,小数点前必须有而且只有一位非零数字,)。,%m.ne,和,%-m.ne,,,m,、,n,及,“,-,”,字符含义与之前相同。此处,n,为指数的数字部分(又称尾数)的小数位数,。如省略,n,,则,n=6,。如省略,m,,则自动使,m,等于数据应有的长度,,即,m=7+n,。,13,g,格式符,用来输出实型数,,它根据数值的大小,,自动选,f,格式或,e,格式,(选择输出时占宽度较小的一种),且,不输出无意义的零,。,例,:,若,f=123.468,,则:,printf,(,”,%f,%e,%g,”,f,f,f,);,输出如下:,123.468000,,,1.23468
12、0e+002,,,123.468,用,%f,格式输出占,10,列,用,%e,格式输出占,13,列,用,%g,格式时,自动从前面两种格式中选择短者(今为,%f,格式为短),故选择按,%f,格式输出,且小数位中的最后三位为无意义的,0,,不输出。,%g,格式用得比较少。,14,在,使用函数,printf,函数时,还有几点要说明:,格式字符要用小写字母,,如,%d,不能写成,%D,。,可以在,printf,函数中的,“,格式控制,”,字符串内包含,转义字符,,如,n,、,t,、,b,、,r,、,f,、,377,等,它们将原样输出。,上面介绍的,d,、,o,、,x,、,u,、,c,、,s,、,f,、,
13、e,、,g,等字符,如不是用在,“,%,”,后面就作为,普通字符,,,原样输出,。,如果想输出字符,“,%,”,,可以在,“,格式控制,”,字符串中用,连续两个,%,表示,或者使用,转义字符,“,45,”,。,不同的系统在格式输出时,输出结果可能会有一些小的差别,例如用,%e,格式符输出实数时,有些系统输出的指数部分为,4,位(如,e+02,)而不是,5,位(如,e+002,),前面数字的小数部分为,5,位而不是,6,位等等。,15,4.3 getchar,函数,此函数的作用是从键盘输入一个字符,并把这个字符作为函数,的返回值。,getchar,函数没有参数,其一般形式为:,getchar()
14、例,4.8,请注意,,getchar(),只能接受一个字符。,getchar,函数得到的字,符可以赋给一个字符变量或整型变量。也可以不赋给任何变量。也可以作,为表达式的一部分,在一个函数中调用,getchar,函数,应该在函数的前面(或本文件开头),用:,#include,#include,main(),char c,;,c=getchar(),;,putchar(c),;,在运行时,如果从键盘输入字符,a,;,a (,输入,a,后,按回车键字符才,送到内存,),a (,输出变量,c,的值,a,),16,4.4 scanf,函数,4.4.1,一般形式,scanf,函数的一般形式是:,其中
15、地址表列,”,由若干个地址组成的表列,是可以接受数据的变,量的地址。,“,格式控制,”,的含义同,printf,函数,但,scanf,中的,“,格式控,制,”,是控制输入的数据。,例,4.9,main(),int a,b,c;,scanf(,“,%d%d%d,”,printf(,“,%d,%d,%dn,”,a,b,c);,scanf(,格式控制,),,,),17,4.4.2,格式说明,和,printf,函数中的格式说明相似,,scanf,中的格式说明也以,%,开始,以一个格式字符结束,中间可以插入附加格式说明字符(修饰符)。,如表,4.3,和,4.4,所示。,18,表,4.3 scan
16、f,格式字符,格式字符,说明,d,用来输入十进制整型数,o,用来输入八进制整型数,x,用来输入十六进制整型数,c,用来输入单个字符,s,用来输入字符串,将字符串送到一个字符数组中,在输入时以为空白字符开始,以第一个分隔字符结束。系统自动把字符串结束标志,0,加到字符串尾部,f,用来输入实型数,可以用小数形式或指数形式输入,e,与,f,作用相同,,e,与,f,可以互相替换,19,表,4.4 scanf,附加的格式说明字符,字符,说明,l,用于输入长整数数据(可用,%ld,、,%lo,、,%lx,),以及,double,型数据(用,%lf,或,%le,),h,用于输入端整型数据(可用,%hd,、,
17、ho,,,%hx,),m(,正整数,),指定输入数据所占宽度(列数),*,表示本输入项在读入后不赋给相应的变量,20,说明:,(,1,),C,语言在,scanf,中不使用,%u,格式符,,对,unsigned,型数据,以,%d,、,%o,或,%x,格式输入。,(,2,),可以指定输入数据所占列数,,系统自动按它截取所需数据。,(,3,),%,后的附加说明符”,*,”,用来,表示跳过它相应的数据,。,(,4,),输入数据时,不能规定精度,。,21,4.4.3 scanf,函数的执行中应注意的问题,scanf,函数中的,“,格式控制,”,后面应当是,变量地址,,而不应是变量名。,如果在,“,格式
18、控制,”,字符串中除了格式说明外还有其它字符,则在,输入数据时应输入与这些字符相同的字符,,即原样输入。,在用,“,%c,”,格式输入字符时,,空格字符和,“,转义字符,”,都作为有效字符输入,。,在输入数据时,遇到以下情况时该数据认为结束;,遇,空格,,或,回车键,或,跳格键,(,tab,键)。,遇,宽度结束,时,如,“,%3d,”,,只取,3,列。,遇,非法输入,。,22,4.5,gets,和,puts,函数,gets(),函数用来从标准输入设备,(,键盘,),读取字符串直到回车结束,但回车符,不属于这个字符串。,其调用格式为,:,gets(s);,其中,s,为字符串变量,(,字符串数组名
19、或字符串指针,),。,gets(s),函数与,scanf(%s,&s),相似,但不完全相同,使用,scanf(%s,&s),函数输入字符串时存在一个问题,就是如果输入了空格会认为输入字符串结束,空格后的字符将作为下一个输入项处理,但,gets(),函数将接收输入的整个字符,串直到回车为止。,23,puts(),函数用来向标准输出设备,(,屏幕,),写字符串并换行。,其调用格式为,:,puts(s);,其中,s,为字符串变量,(,字符串数组名或字符串指针,),。,puts(),函数的作用与语,printf(%sn,s),相同,24,4.6,程序举例,例,4.10,输入三角形的变长,求三角形面积。
20、为简单起见,设,输入的三边长,a,,,b,,,c,能构成三角形。,程序如下,:,#include,main(),float a,b,c,s,area;,scanf(%f%f%f,s=(a+b+c)/2;,area=sqrt(s*(s-a)*(s-b)*(s-c);,printf(a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2fn,a,b,c,s);,printf(area=%7.2fn,area);,25,例,4.11,从键盘输入一个大写字母,要求转换成小写字母输入。,程序如下:,#include,main(),char c1,c2;,c1=getchar();,printf(%
21、c,%dn,c1,c1);,c2=c1+32;,printf(%c,%dn,c2,c2);,26,字符数组中常用的处理函数,a,、,strlen(),求字符串的长度,:,它是,string length,的缩写。函数的原型为,strlen(char);,b,、,strcpy(),复制字符串:其函数的原型为,strcpy(char,char);,它是,string copy,的缩写。它的作用是将,第二个字符串复制到第一个字符串中,。,c,、,strcat(),连接字符串:其函数的原型为,strcat(char,char),;它是,string catenate,的缩写。作用就是将第二个字符串连接
22、到第一个字符串中。,d,、,strcmp(),比较字符串大小:其函数原型是,strcmp(char,char),。是,string compare,的缩写。作用就是比较两个字符串。返回值为整形。,0,表示相等。大于,0,表示第一个字符串大于第二个字符串。小于,0,表示第一个字符串小于第二个字符串。,27,e,、,strrev(),反转字符串:其函数原型为,strrev(char),。起作用就是将一串字符串反转过来。即逆序。,f,、,isalpha():,其函数原型为,isalpha(char s),。,作用就是判断一个字符是否是字母即是否属于:,A-Z,,,a-z,;,g,、,isupper(),:,其函数原型为,isupper(char s),。作用就是判断一个字符是否为一个大写字母,,A-Z,。,h,、,islower(),:,其函数原型为,isupper(char s),。作用就是判断一个字符是否为一个小写字母,,a-z,。,28,练习题(,hhoj,),1516 1519 1445 1521 1524 1845 3321,3584 3612 3613 4825,29,






