第03章 基本输入、输出和顺序程序设计.ppt_第1页
第03章 基本输入、输出和顺序程序设计.ppt_第2页
第03章 基本输入、输出和顺序程序设计.ppt_第3页
第03章 基本输入、输出和顺序程序设计.ppt_第4页
第03章 基本输入、输出和顺序程序设计.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、第3章:基本输入输出和顺序程序设计,学习的意义,程序对数据的处理流程: 程序的主要功能就是对数据的处理,其整个流程主要包括数据的输入、数据的处理、数据的输出。,数据处理,数据输入,数据输出,C程序中如何实现数据输入?,C程序中如何实现数据输出?,程序的结构: 写文章有文章的结构 建房子有房子的结构 制造机械产品由机械产品的结构 那么编写程序是否有程序的结构呢?,学习的意义,YES!,本章讨论,第4章讨论,第4章讨论,格式化输出printf 格式化输入scanf 字符数据的非格式化输入、输出 顺序程序设计举例 本章小结,学习目标,掌握各种类型数据的格式化输入输出方法; 掌握字符数据的非格式化输入

2、输出方法; 学会简单顺序程序的设计; 养成良好的程序设计习惯;,学习内容,1.格式化输出printf,一般格式,printf (格式控制字符串,表达式1,表达式2,表达式n);,功能,按照“格式控制字符串”的要求,将表达式1,表达式2,表达式n的值显示在计算机屏幕上。,说明,格式控制字符串用于指定输出格式。它包含两类字符: 常规字符:包括可显示字符和用转义字符表示的字符。 格式控制符:以%开头的一个或多个字符,以说明输出数据的类型、形式、长度、小数位数等。其格式为:,%修饰符格式转换字符,例: long int x = 0 x8AB6; printf (“The Value of x is %

3、ldn”, x);,常规字符,常规字符 (转义符),格式控制符 (修饰符),格式控制符 (格式转换符),printf使用时的注意事项,(1) 格式控制字符串可以不包含任何格式控制符。 (2) 当格式控制字符串中既含有常规字符,又包含有格式控制符时,则表达式的个数应与格式控制符的个数一致。此时,常规字符原样输出,而格式控制符的位置上输出对应的表达式的值,其对应的顺序是:从左到右的格式控制符对应从左到右的表达式。 (3) 如果格式控制字符串中格式控制符的个数多于表达式的个数,则余下的格式控制符的值将是不确定的。 (4) 不同类型的表达式要使用不同的格式转换符,同一表达式如果按照不同的格式转换符来输

4、出,其结果可能是不一样的。,printf (“how are you?n”); /只有一个字符串参数, 输出为:how are you? printf (“how old are you?n”, 20); /带有两个参数,20没有意义, 输出为:how old are you?,char ch = A; printf (ch = %c, ch); /输出结果:ch = A (以字符形式输出) printf (ch = %d, ch); /输出结果:ch = 65 (以A字符的ASCII码形式输出),printf函数中的格式转换字符及其含义,printf函数中的格式转换字符及其含义,1. 整数的

5、输出,有符号整数的输出,一般形式:, :表示可选项,可缺省。 :表示输出的数据左对齐,缺省时是右对齐。 :输出正数时,在数的前面加上号。 数字0:右对齐时,如果实际宽度小于width,则在左边的空位补0。 width:无符号整数,表示输出整数的最小域宽(即占屏幕的多少格)。若实际宽度超过了width,则按照实际宽度输出。 .precision:无符号整数,表示至少要输出precision位。若整数的位数大于precision,则按照实际位数输出,否则在左边的空位上补0。 字母l:如果在d的前面有字母l(long),表示要输出长整型数据。 字母h:如果在d的前面有字母h(short),表示要输出

6、短整型数据。,说明:,【例】有符号整数的格式化输出,#include void main ( ) int a = 123; long L = 65537; printf ( 12345678901234567890n); printf (a=%d-(a=%d)n, a); printf (a=%6d-(a=%6d)n, a); printf (a=%+6d-(a=%+6d)n, a); printf (a=%-6d-(a=%-6d)n, a); printf (a=%-06d-(a=%-06d)n, a); printf (a=%+06d-(a=%+06d)n, a); printf (a=%

7、+6.6d-(a=%+6.6d)n, a); printf (a=%6.6d-(a=%6.6d)n, a); printf (a=%-6.5d-(a=%-6.5d)n, a); printf (a=%6.4d-(a=%6.4d)n, a); printf (L=%ld-(L=%ld)n, L); printf (L=%hd-(L=%hd)n, L); ,12345678901234567890 a=123-(a=%d) a= 123-(a=%6d) a= +123-(a=%+6d) a=123 -(a=%-6d) a=123 -(a=%-06d) a=+00123-(a=%+06d) a=+0

