工学第章顺序程序设计

上传人:cn****1 文档编号:578234917 上传时间:2024-08-23 格式:PPT 页数:50 大小:1.18MB
返回 下载 相关 举报
工学第章顺序程序设计_第1页
第1页 / 共50页
工学第章顺序程序设计_第2页
第2页 / 共50页
工学第章顺序程序设计_第3页
第3页 / 共50页
工学第章顺序程序设计_第4页
第4页 / 共50页
工学第章顺序程序设计_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《工学第章顺序程序设计》由会员分享,可在线阅读,更多相关《工学第章顺序程序设计(50页珍藏版)》请在金锄头文库上搜索。

1、第第第第3 3章章章章 顺序程序设计顺序程序设计顺序程序设计顺序程序设计不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理回顾回顾常量是在程序中不能被更改的值;而常量是在程序中不能被更改的值;而变量在程序中可以被更变量在程序中可以被更改的,通过变量可以引用存储在内存中的数据改的,通过变量可以引用存储在内存中的数据C语言中的基本数据类型包括整型、单精度浮点型、双精度语言中的基本数据类型包括整型、单精度浮点型、双精度浮点型和字符型浮点型和字符型整型分为短整型、整型、长整型,每种整型又可分为有符号整型分为短整型、整型、长整型,每种整型又可分为有符号型和无符号型型和无

2、符号型单精度浮点型和双精度浮点型变量可以存储实数,但双精度单精度浮点型和双精度浮点型变量可以存储实数,但双精度型取值范围要比单精度型大的多型取值范围要比单精度型大的多字符型变量可以存储单个字符,其值是该字符的字符型变量可以存储单个字符,其值是该字符的ASCII 码码表达式是操作数和运算符的集合表达式是操作数和运算符的集合赋值运算符的语法如下:赋值运算符的语法如下:variable=expressionsizeof运算符用于在程序中测试某一数据类型占用多少字节运算符用于在程序中测试某一数据类型占用多少字节算术运算符提供运算功能,包括算术运算符提供运算功能,包括+、-、*、/、%、+和和-2不向前

3、走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理第第3 3章章顺序程序设计顺序程序设计 u学习的意义学习的意义 程序对数据的处理流程:程序对数据的处理流程: 程序的主要功能就是对数据的处理,其整个流程主要包括程序的主要功能就是对数据的处理,其整个流程主要包括数据的输入、数据的处理、数据的输出。数据的输入、数据的处理、数据的输出。C C C C程序中如何实程序中如何实程序中如何实程序中如何实现数据输入现数据输入现数据输入现数据输入? ? ? ?C C C C程序中如何实程序中如何实程序中如何实程序中如何实现数据输出现数据输出现数据输出现数据输出? ? ? ?3不向前

4、走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理第第3 3章章顺序程序设计顺序程序设计 程序的结构:程序的结构: 写文章有文章的结构写文章有文章的结构 建房子有房子的结构建房子有房子的结构 制造机械产品由机械产品的结构制造机械产品由机械产品的结构 那么编写程序是否有程序的结构呢?那么编写程序是否有程序的结构呢?u学习的意义学习的意义 程序结构程序结构程序结构程序结构顺序结构顺序结构顺序结构顺序结构选择结构选择结构选择结构选择结构循环结构循环结构循环结构循环结构YES!本章讨论本章讨论本章讨论本章讨论第第第第4 4章讨论章讨论章讨论章讨论第第第第5 5章讨论章讨论章

5、讨论章讨论4不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理 格式化输出格式化输出printfprintf 格式化输入格式化输入scanfscanf 字符数据的非格式化输入字符数据的非格式化输入getchargetchar、输出、输出putcharputchar 程序的控制结构程序的控制结构 顺序程序设计举例顺序程序设计举例 本章小结本章小结u学习目标学习目标 掌握各种类型数据的格式化输入输出方法;掌握各种类型数据的格式化输入输出方法; 掌握字符数据的非格式化输入输出方法;掌握字符数据的非格式化输入输出方法; 理解三种程序控制结构的流程图;理解三种程序控制结

6、构的流程图; 学会简单顺序程序的设计;学会简单顺序程序的设计; 养成良好的程序设计习惯;养成良好的程序设计习惯;u学习内容学习内容 第第3 3章章顺序程序设计顺序程序设计 5不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理3.1 3.1 格式化输出格式化输出printfprintf 一般格式一般格式一般格式一般格式printfprintfprintfprintf ( ( ( (格式控制字符串格式控制字符串格式控制字符串格式控制字符串 ,表达式,表达式,表达式,表达式1 1 1 1,表达式,表达式,表达式,表达式2 2 2 2,表达式,表达式,表达式,表达式n

7、);n);n);n); 功能功能功能功能 按照按照按照按照“ “格式控制字符串格式控制字符串格式控制字符串格式控制字符串” ”的要求,将的要求,将的要求,将的要求,将表达式表达式表达式表达式1 1 1 1,表达式,表达式,表达式,表达式2 2 2 2,表达式,表达式,表达式,表达式n n n n的值显示在计算机屏幕上。的值显示在计算机屏幕上。的值显示在计算机屏幕上。的值显示在计算机屏幕上。 说明说明说明说明 格式控制字符串用于指定输出格式。它包含两类字符:格式控制字符串用于指定输出格式。它包含两类字符:格式控制字符串用于指定输出格式。它包含两类字符:格式控制字符串用于指定输出格式。它包含两类字

8、符: 常规字符:常规字符:常规字符:常规字符:包括可显示字符和用转义字符表示的字符。包括可显示字符和用转义字符表示的字符。包括可显示字符和用转义字符表示的字符。包括可显示字符和用转义字符表示的字符。 格式控制符:格式控制符:格式控制符:格式控制符:以以以以% % % %开头的一个或多个字符,以说明输出数开头的一个或多个字符,以说明输出数开头的一个或多个字符,以说明输出数开头的一个或多个字符,以说明输出数据的类型、形式、长度、小数位数等。其格式为:据的类型、形式、长度、小数位数等。其格式为:据的类型、形式、长度、小数位数等。其格式为:据的类型、形式、长度、小数位数等。其格式为:%修饰符修饰符修饰

9、符修饰符 格式转换字符格式转换字符格式转换字符格式转换字符例:例:例:例: double x =1234.5678;double x =1234.5678; printfprintf (“ (“The Value of x isThe Value of x is %10.2f %10.2fnn”, ”, x);x);常规字符常规字符常规字符常规字符常规字符常规字符常规字符常规字符( (转义符转义符转义符转义符) )格式控制符格式控制符格式控制符格式控制符(修饰符)(修饰符)(修饰符)(修饰符)格式控制符格式控制符格式控制符格式控制符(格式转换符)(格式转换符)(格式转换符)(格式转换符)6不向

10、前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理 printfprintfprintfprintf使用时的注意事项使用时的注意事项使用时的注意事项使用时的注意事项(1) (1) (1) (1) 格式控制字符串可以不包含任何格式控制符。格式控制字符串可以不包含任何格式控制符。格式控制字符串可以不包含任何格式控制符。格式控制字符串可以不包含任何格式控制符。(2) (2) (2) (2) 当格式控制字符串中既含有常规字符,又包含有格当格式控制字符串中既含有常规字符,又包含有格当格式控制字符串中既含有常规字符,又包含有格当格式控制字符串中既含有常规字符,又包含有格式控制

11、符时,则表达式的个数应与格式控制符的个数式控制符时,则表达式的个数应与格式控制符的个数式控制符时,则表达式的个数应与格式控制符的个数式控制符时,则表达式的个数应与格式控制符的个数一致。此时,常规字符原样输出,而格式控制符的位一致。此时,常规字符原样输出,而格式控制符的位一致。此时,常规字符原样输出,而格式控制符的位一致。此时,常规字符原样输出,而格式控制符的位置上输出对应的表达式的值,其对应的顺序是:置上输出对应的表达式的值,其对应的顺序是:置上输出对应的表达式的值,其对应的顺序是:置上输出对应的表达式的值,其对应的顺序是:从左从左从左从左到右的格式控制符对应从左到右的表达式。到右的格式控制符

12、对应从左到右的表达式。到右的格式控制符对应从左到右的表达式。到右的格式控制符对应从左到右的表达式。(3)(3)(3)(3) 如果格式控制字符串中格式控制符的个数多于表达如果格式控制字符串中格式控制符的个数多于表达如果格式控制字符串中格式控制符的个数多于表达如果格式控制字符串中格式控制符的个数多于表达式的个数,则余下的格式控制式的个数,则余下的格式控制式的个数,则余下的格式控制式的个数,则余下的格式控制符的值将是不确定的。符的值将是不确定的。符的值将是不确定的。符的值将是不确定的。(4) (4) (4) (4) 不同类型的表达式要使用不同的格式转换符,不同类型的表达式要使用不同的格式转换符,不同

13、类型的表达式要使用不同的格式转换符,不同类型的表达式要使用不同的格式转换符,同一同一同一同一表达式如果按照不同的格式转换符来输出,其结果可表达式如果按照不同的格式转换符来输出,其结果可表达式如果按照不同的格式转换符来输出,其结果可表达式如果按照不同的格式转换符来输出,其结果可能是不一样的。能是不一样的。能是不一样的。能是不一样的。 printfprintf (“how are you?n”); (“how are you?n”); /只有一个字符串参数,只有一个字符串参数,只有一个字符串参数,只有一个字符串参数, 输出为:输出为:输出为:输出为:how are you?how are you?

14、how are you?how are you?printfprintf (“how old are you?n”, 20); (“how old are you?n”, 20); /带有两个参数,带有两个参数,带有两个参数,带有两个参数,20202020没有意义,没有意义,没有意义,没有意义, 输出为:输出为:输出为:输出为:how old are you?how old are you?how old are you?how old are you?已已已已 知:知:知:知: intint a = 2; a = 2;函数调用:函数调用:函数调用:函数调用: printf(printf( a

15、 a * a = * a = %d%d, a + 5 = , a + 5 = %d dnn , a * a, a + 5);, a * a, a + 5);实际输出:实际输出:实际输出:实际输出: a * a = 4, a + 5 = 7a * a = 4, a + 5 = 7 printfprintf (5 + 3 = %d, 5 - 3 = %d, 5 * 3 = %d, 5 + 3, 5 - 3); (5 + 3 = %d, 5 - 3 = %d, 5 * 3 = %d, 5 + 3, 5 - 3); 输出结果将是:输出结果将是:输出结果将是:输出结果将是:5 + 3 = 85 + 3

16、= 8,5 3 = 25 3 = 2,5 * 3 = -287105 * 3 = -28710输出随机输出随机输出随机输出随机char char chch = A; = A;printfprintf ( (chch = %c, = %c, chch); ); /输出结果:输出结果:输出结果:输出结果:chchchch = A = A = A = A (以字符形式输出)(以字符形式输出)(以字符形式输出)(以字符形式输出)printfprintf ( (chch = %d, = %d, chch); ); /输出结果:输出结果:输出结果:输出结果:chchchch = 65 = 65 = 65

