格式化输入输出_第1页
格式化输入输出_第2页
格式化输入输出_第3页
格式化输入输出_第4页
格式化输入输出_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4.5格式输入输出4.5.1printf()函数(格式输出函数)printf()函数的作用:向计算机系统默认的输出设备(一般指终端或显示器)输出一个或多个任意类型的数据。

[例L4.4.c]已知圆半径radius=1.5,求圆周长和圆面积。

main()

{floatradius,length,area,pi=3.1415926;

radius=1.5;

length=2*pi*radius; /*求圆周长*/

area=pi*radius*radius; /*求圆面积*/

printf(“radius=%f\n”,radius); /*输出圆半径*/

printf(“length=%7.2f,area=%7.2f\n”,length,area); /*输出圆周长、面积*/

}

演示程序运行结果如下:

radius=1.500000length=9.42,area=7.07 1.printf()函数的一般格式:printf(“格式控制”[,输出项表]);(1).格式控制(转换控制字符串),可以包含三种字符:

a、格式说明。一般形式如下:%[格式字符]

b、转义字符(见p48)c、普通字符──除格式指示符和转义字符之外的其它字符。格式字符串中的普通字符,原样输出。例如,printf(“radius=%f\n”,radius);中的“radius=”是普通字符。(2).输出项表可选项。如果要输出的数据不只1个,相邻2个之间用逗号分开。例

printf("Iamastudent.\n"); printf("%d",3+2);

printf("a=%fb=%5d\n",a,a+3); 注意:“格式字符串”中的格式指示符,必须与“输出项表”中、输出项的数据类型一致,否则会引起输出错误。输出格式说明符整型数据

%d以有符号十进制形式输出整型数%o以无符号八进制形式输出整型数%x以无符号十六进制形式输出整型数%u以无符号十进制形式输出整型数实型数据

%f以小数形式输出实型数%e以指数形式输出实型数%g按数值宽度最小的形式输出实型数字符型数据

%c输出一个字符%s输出字符串其他

%%输出字符%本身在%和格式符之间可以使用附加说明符2格式字符附加格式说明符l输出长整型数(只可与d、o、x、u结合用)m指定数据输出的宽度(即域宽).n对实型数据,指定输出n位小数;对字符串,指定左端截取n个字符输出+使输出的数值数据无论正负都带符号输出-使数据在输出域内按左对齐方式输出整数位数+小数位数+小数点自动对n位后小数四舍五入

例如:%ld——输出十进制长整型数%m.nf——右对齐,m位域宽,n位小数或n个字符%-m.nf——左对齐

输出不同类型的数据,要使用不同的格式字符(类型转换字符)。

(1)类型转换字符d──以带符号的十进制整数形式输出。%d:实际长度输出%md:指定的输出字段的宽度%ld长整型数据对于整数,还可用无符号形式的八进制(%o(小写字母o))和十六进制(x/X);对于unsigned型数据,用%u格式符。所谓无符号形式是指,不论正数还是负数,系统一律当作无符号整数来输出。

[例L4.5.c]类型转换字符d的使用。main(){intnum1=123;longnum2=123456789;/*用3种不同格式,输出int型数据num1的值*/

printf("num1=%d,num1=%5d,num1=%-5d,num1=%2d\n",num1,num1,num1,num1);/*用3种不同格式,输出long型数据num2的值*/

printf("num2=%ld,num2=%8ld,num2=%5ld\n",num2,num2,num2);printf("num1=%ld\n",num1);

printf("num2=%d\n",num2);} 演示程序运行结果如下:num1=123,num1=□□123,num1=123□□,num1=123num2=12345689,num2=123456789,num2=123456789num1=16908411(TC2.0结果,VC结果正确)num2=-7616(TC2.0结果,VC结果正确)

(2)类型转换字符f──以小数形式、按系统默认的宽度,输出单精度和双精度实数。%f%m.nf%-m.nf

对于实数,也可使用格式符%e,以标准指数形式输出——尾数中的整数部分大于等于1、小于10,小数点占一位,尾数中的小数部分占5位,指数部分占4位(如e-03),其中e占一位,指数符号占一位,指数占2位,共计11位。也可使用格式符%g——让系统根据数值的大小,自动选择%f或%e格式、且不输出无意义的零。

