C语言程序的基本结构.ppt

上传人:wuy****n92 文档编号:70107028 上传时间:2023-01-16 格式:PPT 页数:72 大小:607.50KB
返回 下载 相关 举报
C语言程序的基本结构.ppt_第1页
第1页 / 共72页
C语言程序的基本结构.ppt_第2页
第2页 / 共72页
点击查看更多>>
资源描述

《C语言程序的基本结构.ppt》由会员分享,可在线阅读,更多相关《C语言程序的基本结构.ppt(72页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第二章第二章 C程序的基本结构程序的基本结构1第二章第二章 C程序的基本结构程序的基本结构n2.1 分支结构分支结构n2.2 关系运算和逻辑运算关系运算和逻辑运算n2.3 循环结构循环结构n2.4 break和和continue语句语句n2.5 goto语句语句n2.6 经典算法举例经典算法举例22.1 分支结构分支结构n为什么需要分支结构为什么需要分支结构顺序结构只能解决一些简单的问题,遇到需要顺序结构只能解决一些简单的问题,遇到需要进行进行条件判断条件判断的问题,就必须采用分支结构来的问题,就必须采用分支结构来处理。处理。n例:例:q请输出请输出2个数中的较大的数个数中的较大的数q 请编程

2、求解分段函数请编程求解分段函数:-1 x0y=32.1.1 单分支结构单分支结构n语法形式语法形式 if(表达式表达式)语句语句;n执行过程执行过程q先计算表达式的值,若为真先计算表达式的值,若为真(非非0值值),则执行其后,则执行其后的语句;若值为的语句;若值为0,则继续向下执行其他语句,则继续向下执行其他语句q注意注意:语句可以是一条,也可以是多条:语句可以是一条,也可以是多条P真真A表达式表达式语句语句真真(非非0)0)假假(0)(0)4n例例1、输入一个字符,并输出。其中有一个条、输入一个字符,并输出。其中有一个条件是如果该字符是小写的英文字母,则需把它件是如果该字符是小写的英文字母,

3、则需把它转换成大写字母再输出。转换成大写字母再输出。#include void main()char ch;ch=getchar();if(ch=a&ch=z)ch-=32;putchar(ch);如果条件满足后还如果条件满足后还想再输出该字母的想再输出该字母的前导字符和后继字前导字符和后继字符怎么做?符怎么做?EG201.C5#include void main()int a,b,t;printf(“input a,b:”);scanf(“%d%d”,&a,&b);if(ab)t=a;a=b;b=t;printf(“%d,%dn”,a,b);输入输入a,bt=aab?输出输出a,b真真假假

4、a=bb=tn例例2:输入:输入2个整数,按由小到大的顺序输出个整数,按由小到大的顺序输出EG202.C6n例例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真真假假ac?ac真真假假bc?bc真真假假n作业:输入作业:输入3个整数,按由小到大的顺序输出个整数,按由小到大的顺序输出82.1.2 双分支结构双分支结构n语法形式语法形式 if(表达式表达式)语句

5、语句1;else 语句语句2;n执行过程执行过程q先计算表达式的值,若为真先计算表达式的值,若为真(非非0值值),执行,执行if后的语后的语句句1;若为假;若为假(值为值为0),执行,执行else后的语句后的语句2P真真语句语句1语句语句2假假表达式表达式语句语句2 2真真(非非0)0)假假(0)(0)语句语句1 19#include void main()int x,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?真真假假输出输出

6、x输出输出yn例例4、输入、输入2个整数,请输出其中的较大的数个整数,请输出其中的较大的数EG204.C10#include void main()int x,y;printf(“input x:”);scanf(“%d”,&x);if(x=0)y=0;else y=x*x+1;printf(“y=%dn”,y);0 X=00 X0+1 X0Y=例例5、编程求解函数:、编程求解函数:EG205.C112.1.3 多分支结构多分支结构n语法形式语法形式if(表达式表达式1)语句语句1;else if(表达式表达式2)语句语句2;else if(表达式表达式3)语句语句3;else if(表达式表

7、达式n)语句语句n;else 语句语句n+1;n执行过程执行过程q按顺序求各表达式的值。按顺序求各表达式的值。如果某一表达式的值为如果某一表达式的值为真(非真(非0),那么执行),那么执行其后相应的语句,执行其后相应的语句,执行完后整个完后整个if语句结束,语句结束,其余语句则不被执行;其余语句则不被执行;如果没有一个表达式的如果没有一个表达式的值为真,那么执行最后值为真,那么执行最后的的else语句。语句。最后的最后的else部分可有可无。部分可有可无。12n例例6、编程求解函数、编程求解函数:-e-e2x+12x+1+3 x+3 x-2-22x-1 -2x32x-1 -2x3Y=3log3

