




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章第二章 C程序的基本结构程序的基本结构2/72第二章第二章 C程序的基本结构程序的基本结构n2.1 分支结构分支结构n2.2 关系运算和逻辑运算关系运算和逻辑运算n2.3 循环结构循环结构n2.4 break和和continue语句语句n2.5 goto语句语句n2.6 经典算法举例经典算法举例3/722.1 分支结构分支结构n为什么需要分支结构为什么需要分支结构顺序结构只能解决一些简单的问题,遇到需要顺序结构只能解决一些简单的问题,遇到需要进行进行条件判断条件判断的问题,就必须采用分支结构来的问题,就必须采用分支结构来处理。处理。n例:例:q请输出请输出2个数中的较大的数个数中的较大的
2、数q 请编程求解分段函数请编程求解分段函数:-1 x0y =4/722.1.1 单分支结构单分支结构n语法形式语法形式 if (表达式表达式) 语句语句;n执行过程执行过程q先计算表达式的值,若为真先计算表达式的值,若为真(非非0值值),则执行其后,则执行其后的语句;若值为的语句;若值为0,则继续向下执行其他语句,则继续向下执行其他语句q注意注意:语句可以是一条,也可以是多条:语句可以是一条,也可以是多条P真真A表达式表达式语句语句真真( (非非0)0)假假(0)(0)5/72n例例1、输入一个字符,并输出。其中有一个条、输入一个字符,并输出。其中有一个条件是如果该字符是小写的英文字母,则需把
3、它件是如果该字符是小写的英文字母,则需把它转换成大写字母再输出。转换成大写字母再输出。#include void main()char ch;ch = getchar();if (ch=a & ch=z)ch -= 32;putchar(ch);如果条件满足后还如果条件满足后还想再输出该字母的想再输出该字母的前导字符和后继字前导字符和后继字符怎么做?符怎么做?EG201.C6/72#include void main( ) int a, b, t; printf(“ input a, b: ”); scanf(“%d%d”, &a,&b); if (ab) t=a; a
4、=b; b=t; printf(“%d,%dn”, a, b);输入输入a , bt=aab?输出输出a , b真真假假 a=bb=tn例例2:输入:输入2个整数,按由小到大的顺序输出个整数,按由小到大的顺序输出EG202.C7/72n例例3、输入三个整数,把最大的输出。、输入三个整数,把最大的输出。#include void main( ) int a, b, c, max; printf(“ input a, b, c: ”); scanf(“%d%d%d”,&a, &b, &c); max = a; if (maxb) max = b; if (maxb?ab真真
5、假假ac?ac真真假假bc?bc真真假假n作业:输入作业:输入3个整数,按由小到大的顺序输出个整数,按由小到大的顺序输出9/722.1.2 双分支结构双分支结构n语法形式语法形式 if (表达式表达式) 语句语句1; else 语句语句2;n执行过程执行过程q先计算表达式的值,若为真先计算表达式的值,若为真(非非0值值),执行,执行if后的语后的语句句1;若为假;若为假(值为值为0),执行,执行else后的语句后的语句2P真真语句语句1语句语句2假假表达式表达式语句语句2 2真真( (非非0)0)假假(0)(0)语句语句1 110/72#include void main( ) int x,
6、y; printf(“ input x, y: ”); scanf(“%d%d”, &x, &y); if (x=y) printf(“max=%dn”, x); else printf(“max=%dn”, y); 输入输入x , yx=y?真真假假输出输出x输出输出yn例例4、输入、输入2个整数,请输出其中的较大的数个整数,请输出其中的较大的数EG204.C11/72#include void main( ) int x, y; printf(“ input x: ”); scanf(“%d”, &x); if (x=0) y=0; else y=x*x+1; pr
7、intf(“y=%dn”, y); 0 X=00 X0+1 X0Y=例例5、编程求解函数:、编程求解函数:EG205.C12/722.1.3 多分支结构多分支结构n语法形式语法形式if (表达式表达式1) 语句语句1;else if (表达式表达式2) 语句语句2;else if (表达式表达式3) 语句语句3;else if (表达式表达式n) 语句语句n;else 语句语句n+1;n执行过程执行过程q按顺序求各表达式的值。按顺序求各表达式的值。如果某一表达式的值为如果某一表达式的值为真(非真(非0),那么执行),那么执行其后相应的语句,执行其后相应的语句,执行完后整个完后整个if语句结束,
8、语句结束,其余语句则不被执行;其余语句则不被执行;如果没有一个表达式的如果没有一个表达式的值为真,那么执行最后值为真,那么执行最后的的else语句。语句。最后的最后的else部分可有可无。部分可有可无。13/72n例例6、编程求解函数、编程求解函数:-e-e2x+12x+1+3 x+3 x-2-22x-1 -2x32x-1 -2x3Y=3log3log1010(3x) x(3x) x3 3#include #includevoid main( ) double x,y; printf(Input x:); scanf(%lf,&x); if (x=-2 & x3)可以吗?可以吗
9、?EG206.C14/722.1.4 if语句的嵌套语句的嵌套n概念:指概念:指if语句的语句的if块或块或else块中,又包含一块中,又包含一个个if语句语句(可以是各种形式的可以是各种形式的)n作用:对复杂条件进行判断,实现多分支选择作用:对复杂条件进行判断,实现多分支选择n形式:多种多样形式:多种多样1. if (表达式表达式1) if (表达式表达式2) 语句语句2. if (表达式表达式1) 语句语句1 else if (表达式表达式2) 语句语句23. if (表达式表达式1) 语句语句1 else if (表达式表达式2) 语句语句2 else 语句语句34. if (表达式表达
10、式1) if (表达式表达式2) 语句语句1 else 语句语句2二义性?二义性?15/72n规定:规定:else总是与它前面最近的且未曾配对的总是与它前面最近的且未曾配对的if配对。配对。(1) if (表达式表达式1) if (表达式表达式2) 语句语句1; else 语句语句2; (2) if (表达式表达式1) if (表达式表达式2) 语句语句1; else 语句语句2; n对第对第4种形式可以有两种理解方式种形式可以有两种理解方式:要想实现这种方要想实现这种方式应该怎么做式应该怎么做 if (表达式表达式1) if (表达式表达式2) 语句语句1; else 语句语句2; 16/7
11、2n例例 编程求解函数:编程求解函数:-1 0 1(x0)y=程序程序1:if (x=0) if (x0) y=1; else y=0;else y=-1;程序程序3:y=-1;if (x!=0) if (x0) y=1; else y=0;改正程序改正程序3:y=-1;if (x!=0) if (x0) y=1; else y=0;17/72n关于关于ifif语句的说明:语句的说明:q表达式一般为关系表达式或逻辑表达式。但在表达式一般为关系表达式或逻辑表达式。但在C C语言中语言中它也它也可以是任意的数值表达式可以是任意的数值表达式。q表达式后面不能有任何标点符号表达式后面不能有任何标点符号
12、!每个语句都要以每个语句都要以“;”结束结束。qelseelse只能与只能与ifif配对使用配对使用。仅。仅elseelse本身不能单独作为一个本身不能单独作为一个语句使用。语句使用。if(3)if(3) n=1; n=1;if (a)if (a) printf(%d printf(%d, a);, a);if(n=3-3)if(n=3-3) x=1; x=1;elseelse x=-1; x=-1;if(x5);if(x5); y=x; y=x;elseelse y=2 y=2* *x-1;x-1;if(x5)if(x5) ; ; y=x; y=x;elseelse y=2 y=2* *x-
13、1;x-1;将出现语法错误将出现语法错误18/72n关于关于ifif语句的说明语句的说明( (续续) ):qif后的语句可以是一个语句也可以是若干个语句,这时后的语句可以是一个语句也可以是若干个语句,这时要用花括号括起来构成要用花括号括起来构成复合语句复合语句。q注:复合语句的花括号后注:复合语句的花括号后不能再写分号不能再写分号,复合语句在语,复合语句在语法上是一个整体,相当于一个语句。法上是一个整体,相当于一个语句。例:例: if (ab) t=a; a=b; b=t; 19/722.1.5 条件运算符条件运算符n条件运算符:条件运算符: ? : (C中唯一的三目运算符中唯一的三目运算符)
14、n优先级:仅高于赋值运算符优先级:仅高于赋值运算符n结合性:右结合结合性:右结合n条件表达式的形式:条件表达式的形式:表达式表达式1 ? 表达式表达式2 : 表达式表达式3n执行过程执行过程q首先求表达式首先求表达式1的值,若为真(非的值,若为真(非0),则求表达式),则求表达式2的值,且整个表达式的值为表达式的值,且整个表达式的值为表达式2的值;若表达的值;若表达式式1为假(为假(0),则求表达式),则求表达式3的值,且整个表达式的值,且整个表达式的值为表达式的值为表达式3的值。的值。20/72n说明说明q条件表达式不能完全取代条件表达式不能完全取代if语句,只有在语句,只有在if语句中内语
15、句中内嵌语句为赋值语句、且两个分支都给同一个变量赋嵌语句为赋值语句、且两个分支都给同一个变量赋值时才能代替值时才能代替if语句。语句。q条件表达式中,表达式条件表达式中,表达式1、表达式、表达式2和表达式和表达式3的类的类型可以不同。若表达式型可以不同。若表达式2和表达式和表达式3类型不同,则整类型不同,则整个条件表达式的值应为二者中较高的类型。个条件表达式的值应为二者中较高的类型。例:例:x= ab? a:b+1;x= (ab)? a:(b+1);ab? a : cd? c : dab? a : (cd? c : d)if (ab) max=a;else max=b;max = ab ? a
16、 : b;x = 21 ? 1 : 1.5x = 21 ? 1 : 1.5值为值为1.01.0 x = 1 ? a : 10 x = 1 ? a : 10 值为值为979721/72n例例7、输入一个字符,如果是大写字母,转换、输入一个字符,如果是大写字母,转换为小写,如果不是则不转换。输出最后得到的为小写,如果不是则不转换。输出最后得到的字符。字符。#includevoid main( ) char ch; scanf(%c, &ch); ch= (ch=A&ch=Z) ? (ch+32) : ch; printf(“%cn, ch);EG207.C22/722.1.6 sw
17、itch语句语句n请将输入的百分制成绩,转换成五分制成绩输请将输入的百分制成绩,转换成五分制成绩输出,转换标准如下:出,转换标准如下:grade = A 90 s 100B 80 s 90C 70 s 80D 60 s 70E 0 s 60n对于这种类型的问题,需要讨论的情况比较多,对于这种类型的问题,需要讨论的情况比较多,如果用如果用if嵌套的层次会比较多,程序可读性不嵌套的层次会比较多,程序可读性不好,这时通常会使用多分支选择语句好,这时通常会使用多分支选择语句switch。23/72n语法格式语法格式switch ( 表达式表达式 ) case 常量表达式常量表达式1 : 语句语句1;
18、case 常量表达式常量表达式2 : 语句语句2; : : : case 常量表达式常量表达式n : 语句语句n; default : 语句语句n+1; n执行过程执行过程q先计算表达式的值,测试该值是否与某常量表达式的值相同先计算表达式的值,测试该值是否与某常量表达式的值相同q若有相同者,流程转向其后面的语句执行若有相同者,流程转向其后面的语句执行q若无,再看有没有若无,再看有没有default部分:若有部分:若有default,则执行其后面的语句;,则执行其后面的语句;若无若无default,则,则switch语句什么也不做,流程转向其后继语句。语句什么也不做,流程转向其后继语句。24/7
19、2n例例8:#include void main() int k;scanf(“%d”, &k);switch(k)case 1: printf(“Executing case 1!n”);case 2: printf(“Executing case 2!n”);case 3: printf(“Executing case 3!n”);default: printf(“Executing default!n”);if (k=1) printf(“Executing case 1!n”); else if (k=2) printf(“Executing case 2!n”); else
20、if (k=3) printf(“Executing case 3!n”); else printf(“Executing default!n”); 25/72#include void main() int k;scanf(“%d”, &k);switch(k)case 1: printf(“Executing case 1!n”); break;case 2: printf(“Executing case 2!n”); break;case 3: printf(“Executing case 3!n”); break;default: printf(“Executing defau
21、lt!n”); break;EG208.C26/72n说明说明qswitch后的表达式一般多为后的表达式一般多为整型或字符型整型或字符型表达式表达式q各个各个case后常量表达式的值必须互不相同后常量表达式的值必须互不相同q各个各个case和和default的出现次序不影响执行结果的出现次序不影响执行结果;qcase后的语句为复合语句时可省略花括号后的语句为复合语句时可省略花括号 qcase后常量表达式只起语句标号的作用,每个后常量表达式只起语句标号的作用,每个case之后通常都有一个之后通常都有一个break,使流程跳出,使流程跳出switch语句语句q多个多个case可以共用一组执行语句可
22、以共用一组执行语句qswitch语句可以嵌套,但有多层语句可以嵌套,但有多层switch语句时,语句时,break只能退出本层的只能退出本层的switch语句体语句体case 6 : case 7 : printf(Resetn); break;但不能写成:但不能写成:case 6,7: .27/72#includevoid main( ) int grade; printf(“input grade:”); scanf(“%d”, &grade); switch(grade/10) case 10: case 9: printf(“grade is An”); break; case
23、 8: printf(“grade is Bn”); break; case 7: printf(“grade is Cn”); break; case 6: printf(“grade is Dn”); break; default: printf(“grade is En”); grade = A 90 s 100B 80 s 90C 70 s 80D 60 s 70E 0 s 60EG209.C例例9、将输入的百分制成绩,转换成五分制成绩输出、将输入的百分制成绩,转换成五分制成绩输出28/722.2 关系运算和逻辑运算关系运算和逻辑运算n关系运算符:关系运算符: 、=、 x+3; a =
24、 ? (2) a = y !=1 = x;a = ?1029/72n例:例: ca+b 等价于等价于 c(a+b) ab=c 等价于等价于 (ab)=c a=bc 等价于等价于 a=(bc 等价于等价于 a=(bc) n注意注意:q字符数据按其字符数据按其ASCII码值进行比较,码值进行比较,abq避免避免2个实数作个实数作 = 或或 != 的比较的比较q允许写成允许写成3x= -1 & x=a & ch=a & ch=A & chb)&(n=cd) c = (ab) & m+; d = (ab) | +n;m=0,n=1m=1,n=1m=1,n
25、=134/722.3 循环结构循环结构n请编程求解以下请编程求解以下2个问题:个问题:q请在屏幕上输出请在屏幕上输出10行星号,每行星号由行星号,每行星号由8个个*组成。组成。q请输出请输出110这十个整数这十个整数。#includevoid main( ) printf(*n); printf(*n); printf(*n);#includevoid main( ) printf(“%d ”, 1); printf(“%d ”, 2); printf(“%d ”, 10);使每个语句形式上保持一样,使每个语句形式上保持一样,改为:改为:int i = 1;printf(“%d ”, i);
26、i+;printf(“%d ”, i); i+; printf(“%d ”, i); i+;35/72nC语言有三种循环语句:语言有三种循环语句:qwhile语句:当型循环语句:当型循环qdowhile语句:直到型循环语句:直到型循环qfor语句:功能强大,经常使用语句:功能强大,经常使用nwhile循环循环语法形式:语法形式:while(表达式表达式) 语句;语句;执行过程:见图执行过程:见图真真(非非0)表达式成立吗表达式成立吗?语句语句假假(0)36/72n用循环怎么实现上述两个程序?用循环怎么实现上述两个程序?#includevoid main( ) int i;i = 1; whil
27、e(i=10)printf(*n);i+;#includevoid main( ) printf(*n); printf(*n); printf(*n);37/72#includevoid main( ) int i;i = 1;while(i=10)printf(“%d ”, i);i+;#includevoid main( ) printf(“%d“, 1); printf(“%d“, 2); printf(“%d“, 10);如果输出如果输出1100呢?呢?怎么改?怎么改?38/72n使用使用while语句要注意:语句要注意:q表达式中使用的循环控制表达式中使用的循环控制变量必须赋初值变
28、量必须赋初值 q表达式必须用表达式必须用( ) 括起来括起来q循环体为多条语句时循环体为多条语句时, 必必须用须用 把它们括起来把它们括起来q循环体中必须有使循环趋循环体中必须有使循环趋向结束的语句向结束的语句 #includevoid main( ) int i;i = 1; while(i=10)printf(*n);i+;39/72n例例10、求、求123100的和。的和。#include void main ( ) int i , sum; sum=0; i=1; while ( i=100 ) sum=sum+i ; i+; printf(“sum=%dn”, sum);变量变量i
29、i一方面用来一方面用来控制循环次数控制循环次数, , 同同时又作为求和运算时又作为求和运算中的一个运算对象中的一个运算对象n计算计算1+2+3+n(n为为任意正整数)和。任意正整数)和。n计算计算1+3+5+n(n为为奇数)的和。奇数)的和。EG210.C40/72n例例11、求某个班英语成绩的平均分,该班学生人、求某个班英语成绩的平均分,该班学生人数和每个学生的成绩由键盘输入。数和每个学生的成绩由键盘输入。#include void main ( ) int i , n ; float s , sum , ave ; sum=0; i=1; scanf(“%d”, &n); whil
30、e (i=n) scanf(“%f ”, &s); sum=sum+s ; i+ ; ave=sum/n ; printf(“ave=%6.2fn”, ave);EG211.C41/72ndo-while循环循环q语法形式:语法形式:do语句语句;while(表达式表达式);q执行过程:见图。执行过程:见图。q注意事项:同注意事项:同while语句语句表达式表达式0(假假)非非0(真真)42/72#include void main ( ) int i , sum; sum=0; i=1; do sum=sum+i; i+; while (i=100) ; printf(“sum=%d
31、n”, sum);EG212.Cn例例12、用、用do-while语句实现求语句实现求1100 的和。的和。43/72nwhile循环和循环和do-while循环的比较循环的比较 while do-whilewhile do-while(1)(1)先判断条件再执行循环体先判断条件再执行循环体 (1)(1)先执行循环体再判断条件先执行循环体再判断条件(2)(2)循环体可能一次也不执行循环体可能一次也不执行 (2)(2)至少执行一次循环体至少执行一次循环体void main( ) int sum=0 , i ; scanf(“%d”, &i ); while (i=10) sum=sum+
32、i ; i+ ; printf(”%dn”,sum);void main( ) int sum=0 , i ; scanf(“%d”, &i ); do sum=sum+i ; i+ ; while (i=10) ; printf(”%dn”,sum);假设输入假设输入i的值为的值为11,则输出则输出sum=?44/72nfor循环循环q语法形式语法形式 for(表达式表达式1; 表达式表达式2; 表达式表达式3)语句语句;q执行过程执行过程(1) 计算表达式计算表达式1 (只执行一只执行一次次)(2) 计算表达式计算表达式2,若值为真,若值为真则执行循环体,再执行第则执行循环体,再执
33、行第(3)步;若值为假则结束步;若值为假则结束循环循环(3) 计算表达式计算表达式3,再重复执,再重复执行第行第(2)步步计算表达式计算表达式1循环体语句循环体语句表达式表达式3表达式表达式2假(假(0)真(非真(非0)45/72说明:说明:、for语句的表达式可以缺省,但语句的表达式可以缺省,但两个分号不能缺省两个分号不能缺省;、若在、若在for语句之前已经对循环控制变量赋初值,则表达式语句之前已经对循环控制变量赋初值,则表达式1可以缺省;可以缺省;i=1;for ( ; i=100; i+) sum=sum+i;for (i=1; i100) break; sum=sum+i; 46/72
34、、表达式、表达式3也可以缺省,但应设法修改也可以缺省,但应设法修改循环控制变量,保证程序正常结束循环控制变量,保证程序正常结束for (i=1; i=100; ) sum=sum+i; i+; 、可以同时省略表达式、可以同时省略表达式1和表达式和表达式3,即只给循环条件。,即只给循环条件。i=0;for ( ; i=100; ) sum=sum+i; i+; 此时,等同于此时,等同于while语句。语句。、3个表达式都可以省略,如:个表达式都可以省略,如:for ( ; ; ) 循环体;循环体;while (1) 循环体;循环体;将无终止的执行循环。从语法上讲是正确的,但一般没将无终止的执行循
35、环。从语法上讲是正确的,但一般没有实际意义。有实际意义。47/72、for语句中的表达式语句中的表达式1和表达式和表达式3可以由可以由一个或多个赋值表一个或多个赋值表达式达式组成,当为多个表达式时,各表达式之间要用逗号运算组成,当为多个表达式时,各表达式之间要用逗号运算符(即符(即组成逗号表达式组成逗号表达式)。)。for (sum=0, i=1; i=100; i+) sum=sum+i;for (i=0, j=100; i=j; i+, j-) k=i+j;printf(i=%d,j=%d,k=%dn,i, j, k);48/72while和和forwhile(表达式表达式) 语句;语句;
36、for(exp1; exp2; exp3)语句语句;真真(非非0)表达式表达式语句语句假假(0)计算计算exp1语句语句exp3exp2假假(0)真真(非非0)exp1;while(exp2) 语句语句;exp3;49/72sum=0; i=1;while(i=100 ) sum=sum+i ; i+ ; sum=0; for ( i=1 ; i=100 ; i+) sum=sum+i;例、将例、将1 1100100求和的求和的whilewhile循环转换为用循环转换为用forfor循环实循环实现现50/72例例13、求正整数、求正整数n n的阶乘的阶乘n!n!,n n由键盘输入。由键盘输入。
37、#include void main( ) int n, i ; long fact; printf(“input n:”); scanf(“%d”, &n); fact=1; for ( i=1 ; i=n ; i+ ) fact=fact*i; printf(“%ldn”, fact);EG213.C51/72n循环的嵌套循环的嵌套一个循环体内又包含另一个一个循环体内又包含另一个完整的完整的循环结构循环结构,称为,称为循环循环嵌套嵌套。内层的循环中还可以嵌套循环,构成。内层的循环中还可以嵌套循环,构成多重循环多重循环。while ( ) while ( ) for ( ; ; )
38、for ( ; ; ) do do while ( ); while ( );while ( ) for ( ; ; ) for ( ; ; ) do while( ); while ( ) do while( ); 52/72例例14、输出如图所示的矩形:输出如图所示的矩形:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#include void main( ) printf(*n); printf(*n); printf(*n); printf(*n);#include void main(
39、 ) int i=1, j ; while (i=4) j=1; while ( j=5 ) putchar(*); j+; putchar(n); i+; 内外层循环的控内外层循环的控制变量不能重名制变量不能重名EG214_1.C53/72#include main( ) int i , j ; i=1; while (i=4) for (j=1; j=5;j+) putchar(*); putchar(n); i+; #include main( ) int i , j ; for ( i=1; i=4; i+) for (j=1; j=5; j+) putchar(*); putchar
40、(n); 例、上述程序用例、上述程序用forfor实现。实现。* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *EG214_3.CEG214_2.C54/72qC C语言中的三种循环结构,一般情况下可以相互代替语言中的三种循环结构,一般情况下可以相互代替q用用whilewhile和和do-whiledo-while时,循环变量的初始化应在时,循环变量的初始化应在whilewhile和和do-whiledo-while之前完成;而之前完成;而forfor语句一般在语句一般在表达式表达式1 1中实中实现
41、循环变量的初始化现循环变量的初始化q当当循环次数及控制条件循环次数及控制条件要要在程序运行过程中确定在程序运行过程中确定时,时,选用选用while或或do-while语句;语句;q在在初值、增量及控制条件明显初值、增量及控制条件明显,或,或循环次数已经给定循环次数已经给定的情况下,选用的情况下,选用for语句;语句;q在循环的执行过程中,应在循环的执行过程中,应不断的改变循环控制表达式不断的改变循环控制表达式的值的值,以便逐步形成使它为,以便逐步形成使它为0 0的条件,否则将可能出的条件,否则将可能出现死循环现死循环几种循环的比较:几种循环的比较:55/72几种循环的比较:几种循环的比较:q三
42、种循环可以相互嵌套,形成多重循环,外循环可以三种循环可以相互嵌套,形成多重循环,外循环可以包含多个或多重内循环,包含多个或多重内循环,循环之间可以并列但不能相循环之间可以并列但不能相交交,并列的循环控制变量可以同名,但嵌套的循环控并列的循环控制变量可以同名,但嵌套的循环控制变量不能同名制变量不能同名q不允许不允许用其它的控制语句用其它的控制语句把程序流程从循环体外转入把程序流程从循环体外转入循环体内循环体内,但必要时可以用,但必要时可以用breakbreak、gotogoto等语句把流等语句把流程从循环体内转到循环体外。程从循环体内转到循环体外。56/72nbreakbreak语句语句q格式:
43、格式: break;q功能:中止当前功能:中止当前循环循环语句或语句或switchswitch语句的执行语句的执行q说明:说明: n若是多重循环,若是多重循环,breakbreak只能使流程跳出离只能使流程跳出离breakbreak最近的一层;最近的一层;nbreakbreak只用于只用于switchswitch语句和循环语句。语句和循环语句。2.4 break语句和语句和continue语句语句57/72例例15、计算、计算 r=1r=1到到 r=10r=10时的圆面积,直到面积时的圆面积,直到面积大于大于100100为止为止#include void main( ) float area;
44、 int r; for (r =1; r 100) break; printf(%6.2fn, area); 输出结果输出结果: : 3.14 3.14 12.56 12.56 28.26 28.26 50.24 50.24 78.50 78.50while ( ) break; .EG215.C58/72ncontinuecontinue语句语句q格式:格式: continue;q功能:功能:提前结束本次循环体的执行提前结束本次循环体的执行(不再执行循环体(不再执行循环体中中continuecontinue后面的语句),后面的语句),接着进行下一次是否执行接着进行下一次是否执行循环的判定循环
45、的判定q说明:说明:ncontinuecontinue语句只能用于语句只能用于循环语句循环语句中,它是一种具有中,它是一种具有特殊功能的转移语句;特殊功能的转移语句;ncontinuecontinue与与breakbreak不同:不同:continuecontinue语句只结束本次循语句只结束本次循环环,而不是终止整个循环的执行;而,而不是终止整个循环的执行;而breakbreak语句则结语句则结束整个循环束整个循环,不再判断循环条件是否成立。,不再判断循环条件是否成立。59/72例例16、输入、输入30个字符,统计其中数字字符的个数。个字符,统计其中数字字符的个数。 #include voi
46、d main( ) int i, sum=0; char ch; for (i=1; i=30; i+) ch=getchar( ); if ( ch9 ) continue; sum+; printf(%dn, sum);while ( ) continue; .EG216.C60/72例例17、把、把1010到到2020之间能被之间能被3 3整除的数输出整除的数输出#include void main( ) int n; for (n=10; n=20; n+) if (n%3 != 0) continue; printf(%d , n); 12 15 1812 15 18EG217.C6
47、1/72判断判断m m是否是素数可以让是否是素数可以让m m被被2 2、3 3、4 4 去除,若去除,若 能被其中的任何一个整数整除,则证明不是素数;相反,能被其中的任何一个整数整除,则证明不是素数;相反,若不能被其中的任何一个整数整除,则证明是素数。若不能被其中的任何一个整数整除,则证明是素数。m例例18、输入一个大于、输入一个大于3的正整数,判断该数是否的正整数,判断该数是否为素数为素数62/72#include #include void main( ) int m , i , k ; scanf (%d , &m ); k = sqrt ( m+1 ) ; for ( i=2;
48、 i = k ; i+) if ( m % i =0) break; if ( ) printf ( %d is a prime numbern , m ) ; else printf ( %d is not a prime numbern , m ) ;i = k+1EG218_1.C63/72例、如果要打印例、如果要打印3 3100100之间的全部素数,怎么做?之间的全部素数,怎么做?for (m=3; m=100; m+=2)k=sqrt(m);for (i=2; i=k; i+) if (m%i=0) break;if (i= k+1) printf(%-5d,m);EG218_2.C
49、64/72ngotogoto语句语句qgotogoto语句是一种使程序的流程无条件转移的语句语句是一种使程序的流程无条件转移的语句n一般形式为:一般形式为:gotogoto 语句标号;语句标号;q语句标号是由用户自行定义的标识符(由字母、数字、语句标号是由用户自行定义的标识符(由字母、数字、下划线组成,且第一个字符必须为字母或下划线),下划线组成,且第一个字符必须为字母或下划线),不能用整数来做标号。不能用整数来做标号。 例如:例如:gotogoto label_1; goto label_1; goto 123; 123;qgotogoto 语句的功能是无条件地跳转到语句标号所指定的语句的功
50、能是无条件地跳转到语句标号所指定的本函数内的那条语句。本函数内的那条语句。2.5 goto语句语句65/72例例19、用、用ifif语句和语句和gotogoto语句构成循环,求语句构成循环,求1 1100100的和的和#include void main()int i, sum;i=1; sum=0;loop: if (i=100) sum=sum+i; i+; goto loop; printf (“sum=%dn”, sum);EG219.C66/72例例20、输出、输出*组成的直角三角形组成的直角三角形 *#include void main( ) int i , j ; for( i=
51、1; i=4; i+) for (j=1; ; j+) putchar(*); putchar(n); 特点特点: : 第第i i行有行有i i个星号个星号2.6 经典算法举例经典算法举例EG220.Cj=i67/72例例21、 求求Fibonacci数列数列1 , 1 , 2 , 3 , 5 , 8 , 的前的前20个数个数 #include void main( ) int i , f1 , f2 , f3; f1=f2=1; printf(“%8d%8d”, f1 , f2); for ( i=3 ; i=20 ; i+ ) f3=f1+f2; f1=f2; f2=f3; printf(
52、“%8d”, f3); if ( i%4=0) putchar(n); 分析数列的规律分析数列的规律: 从第从第3个数开始,每个数个数开始,每个数是其前两个数之和是其前两个数之和输出结果输出结果: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765EG221.C68/72例例22、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上
53、都吃了前的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第一天剩下的一半零一个。到第1010天早上想再吃时,只剩下天早上想再吃时,只剩下一个桃子了。求第一天共摘了多少桃子一个桃子了。求第一天共摘了多少桃子? ?q分析分析: : 假设第假设第1 1天摘了天摘了x1x1个桃子,第个桃子,第1 1天吃了天吃了x1/2+1x1/2+1个,个,则剩了则剩了x1/2-1x1/2-1个个, , 如果用如果用x2x2表示剩下的桃子数表示剩下的桃子数( (即即x1/2-x1/2-1=x2)1=x2),则,则x1=(x2+1)x1=(x2+1)* *2 2。已知第。已知第1010天只有一个桃子,可天只有一个桃子,可以通过这个公式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 审计练习试题附答案
- 育婴员理论竞赛复习试题
- 2025黑龙江省建筑安全员知识题库及答案
- 2025江西省建筑安全员B证考试题库
- 幼儿园一日活动流程培训总结 怎么写范文
- 高三一轮复习+导学案 耕地、海洋空间资源与国家安全+
- 2025年贵州水利水电职业技术学院单招职业技能测试题库参考答案
- 2025年甘孜职业学院单招职业倾向性测试题库及参考答案
- 2024-2025学年江苏省南京市五校联盟高二(上)期末考试语文试卷
- 2025-2030年中国电动变焦一体化摄像机行业运行态势及发展趋势分析报告
- 手机归属地表格
- 项目团队管理课件
- 《职业教育》专业知识考试复习题库及答案
- 江西2023公务员考试真题及答案
- 《国家中药饮片炮制规范》全文
- 财务管理实务(第二版)高职PPT完整版全套教学课件
- 中国古代快递的产生与发展
- 高二物理上期期末复习备考黄金30题 专题04 大题好拿分(提升20题)
- 节事活动策划与组织管理 节事活动概论
- 电梯安装质量手册、程序文件、作业指导书及记录表符合特种设备许可规范TSG07-2019
- 肋骨骨折病人的业务学习
评论
0/150
提交评论