[例L4.6.c]类型转换字符f的使用。main(){floatf=123.456;doubled1,d2;d1=1111111111111.111111111;d2=2222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f);printf("d1+d2=%f\n",d1+d2);}

演示程序运行结果如下:

123.456001,□□123.456001,□□□□□□123.46,123.46□□□□□□,123.46

d1+d2=3333333333333.333010

说明:本案例程序的输出结果中,数据123.456001和3333333333333.333010中的01和010都是无意义的,因为它们超出了有效数字的范围。

(3)类型转换字符c──输出一个字符(只占一列宽度)。[例L4.7.c]类型转换字符c的使用。main(){charc='A';

inti=65;

printf("c=%c,%5c,%d\n",c,c,c);

printf("i=%d,%c",i,i);}

程序运行结果如下:

c=A,□□□□A,65i=65,A注意:在C语言中,整数可以用字符形式输出,字符数据也可以用整数形式输出。将整数用字符形式输出时,系统首先求该数与256的余数,然后将余数作为ASCII码,转换成相应的字符输出。演示(4)类型转换字符s──输出一个字符串。[例L4.8.c]类型转换字符s的使用。

main(){

printf("%s,%5s,%-10s","Internet","Internet","Internet");

printf("%10.5s,%-10.5s,%4.5s\n","Internet","Internet","Internet");} 程序运行结果如下:Internet,Internet,Internet□□,□□□□□Inter,Inter□□□□□,Inter演示使用说明

(1)printf()可以输出常量、变量和表达式的值。但格式控制中的格式说明符,必须按从左到右的顺序,与输出项表中的每个数据一一对应,否则出错。例如,printf("str=%s,f=%d,i=%f\n","Internet",1.0/2.0,3+5,"CHINA");是错误的。

(2)格式字符x、e、g可以用小写字母,也可以用大写字母。使用大写字母时,输出数据中包含的字母也大写。除了x、e、g格式字符外,其它格式字符必须用小写字母。例如,%f不能写成%F。

(3)格式字符紧跟在“%”后面就作为格式字符,否则将作为普通字符使用(原样输出)。例如,“printf(”c=%c,f=%f\n“,c,f);”中的第一个c和f,都是普通字符。4.5.2格式化输入scanf()函数

[例]已知圆柱体的底半径radius=1.5,高high=2.0,求其体积。

main()

{floatradius=1.5,high=2.0,pi=3.14159,vol;

vol=pi*radius*radius*high;/*求体积*/

printf(“vol=%7.2f\n”,vol); /*输出求出的体积*/

} [例L4.9.c]已知圆柱体的底半径为radius,高为high,求其体积。/*功能:说明函数scanf()的格式及作用。*/main(){floatradius,high,vol,pi=3.1415926;

printf("Pleaseinputradius&high:");

scanf("%f%f",&radius,&high); /*从键盘输入两个实数赋给变量r,h*/

vol=pi*radius*radius*high;

printf("radius=%7.2f,high=%7.2f,vol=%7.2f\n",radius,high,vol);}

程序运行结果如下:

