第3章 程序流程控制_第1页
第3章 程序流程控制_第2页
第3章 程序流程控制_第3页
第3章 程序流程控制_第4页
第3章 程序流程控制_第5页
已阅读5页,还剩110页未读 继续免费阅读

下载本文档

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

文档简介

1、 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/262 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/263 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/264 第3章 程序流程控制 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/265N-S结结构构图图流流程程图图ABABYNABP成立成立? P T F A B3.1 程序的三种基本结构程序的三种基本结构 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/266NYP成立成立?A当当P成立时成立时 A A当P成立时YNAP成立成立?N-S结结构构图图流流程程图图3.

2、1 程序的三种基本结构程序的三种基本结构 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2673.2 顺序结构 3.2.1 赋值语句 赋值语句是由赋值表达式再加上分号构成的表达式语句。 其一般形式为: 变量=表达式; 【例3.1】赋值语句举例 #include”stdio.h” main( ) int a=10,x=5,y=6; a+=a*=6; x=y+; y=+x ; printf(“%d,%d,%d”,a,x,y); 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/268赋值语句的使用中需要注意以下几点赋值语句的使用中需要注意以下几点 1. 由于在赋值符“=

3、”右边的表达式也可以又是一个赋值表达式, 下述形式 : 变量=(变量=表达式);是成立的,从而形成嵌套的情形。例如: a=b=c=d=e=5;按照赋值运算符的右接合性,等效于: e=5; d=e; c=d; b=c; a=b;2. 在变量说明中给变量赋初值和赋值语句的区别。给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其它同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾。 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2693. 在变量说明中,不允许连续给多个变量赋初值。 如int a=b=c=5 ;是错误的;必须写为 int a=5,b=5,c=5; 而赋值语

4、句允许连续赋值 a=b=c=5;4. 赋值表达式和赋值语句的区别。赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。下述语句是合法的: if (x=y+5)0) z=x; 语句的功能是,若表达式x=y+5大于0则z=x下述语句是非法的: if (x=y+5; )0) z=x;因为x =y+5; 是语句,不能出现在表达式中。赋值语句的使用中需要注意以下几点赋值语句的使用中需要注意以下几点 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2610 5.赋值语句的作用是计算表达式的值,并赋给变量。(1)对于任何一个变量必须先赋值,然后才能引用,否则,未赋初

5、值的变量将以一个随机值参与运算。(2) 赋值号两边的类型必须一致,但表达式值为整数时,它可自动转化为实型后赋给该实型变量。 赋值语句的使用中需要注意以下几点赋值语句的使用中需要注意以下几点 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2611 printf函数一般形式 printf(格式控制, 参数2,参数n) 功能:按格式控制所指定的格式,在标准输出设备上输出参数2、参数n的值。 例如有程序段 :int a=123,b=100; printf(%d %d %dn,a,b,a+b); printf (c = %d + %d = %dn,a,b,a+b ); 3.2.2 格式输

6、出与输入格式输出与输入 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2612格式输出函数的一般形式printf(“格式控制字符串格式控制字符串”,输出参数表输出参数表);用双引号括起来,控制输出项的格式和输出一些提示信息 可以是一个或多个输出项. 可以是常量或变量表达式,用逗号分隔。类型可以是整型,实型,字符型和字符串型.具体的讲,具体的讲,printf语句,就是把输出参数表中的表达语句,就是把输出参数表中的表达式的值,按照格式控制字符串的格式,依次在指定的式的值,按照格式控制字符串的格式,依次在指定的位置输出,如果输出位置不够,从左到右依次输出前位置输出,如果输出位置不够,

7、从左到右依次输出前几个的值。几个的值。 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2613格式控制格式控制 用双引号括起的字符串,用于指定输出数据的类型、格式、个数 包括:普通字符和格式说明符 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2614在在printf语句的格式控制字符串中,有三类字符:语句的格式控制字符串中,有三类字符:普通字符:按原样输出,主要起提示作用。普通字符:按原样输出,主要起提示作用。转义字符:指明特定的操作,如转义字符:指明特定的操作,如n换行、换行、t横向跳格横向跳格格式说明部分:由格式说明部分:由%引导的格式字符串组成引导的格式