8、log1010(3x)x(3x)x3 3#include#includevoid main()double x,y;printf(Input x:);scanf(%lf,&x);if(x=-2&x3)可以吗?可以吗?EG206.C132.1.4 if语句的嵌套语句的嵌套n概念:指概念:指if语句的语句的if块或块或else块中,又包含一个块中,又包含一个if语句语句(可以是各种形式的可以是各种形式的)n作用:对复杂条件进行判断,实现多分支选择作用:对复杂条件进行判断,实现多分支选择n形式:多种多样形式:多种多样1.if(表达式表达式1)if(表达式表达式2)语句语句2.if(表达式表达式1)语

9、句语句1 else if(表达式表达式2)语句语句23.if(表达式表达式1)语句语句1 else if(表达式表达式2)语句语句2 else 语句语句34.if (表达式表达式1)if(表达式表达式2)语句语句1 else 语句语句2二义性?二义性?14n规定:规定:else总是与它前面最近的且未曾配对的总是与它前面最近的且未曾配对的if配对。配对。(1)if(表达式表达式1)if(表达式表达式2)语句语句1;else 语句语句2;(2)if(表达式表达式1)if(表达式表达式2)语句语句1;else 语句语句2;n对第对第4种形式可以有两种理解方式种形式可以有两种理解方式:要想实现这种方要

10、想实现这种方式应该怎么做式应该怎么做 if(表达式表达式1)if(表达式表达式2)语句语句1;else 语句语句2;15n例例 编程求解函数:编程求解函数:-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;16n关于关于ifif语句的说明:语句的说明:q表达式一般为关系表达式或逻辑表达式。但在表达式一般为关系表达式或逻辑表达式。但在C C语言中语言中它也它也可以是任意的数值表达式

11、可以是任意的数值表达式。q表达式后面不能有任何标点符号表达式后面不能有任何标点符号!每个语句都要以每个语句都要以“;”结束结束。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*x-1;y=2*x-1;if(x5)if(x5);y=x;y=x;

12、elseelse y=2*x-1;y=2*x-1;将出现语法错误将出现语法错误17n关于关于ifif语句的说明语句的说明(续续):qif后的语句可以是一个语句也可以是若干个语句,这时后的语句可以是一个语句也可以是若干个语句,这时要用花括号括起来构成要用花括号括起来构成复合语句复合语句。q注:复合语句的花括号后注:复合语句的花括号后不能再写分号不能再写分号,复合语句在语,复合语句在语法上是一个整体,相当于一个语句。法上是一个整体,相当于一个语句。例:例:if(ab)t=a;a=b;b=t;182.1.5 条件运算符条件运算符n条件运算符:条件运算符:?:(C中唯一的三目运算中唯一的三目运算符符)

13、n优先级:仅高于赋值运算符优先级:仅高于赋值运算符n结合性:右结合结合性:右结合n条件表达式的形式:条件表达式的形式:表达式表达式1?表达式表达式2:表达式表达式3n执行过程执行过程q首先求表达式首先求表达式1的值,若为真(非的值,若为真(非0),则求表达式),则求表达式2的值,且整个表达式的值为表达式的值,且整个表达式的值为表达式2的值;若表达的值;若表达式式1为假(为假(0),则求表达式),则求表达式3的值,且整个表达式的值,且整个表达式的值为表达式的值为表达式3的值。的值。19n说明说明q条件表达式不能完全取代条件表达式不能完全取代if语句,只有在语句,只有在if语句中内语句中内嵌语句为

14、赋值语句、且两个分支都给同一个变量赋嵌语句为赋值语句、且两个分支都给同一个变量赋值时才能代替值时才能代替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:b;x=21?1:1.5x=21?1:1.5值为值为1.

15、01.0 x=1?a:10 x=1?a:10 值为值为979720n例例7、输入一个字符,如果是大写字母,转换、输入一个字符,如果是大写字母,转换为小写,如果不是则不转换。输出最后得到的为小写,如果不是则不转换。输出最后得到的字符。字符。#includevoid main()char ch;scanf(%c,&ch);ch=(ch=A&ch=Z)?(ch+32):ch;printf(“%cn,ch);EG207.C212.1.6 switch语句语句n请将输入的百分制成绩,转换成五分制成绩输请将输入的百分制成绩,转换成五分制成绩输出,转换标准如下:出,转换标准如下:grade=A 90 s 1

