专业C4讲流程控制.ppt_第1页
专业C4讲流程控制.ppt_第2页
专业C4讲流程控制.ppt_第3页
专业C4讲流程控制.ppt_第4页
专业C4讲流程控制.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1/59,2/34,本讲知识点: 三种循环结构的掌握 开关语句的掌握 跳转语句、返回语句的掌握 重点: 流程控制结构 难点: for循环结构的执行顺序,第四讲 流程控制,3/34,一、流程控制,对于算法设计、算法描述中所出现的条件分支、循环等结构,C+语言需要有与之相应语句实现。 已经证明:任何复杂的计算流程均可以被分解为以下3种结构及其嵌套。 顺序结构 分支结构(C+支持两路分支、多分支) 循环结构(C+提供3种基本循环语句) C+还提供以下流程跳转语句(break,continue,return,goto等),以方便程序结构控制。,4/34,条件分支(if)语句,条件分支 整个结构“单入口、单出口”,if(表达式) 语句1; else 语句2;,if(表达式) 语句串1; else 语句串2; ,5/34,循环语句,C+提供3种实现循环算法的语句 while循环 dowhile循环 for循环 这3种语句可以相互转换 只用其中任意一种格式可实现其他两种格式编写的语句。 它们各有其最合适的使用场合。 注意 “循环体语句执行完毕”仅为“结束本轮循环,准备进入下一轮循环”; 整个循环是否结束,主要看“继续循环条件”是否为假。应该避免无穷循环(亦称“永真循环”或“死循环”)。,6/34,while循环语句,表达式为是否继续循环的条件; 先判断条件,循环体可能执行0次、1次或多次。,while(表达式) 循环体语句;,while(表达式) 循环体语句串; ,7/34,dowhile循环,先执行循环体,使循环体至少被执行一次; 建议用一对花括号将循环体语句包围起来(即使循环体为单语句),并且将右花括号写在while前(见上面的第二种写法),以明显地区别于while循环。,do 循环体语句; while(表达式);,do 循环体语句; while(表达式);,8/34,#include /4-1.cpp using namespace std; int main() int i,sum; i=1; while(i=100) sum += i; cout“sum = “ sum endl; return 0; ,程序改错,请用do-while改写!,sum=0;,i+;,9/34,#include /4-2.cpp using namespace std; int main() int i,sum=0; i=1; do sum += i; i+; while(i=100); cout“sum = “ sum endl; return 0; ,用do-while改写,10/34,实战练习,输出正整数n的所有约数。,11/34,#include /4-3.cpp #include using namespace std; int main() int i,n; coutn; if (n1) exit(0); coutn“的所有约数为:“; i=0; while(in) i+; if (n%i=0) couti“ “; coutendl; return 0; ,12/34,for循环,表达式1被且仅被执行一次; 3个表达式均可缺省,缺省表达式2表示true,但两个分号不能缺省; 可以将循环体语句与表达式3合并。,for(表达式1; 表达式2; 表达式3) 循环体语句;,for(表达式1; 表达式2; 表达式3) 循环体语句串; ,13/34,用公式:/4 1-1/3+1/5-1/7+ 求的近似值,直到最后一项的绝对值小于10-6为止,实战练习,14/34,#include /4-4.cpp #include using namespace std; int main() float n,t,pi; int s; t=1; pi=0; s=1; for(n=1.0; fabs(t)1e-6; n=n+2 ) pi=pi+t; s=-s; t=s/n; pi=pi*4; cout“pi=“piendl; return 0; ,15/34,开关语句,switch(整型或枚举型表达式) case 常量表达式1: 语句组1; case 常量表达式2: 语句组2; case 常量表达式n: 语句组n; default: 语句组n+1; ,16/34,实战练习,输入一个十进制数,根据输入的数输出所对应的星期几,若所输入的数小于1或大于7,则输出“出错”。,17/34,#include /4-5.cpp using namespace std; int main() int day; coutday; switch (day) case 1: cout“星期一“endl; case 2: cout“星期二“endl; case 3: cout“星期三“endl; case 4: cout“星期四“endl; case 5: cout“星期五“endl; case 6: cout“星期六“endl; case 7: cout“星期天“endl; default:cout“超出范围!“endl; return 0; ,18/34,#include /改进后的程序 4-6.cpp using namespace std; int main() int day; coutday; switch (day) case 1: cout“星期一“endl; break; case 2: cout“星期二“endl; break; case 3: cout“星期三“endl; break; case 4: cout“星期四“endl; break; case 5: cout“星期五“endl; break; case 6: cout“星期六“endl; break; case 7: cout“星期天“endl; break; default:cout“超出范围!“endl; return 0; ,19/34,实战练习,题目:将百分制的分数转换为5个等级 90分以上为A,8089分为B,7079分为C,6069分为D,60分以下为E。 例如,输入75,则显示C。 【分析】先判断输入的数据是否在合理的分数范围(0100)内,然后再判断是哪个分数段:90分以上输出A,8089分输出B,7079分输出C,6069分输出D,否则显示E。,20/34,用if语句实现,if( s100) cout=90) cout=80) cout=70) cout=60) cout“Dn“; else cout“En“;,21/34,#include /4-7.cpp using namespace std; int main() int s; couts; if( s100) cout“errorn“; else ,用switch语句实现,使用switch语句,当然最笨的办法是每一个分数一个case分支。有没有简化的办法呢?,22/34,switch(s/10) /根据转换值进行分支选择 case 10: case 9: cout“An“; break; case 8: cout“Bn“; break; case 7: cout“Cn“; break; case 6: cout“Dn“; break; default: cout“En“; return 0; ,23/34,跳转语句,break 仅结束其所在的一层循环语句或者开关语句 continue 提前结束本轮循环,准备进入下一轮循环 return 返回语句,用于函数结束时 return; 对应与返回类型为 void 的函数 return 表达式; 表达式的数据类型对应于函数的返回类型 goto 不提倡使用。建议不要使用。,24/34,for循环中的break 及continue,25/34,C+支持大型软件开发 显然,不宜将所有的语句都写入主函数 其实,应该使主函数尽可能地简单。主要起调度作用, 控制其他功能模块(即其他函数的调用); 函数逐个调用及返回,实现多种功能。 启动程序执行时,将使主函数自动执行; 在主函数中遇到return语句将引起程序结束。,二、基本程序扩展,26/34,例如:,27/34,改编“算术测验”程序之二,设计“加法测验”功能函数 首先将原来的主函数名改成 add_test; 去掉输出成绩语句,将测验成绩作为该函数的返回值 return score; 设计主函数,调用add_test函数 今后可扩展,28/34,/ test3.cpp #include using namespace std; int add_test(); / 函数声明 int main() / 主函数尽可能地简单 int score; score = add_test(); / 函数调用(执行语句) cout ”成绩:” score ” 分” endl; return 0; ,29/34,int add_test() / 函数定义(函数实现) int x, y, z; int i, score; time_t t; srand(time( / 返回测试成绩 ,30/34,/ test3.cpp 增加减法测验功能(请参见2.3.2小节) #include using namespace std; int add_test(), sub_test(); / 函数声明 int main() / 主函数起调度作用 int score, choice=1; while(choice) cout choice; switch(choice) case 1: score = add_test(); break; case 2: score = sub_test(); break; cout ”成绩” score ” 分” endl; return 0; ,/ 简易菜单,/ 接收选择,/ 依选择分情况处理,/新增扩展部分,31/34,多文件结构,C+支持众人集体开发 显然,不同的开发人员不太可能将所有程序写入同一个文件 C+的编译单元 源程序文件 C+按编译单元进行分割编译 C+的头文件 标准头文件 程序员自行编写的头文件 模仿(算术测验程序) test.cpp test.h test_main.cpp,32/34,C+程序开发流程,

温馨提示

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

评论

0/150

提交评论