8、字符串组成 输出参数表中的表达式,就是按照格式说明输出参数表中的表达式,就是按照格式说明部分指定的格式,在格式控制字符串中的相应位部分指定的格式,在格式控制字符串中的相应位置输出的。置输出的。 格式说明部分的一般格式为:格式说明部分的一般格式为: %flagswidth.precF|N|h|Ltype在这里,我们对常用的几种形式进行介绍!在这里,我们对常用的几种形式进行介绍! 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2615输出格式说明符输出格式说明符整型数据 %d以有符号十进制形式输出整型数%o以无符号八进制形式输出整型数%x以无符号十六进制形式输出整型数%u以无符号十

9、进制形式输出整型数实型数据 %f以小数形式输出实型数%e以指数形式输出实型数%g按数值宽度最小的形式输出实型数字符型数据 %c输出一个字符%s输出字符串其他 %输出字符 % 本身 在和格式符之间可以使用附加说明符 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2616附加格式说明符附加格式说明符 l输出长整型数(只可与d、o、x、u结合用)m指定数据输出的宽度(即域宽).n对实型数据,指定输出 n 位小数;对字符串,指定左端截取n 个字符输出+使输出的数值数据无论正负都带符号输出-使数据在输出域内按左对齐方式输出例如:%ld 输出十进制长整型数 %m.nf 右对齐,m位域宽,n

10、位小数或n个字符%-m.nf 左对齐 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2617格式输出格式输出printf函数运用示例:函数运用示例:1. printf(“Its fun!”);输出:输出: Its fun!2. int a=1,b=2; printf(“%d,%d”,a,b);输出:输出:1,23. int a=1,b=2; printf(“a=%dnb=%d”,a,b);输出:输出:a=1 b=24. int a=1,b=2; printf(“%d”,a+b);输出:输出:35. int a=1,b=2; printf(“a+b”); 输出:输出:a+b 宝鸡

11、文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2618【例例3.2】整型数据的输出整型数据的输出main( ) int a=11,b=22; int m=-1; long n=123456789; printf(%d %dn,a,b); printf(a=%d, b=%dn,a,b); printf(m: %d, %o, %x, %un,m,m,m,m); printf(n=%dn,n); printf(n=%ldn,n);1122a=11, b=22m: -1, 177777, ffff, 65535n=123456789n=123456789例jc1_a 宝鸡文理学院计算机科学

12、系宝鸡文理学院计算机科学系2022/6/2619【例例3.3】实型数据的输出实型数据的输出main( ) float x=1234.56,y=1.23456789; double z=1234567.123456789; printf(x=%f, y=%f n,x,y); printf(z=%fn,z); printf(z=%en,z); printf(z=%gn,z); printf(z=%18.8fn,z); printf(x=%10.3fn,x); printf(x=%-10.3fn,x); printf(x=%4.3fnn,x); x=1234.560059, y=1.234568z=

13、1234567.123457z=1.23457e+06z=1234570z= 1234567.12345679x= 1234.560 x=1234.560 x=1234.560例jc2_b 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2620【例例3.4】字符型数据的输出字符型数据的输出main( ) int m=97; char ch=B; printf(m: %d %cn,m,m); printf(ch: %d %cn,ch,ch); printf(%sn,student); printf(%10sn,student); printf(%-10sn,student); p

14、rintf(%10.3sn,student); printf(%.3snn,student); 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2621【例3.5】 #include main( ) int a=65,i= -2;char c=a; float b=1.34576;double d=4.65; unsigned j=65535; printf(“n%s”,”hello”); printf(“n%d,%c,%d,%u,%u,%d”,a,a,i,i,j,j); printf(“n%.3f,%.4lf”,b,d); printf(“n%d,%d”,a+i,i+); 例j

