《CH3程序控制结构》PPT课件.ppt_第1页
《CH3程序控制结构》PPT课件.ppt_第2页
《CH3程序控制结构》PPT课件.ppt_第3页
《CH3程序控制结构》PPT课件.ppt_第4页
《CH3程序控制结构》PPT课件.ppt_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

CH3 程序控制结构结构 主讲:邹显春 E-Mail: 分析问题 构建算法 选择 描述 方法 描述算法 利用C程序 语句描述算法 中的操作 根据C程序结构 完整C程序代码 调试程序 调试数据 分析结果 1.问题分析与算法设计 2.编写 程序 3.程序编译与运行调试 复习思考:编写C程序的基本过程? 【例】已知华氏温度,求 对应的摄氏 温度-顺序结构程序设计 摄氏温度 C=(5/9)(F-32) 1.问题分析与算法设 计 算法描述 .自然语言表示: ()输入华氏温度值 ()根据公式计算 ()输出摄氏温度 输入半径 fahr 计算 celsius 输出 celsius 开始 输入fahr 计算celsius 输出celsius 结束 scanf(“%d”, celsius=5*(fahr - 32) / 9; printf(“fahr = %d, celsius = %dn“, fahr, celsius); 传统流程图 图 2.编写代码 #include void main() int celsius, fahr; /变量定义 scanf(“%d“, /变量使用 celsius=5*(fahr - 32) / 9; printf(“fahr = %d, celsius = %dn“, fahr, celsius);/输出结果 3.编辑编译连接运行 分析结果是否 与实际问题相 符合? 编程序风格讨论? 在上述程序中很显然与用户交互 性不好.若希望上述程序的运行情况 如图所示,应如何修改程序 可将上述程序改为 #include void main() int celsius, fahr; /变量定义 printf(“请输入华氏温度:n“); scanf(“%d“, /变量使用 celsius=5*(fahr - 32) / 9; printf(“华氏温度%d对应的摄氏温度是 %dn“, fahr, celsius);/输出结果 【实例1】编写程序求分段函数的值 1.问题分析与算法设计 根据x的值选择不同的函数计算,要求输出结果保留2 位小数 算法方法1自然语言 输入 计算分段函数 输出 分支结构程序设计 X15 成立 不成立 y=4x/3z=2.5x -10.5 输入x 输出y 算法方法2N-S图 #include void main() double x, y; printf(“请输入x:n“); /输入提示 scanf(“%lf“, /输入数据 if(x void main() double x, y; printf(“请输入x:n“); /输入提示 scanf(“%lf“, /输入数据 if(x15) /if语句 y = 2.5 * x-10.5; printf(“y=f(%f)=%.2fn“,x,y); 温馨提示1-软件测试的基本思想 软件测试 精心设计一批测试用例 输入数据,预期输出结果 ,然后分别 用这些测试用例运行程序,看程序的实际运行结果与预期输出 结果是否一致。 if(x void main() double x, y; printf(“请输入x:n“); scanf(“%lf“, if (x void main( ) int a=0,b=0,c=0,d=0,k; scanf(“%d“, if(k=1) a+; else if(k=2) b+; else if(k=3) c+; else d+; printf(“a=%d,b=%d,c=%d,d=%d“,a,b,c,d); a=1,b=0,c=0,d=0 当输入的值为2, 结果是多少? 当输入的值为1, 结果是多少? 课堂思考: a=1,b=0,c=0,d=0 【例3】依据教材P50 【例3.3】 从键盘上输入两个实数,根据需要选择运算类型。 其运行情况如图所示 输入两个实数 输出选择菜单 选择运算类型 进行相应运算 并输出 1.问题分析与算法设计 printf(“nn%20s“,“运算列表菜单n“); printf(“%20s“,“1.和运算(+)n“); printf(“%20s“,“2.差运算(-)n“); printf(“%20s“,“3.积运算(*)n“); printf(“%20s“,“4.除运算(/)n“); printf(“请选择运算种类(选择1/2/3/4):“); 输出选择菜单 输入两个实数 printf(“请输入两个实数(之间用,分隔 )n“); scanf(“%lf,%lf“, printf(“请选择运算种类(选择 1/2/3/4):“); scanf(“%d“, 选择运算类型 进 行 相 应 运 算 并 输 出 switch(chioce)/根据选择的运算种类进行相应的运算 case 1: real_num=real_num1+real_num2; printf(“%.2f+%.2f=%.2fn“,real_num1,real_num2,real_num); break; case 2: real_num=real_num1-real_num2; printf(“%.2f-%.2f=%.2fn“,real_num1,real_num2,real_num); break; default:printf(“没有该运算!n“); #include void main( ) double real_num1,real_num2,real_num; int chioce; printf(“请输入两个实数(之间用,分隔)n“); scanf(“%lf,%lf“, printf(“nn%20s“,“运算列表菜单n“); printf(“%20s“,“1.和运算(+)n“); printf(“%20s“,“2.差运算(-)n“); printf(“%20s“,“3.积运算(*)n“); printf(“%20s“,“4.除运算(/)n“); printf(“请选择运算种类(选择1/2/3/4):“); scanf(“%d“, 2.编写代码 switch(chioce)/根据选择的运算种类进行相应的运算 case 1: real_num=real_num1+real_num2; printf(“%.2f+%.2f=%.2fn“,real_num1,real_num2,real_num); break; case 2: real_num=real_num1-real_num2; printf(“%.2f-%.2f=%.2fn“,real_num1,real_num2,real_num); break; case 3: real_num=real_num1*real_num2; printf(“%.2f*%.2f=%.2fn“,real_num1,real_num2,real_num); break; case 4: real_num=real_num1/real_num2; printf(“%.2f%.2f=%.2fn“,real_num1,real_num2,real_num); break; default:printf(“没有该运算!n“); 3.调试运行 测试用例 switch(表达式) case 常量表达式1:语句1 case 常量表达式2:语句2 case 常量表达式n:语句n default :语句n+1 温馨提示1- switch语句(p52) 按照考试成绩的等级输出百分制分数段 #include void main () char ch; ch=getchar(); ch=(ch=a float p,w,d,f; scanf(“%f,%f,%d“, c=(s=3000)?12: s/250; switch(c) case 0:d=0;break; case 1:d=2;break; case 2: case 3:d=5;break; case 4: case 5: case 6: case 7:d=8;break; case 8: case 9: case 10: case 11:d=10;break; case 12:d=15;break; f=p*w*s*(1-d/100.0); printf(“freight=%15.4fn “,f); 2.算法描述(省略) .代码描述 -1 (x0) 算法1: 输入x 若x0,则y=1 输出y 1.问题分析与算法设计 可用三个if语句实现 算法2 #include void main() int x,y; printf(“请输入整数x:n“); scanf(“%d“, if(x=0) if(x0) y=1; else y=0; else y=-1; 程序4: y=0; if(x=0) if(x0) y=1; else y=-1; 程序3: y=-1; if(x!=0) if(x0) y=1; else y=0; 正确 ? 正确 ? 正确 ? 课堂思考1: if() if() 语句1 else 语句2 else if() 语句3 else 语句4 内嵌if 在if语句中又包含一个或多个if语句称为 if语句的嵌套。形式: 温馨提示- if的嵌套(p52) 匹配规则: else总是与它上面最近的、未配对的if语句配对。 例: if() if() 语句1 else if() 语句2 else 语句3 if() if() 语句1 else if() 语句2 else 语句3 当if和else数目不同时,可以加花括号来确定配对关系。 希望 配对 课堂思考: 比较P52-53【例3.4】在结构上以 及实现方法与上述例子异同? 【例5】依据教材P50 【例3.5】 55位学生排成4排,学号1-55号,按照1-4报 数.任意给定一个学号,显示学生在第几列 1.问题分析与算法设计 用switch语句 2. 编 写 代 码 #include void main() int i,n; i=0; printf(“请输入学号:n“); scanf(“%d“, if (n55) printf(“Error!“); else i=n%4; switch(i) case 1:printf(“%d号同学在第1列 !n“,n);break; case 2:printf(“%d号同学在第2列 !n“,n);break; case 3:printf(“%d号同学在第3列 !n“,n);break; case 0:printf(“%d号同学在第4列 !n“,n);break; 循环结构程序设计 【实例6】求1到100的和依据p56【例3.6 】 l1问题分析与算法设计 求在一定范围内(1n)、满足一定条件(不超过 n)的若干整数的和,求累加和。 思路:设置一个变量(s),其初值为0,然后在1n 中的所有数,将它们一个一个累加到s中。 l一步累加:s = s + i; li 值的变化通过i=i+1实现 实例分析 3 si 6 12 33 6 i=i+1s=s+i s=s+i 实际上:就是重复执行 下列操作: s=s+I i=i+1 直到i超过100 s=0, i=1 i void main() int n; for(n=1;n=k+1) printf(“n是素数“); 与上述算法等价的算法 k=(int)sqrt(n); for(i=2;i=k+1) printf(“t%2d“,n); for(n=101;n=k+1f=1f #include“stdio.h“ #include“math.h“

温馨提示

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

评论

0/150

提交评论