C语言第四讲 程序的控制结构.ppt_第1页
C语言第四讲 程序的控制结构.ppt_第2页
C语言第四讲 程序的控制结构.ppt_第3页
C语言第四讲 程序的控制结构.ppt_第4页
C语言第四讲 程序的控制结构.ppt_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

1、1,第四讲 程序的控制结构,2,主要内容,程序的基本控制结构 条件的表示 选择结构的实现if语句 循环结构的实现while语句和for语句,3,程序的三种基本控制结构,Bohra和Jacopini提出了以下三种基本结构: 顺序结构 选择结构 循环结构 用这三种基本结构作为表示一个良好算法的基本单元。,4,顺序结构,选择结构,三种基本结构的图示,循环结构,5,三种基本结构的共同特点,(1)只有一个入口。 (2)只有一个出口。(请注意:一个菱形判断框有两个出口,而一个选择结构只有一个出口。不要将菱形框的出口和选择结构的出口混淆。) (3)结构内的每一部分都有机会被执行到。 (4)结构内不存在“死循

2、环”(无终止的循环)。,顺序结构-体现语句的执行循序,最基本的顺序结构,IPO结构 输入。 计算。 输出。 复合结构 。 。 。,顺序语句,赋值语句 函数调用语句 输入输出语句 无返回值用户自定义函数调用语句,6,选择结构,双分支结构 单分支结构 多分支结构,7,8,单分支结构,算法示例: 如果 c大于max则 max=c,9,双分支结构,算法示例: 如果 a大于b则 max=a 否则 max=b,10,多分支结构图示,多分支结构算法示例,如果 x大于0则y=1 否则 如果 x等于0 则 y=0 否则 y=-1,11,12,循环结构的要素,循环体 重复操作,循环控制结构循环控制变量 变量的初值

3、 变量的终值 改变变量的值,13,循环问题示例,例2-6输入2个整数lower和 upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是lower, upper,每次增加1F。 fahr celsius 30 -1.1 31 -0.6 32 0.0 33 0.6 34 1.1 35 1.7,循环结构算法示例,顺序算法,设置fahr为30 计算对应的摄氏温度celsius 输出celsius 设置fahr为31 计算对应的摄氏温度celsius 输出celsius 。 设置fahr为35 计算对应的摄氏温度celsius 输出celsius,循环算法要素,循环控制变量:fahr 初值 30

