C语言第三次作业答案市公开课特等奖市赛课微课一等奖课件_第1页
C语言第三次作业答案市公开课特等奖市赛课微课一等奖课件_第2页
C语言第三次作业答案市公开课特等奖市赛课微课一等奖课件_第3页
C语言第三次作业答案市公开课特等奖市赛课微课一等奖课件_第4页
C语言第三次作业答案市公开课特等奖市赛课微课一等奖课件_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

第四章语句、程序控制结构(次序、选择、循环)第1页4.1C语句总述C语句普通以分号“;”为结束标志,可分为以下六类:1.表示式语句表示式语句由表示式加上分号“;”组成。如:x*=8;/*赋值表示式语句*/a=5,b=7,c=16;/*逗号表示式语句*/x>y?x:y;/*条件表示式语句*/--a&&++b&&++c;/*逻辑表示式语句*/i++;/*算术表示式语句*/

第2页2.说明语句变量定义语句和函数说明语句统称说明语句。如:inta,b,*p,i=0;floatadd(float,float);/*函数说明语句*/3.空语句•只有分号“;”组成语句称为空语句。空语句是什么也不执行语句。•在程序中空语句可用来作空循环体或转向点。如:while(getchar()!='\n')

;本语句功效是,只要从键盘输入字符不是回车则重新输入第3页4.复合语句•把多个语句用括号{}括起来组成一个语句称为复合语句。•在程序中应把复合语句看成是单条语句,而不是多条语句。如:{t=x;x=y;y=t;}5.函数调用语句*由函数名、实际参数加上分号“;”组成。如:printf("CProgram");第4页6.控制语句控制语句用于控制程序流程,以实现程序各种结构方式。它们由特定语句定义符组成。C语言有九种控制语句,可分成以下三类:•条件判断语句:if语句、switch语句;•循环执行语句:dowhile语句、while语句、for语句;•转向语句:break语句、continue语句、goto语句、return语句。第5页4.2次序结构C语言中次序结构主要由说明语句、表示式语句、空语句以及复合语句组成。在次序结构程序中,各语句(或命令)是按照位置先后次序次序执行,且每个语句都会被执行到。例:输入两个整数,编程完成两数交换。

main(){inta,b,t;scanf("%d%d",&a,&b);t=a;a=b;b=t;printf("%d%d",a,b);}

main(){inta,b;scanf("%d%d",&a,&b);a=a+b;b=a-b;a=a-b;printf("%d%d\n",a,b);}

第6页4.3选择结构它所要处理问题是依据“条件”判断结果决定程序执行流向,所以该结构也被称为判断结构。程序执行流向是依据条件表示式值是“0”还是非“0”来决定(流程)。设计选择结构程序,需要考虑两个方面问题:一是在C语言中怎样来表示条件(条件表示式),二是在C语言中实现选择结构用什么语句(if/switch结构)。简单if语句if-else语句if-elseif…-else语句

switch语句A块B块P0(假)非0(真)第7页3.1简单if语句语法形式:

if(表示式)语句其中表示式是决定程序流向条件语句能够是单语句或复合语句语句表示式假真第8页if语句示例例1:输入任意三个整数a、b、c,求三个数中最大值(例4.2)main()/*注意三段式编程思想*/{inta,b,c,max;printf("Pleaseinputthreenumbers:");scanf(“%d,%d,%d”,&a,&b,&c);/*输入数据语句*/max=a;if(b>a)max=b;if(c>max)max=c;/*算法处理部分*/printf(“max=%d\n”,max);/*输出结果语句*/}第9页*例2:输入x,y两整数,按小到大次序输出。main(){intx,y,t; scanf(“%d,%d”,&x,&y);/*输入*/

if(x>y){t=x;x=y;y=t;}/*算法处理*/

printf(“%d,%d\n”,x,y);/*输出*/}运行结果,输入:4,1输出:1,4第10页3.2if-else语句语法

if(表示式)语句1else语句2语句1表示式假真语句2第11页if-else语句示例例1.输入一个整数,输出该整数绝对值main(){intn;scanf("%d",&n);if(n>=0)printf("%d",n);elseprintf("%d",-n);}printf(“%d”,n>=0?n:-n);第12页*例2.用if-else语句求输入三个整数中最大数main(){inta,b,c,max;scanf(“%d%d%d”,&a,&b,&c);max=a;if(c>b){if(c>a)max=c;}else{if(b>a)max=b;}printf("max=%d\n",max);}max=bF输出maxmax=c输入a,b,cmax=ac>ac>bTTTFb>aF第13页3.3系列if语句if(条件1)语句1