16、00B 80 s 90C 70 s 80D 60 s 70E 0 s 60n对于这种类型的问题,需要讨论的情况比较多,对于这种类型的问题,需要讨论的情况比较多,如果用如果用if嵌套的层次会比较多,程序可读性不嵌套的层次会比较多,程序可读性不好,这时通常会使用多分支选择语句好,这时通常会使用多分支选择语句switch。22n语法格式语法格式switch(表达式表达式)case 常量表达式常量表达式1:语句语句1;case 常量表达式常量表达式2:语句语句2;:case 常量表达式常量表达式n:语句语句n;default:语句语句n+1;n执行过程执行过程q先计算表达式的值,测试该值是否与某常量表

17、达式的值相同先计算表达式的值,测试该值是否与某常量表达式的值相同q若有相同者,流程转向其后面的语句执行若有相同者,流程转向其后面的语句执行q若无,再看有没有若无,再看有没有default部分:若有部分:若有default,则执行其后面的语句;,则执行其后面的语句;若无若无default,则,则switch语句什么也不做,流程转向其后继语句。语句什么也不做,流程转向其后继语句。23n例例8:#include void main()int k;scanf(“%d”,&k);switch(k)case 1:printf(“Executing case 1!n”);case 2:printf(“Exe

18、cuting 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 if(k=3)printf(“Executing case 3!n”);else printf(“Executing default!n”);24#include void main()int k;scanf(“%d”,&k);switch(k)cas

19、e 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 default!n”);break;EG208.C25n说明说明qswitch后的表达式一般多为后的表达式一般多为整型或字符型整型或字符型表达式表达式q各个各个case后常量表达式的值必须互不相同后常量表达式的值必须互不相同q各个各个case和和default的出现次序不影响执行结果的出现次序不影响执

20、行结果;qcase后的语句为复合语句时可省略花括号后的语句为复合语句时可省略花括号 qcase后常量表达式只起语句标号的作用,每个后常量表达式只起语句标号的作用,每个case之后通常都有一个之后通常都有一个break,使流程跳出,使流程跳出switch语句语句q多个多个case可以共用一组执行语句可以共用一组执行语句qswitch语句可以嵌套,但有多层语句可以嵌套,但有多层switch语句时,语句时,break只能退出本层的只能退出本层的switch语句体语句体case 6:case 7:printf(Resetn);break;但不能写成:但不能写成:case 6,7:.26#include

21、void main()int grade;printf(“input grade:”);scanf(“%d”,&grade);switch(grade/10)case 10:case 9:printf(“grade is An”);break;case 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 70

22、E 0 s 60EG209.C例例9、将输入的百分制成绩,转换成五分制成绩输出、将输入的百分制成绩,转换成五分制成绩输出272.2 关系运算和逻辑运算关系运算和逻辑运算n关系运算符:关系运算符:、=、x+3;a=?(2)a=y!=1=x;a=?1028n例:例: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

23、=cd)c=(ab)&m+;d=(ab)|+n;m=0,n=1m=1,n=1m=1,n=1332.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);使每个语句形式上保持一样,使每个语句形式上保持一样,改为:改为:i

24、nt i=1;printf(“%d”,i);i+;printf(“%d”,i);i+;printf(“%d”,i);i+;34nC语言有三种循环语句:语言有三种循环语句:qwhile语句:当型循环语句:当型循环qdowhile语句:直到型循环语句:直到型循环qfor语句:功能强大,经常使用语句:功能强大,经常使用nwhile循环循环语法形式:语法形式:while(表达式表达式)语句;语句;执行过程:见图执行过程:见图真真(非非0)表达式成立吗表达式成立吗?语句语句假假(0)35n用循环怎么实现上述两个程序?用循环怎么实现上述两个程序?#includevoid main()int i;i=1;w

25、hile(i=10)printf(*n);i+;#includevoid main()printf(*n);printf(*n);printf(*n);36#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呢呢?怎么改?怎么改?37n使用使用while语句要注意:语句要注意:q表达式中使用的循环控制表达式中使用的循环控制变量必须赋初值变量必须赋初值 q表达式必须用表达式必须用(

