《输入和输出》PPT课件.ppt_第1页
《输入和输出》PPT课件.ppt_第2页
《输入和输出》PPT课件.ppt_第3页
《输入和输出》PPT课件.ppt_第4页
《输入和输出》PPT课件.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

第3章 输入和输出,2019/7/24,2,讲授内容,标准输入输出函数 格式化输入输出函数 通过流进行输入输出,2019/7/24,3,3.1 C+的输入和输出,两种I/O方式 保留自C的通过标准的I/O函数实现 面向对象的类型安全的,编译器对输入输出操作做严格的类型检查,2019/7/24,4,3.2 标准输入与输出函数 此类函数的原型包含在stdio.h中。 1、字符输入函数getchar 原型为:int getchar(void); 功能:从标准输入设备读入一个字符,字符以整数形式返回,且将该字符回显在显示器屏幕上。 例: #include /*文件包含*/ main( ) char ch; printf(“Please input two character: “); ch=getchar( ); /*输入1个字符并赋给ch */ putchar(ch);putchar(n); putchar(getchar( ); /*输入一个字符并输出*/ putchar(n); ,程序运行情况如下: Please input two characters: ab a b,2019/7/24,5,2、字符输出函数putchar 原型为:int putchar(int c); 功能:向标准输出设备输出一个字符,c为要输出的字符变量或常量,可以是转义符。 例:#include /*编译预处理命令:文件包含*/ void main( ) char ch1=N, ch2=E, ch3=W; putchar(ch1); putchar(ch2); putchar(ch3); /*输出*/ putchar(n); putchar(ch1); putchar(n); /*输出ch1的值,并换行*/ putchar(E); putchar(n); /*输出字符E,并换行*/ putchar(ch3); putchar(n); ,程序运行结果如下: NEW N E W,2019/7/24,6,例子3-1:字符输入输出 P38,# include int main( ) char a=a, b=b, c; c = getchar( ); putchar(a); putchar(b); putchar(c); putchar(c); putchar(“); putchar(0101); putchar(n); return 0; ,程序运行结果 s abcs”A,2019/7/24,7,一、格式化输入函数scanf scanf( , ) 功能: 输入各种类型的数据,并存入相应的参数中 读取输入流中的指定的字符 跳过输入流中的指定的字符 说明: 描述输入数据遵循的格式,可以包含3种类型的字符:格式指示符、空白字符(空格、Tab键和回车键)和非空白字符(普通字符)。空白字符作为相邻2个输入数据的缺省分隔符,非空白字符在输入有效数据时,必须原样一起输入。 是存放数据的地址的列表,参数之间用“,”分隔。参数列表是一个地址列表,即可以是变量的首地址,也可以是字符数组名或指针变量。,3.3 格式化输入输出,2019/7/24,8,变量首地址的表示方法: 假设输入“123456789”,则系统将读取“12”并赋值给num1;读取“34”,但舍弃掉(“*”的作用);读取“567”并赋值给num2。 所以,printf( )函数的输出结果为:num1=12,num2=567。,2019/7/24,9,3、宽度是任选项,为一整数n,指明了该输入数据长度为n,如果有多余的部分将被舍弃 例: scanf(“%3c%3c“, ch1和ch2均为字符型变量,输入为:abcdefg 4、转换说明符指明了读取数据的类型信息,2019/7/24,10,二、格式化输出函数printf printf (, ); 功能: 指定浮点值保留的小数位数 浮点值小数点对齐 输出数据的右对齐和左对齐 将直接字符插入到输出数据中 将浮点数按照指数形式输出 将整数按照八进制或十六进制形式输出 按指定的域宽和精度输出数据,2019/7/24,11,说明: 描述了输出数据的格式。 可以包含3种类型的字符 格式指示符, 则被参数列表中相应的数据替换 转义字符,按其含义输出相应的特殊符号 普通字符,按照原样输出 存放输出数据的表达式列表。 格式指示符的数量、顺序与输出参数相对应。 printf函数执行时,从左到右依次处理格式控制串,遇到格式控制字符,先计算相应的输出参数表达式,然后将该参数的计算结果按照格式指示符指定的方式输出 参数列表是可选的。如果要输出的数据不止1个,相邻2个之间用逗号分开。,2019/7/24,12,格式指示符: % 其中、 和可选 1、标志共有五种:多个标志可以联合使用。,2019/7/24,13,2、域宽:指明了数据打印的宽度。如果数据实际长度小于域宽,则数据输出右对齐;如果数据实际长度大于域宽,系统自动突破域宽限制,按数据的实际长度输出 。 注:负号要占据一个字符的位置。 3、精度: 对于整数,表示至少要打印的数字个数,如果数据长度小于精度,则左边补齐0;如果数据实际长度大于精度,则按数据实际长度输出。 对于浮点数,如果转换说明符为e、E和f,精度表示小数点后的有效位数,如果数据小数部分的长度小于精度,则在右边补齐0;否则按精度对数据进行舍入输出。 如果浮点数的转换说明符为g和G,精度表示打印数据的最大的长度。 对于字符串,精度表示字符串输出的最大长度,如果输出字符串长度小于精度,则按照字符串的实际长度输出;否则按精度截取输出字符串开头的n个字符(假设精度为n)输出 4、转换说明符:指明了输出数据的类型信息。,2019/7/24,14,下面的printf( )函数都是合法的: (1)printf(“I am a student.n“); (2)printf(“%d“,3+2); (3)printf(“a=%d b=%5fn“, a, a+3.0); 必须强调:“格式字符串”中的格式指示符,必须与“输出项表”中、输出项的数据类型一致,否则会引起输出错误。,2019/7/24,15,输出不同类型的数据,要使用不同的类型转换字符。 1类型转换字符d以带符号的十进制整数形式输出。 案例2 类型转换字符d的使用。可以有长度修饰。 void main( ) int num1=123; long num2=123456; printf(“num1=%d,num1=%5d,num1=%-5d,num1=%2dn“, num1,num1,num1,num1); printf(“num2=%ld,num2=%8ld,num2=%5ldn“,num2,num2,num2); printf(“num1=%ldn“,num1); ,程序运行结果如下: num1=123,num1=123,num1=123,num1=123 num2=123456,num2=123456,num2=123456 num1=16908411,对于无符号形式是指,不论正数还是负数,系统一律当作无符号整数来输出。 如:printf(“%d,%o,%xn“,-1,-1,-1); /*-1,177777,ffff*/,2019/7/24,16,2类型转换字符f以小数形式、按系统默认的宽度,输出单精度和双精度实数。小数位数都默认为6位。 %f是float型输出,有效位共7位。 %lf是double型输出,有效位共15位。 %Lf是 long double 型输出。有效位共19位。 案例3 类型转换字符f的使用。 void main( ) float f=123.456; double d1,d2; d1=1111111111111.111111111; d2=2222222222222.222222222; printf(“%f,%12f,%12.2f,%-12.2f,%.2fn“,f,f,f,f,f); printf(“d1+d2=%lfn“,d1+d2); 程序运行结果如下: 123.456001,123.456001,123.46,123.46,123.46 d1+d2=3333333333333.333000,本案例程序的输出结果中,数据123.456001和3333333333333.333000中的01和000是无意义的,因为它们超出了有效数字的范围。,2019/7/24,17,对于实数,也可使用格式符%e或%E,以标准指数形式输出:小数点前必须有而且只有一位非0数字,小数位数为6位;指数部分占5位(如e-003),其中e占一位,指数符号占一位,指数占3位。如: float x=123.456; printf(“%e,%-7.2E,%10.4en”,x,x,x); 输出结果为: 1.234560e+002,1.23E+002,1.2346e+002 也可使用格式符%g或%G,让系统根据数值的大小,自动选择%f或%e格式、且不输出无意义的零。,2019/7/24,18,3类型转换字符c输出一个字符(只占一列宽度)。 案例4 类型转换字符c的使用。 void main( ) char c=A; int i=65; printf(“c=%c,%5c,%dn“,c,c,c); printf(“i=%d,%c“,i,i); 程序运行结果如下: c=A,A,65 i=65,A 注:在C语言中,整数可以用字符形式输出,字符数据也可以用整数形式输出。将整数用字符形式输出时,系统首先求该数与256的余数,然后将余数作为ASCII码,转换成相应的字符输出。,2019/7/24,19,4类型转换字符s输出一个字符串。 案例5 类型转换字符s的使用。 main( ) printf(“%s,%5s,%-10s“,“Internet“,“Internet“,“Internet“); printf(“%10.5s,%-10.5s,%4.5sn“,“Internet“,“Internet“,“Internet“); 程序运行结果如下: Internet,Internet,Internet,Inter,Inter,Inter 注意:系统输出字符和字符串时,不输出单引号和双引号。,2019/7/24,20,1.3 使用说明 (1)printf( )可以输出常量、变量和表达式的值。但格式控制中的格式说明符,必须按从左到右的顺序,与输出项表中的每个数据一一对应,否则出错。 例如,printf(“str=%s, f=%d, i=%fn“, “Internet“, 1.0 / 2.0, 3 + 5, “CHINA“);是错误的。 (2)格式字符x、e、g可以用小写字母,也可以用大写字母。使用大写字母时,输出数据中包含的字母也大写。除了x、e、g格式字符外,其它格式字符必须用小写字母。 例如,%f不能写成%F。 (3)格式字符紧跟在“%”后面就作为格式字符,否则将作为普通字符使用(原样输出)。 例如,printf(”c=%c, f=%fn“, c, f);中的第一个c和f,都是普通字符。 (4)如果要输出%本身,则双写%。 例如:printf(“%f%”,1.0/3) 结果为:0.333333%,2019/7/24,21,举例: 1.以左对齐,域宽为10的方式输出字符串数据“aaaaa” printf(“%-10s”,”aaaaa”); aaaaa_ _ _ _ _ 2.用前导0格式输出数据23.45,域宽为10,保留三位小数 printf(“%010.3f”,23.45); 000023.450 3.用十六进制大写,以域宽10输出数据26,并在数据前面加0x printf(“%#10X”,26); _ _ _ _ _ _ 0X1A 4.以科学记数法小写方式输出数据123.4,域宽为15 printf(“%15e”,123.4); _ _1.234000e+002 5.为变量x读入一个十进制数,为变量y读入一个八进制数 scanf(“%d%o”, 输入:x=10y=10,2019/7/24,22,例3-2:格式化输入输出例子,# include int main( ) int num1; float num2; char ch2; int na, nb, nc, nd, ne, nf, ng; double da, db, dc; printf(“-Basic input and output:-n“); printf(“Input a char, a int and a float:“); scanf(“%c %d %f“, ,2019/7/24,23,3.4 用流进行输入输出,流就是一个字节序列 通过I/O流对象实现输入输出功能 将实现数据传送操作的设备抽象成对象 将“流”作为设备(如键盘、显示器等)和程序之间通讯的通道 C+预定义的四个输入输出对象 cout,标准输出设备,即显示器 cin,标准输入设备,即键盘 cerr和clog代表标准错误流对象 ,即显示器 以上四个对象都在iostream.h头文件中定义,2019/7/24,24,一、通过cout流输出数据 格式: cout ; cout . ; 例: cout“Welcome to C+ !n“ ; cout“123 + 456 = “ (123 + 456) endl ;,例:cout “my name is jonen”; cout “the id is”; cout 2; cout endl;,例:cout “my name is jonen” “the id is” 2cout endl;,例:cout “my name is jonen” “the id is” 2 endl;,2019/7/24,25,二、通过cin流输入数据 cin cin . . . ; 说明: 要求从键盘输入数据的个数、类型与变量相一致。 各数据之间要有分隔符,分隔符可能是一个或多个空格键、制表键或回车键。,例3-5:流输入输出例子 P55 #include int main( ) char c ; int i ; float x , y ; cout i x y ; c=i; cout “c=“ c “ti=“ i; cout “tx=“ x “ty=“ y “n“ ; return 0;,程序运行结果: Enter:65 2.3 3.5 C=A i=65 x=2.3 y=3.5,2019/7/24,26,3.5 流操纵算子,为什么要采用流操纵算子? 例: double average=9.400067; cout averageendl; 不能显示9.40,只能显示9.40007。 因输出流的缺省位数为六位有效位。 流操纵算子为流输入输出提供格式化输入输出的功能 流操纵算子在头文件iomanip.h中定义的对象,2019/7/24,27,一、设置整数基数 将整数按十进制、八进制和十六进制等形式输出 流操纵算子oct将整数输出形式设置为八进制 流操纵算子hex将整数输出形式设置为十六进制 流操纵算子dec将整数输出形式设置为十进制 例:输出八进制,十六进制和十进制数. #include #include void main( ) int number=1001; cout “Decimal:” decnumberendl “Hexadecimal:”hexnumberendl “Octal:”octnumberendl “Hexadecimal:”hex setiosflags(ios:uppercase) numberendl; ,输出结果: Decimal:1001 Hexadecimal:3e9 Octal:1751 Hexadecimal:3E9,2019/7/24,28,例:控制浮点数精度(默认6位有效位) #include #include void main( ) double amount=22.0/7; coutamoutendl; coutsetprecision(0)amoutendl setprecision(1)amoutendl setprecision(2)amoutendl setprecision(3)amoutendl setprecision(4)amoutendl; coutsetiosflags(ios:fixed); coutsetprecision(8)amountendl; coutsetiosflags(ios:scientific)amountendl; coutsetprecision(6);/还原系统默认设置 ,3.14286,3,3,3.1,3.14,3.143,3.14285714,二、设置浮点数精度,2019/7/24,29,三、设置域宽 函数width可以设置当前域宽(输入输出的字符数) 如果输出的数据所需的宽度比设置的域宽小,空位用填充字符(省缺为空格)填充 如果输出的数据所需的宽度比设置的域宽大,系统输出所有位 首先用:cout.width(n);设置输出域宽 然后再用:cout语句输出要显示的内容。 如:cout.width(5); cout“sss”; 显示效果:_ _sss 流操纵算子setw也可以设置域宽,2019/7/24,30,设置输出宽度: cout setw(8) 10 endl; 输出结果是: 若数值10和20均按照宽度8输出,则 cout setw(8) 10 setw(8) 20 endl; 输出结果是: 如果一个值的位数大于setw(n)确定的宽度位数,则按原宽度输出 。 float amount = 4.53671; cout setw(4) amount

温馨提示

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

评论

0/150

提交评论