C语言快速入门-4(周).ppt_第1页
C语言快速入门-4(周).ppt_第2页
C语言快速入门-4(周).ppt_第3页
C语言快速入门-4(周).ppt_第4页
C语言快速入门-4(周).ppt_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

,2.5 程序控制结构,C语句概述,C语句分为,5类,控制语句 函数调用语句 表达式语句 空语句 复合语句,C语言的语句(statement)以“;”作分隔符,编译后产生机器指令。,C语句概述,(一)控制语句,完成一定的控制功能 1 if() else 条件语句 6 break 间断语句 2 for() 循环语句 7 switch() 开关语句 3 while()循环语句 8 goto 转向语句 4 do while();循环语句 9 return 返回语句 5 continue 继续语句,(二)函数调用语句 有一个函数调用加一个分号构成一个语句 printf(“This is a C statement.”);,例:,C语句概述,(三)表达式语句 有一个表达式加一个分号构成一个语句,C语句概述,(四)空语句,只有一个分号的语句 (什么也不做) 用来做流程的转向点 用来作为循环语句中的循环体,;,C语句概述,(五)复合语句 用一对 括起来的语句 z=x+y; t=z/100; printf(“%f”,t); ,例:,C语句概述,B,A,2.6 顺序结构,#include #include void main() float a,b,c,s,area; scanf(“%f%f%f“, ,输入:3 4 6 输出:a= 3.00, b= 4.00, c= 6.00 s= 6.50 area= 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. 基本选择结构(ifelse结构),表2-11:选择结构的基本编程模式,B,N,A,Y,条 件P,分支结构(选择结构),#include void main() int a,b,t; scanf(“%d%d“, ,【例】将二数(a,b)中的大数存放到a中。,5 10 a=10,b=5,分析: 假设有三个数a,b,c,用变量max3表示三个数中的最大的数。 将三个数分成两组,a,b为一组,c为一组; 先求a,b中的最大数,如果 ab,则max3=a,否则max3=b; 将a,b的最大数max3与c比较,如果max3c,则max3就是三个数中的最大数,否则c是三个数中的最大数,max3=c;,【例2-9】从键盘任意输入三个数,输出三个数中最大的数,#include void main() float a,b,c,max3; printf(“输入三个数a,b,c:“); scanf(“%f%f%f“, ,【例2-9】从键盘任意输入三个数,输出三个数中最大的数,输入三个数a,b,c:3 4 5 max3=5.000000,2. 条件表达式,含义: 如果表达式1的值非0(为真),则该条件表达式的结果就是表达式2的值 否则,是表达式3的值,表达式3,N,表达式2,Y,表达式1,【例】 输入一个英文字母,判断是否为英文大写字母, 若是大写字母直接输出,否则转换成大写字母输出。,#include void main() char ch; scanf(“%c“, ,a A,A A,3.多分支选择结构,多路选择 switch (表达式) case 常量表达式1: 语句序列1; case 常量表达式2: 语句序列2; default: 语句序列n; default可以没有,但最好不省略 不要忘记break,多分支选择结构(switchcase),switch(expr) case M1: S_1; break; case M2: S_1; break; case Mn: S_n; break; default: S_d; ,switch语句的执行过程是: 计算expr的值(整型) 计算出每个常量表达 式M1,M2,Mn的值(整型) 让expr依次同M1,M2, 进行比较,多分支选择,switch (expression) case value1 : statement1; break; case value2 : statement2; break; default : statementX; break; ,Example: switch (month) case 1: printf(“Januaryn”); break; case 2: printf(“Februaryn”); break; case 3: printf(“Marchn”); break; default: printf(“Othersn”); break; printf(“End”);,January _,January End _,多分支选择,Example: switch (month) case 1: printf(“Januaryn”); break; case 2: printf(“Februaryn”); break; case 3: printf(“Marchn”); break; default: printf(“Othersn”); break; printf(“End”);,多分支选择,Example: switch (month) case 1: printf(“Januaryn”); break; case 2: printf(“Februaryn”); case 3: printf(“Marchn”); break; default: printf(“Othersn”); break; printf(“End”);,February _,March _,End _,多分支选择,Example: switch (month) case 1: printf(“Januaryn”); case 2: printf(“Februaryn”); case 3: printf(“Marchn”); default: printf(“Othersn”); break; printf(“End”);,若month = 34 ?,多分支选择,(1) switch后的表达式可以为任何具有整型值的表达式。 (2) 关键字case后的整型常量表达式的值是整型。注意各case后的整型常量表达式之值必须互不相同。 (3) “语句组”可以是一条或多条合法的语句,但必将它们放在一个复合语句中。 (4) break是C 语言的一种语句,其功能是中断正在执行的语句。在switch 语句中的作用是:执行完某个语句组后,将退出该switch语句。(如果省略了break语句,则执行完某个语句组后,将继续执行其后边的语句组。 ),3. 多分支选择结构,【例】将百分制成绩分段。,#include void main() int s; scanf(“%d“, switch(s/10) case 1: case 2: case 3: case 4:,case 5: printf(“E.n“);break; case 6: printf(“D.n“);break; case 7: printf(“C.n“);break; case 8: printf(“B.n“);break; case 9: default:printf(“A.n“); ,95 A.,void main( ) float score; char grade; printf(“请输入成绩:“); scanf(“%f“, ,请输入成绩:95.5 成绩是95.5,相应等级是A。,【例2-13】分析下面程序段中的错误,float x=2; int a=3,b=1; switch(2*x) case 2.5: printf(“%f”,2*x); break; case a+b: printf(“%d”,a+b); case 2,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! = 1 2 3 n,通项公式,s=0; for(i=1;i=n;i+) s = s + i ;,p=1; for(i=1;i=n;i+) p = p * i ;,注意:,整型定义为long 或 unsigned long 型,智人之法:归纳法(递推法),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;,#include void main() int i,sum=0; for (i=1;i=100;i+) sum+=i; printf(“sum=%d,i=%dn“,sum,i); ,sum=5050,i=101,【例】 用for循环求s=1+2+3100,#include main() int i,n,s; printf(“输入自然数n=“); scanf(“%d“, ,for循环结构,输入自然数n=99 前99个自然数的和=4950,A,条 件P,A,当型循环,直到型循环,真,假,假,条 件P,假,真,2. while, dowhile 循环结构,void main( ) int i=1,sum=0; while (i=100) sum=sum+i; i+; printf(“sum=%dt“,sum); printf(“i=%d“,i); ,注意:1、如果语句超过一个,则必须用 构成复合语句 2、注意修改循环变量的语句,sum=5050 i=101,【例】 用while循环求s=1+2+3100,counter 1, sum 0,counter6,sum sum + n,false,true,counter+,output sum,input n,1,counter,sum,0,1 6 true,2,n,0 + 2,2,2,2 6 true,3,2 + 3,5,3,3 6 true,4,5 + 4,9,4,4 6 true,5,9 + 5,14,5,5 6 true,6,14 + 6,20,6,6 6 false,This loop is counter-controlled,The counter increases by 1,Uses only 3 variables,Assume input example: 2 3 4 5 6,计数控制的循环,void main( ) int counter=1, sum=0, n; while (counter6) scanf(“%d“, ,注意: counter 不参加运算, counter 控制重复运算的次数 counter 可以修改,保证执行5次,【例】求从键盘上任意输入5个数的和,2 3 4 5 6 sum=20,i 0, sum 0,i 5,sumsum+ x,false,true,i+,output sum,input x,int x, sum, i; sum = 0; for (i = 0; i 5; i+) scanf(“%d”, ,printf(“%d”,sum);,void main( ),int sum, x; sum = 0; scanf(“%d”, ,0,1,_,1,1 0,0+1,1,1 3,3,3 0,1+3,4,1 3 23,23,23 0,4+23,27,1 3 23 -9,-9,-9 0,The sum : 27,标记控制的循环,void main( ),循环嵌套与多重循环,在一个循环的循环体内又包含另一个循环,称为循环嵌套。两层循环嵌套结构称为双层循环;两层以上的嵌套结构,则称为多重循环。,循环的嵌套(多重循环),for(h=0;h=23;h+) for(m=0;m=59;m+) for(s=0;s=59;s+) ,3. 循环辅助语句,break statement,printf(“Input a value between 1 7: ”); scanf(“%d”,value,?,i,i = 7,i = value,Input a value between 1-7: _,Input a value between 1-7: 4,1,1 = 7 true,1 = 4 false,4,Input a value between 1-7: 4 1,2,2 = 7 true,2 = 4 false,Input a value between 1-7: 4 1 2,3,3 = 7 true,3 = 4 false,Input a value between 1-7: 4 1 2 3,4,4 = 7 true,4 = 4 true,Input a value between 1-7: 5 1 2 3 Im out of the loop!,Now what can you conclude about break?,break? 退出一层循环 或switch,continue statement,Example: for ( i = 0; i = 5; i+ ) if ( i % 2 ) continue; else printf(“%d is an even number. ”, i); printf(“Print iff even ! n”); i i = 5 i % 2,_,0,0 = 5 true,0,1 = 5 true,1,2 = 5 true,3 = 5 true,4 = 5 true,5 = 5 true,1,6 = 5 false,2,3,4,1,0,1,0,0 is an even number._,0 is an even number. Print iff even ! _,0 is an even number. Print iff even ! 2 is an even number._,0 is an even number. Print iff even ! 2 is an even number. Print iff even ! _,0 is an even number. Print iff even ! 2 is an even number. Print iff even ! 4 is an even number._,0 is an even number. Print iff even ! 2 is an even number. Print iff even ! 4 is an even number. Print iff even ! _,Now what can you conclude about continue?,continue? 中断此次循环体的执行,开始下一次,5,6,#include main() int i, n; for (i=1; i=5; i+) printf(“Please enter n:“); scanf(“%d“, ,Please enter n:10 n = 10 Please enter n: -10 Program is over!,break语句的用法,#include main() int i, n; for (i=1; i=5; i+) printf(“Please enter n:“); scanf(“%d“, ,Please enter n: 10 n = 10 Please enter n: -10 Please enter n: 20 n = 20 Please enter n: -20 Please enter n: 30 n = 30 Program is over!,continue语句的用法,说明: 1、break语句可用于switch语句结构中 也可用于循环中。 2、continue语句只可用于循环中。 3、在循环嵌套中break与continue都只 影响包含它的那层循环 4、少用为妙,习题2_28:选择下面程序的运行结果,#include void main(void) int i; for(i=1;i=5;i+) if(i%2) printf(“*“); else continue; printf(“#“); printf(“$n“); ,A)*#*#*#$ B)#*#*#*$ C)*#*#$ D)#*#*$,一般形式: goto 语句标号; 语句标号: 或 语句标号: goto 语句标号;,4.goto语句,void main() int i,s; i=1; s=0; loop: /*标号作用*/ if(i=100) s+=i; +i; goto loop; printf(“%dn“,s); ,5050,通常goto语句与if条件语句连用,【例】 用goto语句求s=1+2+3100,是goto的过错?还是程序员的过错?,破坏了结构化设计风格 容易带来错误隐患 goto next; int sum = 0; /*被goto跳过*/ next:,Evil gotos ? Maybe Not 凌波微步,未必摔跤,现代观点认为: 混乱根源不在goto,而在标号 任何程序都可以不用goto就实现其功能 但在某些情况下,使用goto可以让程序更清晰 两种适合使用goto的情况 跳向共同的出口位置,进行退出前的处理工作 跳出多重循环的一条捷径 goto error; ,使用goto的原则,主张少用、慎用,而不是禁用 保证使用之后,程序仍然是单入口,单出口 不要使用一个以上的标号 不要让goto制造出永远不会被执行的代码,【例2-22】从键盘输入一个整数n,按下式计算y的值,并输出y和n的值y=1!+2!+3!+n!,分析:使用自顶向下,逐步求精的原则设计这个算法 第一步:根据题意,得到算法的顶层框架描述

温馨提示

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

评论

0/150

提交评论