《C语言程序设计》课程(第3章)_第1页
《C语言程序设计》课程(第3章)_第2页
《C语言程序设计》课程(第3章)_第3页
《C语言程序设计》课程(第3章)_第4页
《C语言程序设计》课程(第3章)_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言程序设计 任课教师: 金 丹 电子邮箱:第3章 程序控制结构结构化程序设计程序:由计算机语言组成的语句序列。程序的三种根本结构: 顺序结构、选择结构、循环结构。3种根本结构的传统流程图不成立(a)顺序结构ABPAB(b)选择结构成立不成立PA成立AP成立(c)当型循环(d)直到循环3.1 顺序结构如果程序中的语句是按照书写顺序执行的,称为“顺序结构. 例3.1】输入三角形的三条边长,求三角形面积。假设:输入的三条边a,b,c 能构成三角形。1.将 a,b,c=? 定义数据类型和具体值(信息)2.通过:s=(a+b+c)/2 (确定算法)3.求出: area=sqrt(s*(s-a)*(s

2、-b)*(s-c); (描写计算公式)4.结果输出: area#include #include main() float s,a,b,c,area; scanf(%f,%f,%f,&a,&b,&c); s=1.0/2*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c); printf(a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2fn,a,b,c,s); printf(area=%fn,area);运行时输入:3.5,4.6,5.1a=3.50,b=4.60,c=5.1,s=6.60area=7.834539 图3.2 顺序结构程序举例 计算area

3、(a) 传统流程图 (b) N-S流程图 计算s 输入,a,b,c 开始 输出area 结束 输入a,b,c 计算s 计算area 输出area M 3.2 选择结构 C语言中提供三种类型的选择结构.分别是: if()单分支选择结构 if-else双分支选择结构 switch多分支选择结构3.2.1 单分支选择结构 格式:if(表达式) 语句; 功能:计算表达式的值。如果条件为真非0那么执行“语句,否那么不执行语句。 1简单的单分支结构 特点: 简单的单分支结构是指判断条件满足后执行的语句,可以是一条语句或顺序结构的多条语句,无内嵌if 语句。【例3.2】输入一个学生成绩,如果及格那么输出“g

4、ood!,否那么什么也不做。 #include main() float g; scanf(%f,&g); if(g=60) printf(good!n); 【例3.3】编程序,将二数a,b中的大数存放到a中,小数存b中。 算法分析:设一个中间变量temp暂存数据,其操作步骤为:(1) 将a 存入temp, 语句为temp=a;(2) 将b赋给a, 语句为 a=b;(3) 将temp赋给b原来a 的值,语句为 b=temp; #include main() float a,b,temp; scanf(%d,%d,&a,&b); if(ab) temp=a; a=b; b=temp; print

5、f(a=%d,b=%dn,a,b); x0 N Y 开始 输入x x=0 y=-1 y=0 y=1 N Y 输出y 结束 2嵌套的if 语句【例3.4】 输入一个整数x,假设“x是在-3x3区间内,那么输出“-3AND3 #include main() int x; scanf(%d,&x); if(x=-3) if(x=3) printf(-3AND3n);3.2.2 双分支选择结构格式: if (表达式) 语句1; else 语句2;功能:计算表达式的值,如果为真非0,那么执行“语句1,否那么执行“语句2。说明:(1) 语句1和语句2可以是一条语句、复合语句或是内嵌if语句等,也可以是空语

6、句。(2) 表达式可以是任何类型,常用的是关系表达式或逻辑表达式;(3) else 后面是if 的子句,与if 配对,不能单独出现;(4) if-else的配对原那么是:else 总是与同一层最近的尚未配对的if 语句配对。 1. 简单的if-else 语句例3.5 输入一个字符,假设是字母那么输出“YES!,否那么输出“NO!。 【例3.5】 输入一个字符,假设是字母那么输出“YES!,否那么输出“NO!。 #include main() char c; scanf(%c,&c); if(c=a&c=A&c=Z) printf(YES!n); else printf(NO!n);【例3.6】

7、 求如下所示分段函数值的方法。#include main() int x,y; scanf(%d,&x); if(x0) y=-1; else if(x=0) y=0; else y=1; printf(nx=%d,y=%dn,x,y);#include main() int x,y; scanf(%d,&x); if(x=0) if(x0) y=1; else y=0; else y=-1; printf(nx=%d,y=%dn,x,y);2.嵌套的if语句ifelse ifelse形式 if(表达式1) else if(表达式2) else if(表达式m) else S1=A注意:1if

8、 - else结构尽量缩格对齐。尽管我们在书写程序时,让else和最外层的if对齐,但它实际上是和内层if配对的。如果要让其和最外层if配对,必须用 将其程序段构成复合语句,如: if(ab) if(b=0&c=Ac&c=a&c=z) printf(c=%c, %cn,c, C);else if(c= ) printf(c=%c, %cn,c, D); else if(c=n) rintf(c=%c,%cn,c, E) else printf(c=%c,%cn,c, N); 3.2.4 switch语句switch(表达式) case 常量表达式1 :语句组1;break; case 常量表达

9、式2 :语句组2;break; case 常量表达式3 :语句组3;break; case 常量表达式n :语句组n;break; default :语句组n+1; 功能:以关键字switch后面“表达式为判断条件,在多分支中选择一个分支操作。 (1) switch后的表达式可以为任何具有整型值的表达式,只要能产生整型或字符型量即可。(2) 关键字case后的整型常量表达式可以是整型、字符型和枚举型。注意各case后的整型常量表达式之值必须互不相同。(3) “语句组可以是一条或多条合法的语句,但不必将它们放在一个复合语句中。(4) break是C 语言的一种语句,其功能是中断正在执行的语句。在

10、switch 语句中的作用是:执行完某个语句组后,将退出该switch语句。如果省略了break语句,那么执行完某个语句组后,将继续执行其后边的语句组。 【例3.8】 输入i,根据i 的值输出信息。#include main() int i; scanf(“%d,&i); switch(i) case 1: printf(“I am in case 1.n); break; case 2: printf(“I am in case 2.n) ;break; case 3: printf(“I am in case 3.n);break; default: printf(“I am in def

11、ault.n); 画出框图如果printf(I am in case 2.n)后缺少break语句,将会连续执行后面的case语句。 将上例去掉break语句后,观察执行情况。#include main() int i=2; switch(i) case 1: printf(I am in case 1.n); case 2: printf(I am in case 2.n); case 3: printf(I am in case 3.n); default: printf(I am in default.n); (5 每个case后的常数可以是任意的,并不一定要从1开始从小到大排列。【例3

