C语言第三次作业答案.ppt

上传人:小飞机 文档编号:6504274 上传时间:2023-11-07 格式:PPT 页数:74 大小:308.50KB
返回 下载 相关 举报
C语言第三次作业答案.ppt_第1页
第1页 / 共74页
C语言第三次作业答案.ppt_第2页
第2页 / 共74页
C语言第三次作业答案.ppt_第3页
第3页 / 共74页
C语言第三次作业答案.ppt_第4页
第4页 / 共74页
C语言第三次作业答案.ppt_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《C语言第三次作业答案.ppt》由会员分享,可在线阅读,更多相关《C语言第三次作业答案.ppt(74页珍藏版)》请在三一办公上搜索。

1、第四章,语句、程序控制结构(顺序、选择、循环),4.1 C语句总述,C语句一般以分号“;”为结束标志,可分为以下六类:1.表达式语句 表达式语句由表达式加上分号“;”组成。如:x*=8;/*赋值表达式语句*/a=5,b=7,c=16;/*逗号表达式语句*/xy?x:y;/*条件表达式语句*/-a/*算术表达式语句*/,2.说明语句 变量定义语句和函数说明语句统称说明语句。如:int a,b,*p,i=0;float add(float,float);/*函数说明语句*/3.空语句 只有分号“;”组成的语句称为空语句。空语句是 什么也不执行的语句。在程序中空语句可用来作空循环体或转向点。如:wh

2、ile(getchar()!=n);本语句的功能是,只要从键盘输入的字符不是回 车则重新输入,4.复合语句 把多个语句用括号 括起来组成的一个语句称为复合语句。在程序中应把复合语句看成是单条语句,而不是 多条语句。如:t=x;x=y;y=t;5.函数调用语句*由函数名、实际参数加上分号“;”组成。如:printf(C Program);,6.控制语句 控制语句用于控制程序的流程,以实现程序的各种结构方式。它们由特定的语句定义符组成。语言有九种控制语句,可分成以下三类:条件判断语句:if语句、switch语句;循环执行语句:do while语句、while语句、for语句;转向语句:break语