17、= 65 (以(以(以(以AAAA字符的字符的字符的字符的ASCIIASCIIASCIIASCII码形式输出)码形式输出)码形式输出)码形式输出)7不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理 printfprintfprintfprintf函数中的格式转换字符及其含义函数中的格式转换字符及其含义函数中的格式转换字符及其含义函数中的格式转换字符及其含义 格式转换格式转换符符含含 义义对应的表达对应的表达式数据类型式数据类型%d 或或 %i以十进制形式输出一个整型数据。以十进制形式输出一个整型数据。例如:例如:int a = 20;printf (%d,

18、a); /输出输出20有符号整型有符号整型%x,%X以十六进制形式输出一个无符号整型数据。以十六进制形式输出一个无符号整型数据。例如:例如:int a = 164;printf (%x, a); /输出输出a4printf (%X, a); /输出输出A4无符号整型无符号整型%o ( 字字母母o )以八进制形式输出一个无符号整型数据。以八进制形式输出一个无符号整型数据。例如:例如:int a = 164;printf (%o, a); /输出输出244无符号整型无符号整型%u以十进制形式输出一个无符号整型数据。以十进制形式输出一个无符号整型数据。例如:例如:int a = -1;printf

19、(%u, a); /BC下输出下输出65535,VC下下4294967295无符号整型无符号整型%c输出一个字符型数据。输出一个字符型数据。例如:例如:char ch = A;printf (%c, ch); /输出输出A字符型字符型8不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理 printfprintfprintfprintf函数中的格式转换字符及其含义函数中的格式转换字符及其含义函数中的格式转换字符及其含义函数中的格式转换字符及其含义 格式转格式转换符换符含含 义义对应的表达对应的表达式数据类型式数据类型%s输出一个字符串。输出一个字符串。例如:例如

20、:printf (my name is %s, wangjinghua); /输出输出my name is wangjinghua字符串字符串%f以十进制小数形式输出一个浮点型数据。以十进制小数形式输出一个浮点型数据。例如:例如:float f = -12.3;printf (%f, f); /输出输出-12.300000浮点型浮点型%e,%E以指数形式输出一个浮点型数据。以指数形式输出一个浮点型数据。例如:例如:float f = 1234.8998;printf (%e, f); /输出输出1.234900e+003printf (%E, f); /输出输出1.234900E+003浮点型

21、浮点型%g,%G按照按照%f或或%e中输出宽度比较短的一种格式输出。中输出宽度比较短的一种格式输出。浮点型浮点型9不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理1.1.1.1.整数的输出整数的输出整数的输出整数的输出 有符号有符号有符号有符号整数的输出整数的输出整数的输出整数的输出 l l 一般形式:一般形式:一般形式:一般形式: :表示可选项,可缺省。表示可选项,可缺省。表示可选项,可缺省。表示可选项,可缺省。 :表示输出的数据左对齐,缺省时是右对齐。表示输出的数据左对齐,缺省时是右对齐。表示输出的数据左对齐,缺省时是右对齐。表示输出的数据左对齐,缺省时

22、是右对齐。 :输出正数时,在数的前面加上号。输出正数时,在数的前面加上号。输出正数时,在数的前面加上号。输出正数时,在数的前面加上号。 数字数字数字数字0 0 0 0:右对齐时,如果实际宽度小于右对齐时,如果实际宽度小于右对齐时,如果实际宽度小于右对齐时,如果实际宽度小于widthwidthwidthwidth,则在左边的空位补,则在左边的空位补,则在左边的空位补,则在左边的空位补0 0 0 0。 widthwidthwidthwidth:无符号整数,表示输出整数的最小域宽(即占屏幕的多少格)。若无符号整数,表示输出整数的最小域宽(即占屏幕的多少格)。若无符号整数,表示输出整数的最小域宽(即占

23、屏幕的多少格)。若无符号整数,表示输出整数的最小域宽(即占屏幕的多少格)。若实际宽度超过了实际宽度超过了实际宽度超过了实际宽度超过了widthwidthwidthwidth,则按照实际宽度输出。,则按照实际宽度输出。,则按照实际宽度输出。,则按照实际宽度输出。 .precision.precision.precision.precision:无符号整数,表示至少要输出无符号整数,表示至少要输出无符号整数,表示至少要输出无符号整数,表示至少要输出precisionprecisionprecisionprecision位。若整数的位数大位。若整数的位数大位。若整数的位数大位。若整数的位数大于于于于

24、precisionprecisionprecisionprecision,则按照实际位数输出,否则在左边的空位上补,则按照实际位数输出,否则在左边的空位上补,则按照实际位数输出,否则在左边的空位上补,则按照实际位数输出,否则在左边的空位上补0 0 0 0。 字母字母字母字母l l l l:如果在如果在如果在如果在d d d d的前面有字母的前面有字母的前面有字母的前面有字母l l l l(longlonglonglong),表示要输出长整型数据。),表示要输出长整型数据。),表示要输出长整型数据。),表示要输出长整型数据。 字母字母字母字母h h h h:如果在如果在如果在如果在d d d d

25、的前面有字母的前面有字母的前面有字母的前面有字母h h h h(shortshortshortshort),表示要输出短整型数据。),表示要输出短整型数据。),表示要输出短整型数据。),表示要输出短整型数据。l l 说明:说明:说明:说明:%- + 0 width .precision l h d%- + 0 width .precision l h d辅助格式控制字符(修饰符)辅助格式控制字符(修饰符)辅助格式控制字符(修饰符)辅助格式控制字符(修饰符) 10不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理【例【例【例【例】有符号整数的格式化输出有符号整数

26、的格式化输出有符号整数的格式化输出有符号整数的格式化输出 #include #include intint main ( ) main ( ) short a = 123; short a = 123; intint L = 65537; L = 65537; printfprintf ( 12345678901234567890n); ( 12345678901234567890n); printfprintf (a=%d-(a=% (a=%d-(a=%d)nd)n, a);, a); printfprintf (a=%6d-(a=%6d)n, a); (a=%6d-(a=%6d)n, a)

27、; printfprintf (a=%+6d-(a=%+6d)n, a); (a=%+6d-(a=%+6d)n, a); printfprintf (a=%-6d-(a=%-6d)n, a); (a=%-6d-(a=%-6d)n, a); printfprintf (a=%-06d-(a=%-06d)n, a); (a=%-06d-(a=%-06d)n, a); printfprintf (a=%+06d-(a=%+06d)n, a); (a=%+06d-(a=%+06d)n, a); printfprintf (a=%+6.6d-(a=%+6.6d)n, a); (a=%+6.6d-(a=%

28、+6.6d)n, a); printfprintf (a=%6.6d-(a=%6.6d)n, a); (a=%6.6d-(a=%6.6d)n, a); printfprintf (a=%-6.5d-(a=%-6.5d)n, a); (a=%-6.5d-(a=%-6.5d)n, a); printfprintf (a=%6.4d-(a=%6.4d)n, a); (a=%6.4d-(a=%6.4d)n, a); printfprintf (L=%d-(L=% (L=%d-(L=%d)nd)n, L);, L); printfprintf (L=% (L=%hdhd-(L=%-(L=%hd)nhd)

29、n, L);, L); return 0; return 0; 12345678901234567890123456789012345678901234567890123456789012345678901234567890a=123-(a=%d)a=123-(a=%d)a=123-(a=%d)a=123-(a=%d)a= 123-(a=%6d)a= 123-(a=%6d)a= 123-(a=%6d)a= 123-(a=%6d)a= +123-(a=%+6d)a= +123-(a=%+6d)a= +123-(a=%+6d)a= +123-(a=%+6d)a=123 -(a=%-6d)a=123

30、 -(a=%-6d)a=123 -(a=%-6d)a=123 -(a=%-6d)a=123 -(a=%-06d)a=123 -(a=%-06d)a=123 -(a=%-06d)a=123 -(a=%-06d)a=+00123-(a=%+06d)a=+00123-(a=%+06d)a=+00123-(a=%+06d)a=+00123-(a=%+06d)a=+000123-(a=%+6.6d)a=+000123-(a=%+6.6d)a=+000123-(a=%+6.6d)a=+000123-(a=%+6.6d)a=000123-(a=%6.6d)a=000123-(a=%6.6d)a=000123

31、-(a=%6.6d)a=000123-(a=%6.6d)a=00123 -(a=%-6.5d)a=00123 -(a=%-6.5d)a=00123 -(a=%-6.5d)a=00123 -(a=%-6.5d)a= 0123-(a=%6.4d)a= 0123-(a=%6.4d)a= 0123-(a=%6.4d)a= 0123-(a=%6.4d)L=65537-(L=%d)L=65537-(L=%d)L=65537-(L=%d)L=65537-(L=%d)L=1-(L=%L=1-(L=%L=1-(L=%L=1-(L=%hdhdhdhd) ) ) )运行结果:运行结果:运行结果:运行结果:L L L

32、 L是一整型数是一整型数是一整型数是一整型数65537655376553765537,其,其,其,其值为十六进制值为十六进制值为十六进制值为十六进制0X00010X00010X00010X00010001(320001(320001(320001(32位位位位) ) ) ),所,所,所,所以要将其转换成短整型,以要将其转换成短整型,以要将其转换成短整型,以要将其转换成短整型,即取低即取低即取低即取低16161616位位位位0x00010x00010x00010x0001,将,将,将,将其输出,故输出为其输出,故输出为其输出,故输出为其输出,故输出为1 1 1 1。 Why?Why?Kj3p11

33、.exe11不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理 2.2.实数的输出实数的输出 l l 一般形式:一般形式:一般形式:一般形式: :表示可选项,可缺省。表示可选项,可缺省。表示可选项,可缺省。表示可选项,可缺省。 | | :表示互斥关系。表示互斥关系。表示互斥关系。表示互斥关系。 # #:必须输出小数点。必须输出小数点。必须输出小数点。必须输出小数点。 .precision.precision:规定输出实数时,小数部分的位数。规定输出实数时,小数部分的位数。规定输出实数时,小数部分的位数。规定输出实数时,小数部分的位数。 l l:输出输出输出输出

34、doubledouble型数据(缺省时也是输出型数据(缺省时也是输出型数据(缺省时也是输出型数据(缺省时也是输出doubledouble型数据)。型数据)。型数据)。型数据)。 L L:输出输出输出输出long doublelong double型数据。型数据。型数据。型数据。 其它字段的含义与前面介绍的相同其它字段的含义与前面介绍的相同其它字段的含义与前面介绍的相同其它字段的含义与前面介绍的相同。l l 说明:说明:说明:说明:%- + # 0 width .precision l | L f | e | E | %- + # 0 width .precision l | L f | e |

35、 E | g | Gg | G辅助格式控制字符(修饰符)辅助格式控制字符(修饰符)辅助格式控制字符(修饰符)辅助格式控制字符(修饰符) 12不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理【例【例【例【例】实数的格式化输出实数的格式化输出实数的格式化输出实数的格式化输出 #include #include intint main ( ) main ( ) double f = 2.5e5; double f = 2.5e5; printfprintf ( 12345678901234567890n); ( 12345678901234567890n); pr

36、intfprintf (f=%15f-(f=%15f)n, f); (f=%15f-(f=%15f)n, f); printfprintf (f=%015f-(f=%015f)n, f); (f=%015f-(f=%015f)n, f); printfprintf (f=%-15.0f-(f=%-15.0f)n, f); (f=%-15.0f-(f=%-15.0f)n, f); printfprintf (f=%#15.0f-(f=%#15.0f)n, f); (f=%#15.0f-(f=%#15.0f)n, f); printfprintf (f=%+15.4f-(f=%+15.4f)n,

37、f); (f=%+15.4f-(f=%+15.4f)n, f); printfprintf (f=%15.4E-(f=%15.4E)n, f); (f=%15.4E-(f=%15.4E)n, f); return 0; return 0; 12345678901234567890123456789012345678901234567890123456789012345678901234567890f= 250000.000000-(f=%15f)f= 250000.000000-(f=%15f)f= 250000.000000-(f=%15f)f= 250000.000000-(f=%15f)