4、 终值 35 变化:+1 循环通项 计算对应的摄氏温度celsius 输出celsius,14,改进算法的流程图,1.设置fahr为30 2.如果fahr=35则 (1)计算对应的摄氏温度 (2)输出摄氏温度 (3)fahr增1 转2 否则转3 3.结束,15,条件的表示,关系运算 ,=,=,=, ,!= 逻辑运算 printf(Enter x (x=0):n); scanf(%lf, ,Enter x (x=0): 9.5 f(9.500000)=12.67,Enter x (x=0): 15 f(15.000000)=20.00,Enter x (x=0): 21.3 f(21.30000

5、0)=42.75,28,if - else语句,if (条件表达式) 语句1 else 语句2,if(x = 15) y = 4 * x / 3; else y = 2.5 * x - 10.5;,29,计算二分段函数,if (表达式) 语句1 else 语句2,if(x != 0) y = 1/x; else y = 0;,30,源程序,#include int main(void) double x, y; printf(Enter x:n); scanf(%lf, ,#include /*例2-4 */ int main(void) double x, y; printf(Enter x

6、 (x=0):n); scanf(%lf, ,31,运行结果,#include int main(void) double x, y; printf(Enter x:n); scanf(%lf, ,input x: 2.5 f(2.50)=0.4,input x: 0 f(0.00)=0.0,32,软件测试的基本思想,软件测试 精心设计一批测试用例 输入数据,预期输出结果 ,然后分别用这些测试用例运行程序,看程序的实际运行结果与预期输出结果是否一致。,input x: 2.5 f(2.50)=0.4,input x: 0 f(0.00)=0.0,if(x != 0) y = 1/x; else

7、 y = 0;,if(x = 15) y = 4 * x / 3; else y = 2.5 * x - 10.5;,Enter x (x=0): 9.5 f(9.500000)=12.67,Enter x (x=0): 15 f(15.000000)=20.00,Enter x (x=0): 21.3 f(21.300000)=42.75,33,浮点数:double与float,float 有效数字7-8位 取值范围为正负10-38-1038 输入格式符:%f 输出格式符:%f,double 有效数字15-16位 取值范围为正负10-308-10308 输入格式符:%lf 输出格式符:%f

8、浮点常量为double型 int x 1.0/x 的数据类型?,34,求两个数中较大值,int a,b,max; if(ab) max=a; else max=b;,int max(int a,int b) int m; if(ab) m =a; else m =b; return m; ,函数名不要和函数中的变量同名,35,if与return的配合,int max(int a,int b) if(ab) return a; else return b; ,一个函数中可以出现多条return 语句 每一次执行只有一条return 语句可以被执行到。,36,if语句实现检查功能,int div(

9、int x,int y) if(y=0) return -1; else return x/y; ,int div(int x,int y) if (y=0) return -1; return x/y; ,对比,37,具有复合语句的if语句,if(条件) 条件为true时的处理语句 else 条件为false时的处理语句 ,38,示例,if(xy) z=x; x=y; y=z; ,多条语句,39,示例,if( ctri MAX_SAFE_CTRI) printf(“Car #%d :safen”,auto_id); safe=safe+1; else printf(“Car #%d :uns

10、afen”,auto_id); unsafe=unsafe+1; ,40,常见编程错误,if(flag=1) y=x; else y=0;,if(0=x=10) y=x+1; else y=x*x+1;,41,常见编程错误,if a10 . else ,if(xy) z=x;x=y;y=z;,实现计数型循环结构,while语句 for语句 计数型循环结构的设计,42,循环结构的实现while语句,语法,while() ,一般形式,循环控制变量初值 while(判终值) 循环通项 改变循环控制变量的值 ,43,while示例实现华氏摄氏温度转换表,#include void main(void)

11、 int fahr, lower, upper; double celsius; printf(Enter lower:); scanf(%d, ,/ 温度重复转换:华氏温度从lower开始,到upper结束,每次增加1F fahr=lower; while(fahr = upper) celsius = (5.0 / 9.0) * (fahr - 32); printf(%d %6.1fn, fahr, celsius); fahr +; ,44,思考,运行结束时,fahr的值为多少? 如果fahr+;改为fahr=fahr+2; 运行结果如何? 如果输入是lower赋值35,upper赋值

12、30,运行结果如何?,45,Enter lower: 30 Enter upper: 35 fahr celsius 30 -1.1 31 -0.6 32 0.0 33 0.6 34 1.1 35 1.7,循环结构的实现for语句,语法,for(;) ,一般形式,for(e1;e2;e3) 循环通项 e1:循环控制变量初值 e2:判终值 e3:改变循环控制变量的值,46,for示例实现华氏摄氏温度转换表,#include void main(void) int fahr, lower, upper; double celsius; printf(Enter lower:); scanf(%d,

13、 ,/ 温度重复转换:华氏温度从lower开始,到upper结束,每次增加1F for (fahr = lower; fahr = upper; fahr +) celsius = (5.0 / 9.0) * (fahr - 32); printf(%d %6.1fn, fahr, celsius); ,47,48,循环(控制)变量:for语句中,通过改变或判断某个变量的值来控制循环的执行 for (fahr = lower; fahr = upper; fahr +) celsius = (5.0 / 9.0) * (fahr - 32.0); printf(%d %6.1fn, fahr,

14、 celsius); ,for语句中的循环变量,赋初值,判断其值,改变其值,49,for (fahr = lower; fahr = upper; fahr +) celsius = (5.0 / 9.0) * (fahr - 32.0); printf(%d %6.1fn, fahr, celsius); ,表达式1:给循环变量赋初值,指定循环的起点。 fahr = lower 表达式2:给出循环的条件,决定循环的继续或结束。 fahr = upper 表达式3:设置循环的步长,改变循环变量的值,从而可改变表达式2的真假性。 fahr+ 语句:被反复执行的语句,一条语句。,for语句的说明,

15、50,for (fahr = lower; fahr = upper; fahr +) celsius = (5.0 / 9.0) * (fahr - 32.0); printf(%d %6.1fn, fahr, celsius); ,for (fahr = lower ; fahr = upper; fahr = fahr + 1) celsius = (5.0 / 9.0) * (fahr - 32.0); printf(%d %6.1fn, fahr, celsius);,复合语句 和空语句 ;,for (fahr = lower ; fahr = upper; fahr = fahr

16、+ 1); celsius = (5.0 / 9.0) * (fahr - 32.0); printf(%d %6.1fn, fahr, celsius);,符合for语句习惯的算法描述,循环fahr从30到35 ,步长1 (1)计算对应的摄氏温度 (2)输出摄氏温度,51,52,指定次数的循环程序设计,循环体 重复操作,循环控制结构计数变量 计数变量的初值 计数变量的终值 变长,53,示例:求 1+2+100,sum=0; sum=sum+1; sum=sum+2; sum=sum+3; sum=sum+100;,循环通项 sum=sum+item 计数变量 i从1计数到100 初值:1 终

17、值:100 变长:+1 合并item和I sum=sum+i;,sum=0; for(i=1;i=100;i+) sum=sum+i;,54,/* 计算1 + 2 + 3 + + 100 */ #include int main(void) int i, sum; sum = 0; /* 置累加和sum的初值为0 */ for ( i = 1; i = 100; i+ ) /* 循环重复100次 */ sum = sum + i; /* 反复累加 */ printf( “sum = %dn”, sum); /* 输出累加和 */ return 0; ,源程序求 1+2+100,for(i=1;

18、 i=100; i+) sum=0; sum=sum+i; ,sum=5050,55,#include int main(void) int i, sum; sum = 0; for ( i = 1; i = 100; i+ ) sum = sum + i; printf( “sum = %dn”, sum); return 0; ,求 1+1/2+1/3+ 1/100,for(i=1; i=100; i+) sum=sum+1.0/i;,int i; double sum;,printf( “sum = %fn”, sum);,56,一般包含四个部分: 初始化:指定循环起点 给循环变量赋初值

19、,如i = 1; 进入循环之前,设置相关变量的初值,如sum = 0。 条件控制: 只要i 100,循环结束。,指定次数的循环程序设计,57,输入一个正整数n,求前n项和,即循环n次 #include int main(void) int i, sum; sum = 0; for ( i = 1; i = 100; i+ ) sum = sum + i; printf( “sum = %dn”, sum); return 0; ,例2-7 求 1+2+3+n,for(i=1; i=n; i+) sum=sum+i;,printf(“Enter n:); scanf(%d, ,Enter n:

20、100 Sum = 5050,58,#include int main(void) int i, sum; printf(“Enter n: ); scanf(%d, ,求1+1/2+1/3+ 1/n,#include int main(void) int i; double sum; printf(“Enter n: ); scanf(%d, ,59,求前n项和,即循环n次,每次累加1项。 for (i = 1; i = n ; i+) sum = sum + item (第i项) item = 1.0 / (2 * i - 1),求 1+1/3+1/5+ 的前n项和,60,#include

21、 int main(void) int i, n; double item, sum; printf(“Enter n: ); scanf (%d, ,源程序求 1+1/3+1/5+,61,求前n项和,即循环n次,每次累加1项。 for (i = 1; i = n ; i+) sum = sum + item (第i项) item = flag * 1.0 / denominator denominator = denominator + 2 flag = -flag,例2-8 求 1-1/3+1/5- 的前n项和,item = flag*1.0/(2 * i - 1),62,#include int main(void) int denominator, flag, i, n; double item, sum; printf(“Enter n: ); scanf (%d, ,例2-8 源程序,63,n! = 1*2*n for (i = 1; i = n ; i+) product = product * item (第i项) item=i,例2-9 求n!,product = ?,64,#include int main(void) int i, n; double product; printf(input n: n); scanf

温馨提示

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

评论

0/150

提交评论