8、00123-(a=%+6.6d) a=000123-(a=%6.6d) a=00123 -(a=%-6.5d) a= 0123-(a=%6.4d) L=65537-(L=%ld) L=1-(L=%hd),运行结果:,L是一长整型数65537,其值为十六进制0X00010001,所以要将其转换成短整型,即取低16位0 x0001,将其输出,故输出为1。,Why?,1. 整数的输出,无符号整数的输出,一般形式:, :表示可选项,可缺省。 | :表示互斥关系。 # :表示当以八进制形式输出数据(%o)时,在数字前输出0;当以十六进制形式输出数据(%x或%X)时,在数字前输出0 x或0X。 .prec

9、ision的含义与前面介绍的相同,但要注意,在TC和BC下,precision所指定的位数也包含了0 x或0X所占的位数,可在VC下,则不包含0 x或0X所占的位数。 其它字段的含义与前面介绍的相同。,说明:,【例】无符号整数的格式化输出,#include void main ( ) int a = -1; unsigned u = 32767; unsigned long L = -32768; printf (a=%d, a=%u-(a=%d, a=%u)n, a, a); printf (a=%hx, a=%X-(a=%hx, a=%X)n, a, a); printf (u=%o, u

10、=%X-(u=%o, u=%X)n, u, u); printf (u=%#010X-(u=%#010X)n, u); printf (u=%#10.10X- (u=%#10.10X)n, u); printf (L=%lX- (L=%lX)n,L); printf (L=%-#14.10X- (L=%-#14.10X)n, L); ,a=-1, a=65535-(a=%d, a=%u) a=ffff, a=FFFF-(a=%hx, a=%X) u=77777, u=7FFF-(u=%o, u=%X) u=0X00007FFF-(u=%#010X) u=0X00007FFF-(u=%#10.1

11、0X) L=FFFF8000-(L=%lX) L=0X00008000 -(L=%-#14.10X),运行结果(在BC3.1下):,a=-1, a=4294967295-(a=%d, a=%u) a=ffff, a=FFFFFFFF-(a=%hx, a=%X) u=77777, u=7FFF-(u=%o, u=%X) u=0X00007FFF-(u=%#010X) u=0X0000007FFF-(u=%#10.10X) L=FFFF8000-(L=%lX) L=0X00FFFF8000 -(L=%-#14.10X),运行结果(在VC6.0下):,2. 实数的输出,一般形式:, :表示可选项,可

12、缺省。 | :表示互斥关系。 #:必须输出小数点。 .precision:规定输出实数时,小数部分的位数。 l:输出double型数据(缺省时也是输出double型数据)。 L:输出long double型数据。 其它字段的含义与前面介绍的相同。,说明:,【例】实数的格式化输出,#include void main ( ) double f = 2.5e5; printf ( 12345678901234567890n); printf (f=%15f-(f=%15f)n, f); printf (f=%015f-(f=%015f)n, f); printf (f=%-15.0f-(f=%-1

13、5.0f)n, f); printf (f=%#15.0f-(f=%#15.0f)n, f); printf (f=%+15.4f-(f=%+15.4f)n, f); printf (f=%15.4E-(f=%15.4E)n, f); ,12345678901234567890 f= 250000.000000-(f=%15f) f=00250000.000000-(f=%015f) f=250000 -(f=%-15.0f) f= 250000.-(f=%#15.0f) f= +250000.0000-(f=%+15.4f) f= 2.5000E+005-(f=%15.4E),运行结果:,3

14、. 字符和字符串的输出,一般形式:, :表示可选项,可缺省。 .precision:表示只输出字符串的前precision个字符。 其它字段的含义与前面介绍的相同。,说明:,【例】字符及字符串的格式化输出,#include void main ( ) char ch = A; printf ( 12345678901234567890n); printf (ch=%c-(ch=%c)n, ch); printf (ch=%4c-(ch=%4c)n, ch); printf (ch=%-4c-(ch=%-4c)n, ch); printf (ch=%04c-(ch=%04c)n, ch); pr

15、intf (st=%s-(st=%s)n, CCNU); printf (st=%6s-(st=%6s)n, CCNU); printf (st=%06.3s-(st=%06.3s)n, CCNU); ,12345678901234567890 ch=A-(ch=%c) ch= A-(ch=%4c) ch=A -(ch=%-4c) ch=000A-(ch=%04c) st=CCNU-(st=%s) st= CCNU-(st=%6s) st=000CCN-(st=%06.3s),运行结果:,4. 辅助格式控制符(修饰符)小结,4. 辅助格式控制符(修饰符)小结,此外,在使用printf函数时还要

16、注意以下几点: 格式控制字符串后面表达式的个数一般要与格式控制字符串中的格式控制符的个数相等。 格式转换符中,除了X、E、G以外,其它均为小写。 表达式的实际数据类型要与格式转换符所表示的类型相符,printf函数不会进行不同数据类型之间的自动转换。象整型数据不可能自动转换成浮点型数据,浮点型数据也不可能自动转换成型数数据,【例】错误的格式化输出,#include void main ( ) int a = 10, b = 100; float f = 2; printf (a = %d, b = %dn, f, b); printf (a = %f, b = %dn, a, b); prin

17、tf (a = %ld, b = %dn, 120, b); ,Why?,如何修改?,printf (a = %f, b = %dn, f, b); printf (a = %f, b = %dn, (float)a, b); printf (a = %ld, b = %dn, 120L, b); 或 printf (a = %d, b = %dn, 120, b);,2.格式化输入scanf,一般格式,scanf (“格式控制字符串”,变量1的地址,变量2的地址, ,变量n的地址);,功能,第一个参数格式控制字符串的控制下,接受用户的键盘输入,并将输入的数据依此存放在变量1、变量2、变量n中

18、 。,格式控制符与后续参数中的变量地址的对应关系,scanf函数的格式控制符,%* width l | h Type,一般形式:,说明:, :表示可选项,可缺省。|表示互斥关系。 width:指定输入数据的域宽,遇空格或不可转换字符则结束。 Type:各种格式转换符(参照printf)。 *:抑制符,输入的数据不会赋值给相应的变量。 l:用于d、u、o、x|X前,指定输入为long型整数;用于e|E、f前,指定输入为double型实数。 h:用于d、u、o、x|X前,指定输入为short型整数。,使用scanf函数注意事项,(1) 如果相邻两个格式控制符之间,不指定数据分隔符(如逗号、冒号等)

19、,则相应的两个输入数据之间,至少用一个空格分隔,或者用Tab键分隔,或者输入一个数据后,按回车,然后再输入下一个数据。 (2) 格式控制字符串中出现的常规字符(包括转义字符),务必原样输入。 (3) 为改善人机交互性,同时简化输入操作,在设计输入操作时,一般先用printf( )函数输出一个提示信息,再用scanf( )函数进行数据输入 。 (4) 当格式控制字符串中指定了输入数据的域宽width时,将读取输入数据中相应的width位,但按需要的位数赋给相应的变量,多余部分被舍弃。,例如: scanf (%d%d, 假设给num1输入12,给num2输入36,则正确的输入操作为: 1236 或

20、者 12 36 使用“”符号表示按回车键操作,在输入数据操作中的作用是,通知系统输入操作结束。,例如: scanf (%d:%d:%d, 假设给h输入12,给m输入30,给s输入10,正确的输入操作为: 12:30:10,例如: scanf (num1=%d, num2=%dn, 假设给num1输入12,给num2输入36,正确的输入操作为: num1=12,num2=36n,例如: 将scanf (num1=%d, num2=%dn, ,例如: scanf (%3c%3c, 假设输入abcdefg,则系统将读取的“abc”中的a赋给变量ch1;将读取的def中的d赋给变量ch2。,使用sca

21、nf函数注意事项,(5) 当格式控制字符串中含有抑制符*时,表示本输入项对应的数据读入后,不赋给相应的变量(该变量由下一个格式指示符输入)。 (6) 使用格式控制符%c输入单个字符时,空格和转义字符均作为有效字符被输入。 (7) 输入数据时,遇到以下情况,系统认为该数据结束: 遇到空格,或者回车键,或者Tab键。 遇到输入域宽度结束。例如“%3d”,只取3列。 遇到非法输入。比方说,在输入数值数据时,遇到字母等非数值符号。 (8) 当一次scanf调用需要输入多个数据项时,如果前面数据的输入遇到非法字符,并且输入的非法字符不是格式控制字符串中的常规字符,那么,这种非法输入将影响后面数据的输入,

22、导致数据输入失败。,例如: scanf (%2d%*2d%3d, 假设输入123456789 输出结果为:num1=12, num2=567。,例如: scanf (%c%c%c, 假设输入:ABC,则系统将字母A赋值给ch1,空格赋值给ch2,字母B赋值给ch3。,例如: scanf (%d, a); 如果输入为:12a3,a的值将是12。,例如: scanf (%d,%d, 如果输入为:12a34,那么a的值将是12,b的值将无法预测。 正确的输入是:12,34,【例】数据的格式化输入 输入一学生的学号(8位数字)、生日(年-月-日)、性别(M:男,F:女)及三门功课(语文、数学、英语)的

23、成绩,现要求计算该学生的总分和平均分,并将该学生的全部信息输出(包括总分、平均分)。,#include void main ( ) unsigned long no; /学号 unsigned int year, month, day; /生日(年、月、日) unsigned char sex; /性别 float chinese, math, english; /语文、数学、英语成绩 float total, average; /总分、平均分 printf (input the students NO: ); scanf (%8ld, ,printf (input the students

24、Scores(chinese, math, english): ); scanf (%f,%f,%f, ,假设输入 : input the students NO:20040101 input the students Birthday(yyyy-mm-dd):1987-9-8 input the students Sex(M/F):M input the students Scores(chinese, math, english):90,80,90,输出结果 : =NO=birthday=sex=chinese=math=english=total=average 20040101 198

25、7-09-08 M 90.0 80.0 90.0 260.0 86.7,3 字符数据的非格式化输入、输出,1. 字符数据的非格式化输入,int getchar ( void ); /应包含的.h文件为stdio.h,与输入字符数据有关的常用库函数主要有: getchar、getc、getche、getch等。,getchar,功能:从键盘读一字符 返值:正常,返回读取字符的ASCII码值;出错,返回EOF(-1)。 说明:以回车符为输入结束条件;输入多个字符时,返回第一个字符的值;输入字符回显。,【例】利用getchar输入字符,#include #include void main ( )

26、char ch1, ch2; int a; ch1 = getchar ( ); ch2 = getchar ( ); scanf (%d, ,int getc ( FILE *stream ); /应包含的.h文件为stdio.h,getc,功能:从流文件stream中读取一个字符信息,它的返回值是所读取字符的ASCII码。 返值:正常,返回读取字符的ASCII码值;出错,返回EOF(-1)。 说明:该函数带有一个参数stream,它是一文件指针(第12章介绍),表示流文件,当流文件是stdin时,getc函数的功能与getchar函数的功能完全相同。也就是说,gtec(stdin)与get

27、char( )是等价的。,int getche ( void ); /应包含的.h文件为conio.h,getche,功能:与getchar的功能基本相同 。 返值:正常,返回读取字符的ASCII码值;出错,返回EOF(-1)。 说明:直接从键盘获取键值,不等待用户按回车键;输入字符回显。,getch,int getch ( void ); /应包含的.h文件为conio.h,功能:与getche的功能基本相同 。 返值:正常,返回读取字符的ASCII码值;出错,返回EOF(-1)。 说明:直接从键盘获取键值,不等待用户按回车键;输入字符不回显。,【例】getch与getche的差异,#inc

28、lude #include void main ( ) char ch1, ch2; printf (please press two keyn); ch1 = getche ( ); /回显 ch2 = getch ( ); /不回显 printf (nyouve pressed %c and %cn, ch1, ch2); ,与输入字符数据有关的库函数功能比较:,2. 字符数据的非格式化输出,int putchar ( int c ); /应包含的.h文件为stdio.h,与输出字符数据有关的常用库函数主要有: putchar、putc、puts等。,putchar,功能:在显示器上输出字

29、符c。 返值:正常,返回字符的代码值;出错,返回EOF(-1)。 说明:该函数带有一个参数c,它为要显示字符的ASCII码值,有一个int型返回值 。,putc,int putc ( int c, FILE *stream ); /应包含的.h文件为stdio.h,功能:将字符c输出到流文件stream。如果流文件为stdout,则功能与putchar完全相同,所以putc(c, stdout)等价于putchar(c) 返值:正常,返回字符的代码值;出错,返回EOF(-1)。,puts,int puts ( char *string ); /应包含的.h文件为stdio.h,功能:将字符串s

30、tring的所有字符输出到屏幕上,输出时将自动回车换行。,【例】利用字符输出函数输出字符,#include void main ( ) int a = 65; char b = B; putchar (a); /不自动回车 putchar (n); puts (“is as good as ”); /自动回车 putc (b, stdout); ,编写简单的C程序,C程序的结构: 变量说明; 数据输入(赋值); 计算; 数据输出。,顺序程序设计举例,【例1】任意从键盘输入一个三位整数,要求正确地分离出它的个位、十位和百位数,并分别在屏幕上输出。 程序设计的分析: 本例要求设计一个从三位整数中分离出它的个位、十位和百位数的算法。例如,输入的是456,则输出的分别是4、5、6,最低位数字可用对10求余的方法得到,如456%10=6,最高位的百位数字可用对100整除的方法得到,如456/10=4,中间位的数字既可通过将其变换为最高位后再整除的方法得到,如(456-4*100)/10=5,也可通过将其变换为最低位再求余的方法得到,如(456/10)%10=5。 根据以上的分析,这个程

温馨提示

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

评论

0/150

提交评论