3、句、continue语句、goto语句、return语句。,4.2 顺序结构,C语言中的顺序结构主要由说明语句、表达式语句、空语句以及复合语句组成。在顺序结构程序中,各语句(或命令)是按照位置的先后次序顺序执行的,且每个语句都会被执行到。例:输入两个整数,编程完成两数的交换。,main()int a,b,t;scanf(%d%d,main()int a,b;scanf(%d%d,4.3 选择结构,它所要解决的问题是根据“条件”判断的结果决定程序执行的流向,因此该结构也被称为判断结构。程序执行的流向是根据条件表达式的值是“0”还是非“0”来决定(流程)。设计选择结构程序,需要考虑两个方面的问题:

4、一是在C语言中如何来表示条件(条件表达式),二是在C语言中实现选择结构用什么语句(if/switch结构)。简单if语句if-else语句if-else if-else语句 switch语句,3.1 简单if语句,语法形式:if(表达式)语句其中表达式是决定程序流向的条件语句可以是单语句或复合语句,if语句示例,例1:输入任意三个整数a、b、c,求三个数中的最大值(例4.2)main()/*注意三段式编程思想*/int a,b,c,max;printf(Please input three numbers:);scanf(“%d,%d,%d”,/*输出结果语句*/,*例2:输入x,y两整数,按

5、小到大顺序输出。main()int x,y,t;scanf(“%d,%d”,/*输出*/运行结果,输入:4,1 输出:1,4,3.2 if-else语句,语法 if(表达式)语句1else 语句2,if-else语句示例,例1.输入一个整数,输出该整数的绝对值main()int n;scanf(%d,printf(“%d”,n=0?n:-n);,*例2.用if-else语句求输入的三个整数中的最大数 main()int a,b,c,max;scanf(“%d%d%d”,max=b,F,3.3 系列if语句,if(条件1)语句1 else if(条件2)语句2 else if(条件3)语句3 e

6、lse if(条件n)语句 n else 语句 n+1 其中最后一个else 在无语句 n+1时可以省略,系列if结构流程图,系列if结构示例,例1.用else if 结构求解一元二次方程ax2+bx+c=0的 根,系数a、b、c的值从键盘输入。见98页 例4.4),求一元二次方程流程图,例2:从键盘输入成绩score,编程要求能有如下输出:score60,输出 E;60 score 70,输出 D;70 score 80,输出 C;80 score 90,输出 B;90 score,输出 A。,main()int score;printf(Enter a score:n);scanf(%d,

7、应用if结构的注意事项,1.在if结构中,语句可以是简单语句也可以是复合语句,但复合语句一定要加 例:已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是?if(xy)z=x;x=y;y=z;2.if结构与+、-的综合应用时遵循原来的自增自减运算符的应用规则例:下面程序运行后结果是?main()int m=5;if(m+5)printf(“%dn”,m);else printf(“%dn”,m-);3 if结构可以嵌套使用,当有众多的if和else时,else必须和if配对使用,且else总是跟它上面最近的if配对,例:下面这段程序执行后,x的值为?main()int a=

8、1,b=3,c=5,d=4,x;if(ab),则 x=?*/if(cd)x=1;else if(ac)if(bd)x=2;else x=3;else x=6;else x=7;printf(x=%d,x);注意:在if-else的嵌套结构中,else 总是与它上面最 近的if配对,if(ab)x=2,if(ab)x=7,3.4 switch语句,switch结构是多分支选择结构,根据表达式值的不同,程序转入不同的模块执行 switch 结构的语法形式 switch(表达式)case 常量表达式 1:语句 1;case 常量表达式 2:语句 2;case 常量表达式 n:语句 n;default

9、:语句 n+1;,不带break语句switch结构图,其中:e 为表达式e1、e2en 为常量表达式1、2n,带break语句的switch结构,实际使用时,一般要使程序在执行一个case语句 后退出switch结构,可用break语句将上述switch 结构改成:switch(表达式)case 常量表达式 1:语句 1;break;case 常量表达式 2:语句 2;break;case 常量表达式 n:语句 n;break;default:语句 n+1;,e=e1,e=e2,e=e3,e=en,语句1,语句2,语句3,语句n,语句n+1,T,T,T,T,F,F,F,F,default,其

10、中:e 为表达式e1、e2en 为常量表达式1、2n,例4.6 用switch结构编写可处理四则运算的程序main()float v1,v2;char operator;printf(Please type your expression:n);scanf(%f%c%f,case*:printf(v1*v2=%.2fn,v1*v2);break;case/:if(v2=0)printf(division by zero.n);else printf(v1/v2=%.2fn,v1/v2);break;default:printf(unknown operator.n);,switch使用说明,每

11、个case后面的常量表达式的值必须互不相同,以免程序执行的流程产生矛盾switch后面括号内的表达式,可以是整型或字符型表达式或枚举型数据加上break语句可以使程序执行某一分支后直接退出switch结构多个case 语句可以共用一组执行语句 如:case 4:case 5:case 6:case 7:d=8;break;,switch与if-else if-else,改写用if-else if语句写成的程序:从键盘输入成绩score,编程要求能有如下输出:score60,输出 E;60 score 70,输出 D;70 score 80,输出 C;80 score 90,输出 B;90 sc

12、ore,输出 A。,main()int score,s1;printf(Enter a score:n);scanf(%d,综合实例,输入3个边长a、b、c,判断它们是否能构成三 角形,若能构成三角形,则进一步判断此三角形是 哪种类型的三角形(等边三角形、等腰三角形、直 角三角形和一般三角形。等腰直角算作等腰)分析:判断能否构成三角形:a+bc&a+cb&b+ca判断是否等边三角形:a=b&b=c判断是否等腰三角形:a=b|b=c|c=a判断是否直角三角形:(a*a+b*b=c*c)|(a*a+c*c=b*b)|(b*b+c*c=a*a),main()int a,b,c;printf(nPle

13、ase input a,b,c:);scanf(%d%d%d,/*构不成三角形*/,在构成三角形的前提下四种三角形的类型判断选择语句,选择结构复习-读程题,#include main()int a=0,b=0,c=0,x=0;if(!a)b-;else if(b)if(!c)x=3;else x=4;printf(“x=%dn”,x);,#include main()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0:a+;break;case 1:b+;break;case 2:a+;b+;break;printf(“a=%d,b=%dn”

14、,a,b);,a=2,b=1,4.4 循环结构,4.4.1 while 循环结构4.4.2 do-while 循环结构4.4.3 for 循环结构4.4.4 无条件控制语句 break,continue,goto 4.4.7 多重循环4.4.8 应用举例,概述,循环结构 根据循环条件决定是否要重复执行某一模块(循环体)。C语言中主要提供三种循环语句:while语句 do-while语句 for语句,4.4.1 while 语句,一般形式 执行流程 while(表达式)语句 也称语句为循环体 while循环结构 是一种当型循环结构,例4.8 用while循环写一个程序统计从键盘输入的数字字符出现

15、的次数并把其中的数字字符依次输出。,#include stdio.hmain()/*只统计数字字符出现的次数*/char c;int nd=0;while(c=getchar()!=n)if(c=0,#include stdio.hmain()/*增加统计字母字符的个数*/char c;int nd=0,nl=0;while(c=getchar()!=n)if(c=0,从键盘输入n,计算累加和、阶乘n!,计算1+2+nmain()int n,sum=0,i=1;scanf(“%d”,计算n!main()long fa=1,i=1,n;scanf(“%ld”,*例2:已知s=1!+2!+3!+n

16、!,求当s首次超过 2,000,000时的n和s的值main()int n=0;long s=0,an=1;while(s2000000)n+;an=an*n;s=s+an;for(n=1;s2000000;n+)an=an*n;s=s+an;printf(s=%ld n=%dn,s,n);,运行结果:s=4037913 n=10,4.4.2 do-while循环语句,一般形式 执行流程 do 语句 while(表达式);do-while循环结构 是一种直到型循环结构,main()long num;int n=0;printf(Please input the number:);scanf(%

17、ld,例4.9:用do-while结构进一步改写例4.5(p102),逆序输出一个正整数并计 算它是几位数。,例:求 的部分和,直到余项的首项的值小于1.0e-4。分析:设第 n 项 un=xn/n!,则第 n+1 项 un+1=xn+1/(n+1)!及 un+1=un(x/(n+1)main()float x,u=1.,s=0.;int n=0;scanf(%f,4.4.3 for 循环语句,一般形式 for(表达式1;表达式2;表达式3)语句(循环体)其中:表达式1-初始化表达式。可用来设定循环控制变 量或循环体中变量的初始值,可以是逗号表达式。表达式2-循环条件表达式。其值为逻辑量,为非

18、 0时继续循环,为0时循环终止 表达式3-增量表达式。用来对循环控制变量进行 修正,也可用逗号表达式包含一些本来可放在循环 体中执行的其他表达式 上述表达式可以缺省,但分号不可缺少,执行过程,例4.11 用for语句写程序在屏幕上依次输出26个字母,输出形式:a-b-c-d-y-z*例1:求s=sin1+sin2+.+sin50#include math.hmain()/*用数学函数加上面的包含文件*/int n;float s;for(s=0.,n=1;n=50;n+)s+=sin(n);printf(s=%fn,s);,例1:写出下列程序的输出结果main()int i,s=0,t=0;f

19、or(i=1;i10;i+)/*选择结构作循环体*/switch(i6)case 0:t+=i;break;case 1:s+=i;break;printf(t=%d,s=%dn;t,s);,结果:t=30,s=15,无条件控制语句,4.4.4 break 语句4.4.5 continue 语句4.4.6 goto 语句,break语句,形式:break;作用:跳出循环体,提前结束循环,无条件转移到 循环结构的下一句继续执行。使用场合:只能用在 switch 结构和循环结构中。【例4.13】写一个程序求整数m是否是素数。一个只能被1和自己整除的数称为素数。决定一个数m是否是素数,只要让m 被2

20、除到被m除就可以,如果不能被2到m中的任何一个数整除,就定m为素数,#include stdio.hmain()int m,i;scanf(%d,例:阅读如下程序,写出运行结果main()int i,s=0;for(i=1;i10)break;printf(i=%d,s=%dn,i,s);,结果:i=3,s=14,4.4.5 continue 语句,形式:continue;作用:用来结束本次循环(即跳出循环体中尚未 执行的语句)直接进行循环条件的判断 使用场合:用于循环结构中。【例4.14】写程序从键盘读入分数,计算有效分数的总分、平均分、最高分、最低分。,main()float score,

21、min=100,max=0,total=0,avg;int n=0;printf(Please input first score:);while(scanf(“%f”,例1:阅读如下程序,写出运行结果main()int i,s=0,n=0;for(i=1;i10;i+)if(i%2=0|i%3=0)continue;n+;s+=i;printf(n=%d,s=%dn,n,s);,结果:n=3,s=13,*4.4.6 goto语句,形式:goto 语句标号;其中语句标号用标识符表示。与goto语句相对应,程序中必有一个带语 句标号的语句,形式为:语句标号:语句 作用:程序无条件地转移到具有该语

22、句标号的语 句上继续执行。说明:goto语句不是一个必要的语句;与if结构配合构成条件转移或循环。,【例4.15】求1100间的奇数和,即求1+3+5+99main()int i=1,sum=0;loop:sum=sum+i;i=i+2;if(i100)goto loop;printf(sum=%dn,sum);运行结果:sum=2500,for(i=1;i100;sum+=i,i+=2);,4.4.7 多重(嵌套)循环,在循环体内又包含另一个或多个完整的循环结构,称为多重循环。要点:三种循环语句可以相互改写、相互嵌套,但不允许交叉break语句用于多重循环中,是从语句所在的循环跳转到上一层循

23、环continue处于多重循环时,仅仅影响包含它的循环结构执行体执行的次数。,三种循环结构的等价关系,int s=0,i=1;while(i=100)s=s+i;i=i+1;,int s=0,i;for(i=1;i=100;i+)s=s+i;,int s=0,i=1;do s=s+i;i=i+1;while(i=100);,以下三种结构都可以计算数学式子:1+2+3+100,例1:打印阶梯状九九乘法表#include stdio.hmain()int i,j;for(i=1;i=9;i+)for(j=1;j=i;j+)printf(%d*%d=%-4d,i,j,i*j);printf(n);,

24、嵌套循环举例,例2:写出下列程序的输出结果#include“stdio.h”main()int n,a,x;char cc=#;scanf(%d,#abcd#abcd#abcdabcd,4.4.8 综合应用举例,【1】“猴子吃桃”问题。猴子第一天摘下若干个 桃子,当即吃了一半,还多吃了一个。第二天又将 剩下的桃子吃掉一半,又多吃了一个。以后每天都 吃前一天剩下的一半零一个。到第十天想吃时,见 只剩下一个桃子。求第一天共摘了多少个桃子。这是个“倒推”问题。设:第n天的桃子数为Xn,它前一天的桃子数为Xn-1 则:XnXn-1/2-1 可得到:Xn-1=2*(Xn+1)已知:X10=1,main(

25、)/*用while循环*/int i,a;i=10;a=1;while(i1)a=2*(a+1);i-;printf(a=%dn,a);运行结果:a=1534,main()/*用for循环*/int i,a;for(i=10,a=1;i1;i-)a=2*(a+1);printf(a=%dn,a);,【*2】有一头母牛每年年初生一头小母牛,每头小母牛从第4个年头起,每年年初也生一头小母牛。求在第20年时,共有多少头牛。这是个“顺推”问题。设:第n年时的母牛数为Yn,则:Y12,Y23,Y34,Y4Y3+Y1,Y5Y4+Y2,可得到,当n4时有:YnYn-1+Yn-3已知:Y12,Y23,Y34,

26、main()int i,y1,y2,y3,y4;y1=2;y2;=3;y3=4;/*即 y1=2,y2=3,y3=4*/for(i=4;i=20;i+)y4=y3+y1;/*即 yn=yn-1+yn-3*/y1=y2;y2=y3;y3=y4;printf(20 years of cow total amount is%dn,y4);结果:20 years of cow total amount is 2745,3【例4.20】求两整数的最大公约数和最小公倍数。求最大公约数算法:有两整数a和b:a%b得余数c 若c=0,则b即为两数的最大公约数 若c0,则a=b,b=c,再回去执行 例如求27和

27、15的最大公约数过程为:2715 余 12 1512 余 3 123 余 0 因此,3即为最大公约数 求最小公倍数算法:最小公倍数=两整数的乘积最大公约数,main()int m,n,a,b,t,c;prinf(Input two integer numbers:n);scanf(%d%d,while(b!=0)c=a%b;a=b;b=c;b=a;,4【例4.17】百钱百鸡问题。公鸡5文钱1只,母鸡3文钱1只,小鸡一文钱3只。100文钱如何买100只鸡?分析:设买 x 只公鸡,y 只母鸡,z 只小鸡,则有:x+y+z=100 5x+3y+z/3=100 隐含条件:x、y、z 都是整数;x20;

28、y33。用穷举法,即把x、y、x所有可能的各种组合都一 一判断是否符合上述不定方程组,具体是:把x可能值020和y可能值033用二重循环来组合,每个x和y组合都可得到z值,即z=100-x-y,若x、y、z值使5x+3y+z/3=100成立,则该组x、y、z即为一 组所求值。,main()int x,y,z,j=1;printf(Possible solutions to buy 100 fowls whith 100 wen:n);for(x=0;x=20;x+)for(y=0;y=33;y+)z=100-x-y;if(z%3=0,运行结果:Possible solutions to buy

29、 100 fowls whith 100 wen:1:cock=0 hen=25 chicken=75 2:cock=4 hen=18 chicken=78 3:cock=8 hen=11 chicken=81 4:cock=12 hen=4 chicken=84,5*:打印出所有的“水仙花数”。所谓“水仙花 数”是指一个三位正整数,其各位数字的立方和 等于该数本身,例如:153=13+53+33。分析:可用穷举法,即把所有的三位正整数100999按 题意一一进行判断,如果一个三位正整数n的百位、十位、个位上的数字分别为i、j、k,则判断式为:n=i3+j3+k3 如何分解三位数n的百位、十位

30、、个位:百位:i=n/100%10;十位:j=(n/10)%10;个位:k=n%10;,#include stdio.hmain()int n,i,j,k;for(n=100;n=999;n+)i=n/100;j=(n/10)%10;k=n%10;if(n=i*i*i+j*j*j+k*k*k)printf(%d=%d3+%d3+%d3n,n,i,j,k);,运行结果:153 13+53+33370 33+73+03371 33+73+13407 43+03+73,6:利用循环结构打印图形,写程序输入行数n,并打印下面的图形*,main()int n,i,k;scanf(%d,课后复习关键字,语句选择结构if if-elseif-else if-elseswitch循环结构whiledo-whileforbreak,continue算法求最大公约数、素数判断、完数判断、打印图形等,本章结束,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号