教学PPT基本控制结构1.ppt_第1页
教学PPT基本控制结构1.ppt_第2页
教学PPT基本控制结构1.ppt_第3页
教学PPT基本控制结构1.ppt_第4页
教学PPT基本控制结构1.ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

第三章 基本控制结构,if语句 switch语句 while语句 do-while语句 for语句 循环不变式,3.1 程序的基本控制结构 3.1.1 c+语言的简单语句,单语句:以分号“;”结束 int a; 变量定义语句 a=3*2; 表达式语句 function(“example”); 函数调用语句 空语句:只有一个分号“;” 复合语句(块语句) 用花括号 括起来的若干条语句(可以是单语句、空语句、其他块语句) 块语句在语法上等价于一个单语句,所以在单语句可用的地方我们也可以使用块语句。 块语句中每一个语句都以分号“;”结束,块语句本身则以右花括号“”结束,if(ab) int t=a; a=b; b=t; ,3.1.1 c+语言的简单语句,3.1.2单入口单出口控制结构,实现单入口单出口程序只需三种基本的控制结构 顺序结构 选择结构 当条件p(条件表达式)成立,则执行一个分支,否则执行另一个分支 多路分支 循环结构 实现反复执行某一部分的操作 循环结构三要素: 循环条件p 循环体a 循环变量:在每次循环中都必须有语句修改此变量的值,以使循环条件表达式的值可能改变,从而跳出循环,3.1.3 结构化程序设计工具,程序框图 结构化程序设计图形工具 n_s图 pad图 jackson结构图 warnier图 pdl(program design language),3.2 选择结构,3.2.1 if 语句 if (条件表达式) 子语句; if语句的有效范围是单个语句,如果子语句有多个语句,则必须用括起来,成为一个复合语句 if (条件表达式) 子语句1; else 子语句2;,例3.2.1 输入24小时制的时间,转换并输出12小时制的时间并注明是上午还是下午(上午用a.m表示,下午用p.m表示),#include main() int hour; char noon = a; cout hour; if (hour 12) hour = hour - 12; noon = p; cout “the hour is “ hour noon “.m.n“; ,*如果去掉花括号 if (hour 12) hour = hour - 12; noon = p; “noon = p;”不是if的子语句,而是主流程if语句的下一个顺序语句,程序2: 程序3:,#include void main() float x; coutx; if (x12) cout “ p.m: “; x=x-12; else cout “ a.m: “; coutxn; ,(改进) #include void main() float x; coutx; if(x=12) cout “ a.m: “; else cout “ p.m: “; x=x-12; coutxn; /注意书写层次结构,例3.2.2 一个具有输入合法性检测的程序,要求用户输入的工龄在047之间,如果超出此范围则提示输入错误,否则才接受用户输入。用户输入错误时,程序用转义字符输出一声响铃,main() int standing; / 用户输入的工龄 float standing_salary;/ 根据用户输入工龄计算出来的工龄工资 cout standing; if (standing = 0) ,嵌套if语句,if (表达式1) if (表达式2) 子语句1; else 子语句2; else 子语句3; if (表达式1) 子语句1; else if (表达式2) 子语句2; else if (表达式n) 子语句n; else 子语句n1;,例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 (cmax) max = c; cout “ max(a,b,c): “ maxn; ,采用嵌套if语句来实现,if (a b) if (a c) cout c) cout“maximum is “ b ; else cout“maximum is “ c; ,垂悬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配对,注意问题,if语句中的表达式,一般为逻辑表达式或关系表达式 else子句不能单独使用,必须与if配套使用 if以及else语句后面都只含一个内嵌的操作语句,有效范围都只有一个语句,若需含多个操作,则须用 括起来。 例: if (a+bc) coutc”; c = a+b; else cout“a+b=c”;,程序3.2.4,/程序:average.cpp /功能:求数、理、化三科平均成绩的总评,演示if语句嵌套的缩进格式 #include void main() int math,phys,chem; int average; float scholarship; coutmathphyschem; average=(math+phys+chem)/3.0+0,5; /why? if(average=90) cout=80) cout“ good.n“; scholarship=85.00;,程序3.2.4, else if (average=70) cout=60) cout“ pass.n“; scholarship=45.50; else cout“ fail.n“; scholarship=0.00; cout“your scholarship is scholarship“.n“; ,条件表达式短路求值,if(members!=0)&(income/members800.00) = if(members!=0) if (income/members800.00) expression1& expression2 / expression1为0, expression2不做 expression1| expression2 / expression1非0, expression2不做,3.2.2 switch语句,多分支选择语句 switch语句的一般形式如下: switch (表达式) case 常量表达式1: 语句序列1; break; case 常量表达式2: 语句序列2; break; case 常量表达式n: 语句序列n; break; default: 语句序列n + 1; break; ,说明,表达式可为任何类型。switch在入口时判断表达式与哪个常量表达式匹配。若表达式的值与某个case后面的常量相等,则执行与该case后面相应的语句;若与所有列出的常量都不相等,则执行default后面的语句。 case后只能是常量表达式,不能是变量表达式,其值只能是整型、字符型、枚举型,不能是其他类型。每个常量表达式的值都不相同。 case部分与default部分出现次序不影响执行结果。每部分不限单个语句,可写多个语句,不用加 。 break;语句用于执行完一个分支后跳出此switch语句,例3.2.6,#include main() int choice; / 用户输入的选择 cout choice; / 用户输入选择 switch (choice) / 对用户的选择分别作处理 case 1: cout “your choice is apple.n“; case 2: cout “your choice is pear.n“; case 3: cout “your choice is banana.n“; case 4: cout “your choice is orange.n“; default: cout “you did not make a choice.n“; ,break; break; break; break; break;,例3.2.7,/程序:orders.cpp /功能:旅行社订票折扣率计算 #include void main() int orders, fragment; float discount; coutorders; fragment=orders/10; switch(fragment) case 0: discount=0.10; break; case 1: discount=0.15; break; case 2: discount=0.30; break; default: discount =0.45; break; cout“the discount is “discount*100“%.n“; ,3.3 循环结构 3.3.1 while语句,while (循环条件表达式) 循环体语句; 当表达式的值为t(非零)时,循环条件成立,执行循环体语句。 while语句的作用范围只到while后第一个分号(单语句)。若循环体有多个语句则需用 括起来。 在循环体中应有使循环趋向于结束的语句 循环变量初始化需在while语句前完成,例3.3.1:给定一个正整数n,求出平方值不超过n的最大正整数并输出。,程序流程图如右:,源程序:,#include main() int n; / 用户给定的正整数 int max; / 所求的最大整数 cout n; / 判断用户输入是否合法 if (n = 0) cout “input error!n“; else / 利用循环求出平方大于n的最小整数 max = 1; while (max * max = n) max = max + 1; / 输出结果 cout “the maximum integer is: “ max - 1 “n“; ,例3.3.2,#include void main() int choice=1; / 用户输入的选择 while(choice!=0) cout choice; / 用户输入选择 switch (choice) / 对用户的选择分别作处理 case 0: break; case 1: cout “your choice is apple.n“; break; case 2: cout “your choice is pear.n“; break; case 3: cout “your choice is banana.n“; break; case 4: cout “your choice is orange.n“; break; default: cout “your choice is invalid.n“; break; cout“ thank you for your choice.n“; ,3.3.2 do-while语句,do 循环体语句; while (循环条件表达式p); 先执行一次循环体语句,然后判别表达式,当为t时,返回执行循环体语句,直到表达式为f,结束循环 while语句和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,3.3.2 do-while语句,/程序:sqrt.cpp /功能:利用牛顿法求一个正数的平方根 #include void main() const float eps=1e-5; float num, root, pre; coutnum; if(numeps)|(root-preeps); cout“ the rootof “num“ is “rootendl; ,3.3.3 for语句,for (表达式1; 表达式2; 表达式3) 循环体语句; 执行过程: 求解表达式1 求解表达式2, 若其值为t,执行循环体语句,跳到第3)步; 若为f,结束循环,跳到第4)步 求解表达式3,然后跳到第2)步 循环结束,执行for语句的下一条语句 适用于循环次数已知的循环 表达式1:循环变量赋初值 表达式2:循环条件 表达式3:循环变量增量(计数表达式),for语句中的三个表达式中任一个或全部均可省略,但分号必须保留,sum=0; for (i=1; i100) break; sum += i; sum=0; for (i=1; i=100; ) sum += i; i+; ,sum=0; i=1; for (; i100) break; sum += i; i+; for (sum=0,i=1; i=100 ; i+) sum += i;, while (i=100), while (1),程序3.3.4,/程序:alphabet.cpp /功能:正反向打印字母表。 #include void main() char ch; for(ch=a; ch=a; ch-) coutch; coutendl; ,程序3.3.5,/程序: temptab.cpp /功能:打印摄氏温度与华氏温度对照表 #include void main() const int max=10; const int min=-5; int cel; float fah; / 输出对照表栏目 cout=min;cel-) fah=cel*1.8+32; coutcel“x09“fahendl; ,3.3.4 循环的嵌套,三种循环可以相互替代 一个循环体内又包含另一个完整的循环结构循环的嵌套 各种循环可以相互嵌套,3.3.4 循环的嵌套,/程序: multitab.cpp /功能:打印乘法口诀表 #include void main() int i,j; for(i=1; i=9; i+) for(j=1; j=i; j+) couti*j=i*j ; coutendl; ,程序3.3.6 公鸡5元1只,母鸡3元1只,小鸡1元3只,花了100元钱买100只鸡,问公鸡、母鸡、小鸡各多少只?,cock公鸡的个数;hen母鸡的个数;chicken小鸡的个数;得方程: cock+hen+chicken = 100 5*cock + 3*hen + chicken/3 =100 #include void main() int cock, hen, chicken ; 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=75 cock=4 hen=18 chicken=78 cock=8 hen=11 chicken=81 cock=12 hen=4 chicken=84,20,33,3.3.5 设计正确的循环,循环不变式 一个或者多个表达式 用于保证循环的正确性 在循环前成立 在每次执行循环体后仍成立 在循环结束后也成立,3.4 转向语句,例3.4.1(break的用法) 键盘输入m和n(10mn32000),求出mn间所有素数且按每行8个数形式输出,#include #include #include void main() int m,n,x,k,i,j; j=0; /j计算输出个数 do coutmn; while(m=n)|(n=32000) ; cout“n*n“;,for(x=m; x=k+1) /不是用break跳出的,找到一个素数 if (j%8=0) coutendl;/每行8个数 coutsetw(8)x; j=j+1; /以每行8个数的形式输出,每个数占8个字符的位置 cout“n*n“; ,例3.4.2(continue的用法) 在键盘上输入若干个正数,累加求和,最后输出累加和以及平均值。,问题分析: 事先不知道要输入多少个数,但知道输入数是正数,我们可边输入边统计其个数,若发现输入的是0或负数时,输入结束。当输入数是大于0时则累加并累计数的个数。,源程序如下: #include void main() double sum,num;int n; sum=0

温馨提示

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

评论

0/150

提交评论