26、)括起来括起来q循环体为多条语句时循环体为多条语句时,必必须用须用 把它们括起来把它们括起来q循环体中必须有使循环趋循环体中必须有使循环趋向结束的语句向结束的语句#includevoid main()int i;i=1;while(i=10)printf(*n);i+;38n例例10、求、求123100的和。的和。#include void main()int i,sum;sum=0;i=1;while (i=100)sum=sum+i;i+;printf(“sum=%dn”,sum);变量变量i i一方面用来一方面用来控制循环次数控制循环次数,同同时又作为求和运算时又作为求和运算中的一个运算

27、对象中的一个运算对象n计算计算1+2+3+n(n为任意正整数)和。为任意正整数)和。n计算计算1+3+5+n(n为奇数)的和。为奇数)的和。EG210.C39n例例11、求某个班英语成绩的平均分,该班学生人、求某个班英语成绩的平均分,该班学生人数和每个学生的成绩由键盘输入。数和每个学生的成绩由键盘输入。#include void main()int i,n;float s,sum,ave;sum=0;i=1;scanf(“%d”,&n);while (i=n)scanf(“%f”,&s);sum=sum+s;i+;ave=sum/n;printf(“ave=%6.2fn”,ave);EG211

28、.C40ndo-while循环循环q语法形式:语法形式:do语句语句;while(表达式表达式);q执行过程:见图。执行过程:见图。q注意事项:同注意事项:同while语句语句表达式表达式0(假假)非非0(真真)41#include void main()int i,sum;sum=0;i=1;do sum=sum+i;i+;while(i=100);printf(“sum=%dn”,sum);EG212.Cn例例12、用、用do-while语句实现求语句实现求1100 的和。的和。42nwhile循环和循环和do-while循环的比较循环的比较 while do-whilewhile do-

29、while(1)(1)先判断条件再执行循环体先判断条件再执行循环体 (1)(1)先执行循环体再判断条件先执行循环体再判断条件(2)(2)循环体可能一次也不执行循环体可能一次也不执行 (2)(2)至少执行一次循环体至少执行一次循环体void main()int sum=0,i;scanf(“%d”,&i);while(i=10)sum=sum+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,则输出

