第6章程序的控制结构2循环课件.ppt

上传人:牧羊曲112 文档编号:2109406 上传时间:2023-01-11 格式:PPT 页数:45 大小:214.96KB
返回 下载 相关 举报
第6章程序的控制结构2循环课件.ppt_第1页
第1页 / 共45页
第6章程序的控制结构2循环课件.ppt_第2页
第2页 / 共45页
第6章程序的控制结构2循环课件.ppt_第3页
第3页 / 共45页
第6章程序的控制结构2循环课件.ppt_第4页
第4页 / 共45页
第6章程序的控制结构2循环课件.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《第6章程序的控制结构2循环课件.ppt》由会员分享,可在线阅读,更多相关《第6章程序的控制结构2循环课件.ppt(45页珍藏版)》请在三一办公上搜索。

1、第6章 程序的控制结构(2)循环,C程序设计语言,西南财经大学王磊,1,第6章 程序的控制结构(2)循环C程序设计语言西南财经大,6.1循环结构,当P为真,循环体,当P为真,循环体,当型循环两种形式,直到P为真,循环体,直到型循环两种形式,N,6.1循环结构P循环体YN当P为真循环体P循环体YN当P为真,循环while语句,for语句,while(表达式)循环语句;do 循环语句;while(表达式);for(表达式1;表达式2;表达式3)循环语句;,循环while语句,for语句while(表达式),while语句,while(表达式)循环语句;只要表达式的值为非0(真),就重复执行whil

2、e循环语句,直到表达式值为0(假)时止,while语句while(表达式)P循环体YN,do-while语句,do 循环语句;while(表达式);首先执行语句,然后判断表达式的值。如果表达式为0,结束while循环语句。否则,再次执行循环语句。语句会被至少执行一次,do-while语句doP循环体YN,for语句,for(表达式1;表达式2;表达式3)循环语句;,循环起始条件(通常对循环变量赋初值),循环结束条件(每次执行循环语句前需判断),循环增量(循环语句执行完一次后计算表达式3的值),(1)计算表达式1,计算表达式2。若表达式2的值0(不满足结束条件),则执行循环语句,若表达式2的值=

3、0,则结束循环;执行循环语句;(3)计算表达式3,再次判断表达式2的值.依此重复下去,直到表达式2的值=0(假)。,for语句for(表达式1;表达式2;表达式3)循,注意 循环变量的使用,通过循环变量i 的值来控制循环次数。For循环的循环总次数是已知的。,for(i=1;i=100;i+)sum+=i;,注意 循环变量的使用通过循环变量i 的值来控制循环次数,for语句,for(表达式1;表达式2;表达式3)循环语句;相当于:表达式1和表达式3可以没有或者是用逗号分隔的多个表达式的组合。但最好不要有太多的表达式组合,for语句for(表达式1;表达式2;表达式3),选择三种循环的一般原则,

4、如果循环次数已知,用for如果循环次数未知,用while如果循环体至少要执行一次,用do-while这只是“一般”原则,不是“原则”,选择三种循环的一般原则如果循环次数已知,用for,注意,在for和while语句之后一般没有分号有分号表示循环体就是分号之前的内容(空循环体)while(i 100);i+;for(i=0;i 100;i+);printf(%d,i);for通常有一个循环变量控制循环的次数,不要在循环体内改变这个变量,注意在for和while语句之后一般没有分号,例:计算 n!=12n,分别用如下语句编程forwhiledo-while,例:计算 n!=12n分别用如下语句编程

5、,循环次数已知,首先考虑用for循环语句#include main()int i,n;/*i是循环变量*/long p=1;/*存放阶乘的值*/printf(Please enter n:);scanf(%d,例:计算 n!=12n,循环次数已知,首先考虑用for循环语句例:计算 n!=12,例:计算 n!=12n,While循环语句实现int i=1;while(i=n)p=p*i;i+;do while循环语句实现int i=1;dop=p*i;i+;while(i=n);,例:计算 n!=12nWhile循环语句实现,例:循环控制语句猜数游戏,只猜1次直到猜对为止最多猜10次例:循环控制

