习题3(循环算法实验)讲解课件_第1页
习题3(循环算法实验)讲解课件_第2页
习题3(循环算法实验)讲解课件_第3页
习题3(循环算法实验)讲解课件_第4页
习题3(循环算法实验)讲解课件_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

高级语言程序设计C 流程控制,上海理工大学 计算机基础教研室 2013年4月,本次课中需要解决的问题,逻辑问题的解决方案,实验分析,循环流程控制回顾与巩固,while语句,一般形式:,while(表达式) 循环体语句;,执行流程:,一般形式:,do 循环体语句; while(表达式);,执行流程:,dowhile语句,一般形式:,for(expr1 ; expr2 ; expr3) 循环体语句;,执行流程:,for语句,for(循环变量赋初值;循环条件;循环变量增值) 循环体语句; ,for语句一般应用形式,(1) while() while() . ,(2) do do while( ); . while( );,(3) while() do while( ); . ,(4) for( ; ;) do while(); while() . ,循环的嵌套,三种循环可互相嵌套,层数不限 外层循环可包含两个以上内循环,但不能相互交叉,内循环,内循环,main() int i,j,m; printf(“*“); for (i=1;i=9;i+) printf(“%4d“,i); printf(“n“); for(i=1;i=9;i+) /*控制行*/ for (j=1;j=i;j+) m=i*j; printf(“%4d“,m); /*输出每行的其他数*/ printf(“n“); /*换下一行*/ ,打印九九乘法表,辅助控制语句,break语句 功能:在循环语句和switch语句中,终止并跳出循环体或开关体 说明: break只能终止并跳出最近一层的结构 break不能用于循环语句和switch语句之外的任何其它语句之中,辅助控制语句,功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断 仅用于循环语句中,continue语句,main() int n; for (n=100;n120;n+) if (n%3=0) continue; printf(“%4d”,n); ,输出100120之间不能被3整除的数。,思考: 如果将continue改为 break,程序的运行 结果是什么?,逻辑问题的解决方案,穷举法 穷举法也称为枚举法,其基本思想是,对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试过为止。,【例3-1】有4名专家对4件产品质量进行评估。 A说:2号产品质量最好。 B说:4号产品是最好的。 C说:3号产品质量不是最好的。 D说:B说错了。 事实上,只有一件产品质量最好,且只有一位专家说对了,其他三人都说错了,要解决的问题是:输出最好的产品号及说对的专家,请提出解决这个问题的算法。,(1)假定1号产品质量最好,即令k=1,将k=1代入4位专家的话中,则有:,(2)假定1号产品质量最好,即令k=2, 将k=2代入4位专家的话中,则有:,假定3号产品质量最好,即令k=3将,将k=3代入4位专家的话中,则有:,穷举法的基本格式: for (n=1;n=循环次数;n+) if ( n满足指定的条件) 输出n; ,main() int k,man,sum=0,g=0; for(k=1;k=4;k+) sum=0; if (k=2) sum=sum+1;man=1; if (k=4) sum=sum+1;man=2; if (k!=3) sum=sum+1;man=3; if (k!=4) sum=sum+1;man=4; if (sum=1) printf(“The best product is %d.n“,k); printf(“%c is right.n“,64+man); g=1; break; if (g!=1) printf(“Cant fount the answer!n“); ,下列程序的功能为:找出做好事的人,案例情景为:有4位好友,其中之一位干了一件好事,不留名,记者来查此事,问4位,他们的话如下: A:不是我 B:是C C:是D D:他胡说 已知3个人说真话,一个人说假话,现在根据以上信息编程找出做了好事的人。 提示: 第一步:被测者从14 第二步:将被测者代入表达式 第三步:判断3个表达式为真吗?是的则打印结果程序结束。不是,判断是否全测完,不是转第一步,是打印未找到,程序结束。完成下面的程序。 请填写适当的符号或语句,使程序实现其功能。,# include main() int k=0,sum=0,g=0; char man= ; for(k=1;k=4 ,g=0,men=D + men!=D,sum=3,迭代法 基本思想是:一个问题的求解是从一个初值出发,通过使用一个迭代表达式进行反复的迭代而得到。 比如说经济增长速度问题。,基本格式: 迭代变量初值; 循环语句 计算迭代表达式 ,main() int i; float s; s=0; for (i=1;i=100;i+) if (i%2=0) /*偶数时累加(-1)/ i */ s=s-1.0/i; else s=s+1.0/i; /*奇数时累加1/i */ printf(“s=%f“,s); ,例:求1-1/2+1/3-1/4+1/99-1/100的值,下面程序的功能是计算 1-3+5-7+-99+101的值,请填空。,#include void main() int i,t=1,s=0; for (i=1;i=101;i+=2) _; s=s+t; _; printf(“%dn”,s); ,t=t*i;,t=-t/i,#include main() int day,x1,x2; day=0; x1=1020; while( ) x2= ; x1=x2; day+; printf(“day=%dn”,day); ,下列程序的功能为:计算1020个西瓜几天后能卖完(第一天卖一半多两个,以后每天卖剩的一半多两个);请填写适当的符号或语句,使程序实现其功能。,x10,x1/2-2,课外作业(思考),1.和积计算 求和:s=1*2+2*3+99*100,3.求特定数判断一数能否被另一数整除 求从键盘任意输入的两个整数的最大公约数与最小公倍数 水仙花数:三位数的各位数字的立方和等于该三位数即为水仙花数,求出所有水仙花数。,2.素数探求 打印输出100200之间的素数。 质因数分解:输入自然数n,将其表示为质因数从小到大顺序连乘形式。如:90=2*3*3*5,4.不定方程求解一元二次方程求解 中国古代数学家张丘建在他的算经中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?,5.利用迭代公式求值 用迭代法求某个数a的平方根。 已知求平方根的迭代公式为:,1、输入一个整数,判断它能否被3,5,7整除,并输出以下信息之一: a 能同时被3,5,7整除; b 能被其中两数(要指出哪两个)整除; c 能被其中一个数(要指出哪一个)整除; d 不能被3,5,7任一个整除。,分支课外作业讲解,main() int x; scanf(“%d”, ,main() int x,k,a,b,c; scanf(“%d”, ,课堂作业讲解,输入密码,并根据验证密码的对错输出不同信息,main() int key; printf(“请输入密码n”); scanf(“%d”, ,验证密码有5次机会,for(i=1;i=5;i+),int i;,break;,if(i5) printf(“ByeBye!”);,分支课外作业(思考),1.输入三角形的三条边,若构成直角三角形,则输出相应信息。 2.一个5位数,判断它是不是回文树.即12321是回文数,个位与万位相同,十位与千位相同。 3.请输入星期几的第一个字母来判断是星期几,如果第一个字母一样,则继续判断第二个字母。,1)以下程序实现加、减、乘、除四则运算。,#include main() int a,b,d; char ch; printf(“Please input a expression:“); scanf(“%d%c%d“, _ );,&a,&ch,&b,switch(ch) case +:d=a+b; printf(“%d+%d=%dn“,a,b,d); break; case -:d=a-b; printf(“%d-%d=%dn“,a,b,d); break; case *:d=a*b; printf(“%d*%d=%dn“,a,b,d); break; case /: if( ) printf(“Divisor is zeron“); else printf(“%d/%d=%fn“,a,b,( )a/b); /*强制类型转换*/ break; default: printf(“Input Operator error!n“); ,float,b=0,(1)改错题 (1)下列程序的功能为:求1100之和(和值为5050)并输出。请纠正程序中存在错误,使程序实现其功能.,#include main() int i,sum=0; i=1; while(i100) sum=sum+i; i+; printf(“The sum from 1 to 100 is %dn”,sum); ,(1)改错题 (1)下列程序的功能为:求1100之和(和值为5050)并输出。请纠正程序中存在错误,使程序实现其功能.,#include main() int i,sum=0; i=1; while(i100) sum=sum+i; i+; printf(“The sum from 1 to 100 is %dn”,sum); ,(2)下列程序的功能为:倒序打印26个英文字母。请纠正程序中存在错误,使程序实现其功能。,#include main() char x; x=z; while(x!=a) printf(“%3d“,x); x+; ,(2)下列程序的功能为:倒序打印26个英文字母。请纠正程序中存在错误,使程序实现其功能。,#include main() char x; x=z; while(x=a) printf(“%3d“,x); x-; ,(3)改错题 题目要求:任意输入一个正整数,以相反的次序输出。 如:输入1234,则输出4321,#include void main() int n, r ; printf(“input a integer: ”); scanf(“%d”, ,r =n%10;,n=n/10;,#include void main() int i,j; for (i=0;i4;i+) for (j=0;j=20;j+) printf(“n“); for (j=0;j2*i+1;j+) printf(“*“); ,(4)下面的程序将输出如下的图形,要求顶端的*定位在第21字符位置,请改错。 * * * *,for(j=0;j=20-i;j+),printf(“ “);,printf(“n“);,#include void main() int i,j; for(i=0; _; i+) j=i*10+6; if (_) continue; printf(“ %dn“,j); ,(2)程序填空 下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数。,i10,j%3!=0,#include “stdio.h“ main() float a,b; printf(“请主持人输入时尚手机的实际价格n“); scanf(“%f“, ,b=a,ab,ab,(3)下列程序的功能为:猜价格,用户输入自己估计的价格,程序判断其正确性。,if ( ) printf(“你输了,加油!n“); ,i3,#include void main() int n,i,j,k; n=0; for (i=1;i=9;i+) for (k=0;k=8; _ ) if (k!=i) for (j=0;j=9;j+) if ( _ ) n+; printf(“n=%dn”,n); ,(4)下面程序的功能是统计用数字09可以组成多少个没有重复的3位偶数,请填空。,k+=2,j!=i & j!=k,#include void main() float e,t; int k,n; printf(“input n=”); scanf(“%d”, ,(1)编程题 利用公式e=1+1/1!+1/2!+1/3!+1/n!,求e值。,(2)编写一个程序,输入若干个整数,以-1标记结束,输出其中的最大数和最小数。,void main() int n,min, max,first=1; printf(“Please input:”); while (1) scanf(“%d”, ,void main() int n,min,max; printf(“Please input:“); scanf(“%d“, ,3.求特

温馨提示

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

评论

0/150

提交评论