30、则输出sum=?43nfor循环循环q语法形式语法形式 for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句;q执行过程执行过程(1)计算表达式计算表达式1(只执行一只执行一次次)(2)计算表达式计算表达式2,若值为真,若值为真则执行循环体,再执行第则执行循环体,再执行第(3)步;若值为假则结束步;若值为假则结束循环循环(3)计算表达式计算表达式3,再重复执,再重复执行第行第(2)步步计算表达式计算表达式1循环体语句循环体语句表达式表达式3表达式表达式2假(假(0)真(非真(非0)44说明:说明:、for语句的表达式可以缺省,但语句的表达式可以缺省,但两个分号不能缺省两个分号不能缺

31、省;、若在、若在for语句之前已经对循环控制变量赋初值,则表达式语句之前已经对循环控制变量赋初值,则表达式1可以缺省;可以缺省;i=1;for(;i=100;i+)sum=sum+i;for(i=1;i100)break;sum=sum+i;45、表达式、表达式3也可以缺省,但应设法修改也可以缺省,但应设法修改循环控制变量,保证程序正常结束循环控制变量,保证程序正常结束for(i=1;i=100;)sum=sum+i;i+;、可以同时省略表达式、可以同时省略表达式1和表达式和表达式3,即只给循环条件。,即只给循环条件。i=0;for(;i=100;)sum=sum+i;i+;此时,等同于此时,

32、等同于while语句。语句。、3个表达式都可以省略,如:个表达式都可以省略,如:for(;)循环体;循环体;while(1)循环体;循环体;将无终止的执行循环。从语法上讲是正确的,但一般没将无终止的执行循环。从语法上讲是正确的,但一般没有实际意义。有实际意义。46、for语句中的表达式语句中的表达式1和表达式和表达式3可以由可以由一个或多个赋值表一个或多个赋值表达式达式组成,当为多个表达式时,各表达式之间要用逗号运算组成,当为多个表达式时,各表达式之间要用逗号运算符(即符(即组成逗号表达式组成逗号表达式)。)。for(sum=0,i=1;i=100;i+)sum=sum+i;for(i=0,j

33、=100;i=j;i+,j-)k=i+j;printf(i=%d,j=%d,k=%dn,i,j,k);47while和和forwhile(表达式表达式)语句;语句;for(exp1;exp2;exp3)语句语句;真真(非非0)表达式表达式语句语句假假(0)计算计算exp1语句语句exp3exp2假假(0)真真(非非0)exp1;while(exp2)语句语句;exp3;48sum=0;i=1;while(i=100)sum=sum+i;i+;sum=0;for(i=1;i=100;i+)sum=sum+i;例、将例、将1 1100100求和的求和的whilewhile循环转换为用循环转换为用f

34、orfor循环实循环实现现49例例13、求正整数、求正整数n n的阶乘的阶乘n!n!,n n由键盘输入。由键盘输入。#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.C50n循环的嵌套循环的嵌套一个循环体内又包含另一个一个循环体内又包含另一个完整的完整的循环结构循环结构,称为,称为循环循环嵌套嵌套。内层的循环中还可以嵌套循环,构成。内层的循环中还可以嵌套循环,构成多重循环多重循环。w

35、hile()while()for(;)for(;)do do while();while();while()for(;)for(;)do while();while()do while();51例例14、输出如图所示的矩形:输出如图所示的矩形:*#include void main()printf(*n);printf(*n);printf(*n);printf(*n);#include void main()int i=1,j;while(i=4)j=1;while(j=5)putchar(*);j+;putchar(n);i+;内外层循环的控内外层循环的控制变量不能重名制变量不能重名EG2

36、14_1.C52#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(n);例、上述程序用例、上述程序用forfor实现。实现。*EG214_3.CEG214_2.C53qC C语言中的三种循环结构,一般情况下可以相互代替语言中的三种循环结构,一般情况下可以相互代替q用用whilewhile和和do-whiledo-while时,循环变量的初始化应在时,

37、循环变量的初始化应在whilewhile和和do-whiledo-while之前完成;而之前完成;而forfor语句一般在语句一般在表达式表达式1 1中实中实现循环变量的初始化现循环变量的初始化q当当循环次数及控制条件循环次数及控制条件要要在程序运行过程中确定在程序运行过程中确定时,时,选用选用while或或do-while语句;语句;q在在初值、增量及控制条件明显初值、增量及控制条件明显,或,或循环次数已经给定循环次数已经给定的情况下,选用的情况下,选用for语句;语句;q在循环的执行过程中,应在循环的执行过程中,应不断的改变循环控制表达式不断的改变循环控制表达式的值的值,以便逐步形成使它为

38、,以便逐步形成使它为0 0的条件,否则将可能出的条件,否则将可能出现死循环现死循环几种循环的比较:几种循环的比较:54几种循环的比较:几种循环的比较:q三种循环可以相互嵌套,形成多重循环,外循环可以三种循环可以相互嵌套,形成多重循环,外循环可以包含多个或多重内循环,包含多个或多重内循环,循环之间可以并列但不能相循环之间可以并列但不能相交交,并列的循环控制变量可以同名,但嵌套的循环控并列的循环控制变量可以同名,但嵌套的循环控制变量不能同名制变量不能同名q不允许不允许用其它的控制语句用其它的控制语句把程序流程从循环体外转入把程序流程从循环体外转入循环体内循环体内,但必要时可以用,但必要时可以用br

39、eakbreak、gotogoto等语句把流等语句把流程从循环体内转到循环体外。程从循环体内转到循环体外。55nbreakbreak语句语句q格式:格式:break;q功能:中止当前功能:中止当前循环循环语句或语句或switchswitch语句的执行语句的执行q说明:说明:n若是多重循环,若是多重循环,breakbreak只能使流程跳出离只能使流程跳出离breakbreak最近的一层;最近的一层;nbreakbreak只用于只用于switchswitch语句和循环语句。语句和循环语句。2.4 break语句和语句和continue语句语句56例例15、计算、计算 r=1 r=1到到 r=10

40、r=10时的圆面积,直到面积时的圆面积,直到面积大于大于100100为止为止#include void main()float area;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.C57ncontinuecontinue语句语句q格式:格式:continue;q功能:功能:提前结束本次循环体的执行提前结束本次循环体的执行(不再执行循环体(不再执行循环体中中continuec

41、ontinue后面的语句),后面的语句),接着进行下一次是否执行接着进行下一次是否执行循环的判定循环的判定q说明:说明:ncontinuecontinue语句只能用于语句只能用于循环语句循环语句中,它是一种具有中,它是一种具有特殊功能的转移语句;特殊功能的转移语句;ncontinuecontinue与与breakbreak不同:不同:continuecontinue语句只结束本次循语句只结束本次循环环,而不是终止整个循环的执行;而,而不是终止整个循环的执行;而breakbreak语句则结语句则结束整个循环束整个循环,不再判断循环条件是否成立。,不再判断循环条件是否成立。58例例16、输入、输入