6、语句猜数游戏,猜数游戏用到的库函数,怎样模拟计算机“想”一个数呢?随机函数rand()产生0,RAND_MAX 之间的随机数 magic=rand();#include RAND_MAX在stdlib.h中定义,不大于双字节整数的最大值32767 产生0,b-1 之间的随机数magic=rand()%b;产生a,a+b-1 之间的随机数magic=rand()%b+a;,猜数游戏用到的库函数怎样模拟计算机“想”一个数呢?,例,#include#include main()int magic;/*计算机想的数*/int guess;/*人猜的数*/magic=rand()%100+1;/*“想”

7、一个1,100之间的数magic*/printf(Please guess a magic number:);scanf(%d,例#include 只猜1次,例,#include#include main()int magic;int guess;int counter;/*记录人猜次数的计数器变量*/magic=rand()%100+1;counter=0;/*计数器变量count初始化为0,统计猜测次数*/doprintf(Please guess a magic number:);scanf(%d,例#include 直到猜对为止,#include#include#include mai

8、n()int magic;int guess;int counter;srand(time(NULL);magic=rand()%100+1;counter=0;doprintf(Please guess a magic number:);scanf(%d,实验3,#include 实验3最多猜10次,6.3 嵌套循环,While循环语句的嵌套;while()while(),for(;)while()do while();,6.3 嵌套循环While循环语句的嵌套;for(;,使用嵌套的循环体时,应注意以下问题,在嵌套的各层循环体中,使用复合语句(即用一对大花括号将循环体语句括起来)保证逻辑上

9、的正确性 内层和外层循环控制变量不应同名,以免造成混乱 嵌套的循环最好采用右缩进格式书写,以保证层次的清晰性 代码风格问题循环嵌套不能交叉,即在一个循环体内必须完整的包含着另一个循环,使用嵌套的循环体时,应注意以下问题 在嵌套的各层循环体中,使,例:打印乘法九九表,例:打印乘法九九表,例,#include main()int m,n;for(m=1;m10;m+)printf(%4d,m);/*打印表头*/printf(n);for(m=1;m10;m+)printf(-);printf(n);for(n=1;n10;n+)for(m=1;m10;m+)printf(%4d,n*m);prin

10、tf(n);,例#include,例:打印下三角乘法九九表,例:打印下三角乘法九九表,#include main()int m,n;for(m=1;m10;m+)printf(%4d,m);/*打印表头*/printf(n);for(m=1;m10;m+)printf(-);printf(n);for(m=1;m10;m+)for(n=1;n=m;n+)printf(%4d,m*n);printf(n);,例,#include 例,6.5 流程的转移控制,break语句continue语句goto语句,6.5 流程的转移控制 break语句,break和continue,break语句:退出循

11、环结构语句或者switch如果是嵌套循环,则只退出break语句所在的循环。continue:中断本次循环体的执行过程,并进行循环的下一轮break和continue少用为妙,break和continuebreak语句:,break和continue,break和continue假假真真break表达式1表达式,例:单步运行演示break语句和continue语句的用法区别,#include main()int i,n;for(i=1;i=5;i+)printf(Please enter n:);scanf(%d,Please enter n:10n=10Please enter n:-10P

12、rogram is over!,例:单步运行演示break语句和continue语句的用法区,例:单步运行演示break语句和continue语句的用法区别,#include main()int i,n;for(i=1;i=5;i+)printf(Please enter n:);scanf(%d,Please enter n:10n=10Please enter n:-10Please enter n:20n=20Please enter n:-20Please enter n:30n=30Program is over!,例:单步运行演示break语句和continue语句的用法,标号举例

13、error:printf(“Errors!,exit!n”);Goto语句举例 goto error;一般形式 语句标号:goto 语句标号;,goto与标号(label),标号举例goto与标号(label),是goto的过错?还是程序员的过错?,破坏了结构化设计风格容易带来错误隐患如非必需,尽量不用gotomain()int sum;goto next;sum=0;/*被goto跳过*/next:printf(%d,sum);,是goto的过错?还是程序员的过错?破坏了结构化设计风格,其他流程转移控制,标准库函数exit()作用是终止整个程序的执行,强制返回操作系统 调用该函数需要嵌入头文

14、件用法:exit(code);code参数设置(惯例):0 表示程序正常退出;非0 表示程序出现某种错误退出。,其他流程转移控制,例题分析:素数问题,给定一个正整数n=91,判断它是不是素数。判断标准:素数只能被自身和1整除。例如,91%1=0,91%91=0.思路:将2至n-1之间的所有整数,同n进行求余操作,判断余数是否为0,如果发现任意一次为0,则n必然不是素数。循环语句。,例题分析:素数问题给定一个正整数n=91,判断它是不是素数,程序结构,int main()/定义变量、初始化/进行计算、处理/输出结果,程序结构int main(),int main()int n=91;int x;

15、/循环变量int count=0;/用于统计n被整除的次数for(x=2;x0)printf(“n不是是素数);else printf(n是素数);return 0;,int main(),思考1:,目的:假设判断是否能够整除(n%x=0)的计算开销很大,程序应该尽量减少该操作。对上述程序进行优化利用break或continue缩减需要被检查的除数范围,还是2,n-1?,思考1:目的:假设判断是否能够整除(n%x=0)的计算,思考 2:求出所有的100-200之间的素数,双重循环问题。,思考 2:求出所有的100-200之间的素数双重循环问题。,6.6 程序排错,最优秀的程序员也很难保证其编写

16、的程序能够在计算机上一次调试通过。程序出错并不可怕,只要学会一定的程序测试和排错技巧,出错就不再可怕;相反,我们还可以在错误中学习并牢记宝贵的知识,并教导我们如何预防错误的再次发生。掌握一些预防错误发生和减少错误的技术非常重要:好的算法设计、好的编程风格、限制全局数据结构的使用、边界条件测试等。,VC编译软件中有自动整理格式功能 只要选取需要的代码,按ALT+F8就能自动整理成带缩进格式的c文件。,6.6 程序排错最优秀的程序员也很难保证其编写的程序能够在计,程序中常见的出错原因 1,1、编译错误;编译过程中出现的错误,通常属于语法错误,即编写的语句不符合C语言的语法规则。Undefined

17、symbol XXXXXX statement missing;Expression syntax errorRedeclaration of XXXToo few parameter in call;,程序中常见的出错原因 11、编译错误;,程序有哪些错误?,#include#include main()int m,i,k;printf(Please enter a number:)scanf(%d,m);k=sqrt(m);for(i=2;j k)printf(Yes!n);else printf(No!n);printf(Program is over!n);,程序有哪些错误?,程序中常

18、见的出错原因2,运行错误;指程序在运行过程中发生的错误,往往由于语义上的错误造成。虽然语法上正确,但要求计算机去做不该做或者做不到的事情。例如,用0作为除数,运行后将显示”Division by zero”错误提示信息。还有,程序运行出现“死循环”。,程序中常见的出错原因2运行错误;,程序中常见的出错原因3,逻辑错误 程序能得到运行结果,但结果总是不正确。这种错误比较隐蔽,编译软件很难给出错误信息,需要编程人员仔细分析程序本身。,程序中常见的出错原因3逻辑错误,常见的逻辑错误,变量忘了赋初值,将获得随机值。运算符=和=使用不当。用=比较两个浮点数是否相等。用多个关系运算符表达一个复杂的逻辑表达

19、式,而自己对运算规则不清楚。Scanf()读取值时,没有按格式控制符的要求输入数据。scanf()读取值时,变量名前忘了&符号。printf()输出时,格式控制符与变量类型不符。数值计算时,计算结果的值超出了变量的表示范围。Scanf()读取double数据时,没有使用“%lf”格式控制符。,常见的逻辑错误变量忘了赋初值,将获得随机值。,调试的基本方法,“粗分细找”定位大致的范围:归纳、推理、二分、排除缩减输入数据设法找到能导致失败的最小输入 采用注释的办法切掉一些代码(P133,增量测试)减少有关的代码区域,调试无误后再将它们打开注释,即采用分而治之的策略将问题局部化 利用调试工具;逐条语句跟踪插入打印语句观看屏幕输出结果,调试的基本方法“粗分细找”,课后作业,P142习题:6.8,6.14,课后作业P142,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号