15、c4_c 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2622注意:注意: printf函数格式控制中的格式说明符与输出参数的个数和类型必须一一对应。 格式说明符的 % 和后面的描述符之间不能有空格。除 %X、%E、%G外类型描述符必须是小写字母。 长整型数应该用ld(或lo、lx、lu)格式输出,否则会出现输出错误。 printf函数的参数可以是常量、变量或表达式。在计算各参数值时,Turbo C采用从右至左的顺序求值。 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/26232 格式输入函数格式输入函数 scanf 函数调用的一般形式 scanf(格式控制,

16、 地址参数2,地址参数n); 功能:按格式控制指定的格式,从标准输入设备(即键盘)交互输入数据,并依次存放到对应地址参数指定的变量中(即将输入值赋给变量)。 例如: scanf (%d%f,&a, &f); scanf (%o, %f , &b,&x); scanf (a=%d, b=%d,&a,&b); 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2624格式控制格式控制 用双引号括起的字符串,用于指定输入数据的类型、格式、个数以及输入的形式 包括:普通字符和格式说明符 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2625输入格式说明符输入格式说明符整型数

17、据 %d输入十进制整型数%u输入无符号的十进制整型数%o输入八进制整型数%x输入十六进制整型数实型数据 %f输入小数形式的单精度实型数%e输入指数形式的单精度实型数字符型数据 %c输入单个字符%s输入一个字符串 在和格式符之间可以使用附加说明符 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2626附加格式说明符附加格式说明符 l与d、o、x、u结合输入长整型数与 f 结合输入double型数m指定数据输入的宽度(即域宽)*忽略读入的数据(即不将读入数据赋给相应变量)例如:%ld、%lo输入十进制、八进制长整型数%lf、%le输入双精度实型数%mf输入m位数(域宽)%*d忽略输

18、入的一个整型数 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2627 输入数据时要严格按照输入数据时要严格按照scanf语句中格式控制字语句中格式控制字符串的形式输入。看下面的例子:符串的形式输入。看下面的例子:1. scanf(“%d%d”,&a,&b);输入:输入:1 2回车回车 或者或者 1回车回车2回车回车2. scanf(“%d,%d”,&a,&b);输入:输入:1,2回车回车3. Scanf(“a=%d,b=%d”,&a,&b);输入:输入:a=1,b=2回车回车 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2628例如:例如: scanf (%

19、d%d%d, &a, &b, &c); 输入3个整型十进制数,以空白符(空格、tab键或回车键)分隔 scanf (%d, %o, %f , &a, &b, &x); 输入3个数,以“,”分隔 scanf (a=%d, b=%d, &a, &b); 输入的形式是:a=32, b=28 (普通字符要照原样输入) 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2629【例例3.6】main( ) int a,b,c; long m; float x; double y; char ch, string20; printf(input a,b,c,m: ); scanf(%d %o

20、%x %ld,&a,&b,&c,&m); printf(a=%d,b=%d,c=%d,m=%ldn,a,b,c,m); printf(input x,y: ); scanf(%f %lf,&x,&y); getchar(); printf(x=%f, y=%fn,x,y); printf(input ch,string: ); scanf(%c %s,&ch, string); printf(ch=%c, string=%snn,ch,string);运行运行jc5 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2630使用使用scanf函数应注意:函数应注意: 要求在程序运行

21、中输入数据,输入的数据个数和类型必须与要求在程序运行中输入数据,输入的数据个数和类型必须与格式说明符一一对应。格式说明符一一对应。 地址参数形式:地址参数形式:& &变量名(除数组或指针变量)即:变量名(除数组或指针变量)即:参数的参数的第二部分一定是地址列表第二部分一定是地址列表, ,不能是表达式,请记得在变量前不能是表达式,请记得在变量前加上加上& &。 格式控制中有普通字符时,必须照原样输入。格式控制中有普通字符时,必须照原样输入。 格式控制中无普通字符时,输入的数值型数据和字符串用格式控制中无普通字符时,输入的数值型数据和字符串用空空格间隔,也可以用回车键、格间隔,也可以用回车键、ta