12、.9】下面再看一看case后跟字符常量的例子。#include main() char c=x; switch(c) case a: printf(I am in case a.n);break; case x:printf(I am in case x.n);break; case z:printf(I am in case z.n);break; default:printf(I am in default.n); 6允许将相同操作的case及对应的常量表达式连续排列,对应操作的语句组及break只在最后一个case处出现。 【例3.10】将百分制成绩分段。 #include main()

13、 int s; scanf(%d,&s); 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: break; default:printf(A.n);3.3 循环结构3.3.1 当循环结构 while语句格式:while(表达式) 语句;功能: 计算表达式值,其值假设为真非0那么反复执行语句,直到表达式的值为假时为止。说明:1表

14、达式用来描述循环条件的,可以是任何类型,常用的是关系型或逻辑型表达式。2重复执行的操作称为“循环体,在格式中表示为语句,它可以是任何一条或复合语句。3在循环体中可以包含“循环语句,这种程序结构称为循环嵌套,也称为多重循环。(4)while循环执行原那么是“先判断,后执行。即当表达式条件满足时执行循环体,条件不满足时结束循环转去执行循环语句后的下一条语句。 结束循环【例3.11】 第一行输出数字0,1,2,3,4,并要求每个数字间隔4个字符位,第二行输出“We are out of the loop.。#include main() int i=0; while(i5) printf(%d ,i

