程序设计第三章.ppt

上传人:夺命阿水 文档编号:259529 上传时间:2023-03-30 格式:PPT 页数:44 大小:188.50KB
返回 下载 相关 举报
程序设计第三章.ppt_第1页
第1页 / 共44页
程序设计第三章.ppt_第2页
第2页 / 共44页
程序设计第三章.ppt_第3页
第3页 / 共44页
程序设计第三章.ppt_第4页
第4页 / 共44页
程序设计第三章.ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《程序设计第三章.ppt》由会员分享,可在线阅读,更多相关《程序设计第三章.ppt(44页珍藏版)》请在课桌文档上搜索。

1、1,第三章基本控制结构,if语句 switch语句 while语句 do-while语句 for语句 循环不变式,2,3.1 程序的基本控制结构,单语句:以分号“;”结束int a;变量定义语句a=3*2;表达式语句function(“example”);函数调用语句空语句:只有一个分号“;”复合语句(块语句)用花括号 括起来的若干条语句(可以是单语句、空语句、其他块语句),3,3.1.2单入口单出口控制结构,实现单入口单出口程序只需三种基本的控制结构 顺序结构选择结构当条件p(条件表达式)成立,则执行一个分支,否则执行另一个分支多路分支循环结构实现反复执行某一部分的操作循环结构三要素:循环条

2、件p循环体A循环变量:在每次循环中都必须有语句修改此变量的值,以使循环条件表达式的值可能改变,从而跳出循环,4,1)if 语句(无else),格式:if(表达式)语句;,表达式,值true或false,语句,可以是复合语句,void main()char ch;cinch;if(ch=a,3.2 选择结构,5,#includevoid main()int a,b,max;printf(n input two numbers:);scanf(%d%d,6,格式:if(表达式)语句1;else 语句2;,e?,yes,语句1,no,语句2,2)if-else语句,void main()int x;

3、cinx;if(x=0)coutx;else cout-x;,举例:输出|x|,7,例3.2.1 输入24小时制的时间,转换并输出12小时制的时间并注明是上午还是下午(上午用A.M表示,下午用P.M表示),#include void main()int hour;char noon=A;cout hour;if(hour 12)hour=hour-12;noon=P;cout The hour is hour noon.M.n;,如果去掉一对花括号,当输入值为6时,程序输出结果是什么?,8,例3.2.2,void main()int standing;/用户输入的工龄float standin

4、g_salary;/根据用户输入工龄计算出来的工龄工资cout standing;if(standing=0),9,嵌套if语句,if(表达式1)if(表达式2)子语句1;else子语句2;else 子语句3;if(表达式1)子语句1;else if(表达式2)子语句2;else if(表达式n)子语句n;else 子语句n1;,10,例3.2.3 从键盘上输入3个数A,B,C,求出三数中最大者并输出。,#include void main()int A,B,C,max;coutABC;max=A;if(Bmax)max=B;/求出A、B中的较/大值,记录在max中,然后再比较C与max if

5、(Cmax)max=C;cout MAX(A,B,C):maxn;,11,采用嵌套if语句来实现,if(A B)if(A C)cout C)coutMaximum is B;else coutMaximum is C;,12,垂悬else问题,if(p1)if(p2)a=1;else a=2;这样的语句会引起二义性,else子句不知道应该与哪个if语句配对。C+语言中是就近配对:if(p1)注意if与else的配if(p2)a=1;对关系,else总是else a=2;与它上面的最近的 if配对,13,注意问题,if语句中的表达式,一般为逻辑表达式或关系表达式else子句不能单独使用,必须与i

6、f配套使用if以及else语句后面都只含一个内嵌的操作语句,有效范围都只有一个语句,若需含多个操作,则须用 括起来。例:if(a+bc)coutc”;c=a+b;else cout“a+b=c”;,14,条件表达式短路求值,对逻辑表达式求值时,只有在必须执行下一个逻辑运算符才能求出整个表达式值的情况下,才执行该运算符 expression1&expression2/expression1为0,expression2不做 expression1|expression2/expression1非0,expression2不做,15,else if结构举例:,(1)征税问题:1000以下税率为3%1