22、btab键分隔键分隔,字符型数据不必分,字符型数据不必分隔。隔。 doubledouble型数据输入时,必须用型数据输入时,必须用%lf%lf或或%le%le格式格式 实型数输入时域宽不能用实型数输入时域宽不能用m.nm.n形式的附加说明即:形式的附加说明即:实数不许实数不许规定精度,像规定精度,像%10.4f%10.4f是不合法是不合法的。的。 为了减少不必要的输入量,除了逗号、分号、空格符以外,为了减少不必要的输入量,除了逗号、分号、空格符以外,格式控制中尽量不要出现普通字符,也不要使用格式控制中尽量不要出现普通字符,也不要使用 nn 、tt 等转义字符等转义字符 % %后面有数字,可以自

23、动截取该长度的数据作为输入值。后面有数字,可以自动截取该长度的数据作为输入值。 如果输入时类型不匹配则停止处理,返回如果输入时类型不匹配则停止处理,返回0 0。 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2631注意(续)注意(续) : 格式符之间若无普通字符,则: 输入的数值型数据用空白符分隔 输入的 char型数据不必分隔 scanf (%d%d, &m, &n);scanf (%c, &ch); 错误输入:错误输入:32 28 a 正确输入:正确输入:32 28a 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2632int putchar(int)

24、向标准输出设备向标准输出设备(一般为显示器一般为显示器)输出一个字输出一个字符,并返回该字母的符,并返回该字母的ASCII码值。参数可以是码值。参数可以是字字符常量、变量符常量、变量或或整型常量、变量整型常量、变量。如:如:#include main() int a=65; char c=d; putchar(a); putchar(97); putchar(n);putchar(c); 3.2.3 字符输入输出函数1.字符输出函数字符输出函数输出为:输出为: Aa d 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/26332.字符输入函数int getchar(void) 从

25、输入设备从输入设备( (一般为键盘一般为键盘) )上输入一个字符。它每上输入一个字符。它每被调用一次,就从标准输入设备上取一个字符,返回被调用一次,就从标准输入设备上取一个字符,返回值是该字符的值是该字符的ASCIIASCII编码值,可以赋给字符变量或整编码值,可以赋给字符变量或整型变量。型变量。例:例:#include main( ) int i, j; char c; i=getchar( ); putchar(i); j=getchar( ); putchar(j); c=getchar( ); putchar(c); 思考思考:以下三种不同的输入,以下三种不同的输入,输出情况如何?输出

26、情况如何? 1.abcdefg 2.ab 3.a bcdefg 执行执行getchar()getchar()时输入字符以时输入字符以回车结束,同时回车字符也可以回车结束,同时回车字符也可以做为输入的字符。做为输入的字符。 注意注意Ch3_1 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/26343.2顺序结构程序设计顺序结构程序设计4. 顺序结构程序的一般算法描述变量定义变量定义变量赋值变量赋值运算处理运算处理输出输出结果结果可用:可用: 变量初始化变量初始化 赋值语句赋值语句 输入函数调用语句输入函数调用语句 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/26