elseif(条件2)语句2elseif(条件3)语句3

elseif(条件n)语句nelse语句n+1

其中最终一个else在无语句n+1时能够省略••••第14页系列if结构流程图条件1条件2语句1语句2语句n语句n+1条件n•••TFFTFT第15页系列if结构示例例1.用elseif结构求解一元二次方程ax2+bx+c=0根,系数a、b、c值从键盘输入。见98页例4.4)第16页p=(b*b-4*a*c);real=-b/(2*a)imag=sqrt(fabs(p))/(2*a)输出2复根real±imagi输入a,b,c输出根-c/ba!=0TTTFFa==0&&b!=0p==0p<0FFT非法或无意义输出2实根real±imag输出根-b/(2*a)求一元二次方程流程图第17页例2:从键盘输入成绩score,编程要求能有以下输出:

score<60,输出E;60≤score<70,输出D;70≤score<80,输出C;80≤score<90,输出B;90≤score,输出A。

第18页main(){intscore;printf("Enterascore:\n");scanf("%d",&score);if(score<60)printf(“E");elseif(score<70)printf("D");elseif(score<80)printf("C");elseif(score<90)printf("B");elseprintf("A");}第19页应用if结构注意事项1.在if结构中,语句能够是简单语句也能够是复合语句,但复合语句一定要加{}例:已知intx=10,y=20,z=30;以下语句执行后x,y,z值是? if(x>y) z=x;x=y;y=z;2.if结构与++、--综合应用时遵照原来自增自减运算符应用规则

例:下面程序运行后结果是? main() {intm=5; if(m++>5)printf(“%d\n”,m); elseprintf(“%d\n”,m--); }3if结构能够嵌套使用,当有众多if和else时,else必须和if配对使用,且else总是跟它上面最近if配对第20页例:下面这段程序执行后,x值为?main(){inta=1,b=3,c=5,d=4,x;if(a<b)/*如是if(a>b),则x=?*/ if(c<d)x=1; else if(a<c) if(b<d)x=2; elsex=3; elsex=6; elsex=7; printf("x=%d",x);}注意:在if-else嵌套结构中,else总是与它上面最近if配对if(a<b)x=2if(a>b)x=7第21页3.4switch语句

switch结构是多分支选择结构,依据表示式值不一样,程序转入不一样模块执行•switch结构语法形式

switch(表示式){case常量表示式1:语句1;case常量表示式2:语句2;……case常量表示式n:语句n;default:语句n+1;}第22页不带break语句switch结构图e==e1e==e2e==e3e==en语句1语句2语句3语句n语句n+1……TTTTFFFFdefault其中:e为表示式e1、e2···en为常量表示式1、2···n第23页带break语句switch结构•实际使用时,普通要使程序在执行一个case语句后退出switch结构,可用break语句将上述switch结构改成:switch(表示式){case常量表示式1:语句1;break;

case常量表示式2:语句2;break;case常量表示式n:语句n;break;default:语句n+1;}第24页e==e1e==e2e==e3e==en语句1语句2语句3语句n语句n+1…TTTTFFFFdefault其中:e为表示式e1、e2···en为常量表示式1、2···n第25页例4.6用switch结构编写可处理四则运算程序main(){floatv1,v2;charoperator;printf("Pleasetypeyourexpression:\n");scanf("%f%c%f",&v1,&operator,&v2);switch(operator){case'+':printf("v1+v2=%.2f\n",v1+v2);break;case'-':printf("v1-v2=%.2f\n",v1-v2);break;第26页case'*':printf("v1*v2=%.2f\n",v1*v2);break;case'/':if(v2==0)printf("divisionbyzero.\n");elseprintf("v1/v2=%.2f\n",v1/v2);break;default:printf("unknownoperator.\n");}}第27页switch使用说明每个case后面常量表示式值必须互不相同,以免程序执行流程产生矛盾switch后面括号内表示式,能够是整型或字符型表示式或枚举型数据加上break语句能够使程序执行某一分支后直接退出switch结构多个case语句能够共用一组执行语句如:case4:case5:case6:case7:d=8;break;第28页switch与if-elseif-else改写用if-elseif语句写成程序:从键盘输入成绩score,编程要求能有以下输出:score<60,输出E;60≤score<70,输出D;70≤score<80,输出C;80≤score<90,输出B;90≤score,输出A。第29页main(){intscore,s1;printf("Enterascore:\n");scanf("%d",&score);switch(s1=score/10)printf(“%d:”,socre);{case6:printf("D\n');break;case7:printf("C\n");break;case8:printf("B\n");break;case9:case10:printf("A\n");break;default:printf(“E\n");}}第30页综合实例输入3个边长a、b、c,判断它们是否能组成三角形,若能组成三角形,则深入判断此三角形是哪种类型三角形(等边三角形、等腰三角形、直角三角形和普通三角形。等腰直角算作等腰)分析:判断能否组成三角形:a+b>c&&a+c>b&&b+c>a判断是否等边三角形: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)

第31页main(){inta,b,c;printf("\nPleaseinputa,b,c:");scanf("%d%d%d",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a)

if(a==b&&b==c)printf("equilateraltriangle\n");elseif(a==b||b==c||c==a)printf("isocelestriangle\n");

elseif(a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a)printf("right-angledtriangle\n");elseprintf("arbitrarytriangle\n");elseprintf(“Itisn‘ttriangle.\n”);/*构不成三角形*/}在组成三角形前提下四种三角形类型判断选择语句第32页选择结构复习-读程题#include<stdio.h>main(){inta=0,b=0,c=0,x=0;if(!a)b--;elseif(b)if(!c)x=3;elsex=4;printf(“x=%d\n”,x);}第33页#include<stdio.h>main(){intx=1,y=0,a=0,b=0;switch(x){case1:

switch(y){case0:a++;break;case1:b++;break;}case2:

a++;b++;break;}printf(“a=%d,b=%d\n”,a,b);}a=2,b=1第34页4.4循环结构4.4.1while循环结构4.4.2do-while循环结构4.4.3for循环结构4.4.4无条件控制语句break,continue,goto4.4.7多重循环4.4.8应用举例第35页概述•循环结构依据循环条件决定是否要重复执行某一模块(循环体)。•C语言中主要提供三种循环语句:

while语句

do-while语句

for语句第36页4.4.1while语句•普通形式•执行流程

while(表示式)语句也称语句为循环体•while循环结构是一个当型循环结构语句表示式0(假)非0(真)第37页例4.8用while循环写一个程序统计从键盘输入数字字符出现次数并把其中数字字符依次输出。#include"stdio.h"main(){/*只统计数字字符出现次数*/charc;intnd=0;while((c=getchar())!='\n'){ if(c>='0'&&c<='9') { nd++;/*统计*/ printf(“%c”,c);/*依次输出*/ }}printf("\nThereare%dnumbers!\n",nd);}#include"stdio.h"main(){/*增加统计字母字符个数*/charc;intnd=0,nl=0;while((c=getchar())!='\n'){if(c>=‘0’&&c<=‘9’)nd++; elseif(c>=‘0’&&c<=‘9’)nl++;}printf("\nThereare%dnumbers!\n",nd);printf("\nThereare%dcharacters!\n",nl);}第38页从键盘输入n,计算累加和、阶乘n!计算1+2+…+nmain(){ intn,sum=0,i=1;scanf(“%d”,&n); while(i<=n){

sum=sum+i;i++;} printf(“sum=%d”,sum);}计算n!main(){ longfa=1,i=1,n; scanf(“%ld”,&n); while(i<=n){

fa=fa*i;i++;} printf(“%ld!=%ld”,n,fa);}第39页*例2:已知s=1!+2!+3!+……+n!,求当s首次超出

2,000,000时n和s值main(){ intn=0; longs=0,an=1; while(s<000) {n++;an=an*n; s=s+an; }for(n=1;s<000;n++){an=an*n; s=s+an; }} printf("s=%ldn=%d\n",s,n);}运行结果:s=4037913n=10第40页4.4.2do-while循环语句•普通形式•执行流程

do语句

