1、共 25 页 第 1 1 页共 25 页 第 2 2 页 掌握C语言中输入输出数据的方法 掌握各种格式的使用 共 25 页 第 3 3 页 数据输入输出的概念数据输入输出的概念l 输出:从计算机向显示器、打印机等外部设输出:从计算机向显示器、打印机等外部设备输出数据。备输出数据。l输入:从标准输入设备键盘、鼠标等向计算输入:从标准输入设备键盘、鼠标等向计算机输入数据。机输入数据。lC语言不提供输入输出语句,输入输出操作语言不提供输入输出语句,输入输出操作是由是由C函数库中的函数实现。函数库中的函数实现。两个基本的输出两个基本的输出(输入输入)函数:函数:即:格式输出即:格式输出(输入输入)函数
2、函数 字符输出字符输出(输入输入)函数函数共 25 页 第 4 4 页函数的基本功能函数的基本功能 格式:格式:printf(格式控制串,输出表列)格式控制串,输出表列)功能:从标准输出设备上,按指定的格式输出对应功能:从标准输出设备上,按指定的格式输出对应 的变量。的变量。2.函数说明函数说明:(1)格式控制串由双引号括起来,由格式控制串由双引号括起来,由“%”和格式符和格式符以及以及普通字符(即需要原样输出的字符组成)。普通字符(即需要原样输出的字符组成)。(2)(2)输出表列是需要输出的一些数据,可以是常量、输出表列是需要输出的一些数据,可以是常量、变量或表达式。变量或表达式。(3)(3
3、)输出的参数必须与格式控制符中的格式说明在类输出的参数必须与格式控制符中的格式说明在类型、个数和位置上一一对应。型、个数和位置上一一对应。共 25 页 第 5 5 页例例:#include main()int a=3,b=4;printf(“a=%d b=%d”,a,b);运行结果运行结果:a=3 b=4格式说明格式说明(格式字符格式字符)普通字符普通字符输出表列输出表列共 25 页 第 6 6 页3.格式说明符格式说明符 一般格式一般格式:%-m.nl格式符格式符说明如下说明如下:-当数据的宽度小于显示宽度时当数据的宽度小于显示宽度时,数据数据左对齐左对齐,右方补空格右方补空格.m 输出数据
4、占输出数据占m个字符位,不够个字符位,不够右对齐右对齐,左边填空格。,左边填空格。n 输出数据有输出数据有n位小数位小数m.n 输出数据占输出数据占m列,列,n位小数位小数对不同类型的数据使用不同的格式字符。有以对不同类型的数据使用不同的格式字符。有以下几种格式符:下几种格式符:共 25 页 第 7 7 页d d:以以十进制十进制带符号形式输出整型数带符号形式输出整型数o o:以:以八进制八进制无符号形式输出整型数无符号形式输出整型数x x:以:以十六进制十六进制无符号形式输出整型无符号形式输出整型u u:以十进制:以十进制无符号无符号形式输出整型数形式输出整型数f f:以:以小数形式小数形式
5、输出单、双精度实型数输出单、双精度实型数e:e:以以指数形式指数形式输出单、双精度实型数输出单、双精度实型数c:c:以以字符形式字符形式输出一个输出一个字符字符s:s:以以字符形式字符形式输出一个输出一个字符串字符串ld:ld:以十进制带符号形式输出以十进制带符号形式输出长整型数长整型数基本格式控制符基本格式控制符共 25 页 第 8 8 页(1)(1)d格式符格式符:输出十进制整数。输出十进制整数。%d 按整型数据的实际长度输出。按整型数据的实际长度输出。%md m为指定的输出字段的宽度为指定的输出字段的宽度.若数据的位数小于若数据的位数小于m,则左端补以空格则左端补以空格;若大于若大于m,
6、则按实际位数输出。则按实际位数输出。%ld 输出长整型数据输出长整型数据.例:int a=1234;printf(“%3d”,a);printf(“%5dn”,a);printf(“%-5d”,a);1234 1234实际实际 左补空左补空1234 左对齐,右补空左对齐,右补空共 25 页 第 9 9 页以下程序运行后的输出结果是?以下程序运行后的输出结果是?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共 25 页 第 1010 页(2)(2)o o格式符格式符 以
7、八进制数形式输出整数。以八进制数形式输出整数。将内存单元中的各位的值将内存单元中的各位的值(0或或1)按八进制形式输出按八进制形式输出,输出的数值不带符号输出的数值不带符号,将符号也作为八进制数的一部分将符号也作为八进制数的一部分输出。输出。例如例如,-1在内存单元中在内存单元中(以补码形式存放以补码形式存放)如下如下:int a=-1;-1:printf(“%d,%o”,a,a);输出输出:1 1 11 11 11 11 11 11 11VC+下-1,177777共 25 页 第 1111 页(3)(3)x格式符格式符,以十六进制数形式输出整数。以十六进制数形式输出整数。(4)(4)u格式符
8、格式符,以十进制形式输出无符号型数据。以十进制形式输出无符号型数据。例例#include main()unsigned int a=65535;int b=-2;printf(“a=%d,%o,%x,%un”,a,a,a,a);printf(“b=%d,%o,%x,%un”,b,b,b,b);输出输出:a=-1,177777,ffff,65535 b=-2,177776,fffe,65534VC+下共 25 页 第 1212 页(5)(5)c 格式符格式符 输出一个字符。输出一个字符。整数的值在整数的值在3333126126范围内范围内,也可以用字符形式输也可以用字符形式输出。在输出前出。在输
9、出前,将该整数转换成相应的将该整数转换成相应的ASCIIASCII字符字符;字符数据也可以用整数形式输出。字符数据也可以用整数形式输出。例例#include main()char c=a;int i=97;printf(%c,%dn,c,c);printf(%c,%dn,i,i);输出输出:a,97 a,97共 25 页 第 1313 页 s格式符格式符 输出一个字符串。输出一个字符串。说明:说明:若不指定字符宽度和对齐方式若不指定字符宽度和对齐方式,则输出全部字符则输出全部字符串串.例如例如:printf(%s,CHINA);程序运行输出:程序运行输出:CHINA 若指定宽度若指定宽度m,实
10、际字符个数大于,实际字符个数大于m,按实际宽度输按实际宽度输出出;如果实际字符个数小于如果实际字符个数小于m,字符右对齐,左边填字符右对齐,左边填空格。空格。例如例如:printf(“s1=%s,s2=%3s,s3=%-5.2s,s4=%.3s,abcd,abcd,abcd,abcd);程序运行输出:程序运行输出:s1=abcd,s2=abcd,s3=ab ,s4=abcs1=abcd,s2=abcd,s3=ab ,s4=abc共 25 页 第 1414 页(7)f格式符格式符 以小数形式输出实数以小数形式输出实数(包括单、双精度包括单、双精度)。1)%f,不指定字段宽度不指定字段宽度,由系统
11、自动指定由系统自动指定,使整数部使整数部分全部输出分全部输出,并输出并输出6位小数(输出双精度数据,位小数(输出双精度数据,也是也是6位,但误差降低)。位,但误差降低)。2)%m.nf,指定输出的数据共占指定输出的数据共占m列列,其中有其中有n位小位小数数.若数据长度小于若数据长度小于m,则左端补空格。则左端补空格。例:例:float x=15.3,y=222.225111;printf(“%f,%6.2fn”,x,y);共 25 页 第 1515 页(8)e格式格式 以指数形式输出实数。以指数形式输出实数。1)%e 不指定输出数据所占的宽度和数字部分小数不指定输出数据所占的宽度和数字部分小数
12、位数位数,由系统自动指定给出由系统自动指定给出6位小数位小数,指数部分占指数部分占5位位,其其中中“e”占一位占一位,指数指数符号占一位符号占一位,指数指数占占3位位.数值按标数值按标准化指数形式输出准化指数形式输出(小数点前有小数点前有1位非零数字)。位非零数字)。例如例如:printf(“%e”,123.456);输出输出:1.234560e+002 e格式输出的实数共占格式输出的实数共占13列宽度列宽度.3位位6位位共 25 页 第 1616 页g格式符格式符:根据数值的大小输出实数根据数值的大小输出实数,自动选自动选 f 格式或格式或 e 格式格式(选择输出时占宽度较小的一种选择输出时
13、占宽度较小的一种),且不输出无意且不输出无意义的零。义的零。例如:例如:f=123.468;printf(“%f%e%g”,f,f,f);输出如下输出如下:123.468000 1.234680e+002 123.46810列列13列列10列列共 25 页 第 1717 页1.1.格式控制串的控制符号与变量表要一一对应,即:格式控制串的控制符号与变量表要一一对应,即:类型相同类型相同,个数相等个数相等2.2.格式控制符号用小写字母格式控制符号用小写字母3.3.格式控制符号之外的符号均照原样显示格式控制符号之外的符号均照原样显示4.4.若需显示百分号,格式为:若需显示百分号,格式为:%5.5.如
14、果实际数据所占字符位大于指定的域宽,如果实际数据所占字符位大于指定的域宽,按实际按实际输出输出共 25 页 第 1818 页例例:分析程序的执行结果分析程序的执行结果main()main()int a=16;char e=int a=16;char e=A A;unsigned b;unsigned b;long c;long c;float d;float d;b=65535;c=123456;d=123.45;b=65535;c=123456;d=123.45;printf(printf(”a=%d,%4d,%-6d,c=%ldna=%d,%4d,%-6d,c=%ldn”,a,a,a,c)
15、;,a,a,a,c);printf(printf(”%o,%x,%un%o,%x,%un”,b,b,b);,b,b,b);printf(printf(”%f,%e,%13.3e,%gn%f,%e,%13.3e,%gn”,d,d,d,d);,d,d,d,d);printf(printf(”%c,%s,%7.3sn%c,%s,%7.3sn”,e,e,”ChinaChina”,”BeijingBeijing”););这里这里7指输出宽度,指输出宽度,3表示输表示输出该字符串的前出该字符串的前3个字符。个字符。共 25 页 第 1919 页格式:格式:putchar(字符变量)字符变量)功能功能:在标
16、准输出设备上,输出指定的字符。:在标准输出设备上,输出指定的字符。说明说明:*一次调用只能输出一次调用只能输出一个字符一个字符*加上分号成为加上分号成为字符输出语句字符输出语句*使用时在程序开头用编译预处理命令使用时在程序开头用编译预处理命令#include”stdio.h”或或:#include编译预处理编译预处理请详见附录请详见附录E共 25 页 第 2020 页例例:#include main()char a,b,c;a=B;b=O;c=Y;putchar(a);putchar(b);putchar(c);输出:输出:BOY注意:头文件声明不可少!注意:头文件声明不可少!共 25 页 第
17、 2121 页#includemain()char c=a;putchar(c);思考思考怎样输出多个字符?怎样输出多个字符?多个字符怎样排列?多个字符怎样排列?char c1,c2,c3;c1=a;c2=b;c3=c;putchar(c1);putchar(c2);putchar(c3);abcabcputchar(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)
18、;putchar(n);putchar(c3);共 25 页 第 2222 页 一般形式一般形式:scanf(scanf(格式控制字符串格式控制字符串,地址表列地址表列)“格式控制字符串格式控制字符串”的含义同的含义同printfprintf函数函数,“地址表列地址表列”:要求是:要求是变量的地址变量的地址,或字符串的首地址或字符串的首地址.例如例如:int a,b,c;int a,b,c;scanf(“%d%d%d”,scanf(“%d%d%d”,&a,a,&b,b,&c);c);说明:说明:*scanf scanf 函数中的函数中的“格式控制格式控制”后面应当是后面应当是变量地址变量地址而
19、不是变量名。而不是变量名。*输入数据时输入数据时,在两个数据之间以在两个数据之间以一个一个或或多个空格多个空格间隔间隔,也可以用也可以用回车回车键键、跳格键跳格键tabtab分隔分隔。共 25 页 第 2323 页*输入时可以指定域宽输入时可以指定域宽,不允许规定精度不允许规定精度.int a,b;scanf(“%3d%3d”,&a,&b);float x;scanf(“%8.2f”,&x);*输入时,遇下列情况结束输入时,遇下列情况结束*回车,空格回车,空格*宽度结束宽度结束*非法输入非法输入输入输入123456123456系统自动将系统自动将123123赋给赋给a,456a,456赋给赋给
20、b b如:如:int k;scanf(“%3d”,&k);输入:输入:123456789k为:为:123例:例:main()int a,b,c;scanf(%d%d%d,&a,&b,&c);printf(%d,%d,%dn,a,b,c);以下三种数据输入方法都可以:以下三种数据输入方法都可以:121516 12 1516 12(按按tab键键)15 16 共 25 页 第 2424 页*格式控制字符串中若包含格式控制字符串中若包含普通字符普通字符,则输入时必须,则输入时必须照原样输入普通字符,否则将导致输入结束。照原样输入普通字符,否则将导致输入结束。如:如:int a,b,c;int a,b
21、,c;scanf(“%d scanf(“%d,%d%d,%d”,&a,&b,&c);%d”,&a,&b,&c);输入:输入:1 1,2 2,33*数值型数据和字符型数据混合输入方法数值型数据和字符型数据混合输入方法 main()main()int a,b,c,d,e;int a,b,c,d,e;scanf(“%d%c%c%c%d”,&a,&b,&c,&d,&e);scanf(“%d%c%c%c%d”,&a,&b,&c,&d,&e);printf(“a=%d,b=%c,c=%c,d=%c,e=%d”,a,b,printf(“a=%d,b=%c,c=%c,d=%c,e=%d”,a,b,c,d,e)
22、;c,d,e);输入:输入:123123a ab bc c789789 输出:输出:a=123,b=a,c=b,d=c,e=789a=123,b=a,c=b,d=c,e=789注意格式说明符以注意格式说明符以外的其他字符外的其他字符共 25 页 第 2525 页*在用在用“%c”%c”格式输入字符时格式输入字符时,空格字符和空格字符和“转转义字符义字符”都作为有效字符输入都作为有效字符输入.如,如,scanf(%c%c%c,&a,&b,&c);scanf(%c%c%c,&a,&b,&c);输入:输入:x xy yz zx x字符赋给字符赋给a,a,空格字符赋给空格字符赋给b,yb,y字符赋给字
23、符赋给c c共 25 页 第 2626 页l输入输入doubledouble型数据型数据,必须用格式说明符必须用格式说明符%lf%lf或或%le%le,l输入输入longlong型数据,必须用型数据,必须用%ld%ld。l标准标准C C在在scanfscanf中不使用中不使用%u%u说明符说明符,对对unsignedunsigned型数型数据据,以以%d%d或或%o%o、%x%x格式格式输入。输入。l%后的后的“*”为附加说明符为附加说明符,用来表示跳过它对应的用来表示跳过它对应的数据。数据。l输入时格式控制符中不能加输入时格式控制符中不能加“n”n”。l在在scanfscanf函数的格式控制
24、字符串中尽量不要出现普函数的格式控制字符串中尽量不要出现普通字符,尤其不能将输入提示放在其中。需要显示通字符,尤其不能将输入提示放在其中。需要显示输入提示应该调用输入提示应该调用printfprintf函数实现。函数实现。提示注意:提示注意:共 25 页 第 2727 页 例:例:double a;int b;float c;scanf(%f,%2d,%*d,%5f,&a,&b,&c);printf(%f,%d,%f,a,b,c);输入:输入:5.3,12,456,1.23456回车回车结果:结果:a=0.000000 b=12 c=1.234000原因是格式符用错了原因是格式符用错了.应该用
25、应该用lf或或le格式格式这里必须用这里必须用%lf格式格式这里可以用这里可以用%f格式或格式或%lf格式格式共 25 页 第 2828 页#include main()int a;float b,c;scanf(“%2d%3f%4f”,&a,&b,&c);printf(“a=%d,b=%f,c=%fn”,a,b,c);输入:输入:12345678987654321输出输出?a=12,b=345.000000,c=6789.000000例例:共 25 页 第 2929 页4.2.2 getchar函数函数(字符输入函数字符输入函数)一般形式:一般形式:getchar()-没有参数没有参数功能:
26、从键盘输入一个字符。功能:从键盘输入一个字符。说明:说明:1)只能输入一个字符)只能输入一个字符 2)可以将获得的字符赋给)可以将获得的字符赋给int 型或型或char型的变量型的变量 例例#include main()char c;c=getchar();putchar(c);运行时键入字符运行时键入字符a,必须要回车必须要回车则输出为:则输出为:a 注意:输入字符时不要带撇号注意:输入字符时不要带撇号共 25 页 第 3030 页#include stdio.h main()int c;c=getchar();putchar(c-1);putchar(c);putchar(c+1);不要丢
27、掉头文件不要丢掉头文件共 25 页 第 3131 页当执行程序时,按下列方式输入数据:当执行程序时,按下列方式输入数据:1234则输出结果是A)1234 B)12 C)12 D)12 3 34 练习:练习:共 25 页 第 3232 页例例:输入三角形的三边长输入三角形的三边长,求三角形面积求三角形面积.为简单起见为简单起见,设输入的三边长设输入的三边长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
28、)*(s-c);printf(a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2fn,a,b,c,s);printf(area=%7.2fn,area);输入输入:3,4,6 输出如下输出如下:a=3.00,b=4.00,c=6.00,s=6.50area=5.33注意:此例调用了函数库中注意:此例调用了函数库中的函数的函数sqrt,必须在程序开,必须在程序开头加上头加上include命令,把头文命令,把头文件件“math.h”包含到程序中。包含到程序中。共 25 页 第 3333 页1.格式输入函数格式输入函数:scanf,格式输出函数格式输出函数:printf,常用格式:常用格式
29、:%d,%f,%s,%c,%o,%ld2.scanf 函数中的函数中的“格式控制格式控制”后面是后面是变量地址变量地址,而不而不是变量名是变量名.3.putchar函数(字符输出函数)函数(字符输出函数)4.getchar函数函数 (字符输入函数字符输入函数)注意注意:共 25 页 第 3434 页1.1.计算机程序设计实验的准备计算机程序设计实验的准备(1 1)复习与本次实验相关的教学内容和主要知识点。)复习与本次实验相关的教学内容和主要知识点。(2 2)准备好编程题目程序流程图和全部源程序代码,)准备好编程题目程序流程图和全部源程序代码,并且先进行人工检查。并且先进行人工检查。(3 3)对
30、程序中有疑问的地方做出标记,充分估计程序)对程序中有疑问的地方做出标记,充分估计程序运行中可能出现的问题,以便在程序调试过程中给运行中可能出现的问题,以便在程序调试过程中给予关注。予关注。(4 4)准备好运行和调试程序所需的数据。)准备好运行和调试程序所需的数据。共 25 页 第 3535 页2.2.VC+6.0上机环境上机环境(1 1)每一个)每一个C C程序必须包含在一个工程项目程序必须包含在一个工程项目 (Project)Project)中。一个工程可以包含中。一个工程可以包含多个多个C C程序程序,但,但只能有一个只能有一个mainmain函数函数。(2 2)可以在编辑窗口直接输入程序,也可以)可以在编辑窗口直接输入程序,也可以在工程在工程项目中添加已经存在的项目中添加已经存在的C源程序。源程序。()提交作业:仅提交()提交作业:仅提交.程序即可。程序即可。()建议工程保留在盘以外的磁盘中。()建议工程保留在盘以外的磁盘中。