27、35顺序结构程序设计举例顺序结构程序设计举例 【例3.7】数据交换。从键盘输入a、b的值,输出交换以后的值。 思路:在计算机中交换变量a和b的值,不能只写下面两个赋值语句a=b ; b=a ; 正确的交换方法:正确的交换方法:c=a ; a=b ; b=c; 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2636程序:程序:main( ) int a,b,c; printf(ninput a, b: ); scanf(%d,%d,&a,&b); printf(nbefore exchange:a=%d b=%dn,a,b); c=a; a=b; b=c; printf(afte

28、r exchange: a=%d b=%dn,a,b);程序运行情况如下:程序运行情况如下:input a, b: 32, 57 before exchange: a=32 b=57 after exchange: a=57 b=32 运行运行jc6 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2637举例:举例: 【例3.8】已知三条边a、b、c,求三角形面积。计算三角形面积的海伦公式: ) cs)(bs)(as ( sarea) cba (21s 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2638程序如下:程序如下: #include math.hma

29、in( ) int a,b,c; float s,area ; scanf(%d, %d, %d,&a,&b,&c); s =1.0/2*(a+b+c) ; area = sqrt(s*(s-a)*(s-b)*(s-c) ; printf(area = %8.3f n,area) ;程序运行情况如下:程序运行情况如下:3,4,5 area = 6.000 运行运行jc3_16 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/26393.3 选择结构选择结构3.3.1 if语句(1) if语句的一般形式(2) if语句的嵌套3.3.2 switch语句(1) switch语句的一般

30、形式(2) break语句 选择结构程序设计举例 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2640简单分支语句简单分支语句 语句一般格式 if (表达式) 语句内嵌语句,可为:内嵌语句,可为: 赋值语句赋值语句 函数调用语句函数调用语句 控制语句控制语句 复合语句复合语句 空语句空语句可为算术、关系、逻辑、赋值可为算术、关系、逻辑、赋值等表达式等表达式 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2641简单分支语句的算法:简单分支语句的算法: 例如: if (x0) m+; if ( ab ) c=a; a=b; b=c; 表达式非表达式非0 T F

31、语句语句N-S结构图结构图语句语句流程图流程图NY表达式非表达式非0? 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2642双重分支语句双重分支语句 语句一般格式if (表达式) 语句1 else 语句2 功能: 计算表达式的值,如果它的值是一个非0值(逻辑真),就执行内嵌语句1,之后跳过内嵌语句2,执行后续语句;否则跳过内嵌语句1,执行内嵌语句2,之后执行后续语句。 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2643双重分支语句的算法:双重分支语句的算法: 例如: if (x0) m+; else m-; if ( ch= a & ch=A & ch=A

32、 & ch=Z ? ch+32:ch);putchar ( n) 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2649if语句的嵌套语句的嵌套 如果if的内嵌语句中又使用了一个if语句,则构成if语句的嵌套。 【例例3.10】比较两个整数的关系。比较两个整数的关系。#include main( ) int x, y; printf (Enter integer X and Y:); scanf (%d%d, &x, &y); if ( x != y ) if ( x y ) printf (XYn); else printf (XYn); else printf (X=Yn)

33、;运行运行jc4_2有利于阅读程序有利于阅读程序 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2650 if语句嵌套的形式语句嵌套的形式 简单if语句的嵌套形式 if (表达式) if 语句 双重(或多重)分支if语句的嵌套形式 if (表达式) if 语句 else if 语句 可以是各种形式的可以是各种形式的if语句语句可以是各种形式的可以是各种形式的if语句语句如果是简单如果是简单if语句,语句,必须用必须用“ ”括起括起 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2651例如:例如: if (c=50) printf(50=c=100n); if

34、(c=50) printf(50=c=100n);else printf(c50n);else if (c=150) printf(100c150n); if (c=50) printf(50=c=100n);else printf(cb) if(ac)if(ad) m=1; else m=2; else m=3; 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2653举例举例 【例3.11】输入一个数,判断它是奇数还是偶数,如果是奇数则进一步判断它是否为5的倍数。 定义变量定义变量x输入输入x的值的值 x是奇数是奇数 T F 输出输出“odd” x是是5的倍数的倍数 输出输出

35、“even” T F是是5的倍数的倍数 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2654程序:程序:main( ) int x; scanf (%d,&x); if (x%2 != 0) printf(%d is an odd n,x) ; if (x%5=0) printf(%d is the times of 5 n,x) ; else printf(%d is an even n,x) ;运行运行jc4_4 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2655学习学习if语句的难点语句的难点 if else 语句的配对 正确用表达式描述条件例如:当

36、x大于5小于10时令x自增 if ( 5x10 ) x+; 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2656熟悉常用的熟悉常用的if 表达式形式表达式形式例如有定义:int a,b=0;a等于什么值时,执行b=2 ;语句?if (a=0) b=2;if (a=1) b=2;if (a!=0) b=2; if (a=1) b=2;if (a=0) b=2;if (a) b=2;if (!a) b=2; 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/26573.3.2 switch语句语句 switch语句的一般形式 switch (表达式) case 常量表

37、达式1: 语句序列1 case 常量表达式2: 语句序列2 case 常量表达式n: 语句序列n default : 语句序列n+1 功能: 计算表达式的值,与常量表达式的值比较,等于第i个值时,顺序执行语句序列i、i+1、 、 n+1 若与所有常量表达式值都不相等,执行语句序列n+1。 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2658switch语句的算法描述语句的算法描述 N-S结构图计算表达式常量表达式1语句序列1常量表达式2语句序列2 常量表达式n语句序列ndefault语句序列n+1switch (a) case 5: printf(&); case 2: pr

38、intf(#); default:printf($); 当当a等于等于5,输出:,输出:当当a等于等于2,输出:,输出:当当a是其他值,输出:是其他值,输出: 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2659说明:说明:“case 常量表达式i:”等价于语句标号,计算出的表达式值等于哪个语句标号,就从哪个位置开始顺序向下执行语句序列。 语句位置影响运行结果switch (a) case 2: printf(#); default: printf($); case 5: printf(&);break;break; break; 宝鸡文理学院计算机科学系宝鸡文理学院计算机科

39、学系2022/6/2660switch语句的简单应用语句的简单应用【例3.12】已知x=100,y=15,要求输入一个算术运算符(+、-、* 或 / ),并对x和y进行指定的算术运算。 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2661 实型数通常不使用实型数通常不使用z=0或或z!=0的比较的比较 可用可用代替代替程序:程序:#include stdio.hmain( ) float x=100,y=15,z; char op; op=getchar( ); switch (op) case +: z=x+y; break; case -: z=x-y; break; c

40、ase *: z=x*y; break; case /: z=x/y; break; default: z=0; if(int)z!=0) printf(%f%c%f=%fn,x,op,y,z); else printf (%c is not an operatorn,op);运行运行jc4_4 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2662注意:注意: switch语句的书写格式:语句体本身必须用花括号括起;case和default后面如果有多条语句,则可以不必使用花括号;case和常量表达式之间必须有空格;default可以写在语句体的任何位置,也可以省略不写 br

41、eak语句可以改变case的语句标号作用,终止后续case语句序列的执行。 switch语句和break语句结合,可以实现程序的选择控制(break语句还可以在循环语句中使用) 允许switch嵌套使用,但同一个switch语句中,任意两个case的常量表达式值不能相同。 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2663选择结构程序设计举例选择结构程序设计举例【例3.13】求一元二次方程ax2+bx+c=0的根。 aacbbx2422, 1 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2664算法:算法: 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系

42、2022/6/2665程序:程序:#include math.hmain( ) float a,b,c,d,x1,x2,lp,ip; scanf(%f%f%f,&a,&b,&c); printf(the equation ); if (fabs(a)1e-6) printf(is not quadratic); else d=b*b-4*a*c; if (fabs(d)1e-6) /* 不相等的实根 */ x1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a); printf(has two real roots:n) ; printf(x1=%8.4f, x2=

43、%8.4fn,x1,x2); else /* 虚根 */ lp=-b/(2*a);ip=sqrt(-d)/(2*a); printf(has two complex roots: n); printf(x1=%8.4f+%8.4fin,lp,ip); printf(x2=%8.4f-%8.4fin,lp,ip); 运行运行jc4_6 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2667举例(续):举例(续):【例3.14】输入年份,判别该年是否为闰年。 设定标志变量设定标志变量,只要符合其中一个条件的就,只要符合其中一个条件的就是闰年,令是闰年,令 ;否则令;否则令 宝鸡文理

44、学院计算机科学系宝鸡文理学院计算机科学系2022/6/2668算法:算法:定义变量定义变量year、leap 输入年份输入年份year T F leap=1 T F leap = 1 leap = 0 leap=1? T F 是闰年是闰年 不是闰年不是闰年year%4=0 & year%100 !=0 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2669程序:程序:main( ) int year, leap ; scanf(%d, &year); if (year%4=0 & year%100!=0) leap=1; else if (year%400=0) leap=1;

45、 else leap=0; if (leap = 1) printf(%d is a leap year n, year); else printf(%d is not a leap year n, year); 运行运行jc4_b 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/26703.4 循环结构循环结构 本节主要内容本节主要内容while循环控制do-while循环控制for循环控制用goto语句实现循环控制循环结构中的跳转语句循环的嵌套循环结构程序设计举例 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2671本节教学目的和基本要求:本节教学目的和基本

46、要求:要求学生了解循环结构程序设计,掌握各种循环语句应用的特点及异同点,掌握循环嵌套及复合结构。 本节教学重点:本节教学重点:各种循环语句应用的特点及异同点。 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2672 scanf(“%f”,&a); s=s+a; scanf(“%f”,&a); s=s+a; . 这样重复一百次,然后这样重复一百次,然后 输出输出s的值。的值。这样写显然非常麻烦。我们注意到程序中的 scanf(“%f”,&a); s=s+a;两句话是一直重复的,如果能用一种语句,使这两句话能自动的重复执行一百次,就可以简化了书写的麻烦,这就是循环语句。编程解决这样

47、的一个问题:编程解决这样的一个问题:从键盘输入一百个学生的成绩,求总成绩。从键盘输入一百个学生的成绩,求总成绩。从前面所学,有两种解决方法。从前面所学,有两种解决方法。1.设一百个变量,分别输入学生的成绩,然后求和。设一百个变量,分别输入学生的成绩,然后求和。 这种方法浪费内存空间,显然不实际。这种方法浪费内存空间,显然不实际。2.设一个变量,每次输入一个学生成绩,累加后再输入下一个学生成设一个变量,每次输入一个学生成绩,累加后再输入下一个学生成绩,如下:绩,如下: 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/26733.4.1 while循环循环 语句一般格式 while

48、(表达式) 语句 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2674功能:功能: 计算表达式的值,为非0(逻辑真)时,重复执行内嵌语句,每执行一次,就判断一次表达式的值,直到表达式的值为0 时结束循环,转去执行while后面的语句。 当表达式为真当表达式为真 语句语句表 达 式 非表 达 式 非0?语句语句 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2675例如:例如:【例3.15】编写程序,求100个自然数的和即: s=1+2+3+ +100 思路:寻找思路:寻找加数加数与与求和求和的规律的规律 加数加数 从从1变到变到100,每循环一次,使,每循环一

49、次,使i增增1,直到直到i的值超过的值超过100。 的的设为设为1。求和求和设变量设变量 存放和存放和,循环求,循环求,直至,直至i超过超过100。 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2676算法和程序:算法和程序:main( ) int i,sum; i=1; sum=0; while (i=100) sum=sum+i; i+; printf(sum=%dn,sum);运行运行jc5_1程序输出结果:程序输出结果:sum=5050 i=1,sum=0 当当i = 100 sum=sum+i i+输出输出sum 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系20

50、22/6/2677注意:注意: 如果while的 (表达式) 值为0,则循环体一次也不执行 (例如当i的初值=101) 。 在循环体中必须有使循环趋向结束的操作,否则循环将无限进行(死循环)。 在循环体中,语句的先后位置必须符合逻辑,否则会影响运算结果。 while (i=100) i+; sum=sum+i; 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2678注意(续):注意(续): 为了保证循环正常运行,应该特别注意: 循环控制条件的描述 控制条件的初始状态(初始值) 循环体内部对控制条件的影响 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/26795.

51、2 do-while语句语句 语句一般格式 do 语句 while (表达式); 功能: 先执行内嵌语句(循环体),之后计算表达式的值,不为0(逻辑真)时,再执行循环体并判断条件,直到表达式的值为 0 结束循环,转去执行while下面的语句。 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2680 do-while循环的算法循环的算法 循环体循环体当表达式为真当表达式为真N-S结构图结构图NY循环体循环体表达式非表达式非0?流程图流程图main( ) int i=1,sum=0; do sum=sum+i; i+; while (i=100); printf(%dn,sum);

52、 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2681说明:说明: while和do-while都能实现循环控制,while结构程序通常都可以转换成do-while结构 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2682do-while语句的简单应用语句的简单应用 【例3.16】用辗转相除法求m和n的最大公约数定义定义m、n、rmnT F m和和n交换交换r=m%nm=nn=r 当当r != 0时时输出最大公约数输出最大公约数m 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2683算法和程序:算法和程序:main( ) int m,n,r

53、; scanf(%d, %d,&m,&n); if (mn) r=m; m=n; n=r; do r=m%n; m=n; n=r; while(r!=0); printf(%dn,m); 运行运行jc5_3 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/26843.4.3 for语句语句 语句一般格式 for (表达式1;表达式2;表达式3) 语句 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2685for语句的算法语句的算法N-S结构图结构图for (表达式表达式1;表达式表达式2;表达式表达式3) 语句语句NY流程图流程图计算表达式计算表达式1 语句语句计

54、算表达式计算表达式3表达式表达式2为真为真?例如:main( ) int i,sum; sum=0; for ( i=1; i=100; i+) sum=sum+i; printf(sum=%dn,sum); 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2686省略省略for语句的表达式语句的表达式 表达式1、2、3全省略,即: for ( ; ; ) 就等同于:while (1),会无限循环(死循环)注意:在省略某个表达式时,应在适当位置进行循注意:在省略某个表达式时,应在适当位置进行循环控制的必要操作,以保证循环的正确执行环控制的必要操作,以保证循环的正确执行 宝鸡文理学

55、院计算机科学系宝鸡文理学院计算机科学系2022/6/2687例如:例如: i=1; for ( ; i100) for (i=1; i100) i+; 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2688说明:说明:所有用 while 语句实现的循环都可以用for 语句实现。 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2689for语句的简单应用语句的简单应用【例3.17】求n! ,即计算p=123n的值。 思路:求阶乘与求累加的运算处理过程类似,只要思路:求阶乘与求累加的运算处理过程类似,只要将将“ ”变为变为“ ”。设置:设置: ,初值为,初值为1,终

56、值为,终值为n(n是循环控制终是循环控制终值,需要从键盘输入)值,需要从键盘输入) ,每次循环令,每次循环令p = p*i 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2690程序:程序:main( ) int i, n; long p; p=1; printf(Enter n:); scanf(%d,&n); for (i=1; i=n; i+) p = p * i; printf(p = %ld n,p);运行运行jc5_4 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2691熟悉几个循环语句熟悉几个循环语句 while (!x) x+; 当 x=0 时

57、,执行循环体x+; 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2692几种循环语句的比较几种循环语句的比较while和do-while语句的表达式只有一个,for语句有三个。while 和for先判断循环条件后执行循环体,do-while语句先执行循环体后判断循环条件。 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/26933.4.4 循环结构中的跳转语句循环结构中的跳转语句continue & break 有如下三种语句实现跳转: continue语句 break语句 goto语句 在循环语句的循环体中使用,可以进行循环的流程控制 宝鸡文理学院计算机科学系

58、宝鸡文理学院计算机科学系2022/6/2694后续语句后续语句 后续语句后续语句continue语句及应用语句及应用 功能: 中断循环体的本次执行(即跳过循环体中尚未执行的语句),立即开始执行下一次循环。后续语句后续语句 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2695例如:例如: int x,n=0,s=0;while (n10) scanf(%d,&x); if (x0) continue; s+=x; n+; ; 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2696应用举例应用举例 【例3.18】把100200之间能被7整除的数,以十个数为一行的形

59、式输出,最后输出一共有多少个这样的数。 for (n=100; n=200; n+) n能被能被7整除整除 T F 终止本次循环终止本次循环 输出输出n 输出输出10个数个数 T F 换行换行 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2697算法和程序算法和程序main( ) int n,j=0; for(n=100;n=200;n+) if (n%7!=0) continue; printf(%6d,n); j+; if (j%10=0) printf(n); printf( n j=%dn,j); 运行运行jc5_7 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2

60、022/6/2698后续语句后续语句后续语句后续语句循环中循环中break的应用的应用 功能: 利用break语句能够强迫终止本层循环,转到后续语句执行。后续语句后续语句 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/2699例如:例如: int x,n=0,s=0;while (n10) scanf(%d,&x); if (x0) break; s+=x; n+; ; 宝鸡文理学院计算机科学系宝鸡文理学院计算机科学系2022/6/261003.4.5 循环的嵌套循环的嵌套 如果循环语句的循环体内又包含了另一条循环语句,则称为循环的嵌套 【例3.19】#include main

温馨提示

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

评论

0/150

提交评论