C语言快速入门-4(周).ppt
《C语言快速入门-4(周).ppt》由会员分享,可在线阅读,更多相关《C语言快速入门-4(周).ppt(72页珍藏版)》请在装配图网上搜索。
,2.5程序控制结构,C语句概述,C语句分为,5类,,控制语句函数调用语句表达式语句空语句复合语句,C语言的语句(statement)以“;”作分隔符,编译后产生机器指令。,C语句概述,(一)控制语句,完成一定的控制功能1if()~else条件语句6break间断语句2for()~循环语句7switch()开关语句3while()~循环语句8goto转向语句4do~while();循环语句9return返回语句5continue继续语句,(二)函数调用语句有一个函数调用加一个分号构成一个语句printf(“ThisisaCstatement.”);,例:,C语句概述,(三)表达式语句有一个表达式加一个分号构成一个语句,C语句概述,(四)空语句,只有一个分号的语句(什么也不做)用来做流程的转向点用来作为循环语句中的循环体,;,C语句概述,(五)复合语句用一对{}括起来的语句{z=x+y;t=z/100;printf(“%f”,t);},例:,C语句概述,,B,,A,,2.6顺序结构,#include#includevoidmain(){floata,b,c,s,area;scanf("%f%f%f",},输入:346输出:a=3.00,b=4.00,c=6.00s=6.50area=5.33,【例】输入三角形的三边长,求三角形面积。其中s=(a+b+c)/2,顺序结构程序中语句自上而下顺序执行,无分支、无转移、无循环。,【例】交换a,b的值。,设一个中间变量t暂存数据,其操作步骤为:(1)将a存入t,语句为t=a;(2)将b赋给a,语句为a=b;(3)将t赋给b(原来a的值),语句为b=t;正确的交换方法:{t=a;a=b;b=t;}不能只写下面两个赋值语句a=b;b=a;,,,a,b,t,b,a,,,,a,b,t,a,b,t,,a,b,t,a,b,t,,,a,b,t,a,b,t,2.7选择结构,如果没有条件判断语句,世界上最先进的计算机也只是一个计算器。选择结构使得计算机表现出具有智能。,1.基本选择结构(if~else结构),表2-11:选择结构的基本编程模式,,B,,N,,A,Y,条件P,,分支结构(选择结构),#includevoidmain(){inta,b,t;scanf("%d%d",},,【例】将二数(a,b)中的大数存放到a中。,,510a=10,b=5,分析:⑴假设有三个数a,b,c,用变量max3表示三个数中的最大的数。⑵将三个数分成两组,a,b为一组,c为一组;⑶先求a,b中的最大数,如果a>b,则max3=a,否则max3=b;⑷将a,b的最大数max3与c比较,如果max3>c,则max3就是三个数中的最大数,否则c是三个数中的最大数,max3=c;,【例2-9】从键盘任意输入三个数,输出三个数中最大的数,#includevoidmain(){floata,b,c,max3;printf("输入三个数a,b,c:");scanf("%f%f%f",},【例2-9】从键盘任意输入三个数,输出三个数中最大的数,输入三个数a,b,c:345max3=5.000000,2.条件表达式,含义:如果表达式1的值非0(为真),则该条件表达式的结果就是表达式2的值否则,是表达式3的值,,表达式3,N,表达式2,Y,表达式1,,【例】输入一个英文字母,判断是否为英文大写字母,若是大写字母直接输出,否则转换成大写字母输出。,#includevoidmain(){charch;scanf("%c",},aA,AA,3.多分支选择结构,多路选择switch(表达式){case常量表达式1:语句序列1;case常量表达式2:语句序列2;…………default:语句序列n;}default可以没有,但最好不省略不要忘记break,多分支选择结构(switch~case),switch(expr){caseM1:S_1;break;caseM2:S_1;break;……caseMn:S_n;break;default:S_d;},switch语句的执行过程是:⑴计算expr的值(整型)⑵计算出每个常量表达式M1,M2,Mn的值(整型)⑶让expr依次同M1,M2,进行比较,多分支选择,switch(expression){casevalue1:statement1;break;casevalue2:statement2;break;…default:statementX;break;},Example:switch(month){case1:printf(“January\n”);break;case2:printf(“February\n”);break;case3:printf(“March\n”);break;default:printf(“Others\n”);break;}printf(“End”);,January_,JanuaryEnd_,多分支选择,Example:switch(month){case1:printf(“January\n”);break;case2:printf(“February\n”);break;case3:printf(“March\n”);break;default:printf(“Others\n”);break;}printf(“End”);,多分支选择,Example:switch(month){case1:printf(“January\n”);break;case2:printf(“February\n”);case3:printf(“March\n”);break;default:printf(“Others\n”);break;}printf(“End”);,February_,March_,End_,多分支选择,Example:switch(month){case1:printf(“January\n”);case2:printf(“February\n”);case3:printf(“March\n”);default:printf(“Others\n”);break;}printf(“End”);,若month=34?,多分支选择,(1)switch后的表达式可以为任何具有整型值的C表达式。(2)关键字case后的整型常量表达式的值是整型。注意各case后的整型常量表达式之值必须互不相同。(3)“语句组”可以是一条或多条合法的C语句,但必将它们放在一个复合语句中。(4)break是C语言的一种语句,其功能是中断正在执行的语句。在switch语句中的作用是:执行完某个语句组后,将退出该switch语句。(如果省略了break语句,则执行完某个语句组后,将继续执行其后边的语句组。),3.多分支选择结构,【例】将百分制成绩分段。,#includevoidmain(){ints;scanf("%d",switch(s/10){case1:case2:case3:case4:,case5:printf("E.\n");break;case6:printf("D.\n");break;case7:printf("C.\n");break;case8:printf("B.\n");break;case9:default:printf("A.\n");}},95A.,voidmain(){floatscore;chargrade;printf("请输入成绩:");scanf("%f",},请输入成绩:95.5成绩是95.5,相应等级是A。,【例2-13】分析下面程序段中的错误,floatx=2;inta=3,b=1;switch(2*x){case2.5:printf(“%f”,2*x);break;casea+b:printf(“%d”,a+b);case2,3,4:printf(“%d%d%d”,2,3,4);},//错误:2*x是浮点型表达式,//错误:2.5是浮点常量表达式,//错误:a+b是不是整型常量表达式,因为a,b是变量,//错误:case子句只能有一个常量表达式,2.8循环结构,我们之所以感到计算机无所不能,是因为计算机能不厌其烦地重复大量枯燥的工作。,计数控制,标记控制,,,循环结构术语,循环条件——结构中的测试表达式循环体——每个循环周期均要执行的语句序列循环控制变量——控制条件真/假值的变量。,对循环控制变量应做如下处理:赋初值;将其代入正确的循环条件;更新/调整,【累加型】计算1+2+3+……+n,,通项公式,,【累乘型】计算n!=123n,通项公式,,s=0;for(i=1;i<=n;i++)s=s+i;,p=1;for(i=1;i<=n;i++)p=p*i;,,注意:,整型定义为long或unsignedlong型,智人之法:归纳法(递推法),s=1*1+2*2+3*3,循环结构的应用场合,1*1+2*2+3*3=?,s=1*1+2*2+……+100*100,1*1+2*2+……+99*99+100*100=?,for(i=1,s=0;i<=100;i++)s+=i*i;,1.for循环结构,for(表达式1;表达式2;表达式3){语句;}首先执行表达式1。如果表达式2的值为非0,就重复执行语句和表达式3,直到表达式2的值为0时止,,,循环起始条件,循环结束条件,循环增量,,,,,for循环的一般格式:,for(表达式1;表达式2;表达式3)S;,#includevoidmain(){inti,sum=0;for(i=1;i<=100;i++)sum+=i;printf("sum=%d,i=%d\n",sum,i);},sum=5050,i=101,【例】用for循环求s=1+2+3……100,#includemain(){inti,n,s;printf("输入自然数n=");scanf("%d",},for循环结构,输入自然数n=99前99个自然数的和=4950,,A,,,,,条件P,,,A,,当型循环,直到型循环,真,假,假,条件P,,,,,假,真,2.while,do~while循环结构,,voidmain(){inti=1,sum=0;while(i<=100){sum=sum+i;i++;}printf("sum=%d\t",sum);printf("i=%d",i);},注意:1、如果语句超过一个,则必须用{}构成复合语句2、注意修改循环变量的语句,sum=5050i=101,【例】用while循环求s=1+2+3……100,,counter←1,sum←0,counter<6,,,sum←sum+n,,false,true,counter++,,,,,,outputsum,inputn,,,1,counter,sum,0,1<6true,2,n,0+2,,2,,2,2<6true,3,,2+3,5,,3,3<6true,4,5+4,9,4,4<6true,5,9+5,14,5,5<6true,6,14+6,20,6,6<6false,Thisloopiscounter-controlled,Thecounterincreasesby1,Usesonly3variables,Assumeinputexample:23456,计数控制的循环,voidmain(){intcounter=1,sum=0,n;while(counter<6){scanf("%d",},注意:counter不参加运算,counter控制重复运算的次数counter可以修改,保证执行5次,【例】求从键盘上任意输入5个数的和,23456sum=20,,i←0,sum←0,i<5,,,sum←sum+x,,false,true,i++,,,,,,outputsum,inputx,,,intx,sum,i;sum=0;for(i=0;i0,,0+1,1,,13,3,,3>0,,1+3,4,,1323,23,,23>0,,4+23,27,,1323-9,-9,,-9>0,,Thesum:27,,标记控制的循环,voidmain(),{,},循环嵌套与多重循环,在一个循环的循环体内又包含另一个循环,称为循环嵌套。两层循环嵌套结构称为双层循环;两层以上的嵌套结构,则称为多重循环。,,循环的嵌套(多重循环),,for(h=0;h<=23;h++){for(m=0;m<=59;m++){for(s=0;s<=59;s++)……}},,,,,,,,3.循环辅助语句,,,breakstatement,printf(“Inputavaluebetween1–7:”);scanf(“%d”,,,,value,???,i,i<=7,i==value,,Inputavaluebetween1-7:_,,Inputavaluebetween1-7:4,,1,,,1<=7true,,1==4false,4,,,Inputavaluebetween1-7:41,,2,2<=7true,2==4false,Inputavaluebetween1-7:412,3,3<=7true,3==4false,Inputavaluebetween1-7:4123,4,4<=7true,4==4true,,,,Inputavaluebetween1-7:5123I’moutoftheloop!,Nowwhatcanyouconcludeaboutbreak?,break?退出一层循环或switch,continuestatement,Example:for(i=0;i<=5;i++){if(i%2)continue;elseprintf(“%disanevennumber.”,i);printf(“Printiffeven!\n”);}ii<=5i%2,,_,,0,,0<=5true,,0,,,,,,1<=5true,,,,1,,2<=5true,3<=5true,4<=5true,5<=5true,1,6<=5false,,2,3,4,1,0,1,0,0isanevennumber._,0isanevennumber.Printiffeven!_,0isanevennumber.Printiffeven!2isanevennumber._,0isanevennumber.Printiffeven!2isanevennumber.Printiffeven!_,0isanevennumber.Printiffeven!2isanevennumber.Printiffeven!4isanevennumber._,0isanevennumber.Printiffeven!2isanevennumber.Printiffeven!4isanevennumber.Printiffeven!_,Nowwhatcanyouconcludeaboutcontinue?,continue?中断此次循环体的执行,开始下一次,5,6,,,#includemain(){inti,n;for(i=1;i<=5;i++){printf("Pleaseentern:");scanf("%d",},Pleaseentern:10↙n=10Pleaseentern:-10↙Programisover!,break语句的用法,,,#includemain(){inti,n;for(i=1;i<=5;i++){printf("Pleaseentern:");scanf("%d",},Pleaseentern:10↙n=10Pleaseentern:-10↙Pleaseentern:20↙n=20Pleaseentern:-20↙Pleaseentern:30↙n=30Programisover!,continue语句的用法,说明:1、break语句可用于switch语句结构中也可用于循环中。2、continue语句只可用于循环中。3、在循环嵌套中break与continue都只影响包含它的那层循环4、少用为妙,习题2_28:选择下面程序的运行结果,#includevoidmain(void){inti;for(i=1;i<=5;i++){if(i%2)printf("*");elsecontinue;printf("#");}printf("$\n");},A)*#*#*#$B)#*#*#*$C)*#*#$D)#*#*$,一般形式:goto语句标号;……语句标号:……或语句标号:…………goto语句标号;,4.goto语句,,,voidmain(){inti,s;i=1;s=0;loop:/*标号作用*/if(i<=100){s+=i;++i;gotoloop;}printf("%d\n",s);},5050,通常goto语句与if条件语句连用,【例】用goto语句求s=1+2+3……100,是goto的过错?还是程序员的过错?,破坏了结构化设计风格容易带来错误隐患gotonext;intsum=0;/*被goto跳过*/…next:,Evilgoto’s?MaybeNot…凌波微步,未必摔跤,现代观点认为:混乱根源不在goto,而在标号任何程序都可以不用goto就实现其功能但在某些情况下,使用goto可以让程序更清晰两种适合使用goto的情况跳向共同的出口位置,进行退出前的处理工作跳出多重循环的一条捷径{…{…gotoerror;}},使用goto的原则,主张少用、慎用,而不是禁用保证使用之后,程序仍然是单入口,单出口不要使用一个以上的标号不要让goto制造出永远不会被执行的代码,【例2-22】从键盘输入一个整数n,按下式计算y的值,并输出y和n的值y=1!+2!+3!+…+n!,分析:使用自顶向下,逐步求精的原则设计这个算法第一步:根据题意,得到算法的顶层框架描述如下:(1)input(n);(2)y=++……+(3)output(n,y),方法一:用子函数实现,第二步:对上面第(2)步的求和进行细化y=0;for(i=1;i<=n;i++){y=y+factorial(i);},累加,用factorial(i)表示整数i的阶乘。,第三步:求阶乘函数的细化factorial(inti){s_i=1;for(j=1;j<=i;j++)s_i=s_i*j;},累乘,方法一:用子函数实现,第四步:将算法变成C语言程序将算法转换成C语言程序的过程,实际上是将算法中的相关语句、表达式等用符合C语言规范的语句和表达式表达出来。,方法一:用子函数实现,完整程序见教材46页,外循环为累加型内循环为阶乘型,从变化规律分析……,……sn=0;for(i=1;i<=n;i++){tn=1;for(j=1;j<=i;j++)tn=tn*j;sn=sn+tn;}……,方法二,在同一个循环中先阶乘,后累加,……sn=0,tn=1;for(i=1;i<=n;i++){tn=tn*i;sn=sn+tn;}……,从变化规律分析……,方法三,/*函数功能:计算i的阶乘函数入口参数:整型i函数返回值:阶乘运算结果*/intFactorial(inti){intj,s_i;for(j=1;j<=i;j++)s_i*=j;returns_i;},存在三处错误!!!你能发现吗?,程序调试实例,/*函数功能:计算i的阶乘函数入口参数:整型i函数返回值:阶乘运算结果*/longFactorial(inti){intj;longs_i=1;for(j=1;j<=i;j++)s_i*=i;returns_i;},程序调试实例,计算复用Factorial函数的代码longFactorial(intnumber);voidmain(){intm,k;longp;printf("Pleaseinputm,k:");scanf("%d,%d",},,- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 快速 入门

链接地址:https://www.zhuangpeitu.com/p-12706177.html