7、0002000税率为4%20003000税率为5%3000以上税率6%输入收入求应缴税款。,void main()float x,rate;cinx;if(x1000)rate=0.03;else if(x2000)rate=0.04;else if(x3000)rate=0.05;else rate=0.06;coutx*rate;,3/100?,16,int main()int a;cina;if(a=90)cout=80)cout=70)cout=60)cout“The score is D”;else cout“The score is E”;return 0;,(2)输入一个分数,将

8、百分制转化为五分制。90分以上 打印 A80-90 打印 B70-80 打印 C60-70 打印 D60 以下 打印 E,17,3.2.2 switch语句,多分支选择语句 switch语句的一般形式如下:switch(表达式)case 常量表达式1:语句序列1;break;case 常量表达式2:语句序列2;break;case 常量表达式n:语句序列n;break;default:语句序列n+1;break;,18,说明,Switch在入口时判断表达式与哪个常量表达式匹配。若表达式的值与某个case后面的常量相等,则执行与该case后面相应的语句;若与所有列出的常量都不相等,则执行defa

9、ult后面的语句。case后只能是常量表达式,不能是变量表达式,其值只能是整型、字符型、枚举型,不能是其他类型。每个常量表达式的值都不相同。break;语句用于执行完一个分支后跳出此switch语句,19,举例:输出五分制对应的百分制范围。switch(grade)case A:case a:cout“85100”;case b:case B:cout“7084”;case c:case C:cout“6069”;case d:case D:cout“60”;default:cout“error”;,若grede=A,输出结果是什么?,break;break;break;break;,20,例

10、:已知整型量a,b(b0),设x为实型量,计算分段函数:,y,a+bx(0.5x1.5)a-bx(1.5x2.5)a*bx(2.5x3.5)a/bx(3.5x4.5),1.用if语句 if(0.5=x,2.用switch语句 switch(int)(x+0.5)case 1:y=a+b*x;break;case 2:y=a-b*x;break;case 3:y=a*b*x;break;case 4:y=a/(b*x);break;default:coutx error.n;,21,计算器程序。用户输入运算数和四则运算符,输出计算结果。#includevoid main()float a,b;c

11、har c;printf(input expression:a+(-,*,/)b n);scanf(%f%c%f,22,3.3 循环结构,while语句while语句的一般形式为:while(表达式)语句其中表达式是循环条件,语句为循环体。while语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句。,23,例3.3.1:给定一个正整数n,求出平方值不超过n的最大正整数并输出。,程序流程图如右:,24,#include main()int n;/用户给定的正整数int max;/所求的最大整数cout n;/判断用户输入是否合法if(n=0)cout Input error!n;

12、else/利用循环求出平方大于n的最小整数max=1;while(max*max=n)max=max+1;/输出结果cout The maximum integer is:max-1 n;,25,统计从键盘输入一行字符的个数。#include void main()int n=0;printf(input a string:n);while(getchar()!=n)n+;printf(%d,n);,26,3.3.2 do-while语句,do循环体语句;while(循环条件表达式p);先执行一次循环体语句,然后判别表达式,当为T时,返回执行循环体语句,直到表达式为F,结束循环while语句和

13、do-while语句基本等价,只有当表达式一开始就为假时,两种语句结果不一样i=20;sum=0;i=20;sum=0;while(i=10)do sum+=i;sum+=i;i+;i+;while(i=10);结果 sum=0结果 sum=20,27,例3.3.3:利用牛顿法求一个正数的平方根,root是num平方根的一个近似值,则(num/root+root)/2是一个更好的近似值#include void main()const float EPS=1e-5;float num,root,pre;coutnum;if(numEPS)|(root-preEPS);cout The root

14、of num is rootendl;,前后两次迭代值的误差小于10-5,28,3.3.3 for语句,for(表达式1;表达式2;表达式3)循环体语句;执行过程:求解表达式1求解表达式2,若其值为T,执行循环体语句,跳到第3)步;若为F,结束循环,跳到第4)步求解表达式3,然后跳到第2)步循环结束,执行for语句的下一条语句,29,例:用 for语句写出计算10!的程序:,void main()int i;long s;for(i=1,s=1;i=10;i+)s=s*i;cout“10!=”s;,1)若表达式1是多个表达式,用逗号连接,依次计算,2)for 循环的三个表达式起着不同的作用,根