Pleaseinputradius&high:1.5□2.0↙radius=□□□1.50,high=□□□2.00,vol=□□14.14演示1.scanf()函数的一般格式scanf(“格式控制",输入项首地址表);(1)格式控制字符串。格式控制字符串可以包含3种类型的字符:格式指示符、空白字符(空格、Tab键和回车键)和非空白字符(又称普通字符)。格式指示符与printf()函数的相似,空白字符作为相邻2个输入数据的缺省分隔符,非空白字符在输入有效数据时,必须原样一起输入。(2)输入项首地址表──由若干个输入项首地址组成,相邻2个输入项首地址之间,用逗号分开。输入项首地址表中的地址:变量的地址、字符数组名或指针变量。变量地址的表示方法:&变量名其中“&”是地址运算符。例如,[L4.9.c]中的“&radius”是指变量radius在内存中的地址。

2.scanf()函数的功能:从键盘上接收格式化输入。运行例[L4.9.c]的程序时,从键盘上输入2个实数,分别存入&radius、&high所标示的存储单元中,即输入两个实数分别赋给radius和high。

3、格式指示符

格式指示符的一般形式为:%[*][宽度][h|l]类型字符(1)类型字符类型字符如p80表4.3。例如,在例[L4.9.c]的scanf()函数语句中,格式字符串“%f%f”。

(2)宽度n

指定该项输入数据所占列数为n。

换句话说,读取输入数据中相应的n位,但按需要的位数赋给相应的变量,多余部分被舍弃。例如,scanf("%3c%3c",&ch1,&ch2);printf("ch1=%c,ch2=%c\n",ch1,ch2);

假设输入“abcdefg”,则系统将读取的“abc”中的“a”赋给变量ch1;将读取的“def”中的“d”赋给变量ch2,所以printf()函数的输出结果为:ch1=a,ch2=d。

(3)赋值抑制字符*表示本输入项对应的数据读入后,不赋给相应的变量(该变量由下一个格式指示符输入)。例如,scanf("%2d%*2d%3d",&num1,&num2);printf("num1=%d,num2=%d\n",num1,num2);

假设输入“123456789”,则系统将读取“12”并赋值给num1;读取“34”、但舍弃掉(“*”的作用);读取“567”并赋值给num2。所以,printf()函数的输出结果为:num1=12,num2=567。

(4)类型修饰符──h、l。

其含义与printf()中的一样,分别为短整型和长整型。

4、数据输入操作

(1).如果相邻2个格式指示符之间,不指定数据分隔符(如逗号、冒号等),则相应的2个输入数据之间,至少用一个空格分开,或者用Tab键分开,或者输入1个数据后,按回车,然后再输入下1个数据。例如,scanf("%d%d",&num1,&num2);

假设给num1输入12,给num2输入36,则正确的输入操作为:12□36↙

或者:12↙36↙

注:使用“↙”符号表示按回车键操作,在输入数据操作中的作用是,通知系统输入操作结束。

(2).“格式字符串”中出现的普通字符(包括转义字符形式的字符),务必原样输入。例如,scanf("%d,%d",&num1,&num2);

假设给num1输入12,给num2输入36,正确的输入操作为:12,36↙

另外,scanf()函数中、格式字符串内的转义字符(如\n),系统并不把它当转义字符来解释,从而产生一个控制操作,而是将其视为普通字符,所以也要原样输入。例如:scanf("num1=%d,num2=%d\n",&num1,&num2);

假设给num1输入12,给num2输入36,正确的输入操作为:

num1=12,num2=36\n↙

提高人机交互性建议:为改善人机交互性,同时简化输入操作,在设计输入操作时,一般先用printf()函数输出一个提示信息,再用scanf()函数进行数据输入。

例如,将scanf("num1=%d,num2=%d\n",&num1,&num2);改为:

printf("num1=");scanf("%d",&num1);printf("num2=");scanf("%d",&num2);

(3)输入数据时,遇到以下情况,系统认为该数据结束:

a.遇到空格,或者回车键,或者Tab键。

b.遇到输入域宽度结束。例如“%3d”,只取3列。

c.遇到非法输入。例如,在输入数值数据时,遇到字母等非数值符号(数值符号仅由数字字符0-9、小数点和正负号构成)。

(4)使用格式说明符“%c”输入单个字符时,空格和转义字符均作为有效字符被输入。例如,scanf("%c%c%c",&ch1,&ch2,&ch3);printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3);

假设输入:A□B□C↙,则系统将字母'A'赋值给ch1,空格'□'赋值给ch2,字母'B'赋值给ch3。

4.6顺序结构程序设计举例

在顺序结构程序中,各语句(或命令)是按照位置的先后次序,顺序执行的,且每个语句都会被执行到。

[例L4.10.c]输入任意三个整数,求它们的和及平均值。

/*功能:设计一个顺序结构程序,求三个整数的和及平均值。*/

main()

{intnum1,num2,num3,sum;

floataver;

printf("Pleaseinputthreenumbers:");

scanf("%d,%d,%d",&num1,&num2,&num3);/*输入三个整数*/

sum=num1+num2+num3; /*求累计和*/

aver=sum/3.0; /*求平均值*/

printf("num1=%d,num2=%d,num3=%d\n",num1,num2,num3);

printf("sum=%d,aver=%7.2f\n",sum,aver);

} 演示思考题:能否将“aver=sum/3.0;”中“3.0”改为“3”?[例L4.11.c]求方程ax2+bx+c=0的实数根。a,b,c由键盘输入,a≠0且b2-4ac>0。/*功能:设计一个顺序结构程序,求方程的根。*/#include"math.h“/*使用求平方

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论