版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章输入与输出本章主要介绍C语言中的输入与输出函数的使用。所谓数据输入输出是以计算机为主体而言的。C语言本身不提供输入输出语句,输入和输出操作是由函数实现的。C语言函数库中有一批“标准输入输出函数”,它是以标准的输入输出设备为输入输出对象的。其中有:putchar(输出字符),getchar(输入字符),printf(格式输出),scanf(格式输入),puts(输出字符串),gets(输入字符串)。在使用C语言的库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中。头文件中包含了与函数有关的信息。例如使用标准输入输出函数时,要用到“stdio.h”文件,文件开头应有一个预编译命令:
#include<stdio.h>
或
#include“stdio.h”3.1、单字符输入、输出函数1、单字符输出函数(putchar)1)putchar()函数的格式:putchar(ch);
其中ch可以是一个字符变量或常量,也可以是一个转义字符。2)putchar()函数的作用:向终端输出一个字符。
(1)putchar()函数只能用于单个字符的输出,且一次只能输出一个字符。(2)在程序中使用putchar()函数,务必牢记:在程序(或文件)的开头加上编译预处理命令(也称包含命令),即:#include"stdio.h"
(3)putchar()函数有参数,无返回值。参数就是它要输出的那个字符,可以是字符变量或字符常量。[例]putchar()函数的格式和使用方法。#include<stdio.h> main(){charch1='N',ch2='E',ch3='W';putchar(ch1);putchar(ch2);putchar(ch3);putchar('\n');putchar(ch1);putchar('\n'); putchar('E');putchar('\n'); putchar(ch3);putchar('\n');}
程序运行结果如下:
NEWNEW2、单字符输入函数getchar()1)getchar()函数的格式:getchar();2)getchar()函数的作用:从系统隐含的输入设备(如键盘)输入一个字符。⑴getchar()函数只能用于单个字符的输入,一次输入一个字符。⑵程序中要使用getchar()函数,必须在程序(或文件)的开头加上编译预处理命令:
#include“stdio.h”⑶getchar()函数没有参数,但有返回值,返回的就是输入的那个字符。⑷getchar()函数同样将空格和回车键等字符都会作为有效字符输入。⑸在TC屏幕下运行含本函数程序时,将退出TC屏幕进入用户屏幕等待用户输入。输入完毕再返回TC屏幕。⑹程序最后两行可用下面两行的任意一行代替:main(){charc;c=getchar();putchar(c);}putchar(getchar());printf("%c",getchar());[例]说明getchar()函数的格式和作用。#include"stdio.h" main(){charch;ch=getchar(); putchar(ch);putchar('\n');putchar(getchar()); putchar('\n');} 程序运行情况如下:
ab↙ab3.2、格式输出函数(printf)printf()函数的作用:向计算机系统默认的输出设备(一般指终端或显示器)输出一个或多个任意类型的数据。printf()函数的一般格式如下:
printf(“格式字符串”
[,输出表列]);
⑴“格式控制字符串”是用双引号括起来的字符串,也称“转换控制字符串”,它可以是两种信息:格式说明或普通字符。①格式说明。是由“%”字符开始和格式字符组成,如%d、%f等。它的作用是将输出的数据转换为指定的格式输出。
②普通字符。即需要原样输出的字符,包括转义字符。例如printf函数中双引号内的逗号、空格和换行符等。“printf(”abc=%f\n“,abc);”语句中的“abc=”就是普通字符。
2.输出表列输出表列是可选的。如果要输出的数据不止一个,相邻两个数据之间用逗号分开。下面的printf()函数都是合法的:(1)printf("Iamastudent.\n");
(2)printf("%d",3+2);
(3)printf("a=%db=%5d\n",a,a+3); 注意:①“格式字符串”中的格式指示符,必须与“输出项表”中、输出项的数据类型一致,否则会引起输出错误。②在TurboC中,printf函数输出表列中的求值顺序是从右到左进行的。2.格式控制字符串 在TurboC中printf函数格式控制字符串以%开始,以一个格式字符结束,中间可以插入附加的字符。一般形式为:说明:方括号中的项为可选项,可以省略。%[□][m][.n][h/l]格式字符↓↓↓↓↓↓[开始符][标志字符][宽度指示符][精度指示符][长度修正符][格式转换字符]⑴格式字符格式字符用来表示输出数据的类型,对不同类型的数据用不同的格式字符,在格式控制字符串中不能省略,其常用符号和含义参见表2-4。表2-4printf格式字符格式字符说明d,i以带符号的十进制形式输出整数(正数不输出符号)o以八进制无符号形式输出整数(不输出前导符0)x,X以十六进制无符号形式输出整数(不输出前导符0x),用x则输出十六进制数的a~f时以小写形式输出;用X时,则以大写字母输出A~Fu以无符号十进制形式输出整数c以字符形式输出,只输出一个字符s输出字符串f以小数形式输出单、双精度数,隐含输出6位小数。e,E以指数“e”或“E”形式输出实数。(如1.2e+02或1.2E+02)g,G选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0。用G时,若以指数形式输出,则指数以大写表示⑵标志字符标志字符包括-、+、#、0等4种,具体含义参见表2-6所示。表2-6printf标志字符字符意义-输出结果左对齐,右边填空格;缺省则输出结果右对齐,左边填空格或零+输出值为正时冠以“+”号,为负时冠以“-”号,缺省则为正时冠以空格,为负时冠以“-”号#八进制输出时加前缀0;十六进制输出时加前缀0x,对c、s、d、u类无影响,对e、g、f类当结果有小数时才给出小数点0输出在数据前的多余空格处加前导0⑶宽度指示符用来设置输出数据项的最小宽度,通常用十进制整数来表示输出的位数。如果输出数据项所需实际位数多于指定宽度,则按实际位数输出,如果实际位数少于指定的宽度则用空格填补。如以下示例程序:printf("%d\n",888);/*888(按实际需要宽度输出)*/printf("%6d\n",888);/*□□□888(输出右对齐,左边填空格)*/printf("%f\n",888.88);/*888.880000(按实际需要宽度输出)*/printf("%12f\n",888.88);/*□□888.880000(输出右对齐,左边填空格)*/printf("%g\n",888.88);/*888.88(%g格式比采用%f格式输出宽度小)*/printf("%8g\n",888.88);/*□□888.88(输出右对齐,左边填空格)*/⑷精度指示符对于十进制数,以“.”开头,用十进制整数表示精度。对于float或double类型的浮点数或字符串可以用“m.n”的形式在指定宽度的同时来指定其精度。其中,“m”用以指定输出数据所占总的宽度,“n”表示精度,对实数,表示输出n位小数;对字符串,表示截取的字符个数。printf("%.5d\n",888);/*00888(数字前补0)*/printf("%.0d\n",888);/*888*/printf("%8.3f\n",888.88);/*□888.880*/printf("%8.1f\n",888.88);/*□□□888.9*/printf("%8.0f\n",888.88);/*□□□□□889*/printf("%.5s\n","abcdefg");/*abcde(截去超过的部分)*/printf("%5s\n","abcdefg");/*abcdefg(宽度不够,按实际宽度输出)*/⑸长度修正符常用的长度修正符为h和l两种,h表示输出项按短整型输出,l表示输出项按长整型输出。3.3、scanf()函数scanf()函数是用来从外部输入设备向计算机主机输入数据的。1.scanf()函数的功能:从键盘上接收格式化输入。2.scanf()函数的一般格式
scanf(“格式控制字符串”,地址表列);(1)格式控制字符串。格式控制字符串可以包含3种类型的字符:格式指示符、空白字符(空格、Tab键和回车键)和非空白字符(又称普通字符)。格式指示符与printf()函数的相似,空白字符作为相邻2个输入数据的缺省分隔符,非空白字符在输入有效数据时,必须原样一起输入。(2)地址表列──由若干个输入项首地址组成,相邻2个输入项首地址之间,用逗号分开。输入项首地址表中的地址,可以是变量的首地址,也可以是字符数组名或指针变量。变量首地址的表示方法:&变量名其中“&”是地址运算符。例如,scanf(“%d”,&a);中的“&a”是指变量a在内存中的首地址。
3、格式指示符格式指示符的一般形式为:%[*][宽度m][h|l][格式字符]1)格式字符:与printf中的类型字符含义相同。
2)宽度m
指定该项输入数据所占列数为m。换句话说,读取输入数据中相应的m位,但按需要的位数赋给相应的变量,多余部分被舍弃。例如:charch1,ch2;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、注意事项⑴scanf函数中的“格式控制字符串”后面应当是变量地址,而不应是变量名。 例如,如果a、b为整型变量,则scanf("%d,%d",a,b);是错误的,应将“a,b”改为“&a,&b”。⑵scanf函数没有计算功能,因此输入的数据只能是常量,而不能是表达式。⑶在输入多个整型数据或实型数据时,可以用一个或若干个空格、Enter键或制表符(Tab)作为间隔;但在输入多个字符型数据时,数据之间分隔符和“转义字符”都认为是有效字符。例如:
scanf("%c%c%c",&c1,&c2,&c3);
如输入:a□b□c<Enter>
则字符‘a’赋予变量c1,字符‘□’赋予变量c2,字符‘b’赋予变量c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔,因此‘□’作为下一个字符赋予变量c2。⑷输入格式中,除格式说明符之外的普通字符应原样输入。 例如:
scanf("x=%d,y=%d,z=%d",&x,&y,&z);
应使用以下形式输入:
x=12,y=34,z=56<Enter>⑸输入实型数据时,不能规定精度,即没有“%m.n”的输入格式。 例如:
scanf("%7.2f",&f);
这种输入格式是不合法的,不能企图用这样的scanf函数并输入以下数据而使f的值为12345.67。
1234567<Enter>⑹在输入数据时,如果遇到以下情况,则认为是该数据输入结束:①遇到空格符、换行符或制表符(Tab)。例如:
scanf("%d%d%d%d",&i,&j,&k,&m);
如果输入: 1□2<Tab>3<Enter>4<Enter> 则i、j、k、m变量的值分别为1、2、3、4。②遇到给定的宽度结束。例如: scanf("%2d",&i); 如果输入:
1234567<Enter>
则i变量的值为12。③遇到非法字符输入,例如:
scanf("%d%c%f",&i,&c1,&f1);
如果输入:
123x45y.6789
则i的值为123,c1的值为’x’,f1的值为45.0。⑺若输入的数据与输出的类型不一致,虽然编译能够通过,但结果不正确。【例2-9】输入数据与输出数据类型不一致的情况。
main() { inta; printf("inputanumber\n"); scanf("%d",&a); printf("%ld",a); }
提高人机交互性建议:为改善人机交互性,同时简化输入操作,在设计输入操作时,一般先用printf()函数输出一个提示信息,再用scanf()函数进行数据输入。例如,将scanf("num1=%d,num2=%d\n",&num1,&num2);改为:
printf("num1=");scanf("%d",&num1);printf("num2=");scanf("%d",&num2);
scanf,printf,getchar和putchar函数的特点scanf和getchar函数是输入函数,接收来自键盘的输入数据。scanf是格式输入函数,可按指定的格式输入任意类型数据;getchar函数是字符输入函数,只能接收单个字符。printf和putchar函数是输出函数,向显示器屏幕输出数据。printf是格式输出函数,可按指定格式显示任意类型的数据;putchar是字符显示函数,只能显示单个字符只使用scanf和printf函数可以在程序中不包含头文件#include<stdio.h>使用getchar和putchar函数在程序中一定要包含头文件#include<stdio.h>3.4程序举例【例3.4】设圆半径r=1.5,圆柱高h=3,输出圆周长、圆面积、圆球表面积、圆球体积、圆柱体积,要求小数点后面保留两位小数。解题思路:利用相关的计算公式来完成问题的求解;其中:圆周长l=2*PI*r圆面积s=PI*r*r圆球表面积sq=4*PI*r*r圆球体积vq=4.0/3.0*PI*r*r*r圆柱体积vz=PI*r*r*hPI为符号常量,代表3.1415926;源程序:#include<stdio.h>#definePI3.1415926main(){floatr,h,l,s,sq,vq,vz;/*变量定义*/printf("pleaseinputr,h:\n");/*输入提示信息*/scanf("%f,%f",&r,&h);/*从键盘输入圆半径r、圆柱高h的值*/l=2*PI*r;/*计算圆周长*/s=PI*r*r;/*计算圆面积*/sq=4*PI*r*r;/*计算圆球表面积*/vq=4.0/3.0*PI*r*r*r;/*计算圆球体积*/vz=PI*r*r*h;/*计算圆柱体积*/printf("%6.2f\n",l);/*输出各计算结果,小数点后面保留两位小数*/printf("%6.2f\n",s);printf("%6.2f\n",sq);printf("%6.2f\n",vq);printf("%6.2f\n",vz);}【例3.5】编写一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水电站运行管理制度培训
- 污水处理站交接班制度规范化培训
- 锅炉修理工职责培训课件
- 2026阿里国际站运营面试题目及答案
- 《物联网概论》课件 4.3智能终端
- 2025年区块链身份认证与人工智能技术的融合
- 海口市环卫外包合同
- it设备维护外包合同
- 格力中央空调外包合同
- 2025年氢燃料电池测试设备校准服务
- 珠海市2025广东横琴粤澳深度合作区执行委员会招26人笔试历年参考题库典型考点附带答案详解
- JJF 2396-2026高通量基因测序仪校准规范
- 2026年安全生产月主题班会教育课件:人人讲安全 个个会应急
- 中医肛痈护理试题(附答案)
- 食用菌自动化培训课件
- 多肽合成培训
- 2025年湖北省中考生物、地理合卷试卷真题(含答案解析)
- JJG 621-2012液压千斤顶
- GB/T 786.2-2018流体传动系统及元件图形符号和回路图第2部分:回路图
- GA/T 953-2011法庭科学枪口比动能测速仪法测试规程
- 高等工程流体力学课件
评论
0/150
提交评论