15、据需要可以省略。,30,表达式1:用于进入循环体之前给某些变量赋初值。若省略,可在for语句前给变量赋初值,s=1;i=1;for(;i=10;i+)s=s*i;,分号不能省,表达式2:决定循环的条件,若省略,则为无限循环。,如:for(i0;i+)for(;),表达式3:用于循环一次后对某些变量进行修改。若省略,可在循环体内对变量进行修改。,s=1;for(i=1;i=10;)s=s*i;i+;,分号不能省,31,若同时省略表达式1和表达式3,只有表达式2,这时for语句相当于while语句,s=1;i=1;for(;i=10;)s=s*i;i+;,s=1;i=1;while(i=10)s=

16、s*i;i+;,32,for语句功能很强,其中表达式1和表达式3可以是逗号表达式:,但为增强程序的可读性,一般不要把与循环无关的东西放到for语句中,for(i=1,s=1;i=10;s=s*i,i+);,空语句,如:s=1;for(i=1;i=10;i+)s=s*i;,for(循环变量赋初值;循环条件;循环变量增值)语句,for语句最简单、常用的形式如下:,33,程序3.3.4,/功能:正反向打印字母表。#include void main()char ch;for(ch=A;ch=A;ch-)coutch;coutendl;,34,3.3.4 循环的嵌套,三种循环可以相互替代一个循环体内又

17、包含另一个完整的循环结构循环的嵌套各种循环可以相互嵌套,35,/功能:打印乘法口诀表#include void main()int i,j;for(i=1;i=9;i+)for(j=1;j=i;j+)couti*j=i*j;coutendl;,36,程序3.3.6 公鸡5元1只,母鸡3元1只,小鸡1元3只,花了100元钱买100只鸡,问公鸡、母鸡、小鸡各多少只?,cock公鸡的个数;hen母鸡的个数;chicken小鸡的个数;得方程:cock+hen+chicken=1005*cock+3*hen+chicken/3=100#include void main()int cock,hen,ch

18、icken;for(cock=0;cock=100/5;cock+)for(hen=0;hen=100/3;hen+)chicken=100-cock-hen;if(chicken%3=0),运行结果:cock=0 hen=25 chicken=75cock=4 hen=18 chicken=78cock=8 hen=11 chicken=81cock=12 hen=4 chicken=84,37,break,在 switch 语句中终止case在循环体中终止当前一层循环当循环中遇到 break 语句时,当前循环立即终止,控制权传递给循环之后的语句,for(r=1;r100)break;cou

19、t area;,满足条件,则退出循环。,举例:求:r=110的圆的面积,如圆面积大于100则中断。,38,continue,功能:结束本次循环,进入下一个循环周期。,举例:求1100内的偶数和。,s=0;for(n=1;n=100;n+)if(n%2!=0)continue;s+=n;,满足条件,跳过循环体,继续循环,39,3.5 简单程序设计举例,3.5.1 问题 将1到100(也许更大)的数字相加的和是多少?3.5.2 求解问题的精美算法 1+2+3+98+99+100 50*101=5050,40,/功能:求1到MAX之间的数字相加之和的精美算法#include void main()c

20、onst int max=99;int sum;sum=(max/2)*(1+max);coutThe summing result is sumendl;,41,3.5.2 求解问题的精美算法,问题:MAX为奇数?精美算法寻找(设计)困难精美算法通用性,42,3.5.3 求解问题的原始算法,/功能:求1到MAX之间的数字相加之和的原始算法#include void main()int max,sum,cnt;coutmax;sum=0;for(cnt=1;cnt=max;cnt+)sum+=cnt;/求12+22+102?coutThe summing result is sumendl;,43,判断m是否素数。#include#includevoid main()int m,i,k;scanf(“%d”,44,习题与上机,习题P.893-2,3-6,3-8,3-11,3-12*补充:编程求解一元二次方程的根 ax2+bx+c=0 要求:设计完备的测试数据集,考虑a,b,c各种取值对根的影响上机:实验教程实验二 必做:(1)阅读下列程序,写出(由指定的输入)所产生的运行结果,并指出其功能:、(2)编写程序实现下列问题的求解:编程求解下列各计算式:2)、4),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号