38、f=00250000.000000-(f=%015f)f=00250000.000000-(f=%015f)f=00250000.000000-(f=%015f)f=00250000.000000-(f=%015f)f=250000 -(f=%-15.0f)f=250000 -(f=%-15.0f)f=250000 -(f=%-15.0f)f=250000 -(f=%-15.0f)f= 250000.-(f=%#15.0f)f= 250000.-(f=%#15.0f)f= 250000.-(f=%#15.0f)f= 250000.-(f=%#15.0f)f= +250000.0000-(f=%

39、+15.4f)f= +250000.0000-(f=%+15.4f)f= +250000.0000-(f=%+15.4f)f= +250000.0000-(f=%+15.4f)f= 2.5000E+005-(f=%15.4E)f= 2.5000E+005-(f=%15.4E)f= 2.5000E+005-(f=%15.4E)f= 2.5000E+005-(f=%15.4E)运行结果:运行结果:运行结果:运行结果:13不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理3.3.3.3.字符和字符串的输出字符和字符串的输出字符和字符串的输出字符和字符串的输出 l l

40、 一般形式:一般形式:一般形式:一般形式: :表示可选项,可缺省。表示可选项,可缺省。表示可选项,可缺省。表示可选项,可缺省。 .precision.precision:表示只输出字符串的前表示只输出字符串的前表示只输出字符串的前表示只输出字符串的前precisionprecision个字符。个字符。个字符。个字符。 其它字段的含义与前面介绍的相同。其它字段的含义与前面介绍的相同。其它字段的含义与前面介绍的相同。其它字段的含义与前面介绍的相同。l l 说明:说明:说明:说明: 输出字符:输出字符:输出字符:输出字符: %- 0 width c%- 0 width c 辅助格式控制字符(修饰符)

41、辅助格式控制字符(修饰符)辅助格式控制字符(修饰符)辅助格式控制字符(修饰符) 输出字符串输出字符串输出字符串输出字符串: %- 0 width .precision s %- 0 width .precision s 辅助格式控制字符(修饰符)辅助格式控制字符(修饰符)辅助格式控制字符(修饰符)辅助格式控制字符(修饰符) 14不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理【例【例【例【例】字符及字符串的格式化输出字符及字符串的格式化输出字符及字符串的格式化输出字符及字符串的格式化输出 #include #include intint main ( ) m

42、ain ( ) char char chch = A; = A; printfprintf ( 12345678901234567890n); ( 12345678901234567890n); printfprintf ( (chch=%=%c-(chc-(ch=%=%c)nc)n, , chch); ); printfprintf ( (chch=%4c-(ch=%4c)n, =%4c-(ch=%4c)n, chch); ); printfprintf ( (chch=%-4c-(ch=%-4c)n, =%-4c-(ch=%-4c)n, chch); ); printfprintf ( (

43、chch=%04c-(ch=%04c)n, =%04c-(ch=%04c)n, chch); ); printfprintf ( (st st=%=%s-(sts-(st=%s)n, CCNU);=%s)n, CCNU); printfprintf ( (st st=%6s-(st=%6s)n, CCNU);=%6s-(st=%6s)n, CCNU); printfprintf ( (st st=%06.3s-(st=%06.3s)n, =%06.3s-(st=%06.3s)n, CCNU); CCNU); return 0; return 0; 12345678901234567890123

44、456789012345678901234567890123456789012345678901234567890chchchch=A-(=A-(=A-(=A-(chchchch=%c)=%c)=%c)=%c)chchchch= A-(= A-(= A-(= A-(chchchch=%4c)=%4c)=%4c)=%4c)chchchch=A -(=A -(=A -(=A -(chchchch=%-4c)=%-4c)=%-4c)=%-4c)chchchch=000A-(ch=%04c)=000A-(ch=%04c)=000A-(ch=%04c)=000A-(ch=%04c)stststst=CC

45、NU-(=CCNU-(=CCNU-(=CCNU-(stststst=%s)=%s)=%s)=%s)stststst= CCNU-(= CCNU-(= CCNU-(= CCNU-(stststst=%6s)=%6s)=%6s)=%6s)stststst=000CCN-(st=%06.3s)=000CCN-(st=%06.3s)=000CCN-(st=%06.3s)=000CCN-(st=%06.3s)运行结果:运行结果:运行结果:运行结果:kj3p15.c15不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理4.4.辅助格式控制符辅助格式控制符( (修饰符修饰符

46、) )小结小结 修饰符修饰符功功 能能例例 子子width输出数据域宽,数据长度输出数据域宽,数据长度width,补空格;否则按实际输,补空格;否则按实际输出出%4d:表示输出至少占表示输出至少占4格格.precision对于整数:对于整数:表示至少要输出表示至少要输出precision位,当数据长度小于位,当数据长度小于precision,左边补,左边补0%6.4d:表示至少要输表示至少要输出出4位数位数对于实数:对于实数:指定小数点后位数指定小数点后位数(四舍五入四舍五入)%6.2f:表示输出表示输出2位位小数小数对于字符串:对于字符串:表示只输出字符串的前表示只输出字符串的前precis

47、ion个字符个字符%.3s:表示输出字符表示输出字符串前串前3个字符个字符输出数据在域内左对齐(缺省右对齐)输出数据在域内左对齐(缺省右对齐)%-16d:表示输出数据表示输出数据左对齐左对齐+输出有符号正数时,在其前面显示正号输出有符号正数时,在其前面显示正号(+)%+d:表示输出整数的表示输出整数的正负号正负号0输出数值时,指定左边不使用的空格自动填输出数值时,指定左边不使用的空格自动填0%08X:表示输出十六表示输出十六进制无符号整数,不进制无符号整数,不足足8位时左补位时左补016不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理4.4.辅助格式控制符辅

48、助格式控制符( (修饰符修饰符) )小结小结 修饰符修饰符功功 能能例例 子子#对于无符号数:对于无符号数:在八进制和十六进制数前在八进制和十六进制数前显示前导显示前导0,0x或或0X%#X:表示输出的十表示输出的十六进制前显示前导六进制前显示前导0X对于实数:对于实数:必须输出小数点必须输出小数点%#10.0f:表示输出表示输出的浮点数必须输出小的浮点数必须输出小数点数点h在在d、o、x、u前,指定输出为短整型数前,指定输出为短整型数%hd:表示输出短整表示输出短整型数型数l在在d、o、x、u前,指定输出为前,指定输出为long int型型%ld:表示输出长整表示输出长整型数型数在在e、f、

49、g前,指定输出精度为前,指定输出精度为double型型(缺省也为缺省也为double)%lf:表示输出为表示输出为double型数型数L在在e、f、g前,指定输出精度为前,指定输出精度为long double型型%Lf:表示输出为表示输出为long double型数型数此外,在使用此外,在使用此外,在使用此外,在使用printfprintfprintfprintf函数时还要注意以下几点:函数时还要注意以下几点:函数时还要注意以下几点:函数时还要注意以下几点: 格式控制字符串后面表达式的个数一般要与格式控制字格式控制字符串后面表达式的个数一般要与格式控制字格式控制字符串后面表达式的个数一般要与格

50、式控制字格式控制字符串后面表达式的个数一般要与格式控制字符串中的格式控制符的个数相等。符串中的格式控制符的个数相等。符串中的格式控制符的个数相等。符串中的格式控制符的个数相等。 格式转换符中,除了格式转换符中,除了格式转换符中,除了格式转换符中,除了X X X X、E E E E、G G G G以外,其它均为小写。以外,其它均为小写。以外,其它均为小写。以外,其它均为小写。 表达式的实际数据类型要与格式转换符所表示的类型相表达式的实际数据类型要与格式转换符所表示的类型相表达式的实际数据类型要与格式转换符所表示的类型相表达式的实际数据类型要与格式转换符所表示的类型相符,符,符,符,printfp

51、rintfprintfprintf函数不会进行不同数据类型之间的自动转换。函数不会进行不同数据类型之间的自动转换。函数不会进行不同数据类型之间的自动转换。函数不会进行不同数据类型之间的自动转换。象象象象整型数据不可能自动转换成浮点型数据,浮点型数据也不可整型数据不可能自动转换成浮点型数据,浮点型数据也不可整型数据不可能自动转换成浮点型数据,浮点型数据也不可整型数据不可能自动转换成浮点型数据,浮点型数据也不可能自动转换成型数数据能自动转换成型数数据能自动转换成型数数据能自动转换成型数数据 17不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理【例【例【例【例】错

52、误的格式化输出错误的格式化输出错误的格式化输出错误的格式化输出 #include #include intint main ( ) main ( ) intint a = 10, b = 100; a = 10, b = 100; double y = 2; double y = 2; printfprintf (“y = (“y = %d,%d, b = % b = %dndn, y, b);, y, b); printfprintf (a = (a = %f,%f, b = % b = %dndn, a, b);, a, b); return 0; return 0; y = 2.0000

53、00, b = 100y = 2.000000, b = 100y = 2.000000, b = 100y = 2.000000, b = 100a = 10.000000, b = 100a = 10.000000, b = 100a = 10.000000, b = 100a = 10.000000, b = 100期望的运行结果:期望的运行结果:期望的运行结果:期望的运行结果:y = 0, b = 1073741824y = 0, b = 1073741824y = 0, b = 1073741824y = 0, b = 1073741824a = 0.000000, b = 2012

54、780960a = 0.000000, b = 2012780960a = 0.000000, b = 2012780960a = 0.000000, b = 2012780960实际的运行结果实际的运行结果实际的运行结果实际的运行结果( (VC6.0VC6.0下下下下) ):Why?输出输出输出输出doubledouble型数据型数据型数据型数据y y,却使用了,却使用了,却使用了,却使用了%d%d, a a的不正常输出会影响到的不正常输出会影响到的不正常输出会影响到的不正常输出会影响到下一个表达式的正常输出下一个表达式的正常输出下一个表达式的正常输出下一个表达式的正常输出 输出输出输出输出

55、intint型数据型数据型数据型数据a a,却使用了,却使用了,却使用了,却使用了%f%f , a a的不正常输出会影响到下的不正常输出会影响到下的不正常输出会影响到下的不正常输出会影响到下一个表达式的正常输出一个表达式的正常输出一个表达式的正常输出一个表达式的正常输出 如何修改?如何修改?printfprintf (“y = (“y = %f%f, b = %, b = %dndn, y, b);, y, b);printfprintf (a = %f, b = % (a = %f, b = %dndn, , ( (float)afloat)a, b);, b);kj3p18.c18不向前走

56、,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理3.2 3.2 格式化输入格式化输入scanfscanfintint a; a;scanfscanf (%d, (%d, &a);a); 取地址运算符取地址运算符 一般格式一般格式一般格式一般格式scscscscanfanfanfanf (“(“格式控制字符串格式控制字符串格式控制字符串格式控制字符串” ”,变量,变量,变量,变量1 1的地址,变量的地址,变量的地址,变量的地址,变量2 2的地址,的地址,的地址,的地址,变量,变量,变量,变量n n的地址的地址的地址的地址); ); 功能功能功能功能 第一个参数格式控制

57、字符串的控制下,接受用户的键盘第一个参数格式控制字符串的控制下,接受用户的键盘第一个参数格式控制字符串的控制下,接受用户的键盘第一个参数格式控制字符串的控制下,接受用户的键盘输入,并将输入的数据依此存放在输入,并将输入的数据依此存放在输入,并将输入的数据依此存放在输入,并将输入的数据依此存放在变量变量变量变量1 1 1 1、变量、变量、变量、变量2 2 2 2、变、变、变、变量量量量n n n n中中中中 。 格式控制符与后续参数中的变量地址的对应关系格式控制符与后续参数中的变量地址的对应关系格式控制符与后续参数中的变量地址的对应关系格式控制符与后续参数中的变量地址的对应关系 已已已已 知:知

58、:知:知: intint a , b; a , b;函数调用:函数调用:函数调用:函数调用: scanfscanf (% (%d%dd%d, &a , &b);, &a , &b);假设输入:假设输入:假设输入:假设输入: 10201020 变量的值:变量的值:变量的值:变量的值: a a的值是的值是的值是的值是1010,b b的值是的值是的值是的值是202019不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理 scanfscanfscanfscanf函数的格式控制符函数的格式控制符函数的格式控制符函数的格式控制符 %* width l | h Type%*

59、 width l | h Typel l 一般形式:一般形式:一般形式:一般形式:l l 说明:说明:说明:说明: :表示可选项,可缺省。表示可选项,可缺省。表示可选项,可缺省。表示可选项,可缺省。| |表示互斥关系。表示互斥关系。表示互斥关系。表示互斥关系。 widthwidth:指定输入数据的域宽,指定输入数据的域宽,指定输入数据的域宽,指定输入数据的域宽,遇空格或不可转换字符则结遇空格或不可转换字符则结遇空格或不可转换字符则结遇空格或不可转换字符则结束。束。束。束。 TypeType:各种格式转换符(参照各种格式转换符(参照各种格式转换符(参照各种格式转换符(参照printfprintf

60、)。)。)。)。 * *:抑制符,输入的数据不会赋值给相应的变量。抑制符,输入的数据不会赋值给相应的变量。抑制符,输入的数据不会赋值给相应的变量。抑制符,输入的数据不会赋值给相应的变量。 l l:用于用于用于用于d d、u u、o o、x|Xx|X前,指定输入为前,指定输入为前,指定输入为前,指定输入为longlong型整数;用于型整数;用于型整数;用于型整数;用于e|Ee|E、f f前,指定输入为前,指定输入为前,指定输入为前,指定输入为doubledouble型实数。型实数。型实数。型实数。 h h:用于用于用于用于d d、u u、o o、x|Xx|X前,指定输入为前,指定输入为前,指定输

61、入为前,指定输入为shortshort型整数。型整数。型整数。型整数。3.2 3.2 格式化输入格式化输入scanfscanf20不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理 使用使用使用使用scanfscanfscanfscanf函数注意事项函数注意事项函数注意事项函数注意事项 (1) (1) (1) (1) 如果相邻两个格式控制符之间,不指定数据分隔符如果相邻两个格式控制符之间,不指定数据分隔符如果相邻两个格式控制符之间,不指定数据分隔符如果相邻两个格式控制符之间,不指定数据分隔符(如逗号、冒号等),则相应的两个输入数据之间,(如逗号、冒号等),则相

62、应的两个输入数据之间,(如逗号、冒号等),则相应的两个输入数据之间,(如逗号、冒号等),则相应的两个输入数据之间,至少用至少用至少用至少用一个空格分隔,或者用一个空格分隔,或者用一个空格分隔,或者用一个空格分隔,或者用TabTabTabTab键分隔,或者输入一个数据后,键分隔,或者输入一个数据后,键分隔,或者输入一个数据后,键分隔,或者输入一个数据后,按回车按回车按回车按回车,然后再输入下一个数据。,然后再输入下一个数据。,然后再输入下一个数据。,然后再输入下一个数据。 (2) (2) (2) (2) 格式控制字符串中出现的常规字符(包括转义字符)格式控制字符串中出现的常规字符(包括转义字符)

63、格式控制字符串中出现的常规字符(包括转义字符)格式控制字符串中出现的常规字符(包括转义字符),务必原样输入。,务必原样输入。,务必原样输入。,务必原样输入。 (3) (3) (3) (3) 为改善人机交互性,同时简化输入操作,在设计输为改善人机交互性,同时简化输入操作,在设计输为改善人机交互性,同时简化输入操作,在设计输为改善人机交互性,同时简化输入操作,在设计输入操作时,一般先用入操作时,一般先用入操作时,一般先用入操作时,一般先用printfprintfprintfprintf( )( )( )( )函数输出一个提示信息,再函数输出一个提示信息,再函数输出一个提示信息,再函数输出一个提示信

64、息,再用用用用scanfscanfscanfscanf( )( )( )( )函数进行数据输入函数进行数据输入函数进行数据输入函数进行数据输入 。 (4) (4) (4) (4) 当格式控制字符串中指定了输入数据的域宽当格式控制字符串中指定了输入数据的域宽当格式控制字符串中指定了输入数据的域宽当格式控制字符串中指定了输入数据的域宽widthwidthwidthwidth时,将读取输入数据中相应的时,将读取输入数据中相应的时,将读取输入数据中相应的时,将读取输入数据中相应的widthwidthwidthwidth位,但按需要的位数赋位,但按需要的位数赋位,但按需要的位数赋位,但按需要的位数赋给相

65、应的变量,多余部分被舍弃。给相应的变量,多余部分被舍弃。给相应的变量,多余部分被舍弃。给相应的变量,多余部分被舍弃。 例如:例如:例如:例如: scanfscanf (% (%d%dd%d, &num1, &num2);, &num1, &num2); 假设给假设给假设给假设给num1num1输入输入输入输入1212,给,给,给,给num2num2输入输入输入输入3636,则正确的输入操作为:,则正确的输入操作为:,则正确的输入操作为:,则正确的输入操作为: 12361236 或者或者或者或者 1212 36 36 使用使用使用使用“ “ ” ”符号表示按回车键操作,在输入数据操作中的作用符号

66、表示按回车键操作,在输入数据操作中的作用符号表示按回车键操作,在输入数据操作中的作用符号表示按回车键操作,在输入数据操作中的作用是,通知系统输入操作结束。是,通知系统输入操作结束。是,通知系统输入操作结束。是,通知系统输入操作结束。例如:例如:例如:例如: scanfscanf (% (%d:%d:%dd:%d:%d, &h, &m, &s); , &h, &m, &s); 假设给假设给假设给假设给h h输入输入输入输入1212,给,给,给,给mm输入输入输入输入3030,给,给,给,给s s输入输入输入输入1010,正确的输入操作为:,正确的输入操作为:,正确的输入操作为:,正确的输入操作为

67、: 12:30:1012:30:10 例如:例如:例如:例如: scanfscanf (num1=%d, num2=% (num1=%d, num2=%dndn, &num1, &num2);, &num1, &num2); 假设给假设给假设给假设给num1num1输入输入输入输入1212,给,给,给,给num2num2输入输入输入输入3636,正确的输入操作为:,正确的输入操作为:,正确的输入操作为:,正确的输入操作为: num1=12num1=12,num2=36nnum2=36n 例如:例如:例如:例如: 将将将将scanfscanf (num1=%d, num2=% (num1=%d,

68、 num2=%dndn, &num1, &num2); , &num1, &num2); 改为:改为:改为:改为: printfprintf (num1=); (num1=); scanfscanf (%d, &num1); (%d, &num1); printfprintf (num2=); (num2=); scanfscanf (%d, &num2); (%d, &num2);例如:例如:例如:例如: scanfscanf (%3c%3c, &ch1, &ch2); (%3c%3c, &ch1, &ch2); 假设输入假设输入假设输入假设输入abcdefgabcdefg ,则系统将读取的

69、,则系统将读取的,则系统将读取的,则系统将读取的“ “abcabc” ”中的中的中的中的aa赋给变量赋给变量赋给变量赋给变量ch1ch1;将读取的;将读取的;将读取的;将读取的defdef中的中的中的中的dd赋给变量赋给变量赋给变量赋给变量ch2ch2。Kj3p21.exe21不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理 使用使用使用使用scanfscanfscanfscanf函数注意事项函数注意事项函数注意事项函数注意事项 (5) (5) (5) (5) 当格式控制字符串中含有抑制符当格式控制字符串中含有抑制符当格式控制字符串中含有抑制符当格式控制字符

70、串中含有抑制符 * * * * 时,表示本输入时,表示本输入时,表示本输入时,表示本输入项对应的数据读入后,不赋给相应的变量(该变量由下一个格项对应的数据读入后,不赋给相应的变量(该变量由下一个格项对应的数据读入后,不赋给相应的变量(该变量由下一个格项对应的数据读入后,不赋给相应的变量(该变量由下一个格式指示符输入)。式指示符输入)。式指示符输入)。式指示符输入)。 (6) (6) (6) (6) 使用格式控制符使用格式控制符使用格式控制符使用格式控制符%c%c%c%c输入单个字符时,空格和转义字符输入单个字符时,空格和转义字符输入单个字符时,空格和转义字符输入单个字符时,空格和转义字符均作为

71、有效字符被输入。均作为有效字符被输入。均作为有效字符被输入。均作为有效字符被输入。 (7) (7) (7) (7) 输入数据时,遇到以下情况,系统认为该数据结束:输入数据时,遇到以下情况,系统认为该数据结束:输入数据时,遇到以下情况,系统认为该数据结束:输入数据时,遇到以下情况,系统认为该数据结束: 遇到空格,或者回车键,或者遇到空格,或者回车键,或者遇到空格,或者回车键,或者遇到空格,或者回车键,或者TabTabTabTab键。键。键。键。 遇到输入域宽度结束。例如遇到输入域宽度结束。例如遇到输入域宽度结束。例如遇到输入域宽度结束。例如“ “%3d%3d%3d%3d” ”,只取,只取,只取,

72、只取3 3 3 3列。列。列。列。 遇到非法输入。比方说,在输入数值数据时,遇到字母等非数值符号。遇到非法输入。比方说,在输入数值数据时,遇到字母等非数值符号。遇到非法输入。比方说,在输入数值数据时,遇到字母等非数值符号。遇到非法输入。比方说,在输入数值数据时,遇到字母等非数值符号。 (8) (8) (8) (8) 当一次当一次当一次当一次scanfscanfscanfscanf调用需要输入多个数据项时,如果前面数调用需要输入多个数据项时,如果前面数调用需要输入多个数据项时,如果前面数调用需要输入多个数据项时,如果前面数据的输入遇到非法字符,并且输入的非法字符不是格式控制字据的输入遇到非法字符

73、,并且输入的非法字符不是格式控制字据的输入遇到非法字符,并且输入的非法字符不是格式控制字据的输入遇到非法字符,并且输入的非法字符不是格式控制字符串中的常规字符,那么,这种非法输入将影响后面数据的输符串中的常规字符,那么,这种非法输入将影响后面数据的输符串中的常规字符,那么,这种非法输入将影响后面数据的输符串中的常规字符,那么,这种非法输入将影响后面数据的输入,导致数据输入失败。入,导致数据输入失败。入,导致数据输入失败。入,导致数据输入失败。例如:例如:例如:例如: scanfscanf (%2d%*2d%3d, &num1, &num2); (%2d%*2d%3d, &num1, &num2

74、); printfprintf (num1=%d, num2=% (num1=%d, num2=%dndn, num1, num2);, num1, num2); 假设输入假设输入假设输入假设输入123456789123456789 输出结果为:输出结果为:输出结果为:输出结果为:num1=12, num2=567num1=12, num2=567。 例如:例如:例如:例如: scanfscanf (% (%c%c%cc%c%c, &ch1, &ch2, &ch3);, &ch1, &ch2, &ch3); 假设输入:假设输入:假设输入:假设输入:ABCABC ,则系统将字母,则系统将字母,则

75、系统将字母,则系统将字母AA赋值给赋值给赋值给赋值给ch1ch1,空格,空格,空格,空格赋赋赋赋值给值给值给值给ch2ch2,字母,字母,字母,字母BB赋值给赋值给赋值给赋值给ch3ch3。 例如:例如:例如:例如: scanfscanf (%d, &a); (%d, &a); 如果输入为:如果输入为:如果输入为:如果输入为:12a312a3 ,a a的值将是的值将是的值将是的值将是1212。例如:例如:例如:例如: scanfscanf (% (%d,%dd,%d, &a, &b);, &a, &b); 如果输入为:如果输入为:如果输入为:如果输入为:12a3412a34 ,那么,那么,那么

76、,那么a a的值将是的值将是的值将是的值将是1212,b b的值将无法预测。的值将无法预测。的值将无法预测。的值将无法预测。 正确的输入是:正确的输入是:正确的输入是:正确的输入是:1212,3434 Kj3p22.exe22不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理【例【例【例【例】数据的格式化输入数据的格式化输入数据的格式化输入数据的格式化输入 输入一学生的学号(输入一学生的学号(输入一学生的学号(输入一学生的学号(8 8位数字)、生日(年位数字)、生日(年位数字)、生日(年位数字)、生日(年- -月月月月- -日)、性别(日)、性别(日)、性别(

77、日)、性别(MM:男,:男,:男,:男,F F:女)及三门功课(语文、数学、英语)的成绩,现要求计算该学生的:女)及三门功课(语文、数学、英语)的成绩,现要求计算该学生的:女)及三门功课(语文、数学、英语)的成绩,现要求计算该学生的:女)及三门功课(语文、数学、英语)的成绩,现要求计算该学生的总分和平均分,并将该学生的全部信息输出(包括总分、平均分)。总分和平均分,并将该学生的全部信息输出(包括总分、平均分)。总分和平均分,并将该学生的全部信息输出(包括总分、平均分)。总分和平均分,并将该学生的全部信息输出(包括总分、平均分)。#include #include intint main ( )

78、 main ( ) unsigned unsigned intint no; no; / /学号学号学号学号 unsigned unsigned intint year, month, day; year, month, day; / /生日(年、月、日)生日(年、月、日)生日(年、月、日)生日(年、月、日) unsigned char sex; unsigned char sex; / /性别性别性别性别 double double chinesechinese, math, , math, englishenglish; ; / /语文、数学、英语成绩语文、数学、英语成绩语文、数学、英语成

79、绩语文、数学、英语成绩 double total, average; double total, average; / /总分、平均分总分、平均分总分、平均分总分、平均分 printfprintf (input the students NO: ); (input the students NO: ); scanfscanf (%8d, &no); (%8d, &no); printfprintf (input the students (input the students Birthday(yyyy-mm-ddBirthday(yyyy-mm-dd): );): ); scanfscanf

80、 (%4d-%2d-%2d, &year, &month, &day); (%4d-%2d-%2d, &year, &month, &day); fflushfflush ( (stdinstdin); ); / /清除键盘缓冲区清除键盘缓冲区清除键盘缓冲区清除键盘缓冲区 printfprintf (input the students (input the students Sex(MSex(M/F): );/F): ); scanfscanf (%c, &sex); (%c, &sex); printfprintf (input the students (input the studen

81、ts Scores(chineseScores(chinese, math, , math, englishenglish): );): ); scanfscanf (% (%lf,%lf,%lflf,%lf,%lf, &, &chinesechinese, &math, &, &math, &englishenglish); ); total = total = chinesechinese + math + + math + englishenglish; ; /计算总分计算总分计算总分计算总分 average = total / 3; average = total / 3; /计算平均

82、分计算平均分计算平均分计算平均分 printfprintf (n=NO=birthday=sex= (n=NO=birthday=sex=chinesechinese=math=math= englishenglish=total=averagen);=total=averagen); printfprintf (%08d %4d-%02d-%02d %c %-5.1f (%08d %4d-%02d-%02d %c %-5.1f %-5.1f%-5.1f %-5.1f %-5.1f %-5.1f%-5.1f %-5.1fn, no, year, month, day, sex, %-5.1fn

83、, no, year, month, day, sex, chinesechinese, math, , math, englishenglish, total, average);, total, average); return 0; return 0; 假设输入假设输入假设输入假设输入 :input the students NOinput the students NO:0903567809035678 input the students input the students Birthday(yyyy-mm-ddBirthday(yyyy-mm-dd) ):1991-9-81991

84、-9-8 input the students input the students Sex(MSex(M/F)/F):MM input the students input the students Scores(chineseScores(chinese, math, , math, englishenglish) ):9090,8080,9090 输出结果输出结果输出结果输出结果 :=NO=birthday=sex=NO=birthday=sex=NO=birthday=sex=NO=birthday=sex=chinesechinesechinesechinese=math=math=

85、math=math=englishenglishenglishenglish=total=average=total=average=total=average=total=average09035678 1991-09-08 M 90.0 80.0 90.0 260.0 86.709035678 1991-09-08 M 90.0 80.0 90.0 260.0 86.709035678 1991-09-08 M 90.0 80.0 90.0 260.0 86.709035678 1991-09-08 M 90.0 80.0 90.0 260.0 86.7Kj3p23.exe23不向前走,不

86、知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理3.3 3.3 字符数据的非格式化输入、输出字符数据的非格式化输入、输出 1. 1. 字符数据的非格式化输入字符数据的非格式化输入字符数据的非格式化输入字符数据的非格式化输入intint getchargetchar ( void ); ( void ); / /应包含的应包含的应包含的应包含的.h.h文件为文件为文件为文件为stdio.hstdio.h 与输入字符数据有关的常用库函数主要有:与输入字符数据有关的常用库函数主要有:与输入字符数据有关的常用库函数主要有:与输入字符数据有关的常用库函数主要有: getcharg

87、etchar、getcgetc、getchegetche、getchgetch等。等。等。等。 getchargetchar 功能:功能:功能:功能:从键盘读一字符从键盘读一字符从键盘读一字符从键盘读一字符 返值:返值:返值:返值:正常,返回读取字符正常,返回读取字符正常,返回读取字符正常,返回读取字符的的的的ASCIIASCIIASCIIASCII码值;出错码值;出错码值;出错码值;出错, , , ,返回返回返回返回EOF(-1)EOF(-1)EOF(-1)EOF(-1)。 说明:说明:说明:说明:以回车符为输入结束条件;输入多个字符以回车符为输入结束条件;输入多个字符以回车符为输入结束条件

88、;输入多个字符以回车符为输入结束条件;输入多个字符时,返回第一个字符的值;输入时,返回第一个字符的值;输入时,返回第一个字符的值;输入时,返回第一个字符的值;输入字符回显字符回显字符回显字符回显。24不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理【例【例【例【例】利用利用利用利用getchargetchargetchargetchar输入字符输入字符输入字符输入字符 #include #include intint main ( ) main ( ) char ch1, ch2; char ch1, ch2; intint a; a; ch1 = ch1

89、= getchargetchar ( ); ( ); ch2 = ch2 = getchargetchar ( ); ( ); scanfscanf (%d, &a); (%d, &a); printfprintf (ch1 = %c, ch2 = % (ch1 = %c, ch2 = %cncn, ch1, ch2);, ch1, ch2); printfprintf (a = % (a = %dndn, a);, a); return 0; return 0; ch1 = 1, ch2 = 2ch1 = 1, ch2 = 2a = 34a = 34运行结果运行结果运行结果运行结果(假设输入

90、为:(假设输入为:(假设输入为:(假设输入为:1234123412341234):):):): Kj3p25.exe25不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理库函数名库函数名功功 能能函数原型所在头文件函数原型所在头文件getchar接受一字符输入,以回车键结接受一字符输入,以回车键结束,回显束,回显stdio.hgetc从输入流中接受一字符,以回从输入流中接受一字符,以回车键结束,回显车键结束,回显stdio.hgetche接受一字符输入,输入字符后接受一字符输入,输入字符后就结束,回显就结束,回显conio.hgetch接受一字符输入,输入字符

91、后接受一字符输入,输入字符后就结束,不回显就结束,不回显conio.h与输入字符数据有关的库函数功能比较与输入字符数据有关的库函数功能比较: 26不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理2. 2. 字符数据的非格式化输出字符数据的非格式化输出字符数据的非格式化输出字符数据的非格式化输出intint putcharputchar ( ( intint c ); c ); / /应包含的应包含的应包含的应包含的.h.h文件为文件为文件为文件为stdio.hstdio.h 与输出字符数据有关的常用库函数主要有:与输出字符数据有关的常用库函数主要有:与输出字

92、符数据有关的常用库函数主要有:与输出字符数据有关的常用库函数主要有: putcharputchar、putcputc、putsputs等。等。等。等。 putcharputchar 功能:功能:功能:功能:在显示器上输出字符在显示器上输出字符在显示器上输出字符在显示器上输出字符c c c c。 返值:返值:返值:返值:正常,返回字符正常,返回字符正常,返回字符正常,返回字符的代码的代码的代码的代码值;出错值;出错值;出错值;出错, , , ,返回返回返回返回EOFEOFEOFEOF(-1)(-1)(-1)(-1)。 说明:说明:说明:说明:该函数带有一个参数该函数带有一个参数该函数带有一个参数

93、该函数带有一个参数c c c c,它为要显示字符的,它为要显示字符的,它为要显示字符的,它为要显示字符的ASCIIASCIIASCIIASCII码值,有一个码值,有一个码值,有一个码值,有一个intintintint型返回值型返回值型返回值型返回值 。3.3 3.3 字符数据的非格式化输入、输出字符数据的非格式化输入、输出 27不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理 putsputsintint puts ( char *string ); puts ( char *string ); / /应包含的应包含的应包含的应包含的.h.h文件为文件为文件

94、为文件为stdio.hstdio.h 功能:功能:功能:功能:将字符串将字符串将字符串将字符串stringstringstringstring的所有字符输出到屏幕上,的所有字符输出到屏幕上,的所有字符输出到屏幕上,的所有字符输出到屏幕上,输出时将输出时将输出时将输出时将自动回车换行自动回车换行自动回车换行自动回车换行。 28不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理【例【例【例【例】利用字符输出函数输出字符利用字符输出函数输出字符利用字符输出函数输出字符利用字符输出函数输出字符 #include #include intint main ( ) mai

95、n ( ) intint a = 65; a = 65; char b = B; char b = B; putcharputchar (a); (a); /不自动回车不自动回车不自动回车不自动回车 putcharputchar (n); (n); puts (“is as good as ”); puts (“is as good as ”); /自动回车自动回车自动回车自动回车 putcharputchar (b); (b); return 0; return 0; A Ais as good asis as good asB B运行结果运行结果运行结果运行结果: 29不向前走,不知路远;

96、不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理3.4 3.4 程序的控制结构程序的控制结构 1. 1. 算法的基本概念算法的基本概念算法的基本概念算法的基本概念 程序程序程序程序 = = = = 数据结构数据结构数据结构数据结构 + + + + 算法。算法。算法。算法。 算法:算法:算法:算法:简而言之,就是解决问题的方法与步骤。简而言之,就是解决问题的方法与步骤。简而言之,就是解决问题的方法与步骤。简而言之,就是解决问题的方法与步骤。 程序设计语言:程序设计语言:程序设计语言:程序设计语言:是程序开发工具,即是将算法转化为是程序开发工具,即是将算法转化为是程序开发工具,即是

97、将算法转化为是程序开发工具,即是将算法转化为程序的开发工具。程序的开发工具。程序的开发工具。程序的开发工具。 程序:程序:程序:程序:算法的具体实现。算法的具体实现。算法的具体实现。算法的具体实现。 学习学习学习学习C C C C语言,不仅要熟练掌握其语言本身的特点、语言,不仅要熟练掌握其语言本身的特点、语言,不仅要熟练掌握其语言本身的特点、语言,不仅要熟练掌握其语言本身的特点、语法规则等意义外,更重要的就是掌握分析问题、解决语法规则等意义外,更重要的就是掌握分析问题、解决语法规则等意义外,更重要的就是掌握分析问题、解决语法规则等意义外,更重要的就是掌握分析问题、解决问题的方法,就是锻炼分析、

98、分解,最终归纳整理出算问题的方法,就是锻炼分析、分解,最终归纳整理出算问题的方法,就是锻炼分析、分解,最终归纳整理出算问题的方法,就是锻炼分析、分解,最终归纳整理出算法的能力。法的能力。法的能力。法的能力。 30不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理2. 2. 2. 2. 设计算法举例设计算法举例设计算法举例设计算法举例 【例【例【例【例1 1 1 1】输入三个数,然后输出其中最大的数输入三个数,然后输出其中最大的数输入三个数,然后输出其中最大的数输入三个数,然后输出其中最大的数 。 总体思路:总体思路:总体思路:总体思路: 首先,得先有个地方装这

99、三个数,我们定义三个变量首先,得先有个地方装这三个数,我们定义三个变量首先,得先有个地方装这三个数,我们定义三个变量首先,得先有个地方装这三个数,我们定义三个变量A A、B B、C C,将三,将三,将三,将三个数依次输入到、个数依次输入到、个数依次输入到、个数依次输入到、B B、C C中,另外,再准备一个中,另外,再准备一个中,另外,再准备一个中,另外,再准备一个MAXMAX装最大数。装最大数。装最大数。装最大数。 由于计算机一次只能比较两个数,我们首先把由于计算机一次只能比较两个数,我们首先把由于计算机一次只能比较两个数,我们首先把由于计算机一次只能比较两个数,我们首先把A A与与与与B B

100、比,大的数放入比,大的数放入比,大的数放入比,大的数放入MAXMAX中,再把中,再把中,再把中,再把MAXMAX与与与与C C比,又把大的数放入比,又把大的数放入比,又把大的数放入比,又把大的数放入MAXMAX中。中。中。中。 最后,把最后,把最后,把最后,把MAXMAX输出,此时输出,此时输出,此时输出,此时MAXMAX中装的就是、中装的就是、中装的就是、中装的就是、C C三数中最大的一三数中最大的一三数中最大的一三数中最大的一个数。个数。个数。个数。 具体步骤:具体步骤:具体步骤:具体步骤: (1) (1) 输入输入输入输入A A、B B、C C。 (2) A(2) A与与与与B B中大的

101、一个放入中大的一个放入中大的一个放入中大的一个放入MAXMAX中。中。中。中。 (3) (3) 把把把把C C与与与与MAXMAX中大的一个放入中大的一个放入中大的一个放入中大的一个放入MAXMAX中。中。中。中。 (4) (4) 输出输出输出输出MAXMAX,MAXMAX即为最大数。即为最大数。即为最大数。即为最大数。 其中的其中的其中的其中的(2)(2)、(3)(3)两步仍不明确,无法直接转化为程序语句,可以继续两步仍不明确,无法直接转化为程序语句,可以继续两步仍不明确,无法直接转化为程序语句,可以继续两步仍不明确,无法直接转化为程序语句,可以继续细化:细化:细化:细化: (2) (2)

102、把把把把A A与与与与B B中大的一个放入中大的一个放入中大的一个放入中大的一个放入MAXMAX中,若中,若中,若中,若A BA B,则,则,则,则MAX AMAX A;否则;否则;否则;否则MAX BMAX B。 (3) (3) 把把把把C C与与与与MAXMAX中大的一个放入中大的一个放入中大的一个放入中大的一个放入MAXMAX中,若中,若中,若中,若C MAXC MAX,则,则,则,则MAX CMAX C。 算法最后可以写成:算法最后可以写成:算法最后可以写成:算法最后可以写成: (1) (1) (1) (1) 输入输入输入输入A A A A,B B B B,C C C C。 (2) (

103、2) (2) (2) 若若若若A BA BA BA B,则,则,则,则MAX AMAX AMAX AMAX A;否则;否则;否则;否则MAXBMAXBMAXBMAXB。 (3) (3) (3) (3) 若若若若C MAXC MAXC MAXC MAX,则,则,则,则MAX CMAX CMAX CMAX C。 (4) (4) (4) (4) 输出输出输出输出MAXMAXMAXMAX,MAXMAXMAXMAX即为最大数即为最大数即为最大数即为最大数 31不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理2. 2. 2. 2. 设计算法举例设计算法举例设计算法举例设

104、计算法举例 【例【例【例【例2 2 2 2】猴子吃桃问题:有一堆桃子不知数目,猴子第一天吃掉一猴子吃桃问题:有一堆桃子不知数目,猴子第一天吃掉一猴子吃桃问题:有一堆桃子不知数目,猴子第一天吃掉一猴子吃桃问题:有一堆桃子不知数目,猴子第一天吃掉一半,觉得不过瘾,又多吃了一只,第二天照此办理,吃掉剩下桃子的一半,觉得不过瘾,又多吃了一只,第二天照此办理,吃掉剩下桃子的一半,觉得不过瘾,又多吃了一只,第二天照此办理,吃掉剩下桃子的一半,觉得不过瘾,又多吃了一只,第二天照此办理,吃掉剩下桃子的一半另加一个,天天如此,到第十天早上,猴子发现只剩一只桃子了,问半另加一个,天天如此,到第十天早上,猴子发现只

105、剩一只桃子了,问半另加一个,天天如此,到第十天早上,猴子发现只剩一只桃子了,问半另加一个,天天如此,到第十天早上,猴子发现只剩一只桃子了,问这堆桃子原来有多少个?这堆桃子原来有多少个?这堆桃子原来有多少个?这堆桃子原来有多少个? 总体思路:总体思路:总体思路:总体思路: 假设第一天开始时有假设第一天开始时有假设第一天开始时有假设第一天开始时有a a1 1只桃子,第二天有只桃子,第二天有只桃子,第二天有只桃子,第二天有a a2 2只,只,只,只,第,第,第,第9 9天有天有天有天有a a9 9只,只,只,只,第第第第1010天是天是天是天是a a1010只,在只,在只,在只,在a a1 1,a

106、a2 2,,a a1010中,只有中,只有中,只有中,只有a a1010 = 1 = 1是知道的,现要求是知道的,现要求是知道的,现要求是知道的,现要求a a1 1,而我们可以看出,而我们可以看出,而我们可以看出,而我们可以看出,a a1 1,a a2 2,,a a1010之间存在一个简单的关系:之间存在一个简单的关系:之间存在一个简单的关系:之间存在一个简单的关系: a a9 9 = 2 * ( a = 2 * ( a1010 + 1 ) + 1 ) a a8 8 = 2 * ( a = 2 * ( a9 9 + 1 ) + 1 ) a a1 1 = 2 * ( a = 2 * ( a2 2

107、 + 1 ) + 1 ) 也就是:也就是:也就是:也就是:a ai i = 2 * ( a= 2 * ( ai+1i+1 + 1) i = 9,8,7,6,1 + 1) i = 9,8,7,6,1 这就是此题的数学模型。这就是此题的数学模型。这就是此题的数学模型。这就是此题的数学模型。 再考察上面从再考察上面从再考察上面从再考察上面从a a9 9,a a8 8直至直至直至直至a a1 1的计算过程,这其实是一个递推过程,的计算过程,这其实是一个递推过程,的计算过程,这其实是一个递推过程,的计算过程,这其实是一个递推过程,这种递推的方法在计算机解题中经常用到。另一方面,这九步运算从形这种递推的方

108、法在计算机解题中经常用到。另一方面,这九步运算从形这种递推的方法在计算机解题中经常用到。另一方面,这九步运算从形这种递推的方法在计算机解题中经常用到。另一方面,这九步运算从形式上完全一样,不同的只是式上完全一样,不同的只是式上完全一样,不同的只是式上完全一样,不同的只是a ai i的下标而已。由此,我们引入循环的处理的下标而已。由此,我们引入循环的处理的下标而已。由此,我们引入循环的处理的下标而已。由此,我们引入循环的处理方法,并统一用方法,并统一用方法,并统一用方法,并统一用a a0 0表示前一天的桃子数,表示前一天的桃子数,表示前一天的桃子数,表示前一天的桃子数,a a1 1表示后一天的桃

109、子数。表示后一天的桃子数。表示后一天的桃子数。表示后一天的桃子数。 算法最后可以写成:算法最后可以写成:算法最后可以写成:算法最后可以写成: (1) a(1) a1 1 = 1 = 1 第第第第1010天的桃子数,天的桃子数,天的桃子数,天的桃子数,a1a1的初值的初值的初值的初值 i = 9 i = 9 计数器初值为计数器初值为计数器初值为计数器初值为9 9 (2) a(2) a0 0 = 2 * ( a = 2 * ( a1 1+ 1 ) + 1 ) 计算当天的桃子数计算当天的桃子数计算当天的桃子数计算当天的桃子数 (3) a(3) a1 1 = a = a0 0 将当天的桃子数作为下一次

110、计算的初值将当天的桃子数作为下一次计算的初值将当天的桃子数作为下一次计算的初值将当天的桃子数作为下一次计算的初值 (4) i = i - 1(4) i = i - 1 (5) (5) 若若若若i = 1i = 1,转,转,转,转(2)(2) (6) (6) 输出输出输出输出a a0 0的值的值的值的值 其中其中其中其中(2) (2) (5)(5)步为循环步为循环步为循环步为循环 32不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理3. 3. 3. 3. 流程图与算法的结构化描述流程图与算法的结构化描述流程图与算法的结构化描述流程图与算法的结构化描述 流程图流

111、程图流程图流程图起止框起止框判断框判断框输入、输出框输入、输出框注释框注释框处理框处理框连接点连接点流程线流程线_常见流程图符号常见流程图符号常见流程图符号常见流程图符号【例例2 2】的算法的流程图的算法的流程图开开 始始i = 9a1 = 1i 1i = i - 1a0 = 2*(a1+1)a1 = a0输出输出a0结结 束束T【例例1 1】的算法的流程图的算法的流程图MAX AMAX BA B输入输入A, B, CA, B, C开开 始始MAX C输出输出MAX结结 束束C MAXTTFF33不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理3. 3. 3

112、. 3. 流程图与算法的结构化描述流程图与算法的结构化描述流程图与算法的结构化描述流程图与算法的结构化描述 算法的结构化描述算法的结构化描述算法的结构化描述算法的结构化描述(1) (1) 顺序结构顺序结构顺序结构顺序结构ABCA条件条件ABTF(2) (2) 分支结构分支结构分支结构分支结构条件条件TF(3) (3) 循环结构循环结构循环结构循环结构ATF条件条件A条件条件TF34不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理4.5 4.5 顺序顺序程序设计举例程序设计举例 【例例例例1 1 1 1】任意从键盘输入一个三位整数,要求正确地分任意从键盘输入一

113、个三位整数,要求正确地分任意从键盘输入一个三位整数,要求正确地分任意从键盘输入一个三位整数,要求正确地分离出它的个位、十位和百位数,并分别在屏幕上输出。离出它的个位、十位和百位数,并分别在屏幕上输出。离出它的个位、十位和百位数,并分别在屏幕上输出。离出它的个位、十位和百位数,并分别在屏幕上输出。 程序设计的分析:程序设计的分析:程序设计的分析:程序设计的分析: 本例要求设计一个从三位整数中分离出它的个位、十位和百位数的本例要求设计一个从三位整数中分离出它的个位、十位和百位数的本例要求设计一个从三位整数中分离出它的个位、十位和百位数的本例要求设计一个从三位整数中分离出它的个位、十位和百位数的算法

114、。例如,输入的是算法。例如,输入的是算法。例如,输入的是算法。例如,输入的是456456456456,则输出的分别是,则输出的分别是,则输出的分别是,则输出的分别是4 4 4 4、5 5 5 5、6 6 6 6,最低位数字可用对,最低位数字可用对,最低位数字可用对,最低位数字可用对10101010求余的方法得到,如求余的方法得到,如求余的方法得到,如求余的方法得到,如456%10=6456%10=6456%10=6456%10=6,最高位的百位数字可用对,最高位的百位数字可用对,最高位的百位数字可用对,最高位的百位数字可用对100100100100整除的方整除的方整除的方整除的方法得到,如法得

115、到,如法得到,如法得到,如456/100=4456/100=4456/100=4456/100=4,中间位的数字既可通过将其变换为最高位后再整,中间位的数字既可通过将其变换为最高位后再整,中间位的数字既可通过将其变换为最高位后再整,中间位的数字既可通过将其变换为最高位后再整除的方法得到,如除的方法得到,如除的方法得到,如除的方法得到,如(456-4*100)/10=5(456-4*100)/10=5(456-4*100)/10=5(456-4*100)/10=5,也可通过将其变换为最低位再求余,也可通过将其变换为最低位再求余,也可通过将其变换为最低位再求余,也可通过将其变换为最低位再求余的方法

116、得到,如的方法得到,如的方法得到,如的方法得到,如(456/10)%10=5(456/10)%10=5(456/10)%10=5(456/10)%10=5。 根据以上的分析,这个程序应这样设计:根据以上的分析,这个程序应这样设计:根据以上的分析,这个程序应这样设计:根据以上的分析,这个程序应这样设计: (1) (1) (1) (1) 定义一个整型变量定义一个整型变量定义一个整型变量定义一个整型变量x x x x,用于存放用户输入的一个三位整数;再定,用于存放用户输入的一个三位整数;再定,用于存放用户输入的一个三位整数;再定,用于存放用户输入的一个三位整数;再定义三个整型变量义三个整型变量义三个

117、整型变量义三个整型变量b0b0b0b0、b1b1b1b1、b2b2b2b2,用于存放计算后个位、十位和百位数。,用于存放计算后个位、十位和百位数。,用于存放计算后个位、十位和百位数。,用于存放计算后个位、十位和百位数。 (2) (2) (2) (2) 调用调用调用调用scanfscanfscanfscanf函数输入该三位整数。函数输入该三位整数。函数输入该三位整数。函数输入该三位整数。 (3) (3) (3) (3) 利用上述计算方法计算该数的个位、十位和百位数。利用上述计算方法计算该数的个位、十位和百位数。利用上述计算方法计算该数的个位、十位和百位数。利用上述计算方法计算该数的个位、十位和百

118、位数。 (4) (4) (4) (4) 输出计算后的结果。输出计算后的结果。输出计算后的结果。输出计算后的结果。35不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理#include #include intint main ( ) main ( ) intint x, b0, b1, b2; x, b0, b1, b2; /变量定义变量定义变量定义变量定义 printfprintf (please input an integer x: ); (please input an integer x: ); /提示用户输入一个整数提示用户输入一个整数提示用户输入

119、一个整数提示用户输入一个整数 scanfscanf (%d, &x); (%d, &x); /输入一个整数输入一个整数输入一个整数输入一个整数 b2 = x / 100; b2 = x / 100; /用整除方法计算最高位用整除方法计算最高位用整除方法计算最高位用整除方法计算最高位 b1 = (x - b2 * 100) / 10; b1 = (x - b2 * 100) / 10; /计算中间位计算中间位计算中间位计算中间位 b0 = x % 10; b0 = x % 10; /用求余数法计算最低位用求余数法计算最低位用求余数法计算最低位用求余数法计算最低位 printfprintf (bi

120、t2 = %d, bit1 = %d, (bit2 = %d, bit1 = %d, bit0 = % bit0 = %dndn, b2, b1, b0); , b2, b1, b0); /输出结果输出结果输出结果输出结果 return 0;return 0; 具体程序如下:具体程序如下:具体程序如下:具体程序如下:please input an integer x: 456please input an integer x: 456 bit2 = 4, bit1 = 5, bit0 = 6bit2 = 4, bit1 = 5, bit0 = 6 运行结果运行结果运行结果运行结果: 36不向前

121、走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理由计算机向屏幕上输出一个数由计算机向屏幕上输出一个数#include /包含伪随机数生成函数包含伪随机数生成函数#include /包含取系统时间的函数包含取系统时间的函数#include int main(void) srand(time(NULL); /随机数种子初始化随机数种子初始化 printf(%d,rand(); return 0;4.5 4.5 顺序顺序程序设计举例程序设计举例 37不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理编写一个重量单位换算程序,输入用公斤表

122、示的重量,然编写一个重量单位换算程序,输入用公斤表示的重量,然后程序能够转换并输出用镑和盎司表示的等效重量。后程序能够转换并输出用镑和盎司表示的等效重量。请输入重量(公斤):23转换为用磅表示的重量(磅):50.7055转换为用盎司表示的重量(盎司):811.287问题问题 如何设计变量及选择相应的数据类型?如何设计变量及选择相应的数据类型? 公斤、磅和盎司的转换公式是什么?公斤、磅和盎司的转换公式是什么?4.5 4.5 顺序顺序程序设计举例程序设计举例 38不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理为保证程序能够处理带小数点的数值,变量的数据类型为保

123、证程序能够处理带小数点的数值,变量的数据类型需选用可以对实数进行操作的双精度类型需选用可以对实数进行操作的双精度类型double。故变。故变量列表为:量列表为:double kilogram, pound, ounce; /公斤、镑、盎司公斤、镑、盎司公斤、磅和盎司的转换公式:公斤、磅和盎司的转换公式:1磅=16盎司=0.4536千克(公斤)算法如下:算法如下:1.得到用公斤表示的重量2.将重量转化为磅:pound=kilogram/0.4536;3.将磅转化为盎司:ounce=pound*16;4.输出转换后的重量问题分析问题分析4.5 4.5 顺序顺序程序设计举例程序设计举例 39不向前走

124、,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理/ 重量单位换算重量单位换算#include int main(void)double kilogram, pound, ounce; /公斤、镑、盎司公斤、镑、盎司printf(请输入重量请输入重量(公斤公斤):);scanf(%lf,&kilogram);pound=kilogram/0.4536;ounce=pound*16;printf(转换为用磅表示的重量转换为用磅表示的重量(磅磅):%fn,pound);printf(转换为用盎司表示的重量转换为用盎司表示的重量(盎司盎司):%fn,ounce);retur

125、n 0;4.5 4.5 顺序顺序程序设计举例程序设计举例 40不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理如果要想从磅和盎司转换成公斤,应该怎么修改程序?如果要想从磅和盎司转换成公斤,应该怎么修改程序?如果要想将本案例程序的输出改成如果要想将本案例程序的输出改成*磅磅*盎司(磅和盎司盎司(磅和盎司都省略小数点后的位数),应该怎么修改程序?都省略小数点后的位数),应该怎么修改程序?思考思考4.5 4.5 顺序顺序程序设计举例程序设计举例 41不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理例例:输入一个华氏温度,计算并输

126、出对应的摄氏温度值:输入一个华氏温度,计算并输出对应的摄氏温度值,输输出时保留出时保留2位小数。位小数。#include int main(void)double c, f; /c和和f分别存放摄氏温度和华氏温度分别存放摄氏温度和华氏温度printf(请输入一个华氏温度:请输入一个华氏温度:);scanf(%lf,&f);c=5.0/9.0 * (f-32);/温度转换公式温度转换公式printf(对应于华氏温度对应于华氏温度%.2lf的摄氏温度为的摄氏温度为%.2lf,f,c);return 0;4.5 4.5 顺序顺序程序设计举例程序设计举例 42不向前走,不知路远;不努力学习,不明白真理

127、不向前走,不知路远;不努力学习,不明白真理C C语言编程习惯语言编程习惯 (1) (1) 一行只放一条语句。一行只放一条语句。 (2) (2) 养成随时给程序加注释的习惯。养成随时给程序加注释的习惯。 (3) (3) 程序的书写要有层次感,该缩进的一定要缩进。程序的书写要有层次感,该缩进的一定要缩进。 (4) 编写函数时,变量定义部分和函数的执行部分编写函数时,变量定义部分和函数的执行部分之间增加一空行,或者在程序的执行部分按照完成的功之间增加一空行,或者在程序的执行部分按照完成的功能块增加相应的空行,会增加程序的易读性。能块增加相应的空行,会增加程序的易读性。 (5) 为变量起有意义的名字,

128、既可以帮助程序员读懂为变量起有意义的名字,既可以帮助程序员读懂程序,也可以避免变量的重复乱用,导致程序的逻辑错程序,也可以避免变量的重复乱用,导致程序的逻辑错误。误。 (6) 在运算符和赋值符的两边加上一个空格会增加程在运算符和赋值符的两边加上一个空格会增加程序的易读性。序的易读性。intint main() main() intint i,sumi,sum; ;sum=0;sum=0;for (i=1;i=100;i+)for (i=1;i=100;i+)if (i%2 =0) sum+=i;if (i%2 =0) sum+=i;printf(sumprintf(sum=%=%d,sumd,

129、sum); );return 0;return 0; int main ( ) int i, sum; sum = 0; for (i = 1; i = 100; i+) if (i % 2 = = 0) sum += i; printf (sum = %d, sum); return 0;没有层次感没有层次感没有层次感没有层次感层次清晰层次清晰层次清晰层次清晰43不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理本章小结本章小结 本章的主要内容包含如下几个方面:本章的主要内容包含如下几个方面:本章的主要内容包含如下几个方面:本章的主要内容包含如下几个方面:

130、(1) (1) (1) (1) 格式化输入、输出库函数的使用格式化输入、输出库函数的使用格式化输入、输出库函数的使用格式化输入、输出库函数的使用。重点介绍了格式化输出函数。重点介绍了格式化输出函数。重点介绍了格式化输出函数。重点介绍了格式化输出函数printfprintfprintfprintf和格式化输入函数和格式化输入函数和格式化输入函数和格式化输入函数scanfscanfscanfscanf的功能及使用方法,其中格式控制字符串的功能及使用方法,其中格式控制字符串的功能及使用方法,其中格式控制字符串的功能及使用方法,其中格式控制字符串是我们要重点关注的地方,格式化输入和输出可以按照某种输入

131、输出格式是我们要重点关注的地方,格式化输入和输出可以按照某种输入输出格式是我们要重点关注的地方,格式化输入和输出可以按照某种输入输出格式是我们要重点关注的地方,格式化输入和输出可以按照某种输入输出格式来进行。来进行。来进行。来进行。 (2) (2) (2) (2) 字符的非格式化输入、输出库函数的使用。字符的非格式化输入、输出库函数的使用。字符的非格式化输入、输出库函数的使用。字符的非格式化输入、输出库函数的使用。 (3) (3) (3) (3) 算法的基本概念。算法的基本概念。算法的基本概念。算法的基本概念。简单地说,算法是求解某个问题的方法,程序简单地说,算法是求解某个问题的方法,程序简单

132、地说,算法是求解某个问题的方法,程序简单地说,算法是求解某个问题的方法,程序是算法通过编程语言书写出来的表现形式。算法是程序的灵魂,语言只是是算法通过编程语言书写出来的表现形式。算法是程序的灵魂,语言只是是算法通过编程语言书写出来的表现形式。算法是程序的灵魂,语言只是是算法通过编程语言书写出来的表现形式。算法是程序的灵魂,语言只是算法的实现工具。所以我们学习算法的实现工具。所以我们学习算法的实现工具。所以我们学习算法的实现工具。所以我们学习C C C C语言不仅要学会语言不仅要学会语言不仅要学会语言不仅要学会C C C C语言的语法特点,各种语言的语法特点,各种语言的语法特点,各种语言的语法特

133、点,各种函数的使用方法等,更重要的是掌握分析问题、解决问题的方法,就是锻函数的使用方法等,更重要的是掌握分析问题、解决问题的方法,就是锻函数的使用方法等,更重要的是掌握分析问题、解决问题的方法,就是锻函数的使用方法等,更重要的是掌握分析问题、解决问题的方法,就是锻炼分析、分解,最终归纳整理出算法的能力。炼分析、分解,最终归纳整理出算法的能力。炼分析、分解,最终归纳整理出算法的能力。炼分析、分解,最终归纳整理出算法的能力。 (4) (4) (4) (4) 程序的控制结构。程序的控制结构。程序的控制结构。程序的控制结构。任何复杂的算法都可以由顺序结构、选择(分任何复杂的算法都可以由顺序结构、选择(

134、分任何复杂的算法都可以由顺序结构、选择(分任何复杂的算法都可以由顺序结构、选择(分支)结构和循环结构这三种基本结构组成。由此构成了程序的三种控制结支)结构和循环结构这三种基本结构组成。由此构成了程序的三种控制结支)结构和循环结构这三种基本结构组成。由此构成了程序的三种控制结支)结构和循环结构这三种基本结构组成。由此构成了程序的三种控制结构,这三种控制结构在程序中相互嵌套,从而构造出各种各样的程序。构,这三种控制结构在程序中相互嵌套,从而构造出各种各样的程序。构,这三种控制结构在程序中相互嵌套,从而构造出各种各样的程序。构,这三种控制结构在程序中相互嵌套,从而构造出各种各样的程序。44不向前走,

135、不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理库函数名库函数名功功 能能函数原型所在头文函数原型所在头文件件scanf格式化输入格式化输入stdio.hprintf格式化输出格式化输出stdio.hgetchar接受一字符输入,以回车键结束,回显接受一字符输入,以回车键结束,回显stdio.hgetc从输入流中接受一字符,以回车键结束,回显从输入流中接受一字符,以回车键结束,回显conio.hgetche接受一字符输入,输入字符后就结束,回显接受一字符输入,输入字符后就结束,回显conio.hgetch接受一字符输入,输入字符后就结束,接受一字符输入,输入字符后就结

136、束,不回显不回显conio.hputchar输出一字符输出一字符stdio.hputc输出一字符到流文件(流文件为输出一字符到流文件(流文件为stdout时等价于时等价于putchar)stdio.hputs输出一字符串(输出后自动换行)输出一字符串(输出后自动换行)stdio.hfflush清除键盘缓冲区清除键盘缓冲区stdio.h习题:习题:习题:习题: 学习网站:所有必做在线作业学习网站:所有必做在线作业本章小结本章小结 45不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理找零钱问题:假定有找零钱问题:假定有5角、角、1角、角、5分、分、2分和分和1分

137、共分共5种硬种硬币,在给顾客找硬币时,一般都会尽可能地选用硬币个数币,在给顾客找硬币时,一般都会尽可能地选用硬币个数最小的方法。例如,当要给某顾客找最小的方法。例如,当要给某顾客找7角角2分钱时,会给他分钱时,会给他一个一个5角,角,2个个1角和角和1个个2分的硬币。试编写一个程序,输分的硬币。试编写一个程序,输入的是要找给顾客的零钱(以分为单位),输出的是应该入的是要找给顾客的零钱(以分为单位),输出的是应该找回的各种硬币数目,并保证找回的硬币数最少。找回的各种硬币数目,并保证找回的硬币数最少。解题思考:利用整数除法解题思考:利用整数除法/和求余运算符和求余运算符%的特点,计算每的特点,计算

138、每种硬币的数目和每次剩余零钱的金额。种硬币的数目和每次剩余零钱的金额。4.5 4.5 顺序顺序程序设计举例程序设计举例 46不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理 【例例例例1 1 1 1】小写字母转盘(如下图小写字母转盘(如下图小写字母转盘(如下图小写字母转盘(如下图所示)。所示)。所示)。所示)。 这个程序要求用户输入一个小这个程序要求用户输入一个小这个程序要求用户输入一个小这个程序要求用户输入一个小写字母字符,求出该字母字符的前写字母字符,求出该字母字符的前写字母字符,求出该字母字符的前写字母字符,求出该字母字符的前驱和后继字符,例如,驱和后

139、继字符,例如,驱和后继字符,例如,驱和后继字符,例如,c c c c字符的前驱字符的前驱字符的前驱字符的前驱和后继分别是和后继分别是和后继分别是和后继分别是b b b b和和和和d d d d,a a a a字符的前驱和字符的前驱和字符的前驱和字符的前驱和后继分别是后继分别是后继分别是后继分别是z z z z和和和和b b b b,z z z z字符的前驱和后字符的前驱和后字符的前驱和后字符的前驱和后继分别是继分别是继分别是继分别是y y y y和和和和a a a a。 a ab bc cd de ef fz zy yx x. . . . 程序设计的分析:程序设计的分析:程序设计的分析:程序设

140、计的分析: 求一个字母的前驱字母求一个字母的前驱字母求一个字母的前驱字母求一个字母的前驱字母并不是简单地减并不是简单地减并不是简单地减并不是简单地减1 1就可以了,比如,就可以了,比如,就可以了,比如,就可以了,比如,a a的前驱是的前驱是的前驱是的前驱是z z就不能通过减就不能通过减就不能通过减就不能通过减1 1来实现。在没有学会条件控制之前,我们可以利用取余操来实现。在没有学会条件控制之前,我们可以利用取余操来实现。在没有学会条件控制之前,我们可以利用取余操来实现。在没有学会条件控制之前,我们可以利用取余操作的特性,即任何一个整数除以作的特性,即任何一个整数除以作的特性,即任何一个整数除以

141、作的特性,即任何一个整数除以2626(2626个字母)的余数只能在个字母)的余数只能在个字母)的余数只能在个字母)的余数只能在0 02525之间。之间。之间。之间。我们可以以我们可以以我们可以以我们可以以z z为参考点,首先求出输入的字符为参考点,首先求出输入的字符为参考点,首先求出输入的字符为参考点,首先求出输入的字符chch(假设是(假设是(假设是(假设是w w)与)与)与)与z z之间的字之间的字之间的字之间的字符偏移数符偏移数符偏移数符偏移数n=n=z-chz-ch=z-wz-w=3=3,而,而,而,而(n+1)%26=4(n+1)%26=4则是则是则是则是chch(字母(字母(字母(

142、字母w w)的前驱字母)的前驱字母)的前驱字母)的前驱字母相对于相对于相对于相对于z z的偏移数,的偏移数,的偏移数,的偏移数,z-(n+1)%26=122-4=118z-(n+1)%26=122-4=118(即字母(即字母(即字母(即字母v v)就是)就是)就是)就是chch(字母(字母(字母(字母w w)的前驱字母。如下图所示)的前驱字母。如下图所示)的前驱字母。如下图所示)的前驱字母。如下图所示 4.5 4.5 顺序顺序程序设计举例程序设计举例 47不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理 求一个字母的后继也不是简单地加求一个字母的后继也不是简

143、单地加求一个字母的后继也不是简单地加求一个字母的后继也不是简单地加1 1就行,比如,就行,比如,就行,比如,就行,比如,z z的后继是的后继是的后继是的后继是a a就不能通过就不能通过就不能通过就不能通过加加加加1 1来实现。此时,可以来实现。此时,可以来实现。此时,可以来实现。此时,可以a a为参考点,首先求出输入的字符为参考点,首先求出输入的字符为参考点,首先求出输入的字符为参考点,首先求出输入的字符chch(假设是(假设是(假设是(假设是w w)与与与与a a之间的字符偏移数之间的字符偏移数之间的字符偏移数之间的字符偏移数n=n=chch-a=w-a=22-a=w-a=22,而,而,而,

144、而(n+1)%26=23(n+1)%26=23则是则是则是则是chch(字母(字母(字母(字母w w)的后继字母相对于)的后继字母相对于)的后继字母相对于)的后继字母相对于a a的偏移数,的偏移数,的偏移数,的偏移数, a+(n+1)%26=97+23=120a+(n+1)%26=97+23=120(即字母(即字母(即字母(即字母x x)就是)就是)就是)就是chch(字母(字母(字母(字母w w)的后继字母。)的后继字母。)的后继字母。)的后继字母。 根据以上分析,这个程序应这样设计:根据以上分析,这个程序应这样设计:根据以上分析,这个程序应这样设计:根据以上分析,这个程序应这样设计: (1

145、) (1) (1) (1) 定义三个字符型变量,分别用于接受用户输入的字符及用于存放定义三个字符型变量,分别用于接受用户输入的字符及用于存放定义三个字符型变量,分别用于接受用户输入的字符及用于存放定义三个字符型变量,分别用于接受用户输入的字符及用于存放其前驱和后继字符。其前驱和后继字符。其前驱和后继字符。其前驱和后继字符。 (2) (2) (2) (2) 调用调用调用调用getchargetchargetchargetchar函数获取用户输入的字母,回显。函数获取用户输入的字母,回显。函数获取用户输入的字母,回显。函数获取用户输入的字母,回显。 (3) (3) (3) (3) 求得该字母的前驱

146、字母和后继字母,并输出其结果求得该字母的前驱字母和后继字母,并输出其结果求得该字母的前驱字母和后继字母,并输出其结果求得该字母的前驱字母和后继字母,并输出其结果。 a b c d e f g h i j k l m n o p q r s t u a b c d e f g h i j k l m n o p q r s t u v v w w x x y z y z后继参考点后继参考点后继参考点后继参考点前驱参考点前驱参考点前驱参考点前驱参考点后继偏移数后继偏移数后继偏移数后继偏移数23232323前驱偏移数前驱偏移数前驱偏移数前驱偏移数4 4 4 448不向前走,不知路远;不努力学习,不明

147、白真理不向前走,不知路远;不努力学习,不明白真理#include #include intint main ( ) main ( ) char char chch, ch1, ch2; , ch1, ch2; /变量定义变量定义变量定义变量定义 chch = = getchargetchar(); (); /读取一字符读取一字符读取一字符读取一字符 putchar(nputchar(n); ); /换行换行换行换行 ch1 = z - (z - ch1 = z - (z - chch + 1) % 26; + 1) % 26; /求前驱字符求前驱字符求前驱字符求前驱字符 ch2 = a + (

148、ch2 = a + (chch - a + 1) % 26; - a + 1) % 26; /求后继字符求后继字符求后继字符求后继字符 printf(ch1 = %c, ch2 = %cn,ch1,ch2); printf(ch1 = %c, ch2 = %cn,ch1,ch2); /显示结果显示结果显示结果显示结果 return 0;return 0; 具体程序如下:具体程序如下:具体程序如下:具体程序如下:ch1 = v, ch2 = xch1 = v, ch2 = x运行结果运行结果运行结果运行结果( (假设输入字母为假设输入字母为假设输入字母为假设输入字母为w)w)w)w): Kj3p43.exe49不向前走,不知路远;不努力学习,不明白真理不向前走,不知路远;不努力学习,不明白真理Thank you50

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号