数据的输入和输出



《数据的输入和输出》由会员分享,可在线阅读,更多相关《数据的输入和输出(33页珍藏版)》请在装配图网上搜索。
1、,,Edit Master title,,Click to edit Master text styles,,Second level,,Third level,,Fourth level,,Fifth level,,共,,25,页 第,*,,页,数据的输入和输出,C,语言程序设计,第四章,1,,本章要点,掌握,C,语言中输入输出数据的方法,,掌握各种格式的使用,,,,2,,,数据输入输出的概念,,输出:从计算机向显示器、打印机等外部设备输出数据。,,输入:从标准输入设备键盘、鼠标等向计算机输入数据。,,C语言不提供输入输出语句,输入输出操作是由C函数库中的函数实现。,,两个基本的输出,(
2、,输入,),函数:,,即:格式输出,(,输入,),函数,,字符输出,(,输入,),函数,3,,4.1.1,格式输出函数,函数的基本功能,,格式:,printf,(,格式控制串,输出表列),,功能:从标准输出设备上,按指定的格式输出对应,,的变量。,printf(...),4.1,数据输出,2.,函数说明,:,,(1),格式控制串由双引号括起来,由“,%,”,和格式符以及,普通字符(即需要原样输出的字符组成)。,,,(2),输出表列是需要输出的一些数据,可以是常量、变量或表达式。,,(3),输出的参数必须与格式控制符中的格式说明在类型、个数和位置上一一对应。,4,,[,例,],:,,,#incl
3、ude <,stdio.h,>,,main( ),,{,,,int,a=3, b=4;,,,printf(“a,=,%d,b=,%d,”,,a,b,);,,},,运行结果,:,,a=3 b=4,格式说明,(,格式字符,),普通字符,输出表列,5,,3.,格式说明符,,一般格式,:%[-][,m][.][n][l,],格式符,说明如下,:,,-,当数据的宽度小于显示宽度时,,,数据,左对齐,,,右方补空格,.,,m,,输出数据占,m,个字符位,不够,右对齐,,左边填空格。,,n,输出数据有,n,位小数,,m.n,,输出数据占,m,列,,n,位小数,,对不同类型的数据使用不同的格式字符。有以下几
4、种格式符:,,6,,d,:,,以,十进制,带符号形式输出整型数,,o,:以,八进制,无符号形式输出整型数,,x,:以,十六进制,无符号形式输出整型,,u,:以十进制,无符号,形式输出整型数,,f,:以,小数形式,输出单、双精度实型数,,e:,以,指数形式,输出单、双精度实型数,,c:,以,字符形式,输出一个,字符,,s:,以,字符形式,输出一个,字符串,,ld:,以十进制带符号形式输出,长整型数,基本格式控制符,7,,,(1),,d,格式符,:,,输出十进制整数。,,,%d,,按整型数据的实际长度输出。,,,%,md,,m,为指定的输出字段的宽度,.,若数据的位数小于,m,,则左端补以空格,;
5、,若大于,m,,则按实际位数输出。,,,%ld,,输出长整型数据,.,,例,:,int,a=1234;,,,printf(“%3d”,a);,,,printf,(“%5d,\n”,,a);,,printf(“%-5d”,a);,1234,,1234,实际 左补空,1234,,,左对齐,右补空,8,,以下程序运行后的输出结果是?,,main(),,{,,int x,y,z;,,x=y=1;,,z=x++,y++,++y;,,printf("%d,%d,%d",x,y,z);},,,,A)2,3,3 B)2,3,2 C)2,3,1 D)2,2,1,,,9,
6、,(2),o,格式符,,以八进制数形式输出整数。,,,将内存单元中的各位的值,(0,或,1),按八进制形式输出,,,输出的数值不带符号,,,将符号也作为八进制数的一部分输出。,,,例如,,-1,在内存单元中,(,以补码形式存放,),如下,:,,,int,a=-1; -1,:,,,printf(“%d,%o”,a,a,);,,,输出,:,1 1 11 11 11 11 11 11 11,VC++,下,,-1,177777,10,,(3),,x,格式符,,,以十六进制数形式输出整数。,,(4),,u,格式符,,,以十进制形式输出无符号型数据。,,,[,例,],,#inclu
7、de <,stdio.h,>,,main(),,{,,unsigned,int,a=65535;,,,int,b=-2;,,,printf(“a,=%d,%o,%x,%u\n”,a,a,a,a);,,,printf(“b,=%,d,%o,%x,%u\n”,b,b,b,b,);,,},,,输出,:,,a=-1,177777,ffff,65535,,b=-2,177776,fffe,65534,VC++,下,11,,(5),c,格式符,输出一个字符。,,,整数的值在,33,~,126,范围内,,,也可以用字符形式输出。在输出前,,,将该整数转换成相应的,ASCII,字符,;,字符数据也可以用整数形
8、式输出。,,[,例,],,,#include <,stdio.h,>,,main( ),,{,,char c='a';,,,int,i=97;,,,printf("%c,%d\n",c,c,);,,,printf("%c,%d\n",i,i,);,,},,,输出,: a,97,,a,97,12,,,s,格式符,输出一个字符串。,,说明:,,若不指定字符宽度和对齐方式,,,则输出全部字符串,.,,,例如,:,printf(,",%s,",,,",CHINA,",);,,,程序运行输出:,CHINA,,,若指定宽度,m,,实际字符个数大于,m,,按实际宽度输出,;,如果实际字符个数小于,m,,
9、字符右对齐,左边填空格。,,例如,:,printf(,“s1=,%s,s2=%3s,s3=%-5.2s,s4=%.3s,",,,",abcd,", ",abcd,", ",abcd,", ",abcd,",) ;,,,程序运行输出:,,,s1=abcd,s2=abcd,s3=,ab,,s4=,abc,13,,(7),f,格式符,,以小数形式输出实数,(,包括单、双精度,),。,,1),%f,,,不指定字段宽度,,,由系统自动指定,,,使整数部分全部输出,,,并输出,6,位小数(输出双精度数据,也是,6,位,但误差降低)。,,2),%,m.nf,,,指定输出的数据共占,m,列,,,其中有,n,位
10、小数,.,若数据长度小于,m,,则左端补空格。,,例:,float x=15.3,y=222.225111;,,printf(“%f,%6.2f\n”,x,y);,14,,(8),,e,格式,,以指数形式输出实数。,,,1),%,e,,不指定输出数据所占的宽度和数字部分小数位数,由系统自动指定给出,6位小数,,指数部分占,5位,,其中,“,e”,占一位,,指数,符号占一位,,指数,占3位,.数值按标准化指数形式输出,(,小数点前有,1,位非零数字)。,,,例如:,,printf(“%e”,123.456);,,,输出,:1.234560e+002,,,,e,格式输出的实数共占,13,列宽度,.
11、,3位,6位,15,,g,格式符,:,根据数值的大小输出实数,,,自动选,f,格式或,e,格式,(,选择输出时占宽度较小的一种,),,且不输出无意义的零。,,,例如:,f=123.468,;,,,printf(“%f,%e %g”,f,f,f);,,,输出如下,:,,123.468000 1.234680e+002 123.468,10,列,13,列,10,列,16,,几点说明:,1.,格式控制串的控制符号与变量表要一一对应,即:,类型相同,,,个数相等,,2.,格式控制符号用小写字母,,3.,格式控制符号之外的符号均照原样显示,,4.,若需显示百分号,格式为:,%
12、%,,5.,如果实际数据所占字符位大于指定的域宽,,按实际输出,17,,,,,例,:,分析程序的执行结果,,main( ),,{,int,a=16;char e=,’,A,’,;,,unsigned b;,,long c;,,float d;,,b=65535;c=123456;d=123.45;,,,printf(,”,a,=%d,%4d,%-6d,c=%ld\n,”,, a, a, a, c);,,,printf(,”,%o,, %x, %,u\n,”,, b, b, b);,,,printf(,”,%f,, %e, %13.3e, %g\n,”,, d, d, d, d);,,print
13、f(,”,%c,%s,%7.3s\n,”,,e,,”,China,”,,,”,Beijing,”,);,,},这里,7,指输出宽度,,3,表示输出该字符串的前,3,个字符。,18,,4.1.2,字符输出函数,格式:,putchar,(,字符变量),功能 :在标准输出设备上,输出指定的字符。,说明,:,putchar,* 一次调用只能输出,一个字符,,* 加上分号成为,字符输出语句,,* 使用时在程序开头用编译预处理命令,#,include”stdio.h,”,,或,:,,#include<,stdio.h,>,编译预处理,头文件,请详见附录,E,19,,例,:#include <,stdio
14、.h,>,,main( ),,{,,char,a,b,c,;,,a=‘,B’;b,=‘,O’;c,=‘Y’;,,,putchar(a);putchar(b);putchar(c,);,,},,输出:,BOY,注意:头文件声明不可少!,20,,#,include<,stdio.h,>,,main( ),,{ char c=,,a,,;,,,putchar,( c);,,},,思考,怎样输出多个字符?,,多个字符怎样排列?,,char c1,,,c2,c3;,,c1,=,,a,,;c2=,,b,,;c3=,,c,,;,,putchar(c1);,,putchar(c2);,,put
15、char(c3);,a,,b,,c,abc,putchar(,,\n,,);,例,与,putchar(97);putchar(98);,,putchar(99);,等效,,与,printf(“%c%c%c”,c1,c2,c3);,,等效,char c1,,,c2,c3;,,c1,=,,a,,;c2=,,b,,;c3=,,c,,;,,putchar(c1);,putchar(,,\n,,);,,putchar(c2);,putchar(,,\n,,);,,putchar(c3);,21,,4.2.1,格式输入函数,一般形式,:,,scanf,(,格式控制字符串,,,地址表
16、列,),,,“,格式控制字符串,”,的含义同,printf,函数,,,,,“,地址表列,”,:要求是,变量的地址,,,或字符串的首地址,.,,,例如,:,,,int,a,b,c;,,,scanf(,“,%d%d%d,”,,,&,a,,&,b,,&,c,);,,,说明:,,*,scanf,,函数中的,“,格式控制,”,后面应当是,变量地址,而不是变量名。,,*,输入数据时,,,在两个数据之间以,一个,或,多个空格,间隔,,,也可以用,回车,键,、,跳格键,tab,分隔,。,4.2,数据的输入,22,,,,,*,输入时可以指定域宽,,,不允许规定精度,.,int,,a,b,;,scanf,(“%3
17、d,%3d,”,&a,,&b,);,,float x;,scanf(“%8.2f ”,,,,,*,输入,时,遇下列情况结束,* 回车,空格,,* 宽度结束,,* 非法输入,输入,123456,,系统自动将,123,赋给,a,456,赋给,b,如:,int,k;,scanf(“%,3d,”,,,输入:,123456789,,k,为:,123,例:,main( ),,{,int,a ,,b,c,;,,,scanf("%d%d%d",&a,&b,&c,),;,,,printf("%d,,%d ,%,d\n",a,,,b,c,),;,,,},,以下三种数据输入方法都可以:,,,①,12,,
18、15,,16,,,② 12,,1516,,③ 12(,按,tab,键,)15,,16,23,,* 格式控制字符串中若包含,普通字符,,则输入时必须照原样输入普通字符,否则将导致输入结束。,,,如:,int,,a,b,c,;,,,scanf(,“,%d,,,%d,,,%d,”,,&,a,&b,&c,);,,,输入:,1,,,2,,,3,<,回车,>,,*,数值型数据和字符型数据混合输入方法,,,main(),,{,,,int,,a,b,c,d,e,;,,scanf(,“,%d%c%c%c%d,”,,&a,&b,&c,&d,&e,);,printf(,“,a,=%,d,b,
19、=%,c,c,=%,c,d,=%,c,e,=%,d,”,,a,b,,,,,c,d,e,);,,},,,输入:,123,a,b,c,789<,回车,>,,,输出:,a=123,b=,a,c,=,b,d,=,c,e,=789,注意格式说明符以外的其他字符,24,,*在用“,%c”,格式输入字符时,,,空格字符和“转义字符”都作为有效字符输入,.,,如,,scanf("%c%c%c",&a,&b,&c,);,,输入:,x,yz,,x,字符赋给,a,,空格字符赋给,b, y,字符赋给,c,25,,输入,double,型数据,,,必须用格式说明符,%lf,或,%le,,,,输入,long,型数据,必
20、须用,%ld,。,,标准,C,在,scanf,中不使用,%u,说明符,,,对,unsigned,型数据,,,以,%d,或,%o,、,%x,格式,输入。,,%,后的,“,*,”,为附加说明符,,,用来表示跳过它对应的数据。,,输入时格式控制符中不能加,“,\n,”,。,,在,scanf,函数的格式控制字符串中尽量不要出现普通字符,尤其不能将输入提示放在其中。需要显示输入提示应该调用,printf,函数实现。,,,提示注意:,26,,,,,例:,double,,a;,,int,,b;,,float,c;,,,scanf,(,,,%f,,,%,2d,%*d,%5f,,,&,a,&b,&,c,);
21、,,printf(,,%f,,,%,d,%f,,,a,b,c,);,,,输入:,5.3,12,456,1.23456,回车,结果:,a=0.000000,b=12,c=1.234000,原因是格式符用错了,.,应该用,lf,或,le,格式,这里必须用,%lf,格式,这里可以用,%f,格式或,%lf,格式,27,,,#include <,stdio.h,>,,main(),,{,,,int,a; float b,c;,,scanf(“%,2,d%,3,f%,4,f”,,,,printf(“a,=%d,b=%f,c=%f\n”,a,b,c);,,},输入:,1234567898765432
22、1,输出,?,a=12,b=345.000000,c=6789.000000,例,:,28,,4.2. 2,getchar,函数,(,字符输入函数,),,一般形式:,getchar,( ),------,没有参数,,功能:从键盘输入一个字符。,,说明:,1,)只能输入一个字符,,,2,)可以将获得的字符赋给,int,,型或,char,型的变量,,,[,例,],,#include <,stdio.h,>,,main(),,{,,char c;,,c=,getchar,( );,,,putchar(c,);,,},运行时键入字符,a,,必须要回车,则输出为:,a,注意:输入字符时不要带撇号,29,
23、,例:从键盘读入一个字符,将该字符及其它前、后字符输出到显示器。,#include,",stdio.h,,",,main(),,{,int,c;,,c=,getchar,();,,putchar(c-1);putchar(c);putchar(c+1);,,},不要丢掉头文件,30,,#include <,stdio.h,>main() { char,a,b,c,d,;,scanf(“%c%c”,&a,&b,); c=,getchar,(); d=,getchar,();,printf(“%c%c%c%c\n”,a,b,c,d,);},当执行程序时,按下列方式输入数据:,,12,,
24、34,则输出结果是,,A) 1234 B) 12 C)12 D) 12,,3 34,,练习:,31,,,程序举例,例,:,输入三角形的三边长,,,求三角形面积,.,,为简单起见,,,设输入的三边长,a,b,c,能构成三角形,.,,#include,",math.h,",,main(),,{float a,b,c,s,area;,,,scanf(,",%f,%f,%f,",,&a,&b,&c,);,,s=1.0/2*(a+b+c);,,area=,sqrt(s,*(s-a)*(s-b)*(s-c));,,,printf(,",a,=%7.2f, b=%
25、7.2f, c=%7.2f, s=%7.2f\n,",,a,b,c,s);,,,printf(,",area,=%7.2f\n,",,area);},,输入,:3,4,6,输出如下,:,,a= 3.00, b= 4.00, c= 6.00, s= 6.50,,area= 5.33,注意:此例调用了函数库中的函数,sqrt,,,必须在程序开头加上,include,命令,把头文件“,math.h”,包含到程序中。,32,,本章学习要点,1.,格式输入函数,:,scanf,,,格式输出函数,:,printf,,,,常用格式:,%d, %f, %s, %c ,%o, %ld,,2.,scanf,,函数中的“格式控制”后面是,变量地址,,,而不是变量名,.,,3.,putchar,函数(字符输出函数),,4.,getchar,函数,(,字符输入函数,),地址,精度,域宽,注意,:,33,,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。