1 / 46

第四章 顺序程序设计

第四章 顺序程序设计. 4.1 C 语言语句 4.2 字符输入 / 输出函数 4.3 格式输入 / 输出函数 4.4 顺序结构程序设计举例 4.5 作业与实验. 4.1 C 语言语句. 4.1.1 控制语句 ① 条件语句 : if - else 语句 ② 多分支选择语句 : switch 语句 ③ 当型循环语句 : while 语句 ④ 直到型循环语句 : do - while 语句 ⑤ 计数型循环语句 : for 语句 ⑥ 中止本次循环语句 : continue 语句 ⑦ 中止整个循环语句 : break 语句

deanne
Download Presentation

第四章 顺序程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章 顺序程序设计 4.1 C语言语句 4.2 字符输入/输出函数 4.3 格式输入/输出函数 4.4 顺序结构程序设计举例 4.5 作业与实验

  2. 4.1 C语言语句 4.1.1 控制语句 ① 条件语句: if-else语句 ② 多分支选择语句: switch语句 ③ 当型循环语句: while语句 ④ 直到型循环语句: do-while语句 ⑤ 计数型循环语句: for语句 ⑥ 中止本次循环语句: continue语句 ⑦ 中止整个循环语句: break语句 ⑧ 函数返回语句: return语句 ⑨ 无条件转移语句: goto语句

  3. 4.1.2 表达式语句 在C语言中, 任何表达式都可以加上分号而成为相应的表达式语句,存在于程序中。 例如:  ① i++;  ② a=b=c=1;  ③ x=y=1, x*x+y*y;  ④ sin(0.75); 

  4. 相应的赋值语句有基本赋值语句与复合赋值语句。例如: ① S=1+2+3+4+5;  ② x+=1;  ③ y*=a;  ④ x=y=z=a=b=c=1;  函数调用语句由函数调用表达式加分号构成。 例如:  ① exp(x); /*求eX*/ ② fabs(x); /*求|x|*/ ③ sqrt(x); /*求 */

  5. 4.1.3 特殊语句 1. 复合语句 当if语句中的选择体、while语句中的循环体需多条语句描述时,就必须采用复合语句。  复合语句是放在一对花括号中的一组语句。 复合语句在语法上是一个整体,相当于一个语句。凡是能使用简单语句的地方,都可以使用复合语句。  复合语句又称为分程序,它可以有属于自己的数据说明部分,即可在复合语句中定义变量。 复合语句的后花括号之后不能加分号,最后一个语句的分号不能漏掉。

  6. 2. 空语句 空语句是一种概念, C语言的空语句仅由分号构成,在编译时不产生任何指令, 在执行时不产生任何操作。只作为形式上的语句,被填充在控制结构之中。 空语句常用于:  (1) 构成标号语句, 标识程序中相关位置。  (2) 循环语句中空循环体。  (3) 模块化程序中未实现的模块及暂不联入的模块。

  7. 4.2 字符输入/输出函数 C语言提供了两个标准的字符输入/输出函数,它们分 别是getchar和putchar。 4.2.1 putchar函数(字符输出函数) 该函数形式为: putchar(<字符对象>) putchar是函数名,其参数可以是一个字符常量或字符变量。该函数的功能是向终端输出一个字符。因整型和字符型是通用的,所以putchar函数也能够把代表某个字符编码的整数作为一个字符输出。

  8. 4.2.2 getchar函数(字符输入函数) 该函数形式为: getchar( ) getchar是函数名,后面圆括号内是空的,说明该函数没有参数。该函数的一般使用形式是: <字符变量>=getchar( ); 功能是从键盘上敲入一个字符,然后把它赋给字符变量,单独调用getchar( )函数没有实际意义。

  9. #include<stdio.h> /*文件包含命令*/ main( ) {char c; c=getchar( ); putchar(98); putchar(c) ; putchar(‘y’); putchar(‘\n’); } 经编译后运行如下:  o ↙ boy

  10. 4.3 格式输入/输出函数 4.3.1 printf函数 一般格式: printf(格式控制字符串,输出项列表) printf函数将输出项的值按指定的格式输出,不同类型的数据使用不同的格式说明符。

  11. 表4―1 输出的数据类型与其控制格式的对应关系

  12. 1. %d格式 (1)%d格式用来输出十进制整数,按数据的实际长度输出。 (2)可以对输出数据所占的列数加以限制,方法是在%和d之间加一整数,整数可正可负。例如: printf(″a=%5d″,13); 输出为:a=□□□13 printf(″a=%-5d″,13); 输出为:a=13□□□ printf(″a=%3d″,12345); 输出为:a=12345

  13. 整数m为正时,左补空格;m为负时,右补空格。若m小于实际位数,则按实长输出。整数m为正时,左补空格;m为负时,右补空格。若m小于实际位数,则按实长输出。 (3)当输出的数据大于32767时,不能再用%d格式,这时应该用长格式%ld来输出: printf(″a=%ld″,1234567); 输出为:a=1234567 也可以对长格式的位数加以限制,方法同(2)。

  14. 2. %o格式 %o以八进制形式输出整数,其机理是把整数在内存中的ASCII编码由低位向高位三位一组进行分节,每一节用一个八进制数码表示。这样如果原来的数据为负,则符号位的1也被作为八进制数的一部分加以处理了。 3. %x格式(或%X) 这是以十六进制形式输出整数,其机理和八进制输出一样,只是它是对二进制编码按四位一组进行分节,每节用一个十六进制数码表示,同样也不考虑符号。

  15. 例如: int a = -1; printf(″%d,%o,%x\n″, a, a, a); 输出结果为: -1,177777,ffff。 a = -1的内存形式为

  16. 4. %u格式 %u以十进制形式输出无符号整数。 一般,在输出整数时,均用相应的格式输出,但也 可用其它格式输出。此时,按不同类型的整型数据间的 赋值规则来处理。

  17. main( ) {unsigned a=65535; int b= -1; long c=32768; printf(“a=%d,%u\n”, a, a); printf(“b=%d,%u\n”, b, b); printf(“c=%d,%ld\n”, c, c); } 编译后运行结果为: a= -1,65535 b= -1,65535 c= -32768,32768

  18. 5. %c格式 这种格式输出一个字符,和字符ASCII编码对应的整数也以字符形式输出,并可以为其指定宽度。如: char ch=‘a’; printf(″%c,%c\n″,ch,97); printf(″%5c\n″,ch); 则结果为: a,a  □□□□a

  19. 6. %s格式 这个格式用来输出字符串。 (1)%s格式将字符串中的字符逐个输出,直到遇到第一个‘\0’字符为止,即并不一定把双引号中的内容全部输出。例如: printf(″s=%s\n″, ”China”); 输出为:s=China printf(″s=%s\n″, ”China\0Japan”); 输出为:s=China 字符‘\0’后的内容被舍掉,‘\0’本身也不输出。如果字符串中有控制字符,则控制字符也会发挥作用。

  20. (2) 可指定输出字符串的长度,规则如前。如: printf(″s=%6s″,″book″); 输出:s=□□book(正数,左补空格) printf(″s=%-6s″,″book″); 输出:s=book□□(负数,右补空格) printf(″s=%2s″,″book″); 输出:s=book(突破限制)

  21. (3)输出字符串前端的部分字符格式%<m>.<n>s。这种格式指明:在m列宽度中输出字符串的前n个字符,当m<n时,有m=n。如: printf(″s=%5.3s″,″China″); 输出为:s=□□Chi printf(″s=%-5.3s″,″China″); 输出为:s=Chi□□  printf(″s=%2.3s″,″China″); 输出为:s=Chi

  22. 7. %f格式 这个格式以小数形式输出单精度、双精度类型的浮点数。 (1)以%f格式输出浮点数时,整数部分全部输出,小数部分输出6位,但输出的不一定全是有效数字。对单精度数只有左边7位有效,而对双精度只有前16位有效。 (2)也可以指定输出的宽度和小数位数,如: printf(″f=%10.2f\n″,123.456); 输出:f=□□□□123.46 输出宽度中包含小数点和正负号位数,小数部分进行四舍五入。

  23. 8. %e格式(或%E) 这种格式是以指数形式输出浮点数,包括单精度和双精度数。输出时,尾数的整数部分只有1位,系统自动指定尾数的小数部分宽度和指数部分的宽度。对此不同的系统有不同的规定。对Turbo C来说,小数部分5位,指数部分4位(包括字母e或E,1位阶符,2位阶码)。例如: printf(“%e\n”,123.4567); 输出为:1.23457e+02 printf(“%e\n”,123.4); 输出为:1.23400e+02

  24. 9. %g格式(或%G) 这种格式用于输出尾数中不带无效0的浮点数,以尽可能地少占输出宽度。例如: printf(″g=%g″,123.4); 输出:g=123.4 这种输出更符合人们的阅读习惯。 10. printf函数的控制字符的进一步说明 (1)以上我们介绍了9种控制字符的一般用法,为了满足特殊的要求,还可以对控制字符加一些特殊的修饰。修饰符或标志共有6种,如表4―2所示。

  25. 表4―2 格式控制串中的标志(修饰符)

  26. main( ) {printf(″%+d,%+d\n″,786, -786); /*输出:+786,-786*/ printf(″a=%d,a=%d\n″,5, -5); /* 输出:a=5,a=-5*/ printf(″%#o\n″,1427); /*输出:02623*/ printf(″%#x\n″,1427); /*输出:0x593*/ printf(″%g\n″,1427.00); /*输出:1427*/ printf(″%#g\n″,1427.00); /*输出:1427.00*/ printf(″%+09d″,125); /*输出:+00000125*/ printf(″%*.*f″,7, 2, 87.4573); /*输出:□□87.46*/ }

  27. (2)精度说明。 (3)程序中易出现的错误: ①把除%X,%G,%E外的控制字符写成大写,如%D等。 ②试图用%c格式输出字符串的第一个字符。如: printf(″%c″,″China″); 这样输出不了′C′。 试图用%s格式输出字符。如: printf(″%s\n″,′a′); 结果也是错误的。

  28. C 1. 以下程序的输出是( )。 main( ) {int a=011, b=101; printf(“%x,%o”, ++a, b++); } A.12,145 B.9,144 C.a,145 D.a,5 2.以下语句的输出是( )。 int x= -1; printf(“%d,%u,%o”, x, x, x); A.-1,-1,-1 B.-1,32767,-177777 C.-1,32768,177777 D.-1,65535,177777 D

  29. D 3. 以下程序的输出是( )。 main( ) {int x=02, y=3; printf((“x=%%d,y=%%d”, x, y); } A.x=2,y=3 B.x=%2,y=%3 C.x=%%d,y=%%d D.x=%d,y=%d

  30. 4.3.2 scanf函数 scanf函数能对各种类型的数据进行格式化输入,变量将在程序执行过程中得到从键盘输入的值。 scanf函数的一般格式为: scanf(格式控制字符串,输入项地址列表) 前面我们已知,scanf的输入项列表中是以逗号分开的变量的地址,即每个变量名前面须加一个取地址运算符&。

  31. 表4―3 输入的数据与其所对应的控制格式

  32. 表4―4 修饰符及其作用

  33. 例如: 假定已有相应变量定义 (1) scanf(″%2d%3d″, &i, &j);  如输入: 12345 则 i 得到值12, j 得到值345。 (2) scanf(″%2d%*3d%2d″, &a, &b);  如输入: 1234567 则 a得到值12, b得到值67。

  34. 说明: 1. 分隔符的使用 (1)输入数据默认用空格、 回车或TAB键分隔。 (2)利用格式字符串中普通字符在输入时要原样输入,常引入特定的普通字符如逗号等,作为输入数据的分隔符。 (3)如果数据本身可以将数据分隔时,输入数据不需用分隔符。如: scanf(″%d%c%d″, &v1, &v2, &v3);  要使v1的值为30, v2的值为′a′, v3的值为18。 可输入:30a18,这样字符数据a能起到分隔数据30、18的作用。

  35. 2. 按Enter键结束数据的输入。 3. 输入函数中格式控制字串中一般不允许使用转义字符。 4. 变量得到值有三种方法: 定义时赋给初值,在编译时得到;在执行时利用赋值语句得到;在执行时通过调用输入函数得到。利用输入函数得到值更具一般性和通用性。 注意: C语言本身并不提供输入/输出语句,数据的输入/输出是通过调用输入/输出库函数而实现,该语句是函数调用语句,而非输入/输出语句。 输入数据时,可以规定数据所占的列数,但不能规定数据的精度。

  36. D 1.若有:int k1, k2, k3, k4; 要通过以下的语句,使k1、k3 的值为10,k2、k4的值为20,则正确的输入形式是( )。 scanf(“%d%d”, &k1, &k2); scanf(“%d,%d”, &k3, &k4); 其中<CR>表示回车,□表示空格。 A.1020<CR> B.10□20<CR> 1020<CR> 10□20<CR> C.10,20<CR> D.10□20<CR> 10,20<CR> 10,20<CR>

  37. C 2.若有:int x; float y; 那么,以下输入语句中( )是正确的。 A.scanf(“%f%f ”, &x, &y); B.scanf(“%d%f ”, x, y); C.scanf(“%d%f ”, &x, &y); D.scanf(“%2d%5.2f ”,&x, &y); 3. 若有: int a ; char c ; float f ; 要通过以下的语句, 使a的值为2, f的值为3.4, c的值为3.4, 则正确的输入形式是( )。 scanf(“%d%f%c”, &a, &f, &c); A.2□3.4□c B. 2□3.4’c’ C.2,3.4,c D. 2□3.4c D

  38. 4.4 顺序结构程序设计举例 关于程序设计的过程可分三步走:分析问题(Question)、设计算法(Algorithm)及实现程序(Program),简称QAP方法。

  39. 4.1输入三角形的三条边长,求三角形的面积。我们 假设输入的三边能构成三角形。 ①数据分析:找出和问题有关的量,每个量用一个变量表示(注意考虑数据类型)。 输入量:三边a、b、c 中间量:s 输出量:面积area ②算法分析: S1:输入有效的三边 S2:计算三角形面积 S3:输出三角形面积

  40. s=(a+b+c)/2 细化S2可得三角形面积的计算公式: 因此,还要定义一个中间变量s,并且要把代数公式转换 成合法的C语言表达式。在C语言中要求某个量的平方根, 就必须调用库函数sqrt,同时还要在程序的开头加一条文 件包含命令:#include<math.h>。 s=(a+b+c)/2 area=sqrt(s*(s-a)*(s-b)*(s-c))

  41. ③ 算法实现: #include <math.h> /*包含数学函数头文件*/ main( ) { float a, b, c, s, area;  scanf(″%f, %f, %f″, &a, &b, &c);  s= (a+b+c)/2;  area=sqrt(s*(s-a)*(s-b)*(s-c));  printf(″a=%.2f, b=%.2f, c=%.2f \n″, a, b, c);  printf(″area=%.2f \n″, area);  }/*规定结果的精度*/

  42. 例4.2从键盘输入一个大写字母,要求改用小写字母输出。例4.2从键盘输入一个大写字母,要求改用小写字母输出。 ①数据分析: 输入量:大写字母c1 输出量:小写字母c2 ②算法分析: S1:输入大写字母c1 S2:得到与c1相应的小写字母c2 S3:输出小写字母c2 S2可由表达式c2=c1+32来实现。

  43. ③ 算法实现: #include<stdio.h> /*包含标准输入/输出函数头文件*/ main( ) {char c1, c2; c1=getchar( ); /* scanf(“%c”, &c1); */ c2=c1+32; printf(“%c→%c\n”, c1, c2); }

  44. 例4.3求一元二次方程ax2 +bx+c=0的两个实根。a, b, c 由 键盘输入,设b2 - 4ac>0。 ①数据分析: 输入量:三个系数a, b, c 中间量:d 输出量:两个实根x1, x2 ②算法分析: S1:输入三个系数a, b, c S2:求两个实根x1, x2 S3:输出两个实根x1, x2

  45. ③ 算法实现: #include<math.h> main( ) {float a, b, c, d, x1, x2; scanf(“%f,%f,%f”, &a, &b, &c); d=sqrt(b*b - 4*a*c); x1=(-b+d)/(2*a); x2=(-b-d)/2/a; printf(“x1=%.2f, x2=%.2f\n”, x1, x2); }

  46. 4.5 作业与实验 1. 习题4.4 2. 习题4.6 若第5、6、7行改为: scanf(“a=%d,b=%d”,&a,&b); scanf(“%f%e”,&x,&y); scanf(“%c_%c”,&c1,&c2); /*_表示空格*/ 则又应在键盘上如何输入数据? 3. 从键盘上输入一个数字字符,要求输出与之相应的整型数据。如:输入字符2,输出整数2。 4. 习题4.8 5. 习题4.9

More Related