《[电脑基础知识]第04章 基本输入、输出和顺序程序设计》由会员分享,可在线阅读,更多相关《[电脑基础知识]第04章 基本输入、输出和顺序程序设计(41页珍藏版)》请在金锄头文库上搜索。
1、1,第4章 基本输入、输出和 顺序程序设计 王占全,2,第4章:基本输入输出和顺序程序设计,学习的意义,程序对数据的处理流程: 程序的主要功能就是对数据的处理,其整个流程主要包括数据的输入、数据的处理、数据的输出。,数据处理,数据输入,数据输出,C程序中如何实现数据输入?,C程序中如何实现数据输出?,3,程序的结构: 写文章有文章的结构 建房子有房子的结构 制造机械产品由机械产品的结构 那么编写程序是否有程序的结构呢?,学习的意义,YES!,本章讨论,第5章讨论,第6章讨论,4,格式化输出printf 格式化输入scanf 字符数据的非格式化输入、输出 程序的控制结构 顺序程序设计举例 本章小
2、结,学习目标,掌握各种类型数据的格式化输入输出方法; 掌握字符数据的非格式化输入输出方法; 理解三种程序控制结构的流程图; 学会简单顺序程序的设计; 养成良好的程序设计习惯;,学习内容,5,4.1 格式化输出printf,一般格式,printf (“格式控制字符串“,表达式1,表达式2,表达式n);,功能,按照“格式控制字符串”的要求,将表达式1,表达式2,表达式n的值显示在计算机屏幕上。,6,printf使用时的注意事项,(1) 格式控制字符串可以不包含任何格式控制符。 (2) 当格式控制字符串中既含有常规字符,又包含有格式控制符时,则表达式的个数应与格式控制符的个数一致。 (3) 如果格式
3、控制字符串中格式控制符的个数多于表达式的个数,则余下的格式控制符的值将是不确定的。 (4) 不同类型的表达式要使用不同的格式转换符,同一表达式如果按照不同的格式转换符来输出,其结果可能是不一样的。,printf (“how are you?n”); /只有一个字符串参数, 输出为:how are you?,char ch = A; printf (“ch = %c“, ch); /输出结果:ch = A (以字符形式输出) printf (“ch = %d“, ch); /输出结果:ch = 65 (以A字符的ASCII码形式输出),7,printf函数中的格式转换字符及其含义,8,print
4、f函数中的格式转换字符及其含义,9,1. 整数的输出,有符号整数的输出,一般形式:, :表示可选项,可缺省。 :表示输出的数据左对齐,缺省时是右对齐。 :输出正数时,在数的前面加上号。 数字0:右对齐时,如果实际宽度小于width,则在左边的空位补0。 width:无符号整数,表示输出整数的最小域宽(即占屏幕的多少格)。若实际宽度超过了width,则按照实际宽度输出。 .precision:无符号整数,表示至少要输出precision位。若整数的位数大于precision,则按照实际位数输出,否则在左边的空位上补0。 字母l:如果在d的前面有字母l(long),表示要输出长整型数据。 字母h:
5、如果在d的前面有字母h(short),表示要输出短整型数据。,说明:,a=213; printf(“%-+10.5hd”,a);,+00213,10,1. 整数的输出,无符号整数的输出,一般形式:,| :表示互斥关系。 # :表示当以八进制形式输出数据(%o)时,在数字前输出0;当以十六进制形式输出数据(%x或%X)时,在数字前输出0x或0X。 其它字段的含义与前面介绍的相同。,说明:,11,2. 实数的输出,一般形式:,#:必须输出小数点。 .precision:规定输出实数时,小数部分的位数。 l:输出double型数据(缺省时也是输出double型数据)。 L:输出long double
6、型数据。 其它字段的含义与前面介绍的相同。,说明:,12,3. 字符和字符串的输出,一般形式:, :表示可选项,可缺省。 .precision:表示只输出字符串的前precision个字符。 其它字段的含义与前面介绍的相同。,说明:,13,【例】字符及字符串的格式化输出,#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“,
7、 ch); printf (“ch=%04c-(ch=%04c)n“, ch); printf (“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),运行结果
8、:,14,4. 辅助格式控制符(修饰符)注意,此外,在使用printf函数时还要注意以下几点: 格式控制字符串后面表达式的个数一般要与格式控制字符串中的格式控制符的个数相等。 格式转换符中,除了X、E、G以外,其它均为小写。 表达式的实际数据类型要与格式转换符所表示的类型相符,printf函数不会进行不同数据类型之间的自动转换。象整型数据不可能自动转换成浮点型数据,浮点型数据也不可能自动转换成型数数据,很容易出错!,15,【例】错误的格式化输出,#include void main ( ) int a = 10, b = 100; float f = 2; printf (“a = %d, b
9、 = %dn“, f, b); printf (“a = %f, b = %dn“, a, b); printf (“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);,16,4.2 格式化输入scanf,一般格式,scanf (“格式控制字符串”,变量1的地址,变量2
10、的地址, ,变量n的地址);,功能,第一个参数格式控制字符串的控制下,接受用户的键盘输入,并将输入的数据依此存放在变量1、变量2、变量n中 。,格式控制符与后续参数中的变量地址的对应关系,17,scanf函数的格式控制符,%* width l | h Type,一般形式:,说明:, :表示可选项,可缺省。|表示互斥关系。 width:指定输入数据的域宽,遇空格或不可转换字符则结束。 Type:各种格式转换符(参照printf)。 *:抑制符,输入的数据不会赋值给相应的变量。 l:用于d、u、o、x|X前,指定输入为long型整数;用于e|E、f前,指定输入为double型实数。 h:用于d、u
11、、o、x|X前,指定输入为short型整数。,18,使用scanf函数注意事项,(1) 如果相邻两个格式控制符之间,不指定数据分隔符(如逗号、冒号等),则相应的两个输入数据之间,至少用一个空格分隔,或Tab键/回车,然后再输入下一个数据。 (2) 格式控制字符串中出现的常规字符,务必原样输入。 (3) 为改善人机交互性,在设计输入操作时,一般用printf( )函数输出一个提示信息,再用scanf( )函数进行数据输入 。 (4) 当格式控制字符串中指定了输入数据的域宽width时,将读取输入数据中相应的width位,但按需要的位数赋给相应的变量,多余部分被舍弃。,例如: scanf (“%d
12、%d“, 假设给num1输入12,给num2输入36,则正确的输入操作为: 1236 或者 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“, 假设输入abc
13、defg,则系统将读取的“abc”中的a赋给变量ch1;将读取的“def“中的d赋给变量ch2。,19,使用scanf函数注意事项,(5) 当格式控制字符串中含有抑制符*时,表示本输入项对应的数据读入后,不赋给相应的变量(该变量由下一个格式指示符输入)。 (6) 使用格式控制符%c输入单个字符时,空格和转义字符均作为有效字符被输入。 (7) 输入数据时,遇到以下情况,系统认为该数据结束: 遇到空格,或者回车键,或者Tab键。 遇到输入域宽度结束。例如“%3d”,只取3列。 遇到非法输入。比方说,在输入数值数据时,遇到字母等非数值符号。 (8) 当一次scanf调用需要输入多个数据项时,如果前面
14、数据的输入遇到非法字符,并且输入的非法字符不是格式控制字符串中的常规字符,那么,这种非法输入将影响后面数据的输入,导致数据输入失败。,例如: 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
15、,20,int a,b; float x,y,z; char c1,c2; /scanf (“x=%f,y=%en“,21,4.3 字符数据的非格式化输入、输出,1. 字符数据的非格式化输入,int getchar ( void ); /应包含的.h文件为stdio.h,与输入字符数据有关的常用库函数主要有: getchar、getc、getche、getch等。,getchar,功能:从键盘读一字符 返值:正常,返回读取字符的ASCII码值;出错,返回EOF(-1)。 说明:以回车符为输入结束条件;输入多个字符时,返回第一个字符的值。,22,【例】利用getchar输入字符,#include void main ( ) char ch1, ch2; int a; ch1 = getchar ( ); ch2 = getchar ( ); scanf (“%d“, ,ch1 = 1, ch2 = 2 a = 34,运行结果(假设输入为:1234):,23,int getc ( FILE *stream ); /应包含的.h文件为stdio.h,getc,功能:从流文件stream中读取一个字符信息,它的返回值是所读取字符的ASCII码。 返值:正常,返回读取字符的ASCII码值;出错,返回EOF(-1)。 说明: