《专业C4讲流程控制ppt课件.ppt》由会员分享,可在线阅读,更多相关《专业C4讲流程控制ppt课件.ppt(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、专业C4讲流程控制ppt课件 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life, there is hope。有生命必有希望。有生命必有希望 本讲知识点:本讲知识点:三种循环结构的掌握三种循环结构的掌握开关语句的掌握开关语句的掌握跳转语句、返回语句的掌握跳转语句、返回语句的掌握 重点:重点:流程控制结构流程控制结构 难点:难点:for循环结构的执行顺序循环结构的执行顺序第四讲第四讲 流程控制流程控制2/34一、流程控制一、流程控制 对于算法设计、算法描述中所出现的对于算法设计、算法描述中所出现的条件分支条件分支、循循环环等结
2、构,等结构,C+语言需要有与之相应语句实现。语言需要有与之相应语句实现。 已经证明:任何复杂的计算流程均可以被分解为以已经证明:任何复杂的计算流程均可以被分解为以下下3种结构及其嵌套。种结构及其嵌套。顺序结构顺序结构分支结构(分支结构(C+支持两路分支、多分支)支持两路分支、多分支)循环结构(循环结构(C+提供提供3种基本循环语句)种基本循环语句) C+还提供以下流程跳转语句还提供以下流程跳转语句(break,continue,return,goto等等),以方便程序结构控制。,以方便程序结构控制。3/34条件分支条件分支(if)语句语句 条件分支条件分支整个结构整个结构“单入口、单出口单入口
3、、单出口” if(表达式表达式) 语句语句1; else 语句语句2; if(表达式表达式) 语句串语句串1; else 语句串语句串2; 表达式表达式 语句语句1 1 语句语句2 2 假(零)假(零)真(非零)真(非零)4/34循环语句循环语句 C+提供提供3种实现循环算法的语句种实现循环算法的语句while循环循环dowhile循环循环for循环循环 这这3种语句可以相互转换种语句可以相互转换只用其中任意一种格式可实现其他两种格式编写的语句。只用其中任意一种格式可实现其他两种格式编写的语句。它们各有其最合适的使用场合。它们各有其最合适的使用场合。 注意注意“循环体语句执行完毕循环体语句执行
4、完毕”仅仅为为“结束本轮循环,准备进入结束本轮循环,准备进入下一轮循环下一轮循环”;整个循环是否结束,主要看整个循环是否结束,主要看“继续循环条件继续循环条件”是否为假。是否为假。应该避免无穷循环(亦称应该避免无穷循环(亦称“永真循环永真循环”或或“死循环死循环”)。)。5/34while循环语句循环语句 表达式表达式为是否继续循环的条件;为是否继续循环的条件; 先判断条件,循环体可能执行先判断条件,循环体可能执行0次、次、1次或多次。次或多次。 while(表达式表达式) 循环体语句循环体语句; while(表达式表达式) 循环体语句串循环体语句串; 表达式表达式 循环体语句循环体语句 假(
5、零)假(零)真(非零)真(非零)6/34dowhile循环循环 先执行循环体,使循环体先执行循环体,使循环体至少至少被执行一次;被执行一次; 建议用一对花括号将循环体语句包围起来建议用一对花括号将循环体语句包围起来(即使循环体为(即使循环体为单语句)单语句),并且将右花括号写在,并且将右花括号写在while前前(见上面的第二种见上面的第二种写法写法),以明显地区别于,以明显地区别于while循环。循环。 do 循环体语句循环体语句; while(表达式表达式); do 循环体语句循环体语句; while(表达式表达式);表达式表达式 循环体语句循环体语句 假(零)假(零)真真7/34#incl
6、ude /4-1.cppusing namespace std;int main() int i,sum; i=1; while(i=100) sum += i; coutsum = sum endl; return 0;程序改错程序改错请用请用do-while改写!改写!sum=0;i+;8/34#include /4-2.cppusing namespace std;int main() int i,sum=0; i=1; do sum += i; i+; while(i=100); coutsum = sum endl; return 0;用用do-while改写改写9/34实战练习实战
7、练习 输出正整数输出正整数n的所有约数。的所有约数。10/34#include /4-3.cpp#includeusing 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;11/34for循环循环 表达式表达式1 1被且仅被执行被且仅被执行一次一次; 3个表达式均可缺省,缺省个表达式均可缺省,缺省表达式表达式2 2表示表示true,但,但两个分号两个分号不能缺省;不能缺省; 可以将可以将循环
8、体语句循环体语句与与表达式表达式3 3合并。合并。for(表达式表达式1 1; 表达式表达式2 2; 表达式表达式3 3) 循环体语句循环体语句;for(表达式表达式1 1; 表达式表达式2 2; 表达式表达式3 3) 循环体语句串循环体语句串;表达式表达式2 循环体语句循环体语句 假假(零零) 真真 (非零非零) 表达式表达式3 表达式表达式1 12/34 用公式:用公式:/4 1-1/3+1/5-1/7+求求的近似值,直到最后一项的绝对值小于的近似值,直到最后一项的绝对值小于10-6为止为止实战练习实战练习13/34#include /4-4.cpp#includeusing namesp
9、ace 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;coutpi=piendl; return 0;14/34开关语句开关语句switch(整型或枚举型表达式整型或枚举型表达式)case 常量表达式常量表达式1: 语句组语句组1;case 常量表达式常量表达式2: 语句组语句组2; case 常量表达式常量表达式n: 语句组语句组n;default: 语句组语句组n+1;15/34实战练习实战练习 输入一个十进制数,根据输入的数输
10、出所对应输入一个十进制数,根据输入的数输出所对应的星期几,若所输入的数小于的星期几,若所输入的数小于1或大于或大于7,则输,则输出出“出错出错”。16/34#include /4-5.cppusing 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; cas
11、e 7: cout星期天星期天endl; default:cout超出范围!超出范围!endl;return 0;17/34#include /改进后的程序改进后的程序 4-6.cppusing 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;
12、case 6: cout星期六星期六endl; break;case 7: cout星期天星期天endl; break;default:cout超出范围!超出范围!endl;return 0;18/34实战练习实战练习题目:将百分制的分数转换为题目:将百分制的分数转换为5个等级个等级 90分以上为分以上为A,8089分为分为B,7079分为分为C,6069分为分为D,60分以下为分以下为E。 例如,输入例如,输入75,则显示,则显示C。 【分析分析】先判断输入的数据是否在合理的分数范围(先判断输入的数据是否在合理的分数范围(0100)内,然后再判断是哪个分数段:)内,然后再判断是哪个分数段:9
13、0分以上输出分以上输出A,8089分输出分输出B,7079分输出分输出C,6069分输出分输出D,否则显示,否则显示E。 19/34用用if语句实现语句实现if( s100) cout=90) cout=80) cout=70) cout=60) coutDn;elsecoutEn;20/34#include /4-7.cppusing namespace std;int main()int s;couts;if( s100) couterrorn;else用用switch语句实现语句实现 使用使用switch语句,当然最笨的办法是每一个分数一个语句,当然最笨的办法是每一个分数一个case分支
14、。有没有简化的办法呢?分支。有没有简化的办法呢?21/34switch(s/10) /根据转换值进行分支选择根据转换值进行分支选择case 10:case 9:coutAn;break;case 8:coutBn;break;case 7: coutCn;break;case 6:coutDn;break;default:coutEn;return 0; 22/34跳转语句跳转语句 break仅结束其所在的一层循环语句或者开关语句仅结束其所在的一层循环语句或者开关语句 continue提前结束本轮循环,准备进入下一轮循环提前结束本轮循环,准备进入下一轮循环 return 返回语句,用于函数结束
15、时返回语句,用于函数结束时return; 对应与返回类型为对应与返回类型为 void 的函数的函数return 表达式表达式; 表达式表达式的数据类型对应于函数的返回类型的数据类型对应于函数的返回类型 goto不提倡使用。建议不要使用。不提倡使用。建议不要使用。23/34for循环中的循环中的break及及continue24/34 C+支持大型软件开发支持大型软件开发显然,不宜将所有的语句都写入主函数显然,不宜将所有的语句都写入主函数其实,应该使主函数尽可能地简单。主要起调度作用,其实,应该使主函数尽可能地简单。主要起调度作用,控制其他功能模块(即其他函数的调用);控制其他功能模块(即其他函
16、数的调用);函数逐个调用及返回,实现多种功能。函数逐个调用及返回,实现多种功能。 启动程序执行时,将使主函数自动执行;启动程序执行时,将使主函数自动执行; 在主函数中遇到在主函数中遇到return语句将引起程序结束。语句将引起程序结束。二、基本程序扩展二、基本程序扩展25/34主函数主函数 功能函数功能函数1 功能函数功能函数2 功能函数功能函数3 功能函数功能函数4 功能函数功能函数5 功能函数功能函数6 例如:例如:26/34改编改编“算术测验算术测验”程序之二程序之二 设计设计“加法测验加法测验”功能函数功能函数首先将原来的主函数名改成首先将原来的主函数名改成 add_test;去掉输出
17、成绩语句,将测验成绩作为该函数的返回值去掉输出成绩语句,将测验成绩作为该函数的返回值 return score; 设计主函数,调用设计主函数,调用add_test函数函数 今后可扩展今后可扩展主函数主函数 加法测验加法测验 减法测验减法测验 27/34 / test3.cpp #include using namespace std; int add_test();/ 函数声明函数声明 int main()/ / 主函数尽可能地简单主函数尽可能地简单 int score; score = add_test();/ 函数调用函数调用(执行语句执行语句) cout ”成绩:成绩:” score ”
18、 分分” endl; return 0; 28/34 int add_test() / 函数定义函数定义(函数实现函数实现) int x, y, z; int i, score; time_t t; srand(time(&t);/ / 为了获得更好的随机性为了获得更好的随机性 score = 0; i = 0; while(i10) x = rand() % 21; y = rand() % 21; cout x ” + ” y z; if(x+y = z) score += 10; i+; return score;/ / 返回测试成绩返回测试成绩 29/34 / test3.cpp增加减
19、法测验功能增加减法测验功能(请参见请参见2.3.2小节小节) #include using namespace std; int add_test(), sub_test();/ 函数声明函数声明 int main()/ / 主函数起调度作用主函数起调度作用 int score, choice=1; while(choice) cout ”n1-加法测试加法测试” ”n2-减法测试减法测试” ”n0-退出退出” choice; switch(choice) case 1: score = add_test(); break; case 2: score = sub_test(); break;
20、 cout ”成绩成绩” score ” 分分” endl; return 0; / / 简易菜单简易菜单/ / 接收选择接收选择/ / 依选择分情况处理依选择分情况处理/新增扩展部分新增扩展部分30/34多文件结构多文件结构 C+支持众人集体开发支持众人集体开发显然,不同的开发人员不太可能将所有程序写入同一个文显然,不同的开发人员不太可能将所有程序写入同一个文件件 C+的编译单元的编译单元 源程序文件源程序文件C+按编译单元进行分割编译按编译单元进行分割编译 C+的头文件的头文件标准头文件标准头文件程序员自行编写的头文件程序员自行编写的头文件 模仿(算术测验程序)模仿(算术测验程序)test
21、.cpptest.htest_main.cpp31/34C+程序开发流程程序开发流程 编辑编辑源程序源程序 编译编译源程序源程序生成目标代码文件生成目标代码文件 连接连接目标代码文件及标准库文件目标代码文件及标准库文件生成可执行文件生成可执行文件 运行运行可执行文件可执行文件任何一步出现错误都需要重新编辑(修改)源程任何一步出现错误都需要重新编辑(修改)源程序,然后重新编译、重新连接、重新运行之。序,然后重新编译、重新连接、重新运行之。32/34课后实战课后实战 已知本金为已知本金为a,年利率为年利率为x%,试求存入银行多少年试求存入银行多少年后本、利之和是原来本金的后本、利之和是原来本金的2倍。倍。33/34本讲小结本讲小结 调试程序是程序员的基本工作内容。调试程序是程序员的基本工作内容。 调试程序磨砺程序员的意志,锻炼程序员的思维。调试程序磨砺程序员的意志,锻炼程序员的思维。 小结小结循环结构的应用循环结构的应用多程序的编程过程及实现多程序的编程过程及实现34/34
限制150内