while(表示式);•do-while循环结构是一个直到型循环结构表示式语句FT第41页main(){ longnum; intn=0; printf("Pleaseinputthenumber:"); scanf("%ld",&num); printf("Inversednumberis:"); do{ printf("%d",num%10); n++; }while(num=num/10); printf("\nIthas%dbits.\n",n);}例4.9:用do-while结构深入改写例4.5(p102),逆序输出一个正整数并计算它是几位数。第42页例:求部分和,直到余项首项值小于1.0e-4。分析:设第n项un=xn/n!,则第n+1项un+1=xn+1/(n+1)!及un+1=un(x/(n+1))main(){floatx,u=1.,s=0.; intn=0; scanf("%f",&x);do{

s+=u;u*=x/(n+1);n++;

}while(fabs(u)>=1.e-4); printf("exp(x)=%f\n",s);}第43页4.4.3for循环语句•普通形式

for(表示式1;表示式2;表示式3)

语句(循环体)其中:

表示式1---初始化表示式。可用来设定循环控制变量或循环体中变量初始值,能够是逗号表示式。

表示式2---循环条件表示式。其值为逻辑量,为非0时继续循环,为0时循环终止

表示式3---增量表示式。用来对循环控制变量进行修正,也可用逗号表示式包含一些原来可放在循环体中执行其它表示式

上述表示式能够缺省,但分号不可缺乏第44页•执行过程求解表示式1求解表示式3语句表示式2TF第45页例4.11用for语句写程序在屏幕上依次输出26个字母,输出形式:a->b->c->d……->y->z*例1:求s=sin1+sin2+...+sin50#include"math.h"main()/*用数学函数加上面包含文件*/{intn;floats;

for(s=0.,n=1;n<=50;n++)s+=sin(n);printf("s=%f\n",s);}s=s+sin(n)s=0,n=1n++n<=50TF第46页例1:写出以下程序输出结果main(){ inti,s=0,t=0; for(i=1;i<10;i++)/*选择结构作循环体*/

switch(i<6) {case0:t+=i;break; case1:s+=i;break;} printf("t=%d,s=%d\n";t,s);}结果:t=30,s=15第47页无条件控制语句4.4.4break语句4.4.5continue语句4.4.6goto语句第48页4.4.4break语句•形式:break;•作用:跳出循环体,提前结束循环,无条件转移到循环结构下一句继续执行。•使用场所:只能用在switch结构和循环结构中。•【例4.13】写一个程序求整数m是否是素数。一个只能被1和自己整除数称为素数。决定一个数m是否是素数,只要让m被2除到被m除就能够,假如不能被2到m中任何一个数整除,就定m为素数第49页#include"stdio.h"main(){ intm,i; scanf("%d",&m); for(i=2;i<m;i++) if(m%i==0)break; if(i==m) printf("%disaprimenumber.\n",m); else printf("%disnotaprimenumber.\n",m);}第50页例:阅读以下程序,写出运行结果main() {inti,s=0; for(i=1;i<10;i++) {s+=i*i; if(s>10)break; } printf("i=%d,s=%d\n",i,s); }结果:i=3,s=14第51页4.4.5continue语句•形式:continue;•作用:用来结束此次循环(即跳出循环体中还未执行语句)直接进行循环条件判断•使用场所:用于循环结构中。•【例4.14】写程序从键盘读入分数,计算有效分数总分、平均分、最高分、最低分。第52页main(){ floatscore,min=100,max=0,total=0,avg; intn=0; printf("Pleaseinputfirstscore:"); while(scanf(“%f”,&score)==1)/*利用输入函数返回值作条件*/ {

if(score<0||score>100)continue; n++; min=(score<min)?score:min; max=(score>max)?score:max; total=total+score; printf("pleaseinputnextscore:"); }; if(n>0) { avg=total/n; printf("Max:%.1f,Min:%.1f,Total:%.1f,Average:%.1f\n",max,min,total,avg); }第53页例1:阅读以下程序,写出运行结果main(){inti,s=0,n=0;for(i=1;i<10;i++){if(i%2==0||i%3==0)

continue;n++;s+=i;}printf("n=%d,s=%d\n",n,s);}结果:n=3,s=13第54页*4.4.6goto语句•形式:goto语句标号;其中语句标号用标识符表示。与goto语句相对应,程序中必有一个带语句标号语句,形式为:

语句标号:语句•作用:程序无条件地转移到含有该语句标号语句上继续执行。•说明:goto语句不是一个必要语句;与if结构配合组成条件转移或循环。第55页【例4.15】求1~100间奇数和,即求1+3+5+…+99main(){inti=1,sum=0;loop:sum=sum+i;

i=i+2;

if(i<100)gotoloop;printf("sum=%d\n",sum);}运行结果:sum=2500for(i=1;i<100;sum+=i,i+=2);第56页4.4.7多重(嵌套)循环在循环体内又包含另一个或多个完整循环结构,称为多重循环。关键点:三种循环语句能够相互改写、相互嵌套,但不允许交叉break语句用于多重循环中,是从语句所在循环跳转到上一层循环continue处于多重循环时,仅仅影响包含它循环结构执行体执行次数。第57页三种循环结构等价关系ints=0,i=1;while(i<=100){s=s+i;i=i+1;}ints=0,i;for(i=1;i<=100;i++)s=s+i;ints=0,i=1;do{s=s+i;i=i+1;}while(i<=100);以下三种结构都能够计算数学式子:1+2+3+……100第58页例1:打印阶梯状九九乘法表#include"stdio.h"main(){ inti,j; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) printf("%d*%d=%-4d",i,j,i*j); printf("\n"); }}嵌套循环举例第59页例2:写出以下程序输出结果#include“stdio.h”main(){ intn,a,x;charcc='#'; scanf("%d",&n);/*n=4*/

for(x=0;x<n;x++) {for(a=n-x-1;a>0;a--) putchar(cc);

for(a=0;a<n;a++) printf("%c",97+a); printf("\n"); }}###abcd##abcd#abcdabcd第60页4.4.8综合应用举例【1】“猴子吃桃”问题。猴子第一天摘下若干个桃子,当即吃了二分之一,还多吃了一个。第二天又将剩下桃子吃掉二分之一,又多吃了一个。以后天天都吃前一天剩下二分之一零一个。到第十天想吃时,见只剩下一个桃子。求第一天共摘了多少个桃子。这是个“倒推”问题。设:第n天桃子数为Xn,它前一天桃子数为Xn-1则:Xn=Xn-1/2-1可得到:Xn-1=2*(Xn+1)

已知:X10=1第61页main()/*用while循环*/{inti,a;i=10;a=1;while(i>1){a=2*(a+1);i--;}printf("a=%d\n",a);}运行结果:a=1534main()/*用for循环*/{inti,a;for(i=10,a=1;i>1;i--)a=2*(a+1);printf("a=%d\n",a);}第62页【*2】有一头母牛每年年初生一头小母牛,每头小母牛从第4个年头起,每年年初也生一头小母牛。求在第20年时,共有多少头牛。这是个“顺推”问题。设:第n年时母牛数为Yn,则:Y1=2,Y2=3,Y3=4,Y4=Y3+Y1,

Y5=Y4+Y2,……可得到,当n≥4时有:Yn=Yn-1+Yn-3已知:Y1=2,Y2=3,Y3=4第63页main(){inti,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("20yearsofcowtotalamountis%d\n",y4);}结果:20yearsofcowtotalamountis2745第64页

3【例4.20】求两整数最大条约数和最小公倍数。

求最大条约数算法:有两整数a和b:①a%b得余数c②若c=0,则b即为两数最大条约数③若c≠0,则a=b,b=c,再回去执行①比如求27和15最大条约数过程为:27÷15余1215÷12余312÷3余0所以,3即为最大条约数

求最小公倍数算法:最小公倍数=两整数乘积÷最大条约数第65页main(){intm,n,a,b,t,c;prinf("Inputtwointegernumbers:\n");scanf("%d%d",&a,&b);m=a;n=b;

c=a%b;while(c!=0){a=b;b=c;c=a%b;}printf("Thelargestcommondivisor:%d\n",b);printf("Theleastcommonmultiple:%d\n",m*n/b);}while(b!=0){c=a%b;a=b;b=c;}b=a;第66页4【例4.17】百钱百鸡问题。公鸡5文钱1只,母鸡3文钱1只,小鸡一文钱3只。100文钱怎样买100只鸡?分析:设买x只公鸡,y只母鸡,z只小鸡,则有:x+y+z=100

温馨提示

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

评论

0/150

提交评论