15、+); printf(“nWe are out of the loop.n); 0 1 2 3 4We are out of the loop. 【例3.12】 求s=1+2+3100 分析:(1设加数为i ; i是从1初值开始到100终值结束; 变化规律步长值为i=i+1(i+); 变量 i满足了三个根本条件,即: 有一个明确的初值 明确的终值 明确的步长值 那么变量i 可以作为循环控制变量(2设累加和用sum表示; 初值为0 sum 随加数 i 而变化执行sum=sum+i 并由此语句与i=i+1构成了循环体。 #include main() int i=1,sum=0; while(i=

16、100) sum=sum+i; i+; printf(%dn,sum);【例】 求任意10个实数的代数和。10个数据通过键盘逐个输入,其执行语句是: scanf(%d,x); 每当输入1 个x后执行: sum=sum+x(2) 设 i 为循环控制变量, 只控制循环的次数而不参加运算 i 的初值 为1, 终值为10, i 的变化是i+#include main()int i=1,x,sum=0;while(i10) scanf(%d,&x); sum=sum+x; i+; printf(%dn,sum);注意:键盘给值的格式3.3.2 直到循环结构 do-while语句 do 语句;(循环体)w

17、hile(表达式); 功能: 先执行循环体,然后计算表达式值,其值假设为真非0那么继续执行循环体,直到表达式为假时为止。 #include main() int i=1,sum=0; do sum=sum+i; i+; while(i=100); printf(%dn,sum);【例3.13】用do-while循环改写例3.12 【例3.14】while和do-while循环的比较 (1) main() (2) main() int i,sum=0; int i,sum=0; scanf(%d,&i); scanf(%d,&i); while(i=10) do sum=sum+i; sum=s

18、um+i; i+; i+; while(i=10); printf(“sum=%dn,sum); printf(“sum=%dn,sum); 3.3.3 次数循环结构 for语句格式: for(表达式1;表达式2;表达式3) 语句; 功能: 根据循环控制变量的初值、终值和步长值,重复执行循环体。流程图如 while 循环.【例3.15】将例3.12改用for语句书写。#include main() int i,sum=0;for(i=1;i=100;i+) sum+=i;printf(sum=%d,i=%dn,sum,i); 说明:1for语句中的表达式,分别对应着循环控制中的三个根本组成局部

19、,即:表达式1:循环控制变量的初始化(只执行1次),允许是逗号表达式。表达式2:循环判断条件,是循环的入口,假设条件满足那么执行循环体,否那么结束循环。表达式3:改变循环控制变量操作(循环控制变量的增量),执行完循环体后,执行该语句;执行完毕,转去执行表达式2。(2)循环体由“语句局部来描述,和其它循环一样。它也可以是一条语句、空语句或复合语句。 (3for循环语句的表达式1 和表达式3 都可以是逗号表达式。表达式3也可以出现在循环体中。如for(x=1;x10;) sum=sum+x;x+;。循环控制变量增量在循环体内完成,但格式中的“;不能丢。4for(;x100;x+=10) 其中x的初

20、值在for语句前完成,但格式中的“;不能丢。应用举例:1. 求:sum=5+10+100 for(i=5;i=100;i+=005)2. 求:sum=0.1+0.2+1.0for(i=0.1;i=1.0;i+=0.1) sum=100+90+10 #include main() int i,sum=0; for(i=100;i=10;i- -) scanf(%d,&x); sum+=x; printf(sum=%dn,sum); 三种循环语句的比较1for 语句与while语句执行过程相同,但for语句简洁、清晰,它将初始条件、判断条件和循环变量的在一行书写,显得直观、明了。2while 和d

21、o-while语句的循环控制变量初始化是在循环语句之前完成,而for语句循环变量的初始化是在for中表达式1中,也可以在for语句前实现。 如:x=1;3for语句和while语句是判断条件后执行循环体;而do-while是先执行循环体后判断条件,无论条件是否满足都要执行一次循环体。 3.4.4 循环嵌套与多重循环 在一个循环的循环体内又包含另一个循环,称为循环嵌套。两层循环嵌套结构称为双层循环;两层以上的嵌套结构,那么称为多重循环。【例】求5学生的3门课程的平均成绩#include main() int i,j; float x,sum=0; for(i=1;i=5;i+) sum=0; f

22、or(j=1;j=3;j+) scanf(%f,&x); sum=sum+x; printf(%fn,sum/3); 问题1、内循环执行次数,外循环执行次数? 2、每门课程的平均成绩?【例3.16】 百钱买百鸡。鸡翁1,钱值5; 鸡母1,钱值3;鸡雏3,钱值1;何以百钱买百鸡? #include main( ) int x,y,z; for(x=1;x=20;x+) /*鸡翁*/ for(y=1;y=33;y+) /*鸡母*/ if(x*5+y*3+(100-x-y)/3)=100) /*三种鸡总数*/ z=100-x-y; printf(nx=%d,y=%d,z=%dn,x,y,z); 3.4 break语句和continue语句 3.4.1 break语句 格式:break; 功能:强制中断当前的循环,不再执后面的循环语句而退出循环(结束循环)。 Y break Y 表达式1 N 表达式2 N while循环的下一语句 【例3. 17】 计算半径r=1到10时的面积,直到面积大于100为止#include #define PI 3.1415926main() int r; float area; for(r=1;r100) break; printf(area=%f,area); 3.4.2 continue 语句 格式:continue;功能:continue语句

温馨提示

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

最新文档

评论

0/150

提交评论