42、30个字符,统计其中数字字符的个数。个字符,统计其中数字字符的个数。#include void 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.C59例例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 18

43、EG217.C60判断判断m m是否是素数可以让是否是素数可以让m m被被2 2、3 3、4 4 去除,若去除,若 能被其中的任何一个整数整除,则证明不是素数;相反,能被其中的任何一个整数整除,则证明不是素数;相反,若不能被其中的任何一个整数整除,则证明是素数。若不能被其中的任何一个整数整除,则证明是素数。例例18、输入一个大于、输入一个大于3的正整数,判断该数是否的正整数,判断该数是否为素数为素数61#include#include void main()int m,i,k;scanf(%d,&m);k=sqrt(m+1);for(i=2;i=k;i+)if (m%i=0)break;if(

44、)printf(%d is a prime numbern,m);else printf(%d is not a prime numbern,m);i=k+1EG218_1.C62例、如果要例、如果要打印打印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.C63ngotogoto语句语句qgotogoto语句是一种使程序的流程无条件转移的语句语句是一种使程序的流程无条件转移的语句n一般形式为:一般

45、形式为:goto goto 语句标号;语句标号;q语句标号是由用户自行定义的标识符(由字母、数字、语句标号是由用户自行定义的标识符(由字母、数字、下划线组成,且第一个字符必须为字母或下划线),下划线组成,且第一个字符必须为字母或下划线),不能用整数来做标号。不能用整数来做标号。例如:例如:goto label_1;goto 123;goto label_1;goto 123;qgoto goto 语句的功能是无条件地跳转到语句标号所指定的语句的功能是无条件地跳转到语句标号所指定的本函数内的那条语句。本函数内的那条语句。2.5 goto语句语句64例例19、用、用ifif语句和语句和gotogo

46、to语句构成循环,求语句构成循环,求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.C65例例20、输出、输出*组成的直角三角形组成的直角三角形*#include void main()int i,j;for(i=1;i=4;i+)for(j=1;j+)putchar(*);putchar(n);特点特点:第第i i行有行有i i个星号个星号2.6 经典算法举例经典算法举例EG220.Cj=i66例例21、求

47、求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(“%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 6

48、765EG221.C67例例22、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第一天剩下的一半零一个。到第1010天早上想再吃时,只剩下天早上想再吃时,只剩下一个桃子了。求第一天共摘了多少桃子一个桃子了。求第一天共摘了多少桃子?q分析分析:假设第假设第1 1天摘了天摘了x1x1个桃子,第个桃子,第1 1天吃了天吃了x1/2+

49、1x1/2+1个,个,则剩了则剩了x1/2-1x1/2-1个个,如果用如果用x2x2表示剩下的桃子数表示剩下的桃子数(即即x1/2-x1/2-1=x2)1=x2),则,则x1=(x2+1)*2x1=(x2+1)*2。已知第。已知第1010天只有一个桃子,可天只有一个桃子,可以通过这个公式求出第以通过这个公式求出第9 9天的桃子数,再继续用公式求天的桃子数,再继续用公式求出第出第8 8天的桃子数,天的桃子数,直至求出第直至求出第1 1天的桃子数,这天的桃子数,这种方法称为递推法,思路是根据题目的描述发现规律,种方法称为递推法,思路是根据题目的描述发现规律,写出递推公式,由此进行循环操作。写出递推

50、公式,由此进行循环操作。68#includevoid main()int day,x1,x2;day=9;x2=1;while(day0)x1=(x2+1)*2;x2=x1;day-;printf(the total is%dn,x1);第第1010天:天:1 1第第9 9天:天:(1 1+1)*2=+1)*2=4 4第第8 8天:天:(4 4+1)*2=+1)*2=1010第第7 7天:天:(1010+1)*2=+1)*2=2222 :EG222.C69例例23:公鸡公鸡5 5文钱买文钱买1 1只,母鸡只,母鸡3 3文钱买文钱买1 1只,小鸡只,小鸡1 1文钱买文钱买3 3只,只,用用100

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com