第6章程序的控制结构2循环

上传人:夏** 文档编号:586710472 上传时间:2024-09-05 格式:PPT 页数:45 大小:288.02KB
返回 下载 相关 举报
第6章程序的控制结构2循环_第1页
第1页 / 共45页
第6章程序的控制结构2循环_第2页
第2页 / 共45页
第6章程序的控制结构2循环_第3页
第3页 / 共45页
第6章程序的控制结构2循环_第4页
第4页 / 共45页
第6章程序的控制结构2循环_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《第6章程序的控制结构2循环》由会员分享,可在线阅读,更多相关《第6章程序的控制结构2循环(45页珍藏版)》请在金锄头文库上搜索。

1、第第第第6 6 6 6章章章章 程序的控制结构程序的控制结构程序的控制结构程序的控制结构(2)(2)(2)(2)循环循环循环循环西南财经大学王磊2024/9/526.16.1循环结构循环结构循环结构循环结构P循环体YN当当P为真为真循环体循环体P循环体YN当当P为真为真循环体循环体当型循环当型循环两种形式两种形式P循环体NY直到直到P为真为真循环体循环体P循环体Y直到直到P为真为真循环体循环体直到型循环直到型循环两种形式两种形式N2024/9/53循环循环循环循环whilewhile语句,语句,语句,语句,forfor语句语句语句语句 whilewhile( (表达式表达式表达式表达式) )

2、循环语句循环语句循环语句循环语句; ; dodo 循环语句循环语句循环语句循环语句; ; whilewhile( (表达式表达式表达式表达式);); forfor( (表达式表达式表达式表达式1; 1; 表达式表达式表达式表达式2; 2; 表达式表达式表达式表达式3)3) 循环语句循环语句循环语句循环语句; ; 2024/9/54whilewhile语句语句语句语句 whilewhile ( (表达式表达式表达式表达式) ) 循环语句循环语句循环语句循环语句; ; 只要只要只要只要表达式表达式表达式表达式的值为的值为的值为的值为非非非非0(0(真真真真) ),就重复执行就重复执行就重复执行就重

3、复执行whilewhile循环循环循环循环语句语句语句语句,直到直到直到直到表达式表达式表达式表达式值为值为值为值为0(0(假假假假) )时止时止时止时止P循环体YN2024/9/55dodo- -whilewhile语句语句语句语句 dodo 循环循环循环循环语句语句语句语句; ; whilewhile ( (表达式表达式表达式表达式);); 首先执行首先执行首先执行首先执行语句语句语句语句,然后判断,然后判断,然后判断,然后判断表达式表达式表达式表达式的值。的值。的值。的值。 如果表达式为如果表达式为如果表达式为如果表达式为0 0,结束,结束,结束,结束whilewhile循环语句。循环语

4、句。循环语句。循环语句。否则,再次执行否则,再次执行否则,再次执行否则,再次执行循环循环循环循环语句。语句。语句。语句。 语句语句语句语句会被至少执行一次会被至少执行一次会被至少执行一次会被至少执行一次P循环体YN2024/9/56forfor语句语句语句语句 forfor ( (表达式表达式表达式表达式1; 1; 表达式表达式表达式表达式2; 2; 表达式表达式表达式表达式3)3) 循环语句循环语句循环语句循环语句; ; 循环起始条件循环起始条件(通常对循环(通常对循环变量赋初值)变量赋初值)循环结束条件循环结束条件(每次执行循环每次执行循环语句前需判断语句前需判断)循环增量循环增量(循环语

5、句执行完(循环语句执行完一次后计算表达式一次后计算表达式3的值)的值)(1) 计算计算表达式表达式1,(2)计算计算表达式表达式2。若。若表达式表达式2的值的值 0(不满足结束条件)(不满足结束条件), 则执行循环语句则执行循环语句, 若若表达式表达式2的值的值=0,则结束循环;,则结束循环;(3)执行执行循环语句循环语句;(3) 计算计算表达式表达式3, 再次判断表达式再次判断表达式2的值的值.依此重复下去依此重复下去,直到直到表达式表达式2的值的值=0(假假)。2024/9/57注意注意注意注意 循环变量循环变量循环变量循环变量的使用的使用的使用的使用 通过通过通过通过循环变量循环变量循环

6、变量循环变量i i 的值的值的值的值来控制循环次数。来控制循环次数。来控制循环次数。来控制循环次数。 ForFor循环的循环的循环的循环的循环总次数循环总次数循环总次数循环总次数是是是是已知的已知的已知的已知的。for ( i=1; i=100; i+) sum+=i;2024/9/58forfor语句语句语句语句 forfor ( (表达式表达式表达式表达式1; 1; 表达式表达式表达式表达式2; 2; 表达式表达式表达式表达式3)3) 循环语句循环语句循环语句循环语句; ; 相当于:相当于:相当于:相当于: 表达式表达式表达式表达式1 1和和和和表达式表达式表达式表达式3 3可以没有或者是

7、用逗号分隔的多可以没有或者是用逗号分隔的多可以没有或者是用逗号分隔的多可以没有或者是用逗号分隔的多个表达式的组合个表达式的组合个表达式的组合个表达式的组合。但最好不要有太多的表达式组合。但最好不要有太多的表达式组合。但最好不要有太多的表达式组合。但最好不要有太多的表达式组合 表达式表达式表达式表达式1;1; whilewhile ( (表达式表达式表达式表达式2)2) 循环语句循环语句循环语句循环语句; ;表达式表达式表达式表达式3;3; 2024/9/59选择三种循环的一般原则选择三种循环的一般原则选择三种循环的一般原则选择三种循环的一般原则 如果循环次数已知,用如果循环次数已知,用如果循环

8、次数已知,用如果循环次数已知,用forfor 如果循环次数未知,用如果循环次数未知,用如果循环次数未知,用如果循环次数未知,用whilewhile 如果循环体至少要执行一次,用如果循环体至少要执行一次,用如果循环体至少要执行一次,用如果循环体至少要执行一次,用do-whiledo-while 这只是这只是这只是这只是“ “一般一般一般一般” ”原则,不是原则,不是原则,不是原则,不是“ “原则原则原则原则” ”2024/9/510注意注意注意注意 在在在在forfor和和和和whilewhile语句之后一般没有分号语句之后一般没有分号语句之后一般没有分号语句之后一般没有分号 有分号表示循环体就

9、是分号之前的内容(空循环体)有分号表示循环体就是分号之前的内容(空循环体)有分号表示循环体就是分号之前的内容(空循环体)有分号表示循环体就是分号之前的内容(空循环体) whilewhile (i 100) (i 100); ;i+;i+; forfor (i = 0; i 100; i+) (i = 0; i 100; i+); ;printf(%dprintf(%d, i);, i); forfor通常有一个循环变量控制循环的次数,不要在循通常有一个循环变量控制循环的次数,不要在循通常有一个循环变量控制循环的次数,不要在循通常有一个循环变量控制循环的次数,不要在循环体内改变这个变量环体内改变

10、这个变量环体内改变这个变量环体内改变这个变量2024/9/511例:计算例:计算例:计算例:计算 n!=12nn!=12n 分别用如下语句编程分别用如下语句编程分别用如下语句编程分别用如下语句编程forforwhilewhiledo-whiledo-while2024/9/512 循环次数已知,首先考虑用循环次数已知,首先考虑用循环次数已知,首先考虑用循环次数已知,首先考虑用forfor循环语句循环语句循环语句循环语句#include #include main()main() intint i, n; i, n; /* i/* i是循环变量是循环变量是循环变量是循环变量* */ / long

11、 p=1; long p=1; /* /* 存放阶乘的值存放阶乘的值存放阶乘的值存放阶乘的值 * */ / printf(Pleaseprintf(Please enter n:); enter n:); scanf(%d,&nscanf(%d,&n); ); for(ifor(i=1; i=n; i+)=1; i=n; i+) p=p*i; p=p*i; printf(%dprintf(%d!=%ld!=%ldn,n,pn,n,p); ); 例:计算例:计算例:计算例:计算 n!=12nn!=12n2024/9/513例:计算例:计算例:计算例:计算 n!=12nn!=12n WhileWh

12、ile循环语句实现循环语句实现循环语句实现循环语句实现intint i=1; i=1;while (i=n)while (i=n) p=p*i;p=p*i;i+;i+; do whiledo while循环语句实现循环语句实现循环语句实现循环语句实现intint i=1; i=1;dodop=p*i;p=p*i;i+;i+;while (i=n);while (i=n);2024/9/514只猜1次直到猜对为止最多猜10次例:循环控制语句例:循环控制语句例:循环控制语句例:循环控制语句猜数游猜数游猜数游猜数游戏戏戏戏2024/9/515猜数游戏用到的库函数猜数游戏用到的库函数猜数游戏用到的库函

13、数猜数游戏用到的库函数 怎样模拟计算机怎样模拟计算机“想想”一个数呢?一个数呢? 随机函数随机函数随机函数随机函数rand()rand() 产生产生产生产生0,RAND_MAX0,RAND_MAX 之间的随机数之间的随机数之间的随机数之间的随机数 magic = rand(); magic = rand(); #include #include RAND_MAXRAND_MAX在在在在stdlib.hstdlib.h中定义,不大于双字节整数中定义,不大于双字节整数中定义,不大于双字节整数中定义,不大于双字节整数的最大值的最大值的最大值的最大值32767 32767 产生产生产生产生0,b-1

14、0,b-1 之间的随机数之间的随机数之间的随机数之间的随机数magic = magic = rand()%brand()%b; ; 产生产生产生产生a,a+b-1 a,a+b-1 之间的随机数之间的随机数之间的随机数之间的随机数magic = magic = rand()%brand()%b + a; + a; 2024/9/516例例例例# #includeinclude # #includeinclude main()main() intint magic; /* magic; /*计算机计算机计算机计算机 想想想想 的数的数的数的数* */ /intint guess; /* guess

15、; /*人猜的数人猜的数人猜的数人猜的数* */ /magic = rand()%100 + 1;magic = rand()%100 + 1; /*“/*“想想想想” ”一个一个一个一个11,100100之间的之间的之间的之间的数数数数magic*/magic*/printf(Please guess a magic number:);printf(Please guess a magic number:);scanf(%d, &guess); scanf(%d, &guess); ifif (guess magic) (guess magic) printf(Wrong! Too high

16、!n); printf(Wrong! Too high!n); else ifelse if (guess magic) (guess magic) printf(Wrong! Too low!n); printf(Wrong! Too low!n); elseelse printf(Right! n); printf(Right! n); printf(The number is:%d n, magic); printf(The number is:%d n, magic); 只猜1次2024/9/517例例例例# #includeinclude # #includeinclude main

17、()main() intint magic; magic; intint guess; guess; intint counter; counter; /* /*记录人猜次数的计数器变量记录人猜次数的计数器变量记录人猜次数的计数器变量记录人猜次数的计数器变量* */ /magic = rand() % 100 + 1; magic = rand() % 100 + 1; counter = 0;counter = 0; /*/*计数器变量计数器变量计数器变量计数器变量countcount初始化为初始化为初始化为初始化为0, 0, 统计猜测次数统计猜测次数统计猜测次数统计猜测次数* */ /do

18、do printf(Please guess a magic number:);printf(Please guess a magic number:);scanf(%d, &guess); scanf(%d, &guess); counter +;counter +; /* /*计数器变量计数器变量计数器变量计数器变量countcount加加加加1*/1*/ifif (guess magic) (guess magic) printf(Wrong! Too high!n);printf(Wrong! Too high!n);else ifelse if (guess magic) (gues

19、s magic) printf(Wrong! Too low!n);printf(Wrong! Too low!n); whilewhile (guess != magic); (guess != magic); printf(Right!n); printf(Right!n); printf(counter = %d n, counter); printf(counter = %d n, counter); 直到猜对为止2024/9/518# #includeinclude # #includeinclude # #includeinclude main()main() intint mag

20、ic; magic; intint guess; guess; intint counter; counter; srand(time(NULL); srand(time(NULL); magic = rand() % 100 + 1; magic = rand() % 100 + 1; counter = 0; counter = 0; dodo printf(Please guess a magic number:);printf(Please guess a magic number:);scanf(%d, &guess); scanf(%d, &guess); counter +; c

21、ounter +; ifif (guess magic) (guess magic) printf(Wrong! Too high!n);printf(Wrong! Too high!n);else ifelse if (guess magic) (guess magic) printf(Wrong! Too low!n);printf(Wrong! Too low!n);elseelseprintf(Right!n);printf(Right!n); whilewhile (guess != magic) (guess != magic) & (counter 10)& (counter 1

22、0); ); printf(counter = %d n, counter); printf(counter = %d n, counter); 实验实验实验实验3 3最多猜10次2024/9/5196.3 6.3 嵌套循环嵌套循环嵌套循环嵌套循环While循环语句的嵌套;循环语句的嵌套; while ( ) while ( ) for ( ; ; ) while ( ) do while ( ); 2024/9/520使用嵌套的循环体时,应注意以下问题使用嵌套的循环体时,应注意以下问题使用嵌套的循环体时,应注意以下问题使用嵌套的循环体时,应注意以下问题 在嵌套的各层循环体中,在嵌套的各层循环

23、体中,在嵌套的各层循环体中,在嵌套的各层循环体中,使用复合语句使用复合语句使用复合语句使用复合语句(即用一对大(即用一对大(即用一对大(即用一对大花括号将循环体语句括起来)花括号将循环体语句括起来)花括号将循环体语句括起来)花括号将循环体语句括起来)保证逻辑上的正确性保证逻辑上的正确性保证逻辑上的正确性保证逻辑上的正确性 内层和外层循环控制变量不应同名内层和外层循环控制变量不应同名内层和外层循环控制变量不应同名内层和外层循环控制变量不应同名,以免造成混乱,以免造成混乱,以免造成混乱,以免造成混乱 嵌套的循环最好采用嵌套的循环最好采用嵌套的循环最好采用嵌套的循环最好采用右缩进格式书写右缩进格式书

24、写右缩进格式书写右缩进格式书写,以保证层次的,以保证层次的,以保证层次的,以保证层次的清晰性清晰性清晰性清晰性 代码风格问题代码风格问题代码风格问题代码风格问题 循环嵌套不能交叉循环嵌套不能交叉循环嵌套不能交叉循环嵌套不能交叉,即在一个循环体内必须完整的包,即在一个循环体内必须完整的包,即在一个循环体内必须完整的包,即在一个循环体内必须完整的包含着另一个循环含着另一个循环含着另一个循环含着另一个循环 2024/9/521例:打印例:打印例:打印例:打印乘法九九表乘法九九表乘法九九表乘法九九表 2024/9/522例例例例#include main() int m, n; for (m=1; m

25、10; 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); printf(n); 2024/9/523例:打印下三角例:打印下三角例:打印下三角例:打印下三角乘法九九表乘法九九表乘法九九表乘法九九表 2024/9/524#include main() int m, n; for (m=1; m10; m+) printf(%4d, m); /*打印表头打印表头*/

26、 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); 例例例例2024/9/5256.5 6.5 流程的转移控制流程的转移控制流程的转移控制流程的转移控制 breakbreak语句语句语句语句 continuecontinue语句语句语句语句 gotogoto语句语句语句语句2024/9/526breakbreak和和和和continuecontinue breakbreak语句语句语句语句:退出循环结构语

27、句退出循环结构语句退出循环结构语句退出循环结构语句或者或者或者或者switchswitch如果是嵌套循环,则只退出如果是嵌套循环,则只退出如果是嵌套循环,则只退出如果是嵌套循环,则只退出breakbreak语句所在的循环。语句所在的循环。语句所在的循环。语句所在的循环。 continuecontinue:中断本次循环体的执行过程,并进行循环的下一轮中断本次循环体的执行过程,并进行循环的下一轮中断本次循环体的执行过程,并进行循环的下一轮中断本次循环体的执行过程,并进行循环的下一轮 breakbreak和和和和continuecontinue少用为妙少用为妙少用为妙少用为妙2024/9/527br

28、eakbreak和和和和continuecontinue假假真真break表达式1表达式2循环语句后循环语句后的下一条语句循环语句后的下一条语句假假真真 表达式1表达式2continue2024/9/528例:单步运行演示例:单步运行演示例:单步运行演示例:单步运行演示breakbreak语句和语句和语句和语句和continuecontinue语句的用法区别语句的用法区别语句的用法区别语句的用法区别# #includeinclude mainmain()() intint i, n; i, n;forfor (i=1; i=5; i+) (i=1; i=5; i+) printf(Please

29、 enter n:);printf(Please enter n:);scanf(%d, &n);scanf(%d, &n);ifif (n 0) (n 0) breakbreak; ;printf(n = %dn, n);printf(n = %dn, n); printf(Program is over!n);printf(Program is over!n); Please enter n:10Please enter n:10 n = 10n = 10Please enter n: -10Please enter n: -10 Program is over!Program is ov

30、er!2024/9/529例例例例 :单步运行演示:单步运行演示:单步运行演示:单步运行演示breakbreak语句和语句和语句和语句和continuecontinue语句的用法区别语句的用法区别语句的用法区别语句的用法区别# #includeinclude mainmain()() intint i, n; i, n;forfor (i=1; i=5; i+) (i=1; i=5; i+) printf(Please enter n:);printf(Please enter n:);scanf(%d, &n);scanf(%d, &n);ifif (n 0) (n 0) continuec

31、ontinue; ;printf(n = %dn, n);printf(n = %dn, n); printf(Program is over!n);printf(Program is over!n); Please enter n: 10Please enter n: 10 n = 10n = 10Please enter n: -10Please enter n: -10 Please enter n: 20Please enter n: 20 n = 20n = 20Please enter n: -20Please enter n: -20 Please enter n: 30Plea

32、se enter n: 30 n = 30n = 30Program is over! Program is over! 2024/9/530 标号举例标号举例标号举例标号举例error:error: printf(“Errorsprintf(“Errors!, exit!n” );!, exit!n” ); GotoGoto语句语句语句语句举例举例举例举例 gotogoto error; error; 一般形式一般形式一般形式一般形式 语句标号:语句标号:语句标号:语句标号: gotogoto 语句标号语句标号语句标号语句标号; ;gotogoto与标号(与标号(与标号(与标号(labell

33、abel)2024/9/531是是是是gotogoto的过错?还是程序员的过错?的过错?还是程序员的过错?的过错?还是程序员的过错?的过错?还是程序员的过错? 破坏了结构化设计风格破坏了结构化设计风格破坏了结构化设计风格破坏了结构化设计风格 容易带来错误隐患容易带来错误隐患容易带来错误隐患容易带来错误隐患 如非必需,尽量不用如非必需,尽量不用如非必需,尽量不用如非必需,尽量不用gotogotomain()main() int sum; int sum; gotogoto nextnext; ; sum=0; sum=0; /*/*被被被被gotogoto跳过跳过跳过跳过*/*/next:nex

34、t: printf(%d, sum);printf(%d, sum); 2024/9/532其他流程转移控制其他流程转移控制其他流程转移控制其他流程转移控制 标准库函数标准库函数标准库函数标准库函数exit()exit() 作用是作用是作用是作用是终止整个程序的执行终止整个程序的执行终止整个程序的执行终止整个程序的执行,强制返回操作系统,强制返回操作系统,强制返回操作系统,强制返回操作系统 调用该函数需要嵌入头文件调用该函数需要嵌入头文件调用该函数需要嵌入头文件调用该函数需要嵌入头文件 用法:用法:用法:用法: exit(codeexit(code););codecode参数设置(惯例):参数

35、设置(惯例):参数设置(惯例):参数设置(惯例): 0 0 表示程序正常退出;表示程序正常退出;表示程序正常退出;表示程序正常退出; 非非非非0 0 表示程序出现某种错误退出。表示程序出现某种错误退出。表示程序出现某种错误退出。表示程序出现某种错误退出。2024/9/533例题分析:素数问题例题分析:素数问题例题分析:素数问题例题分析:素数问题 给给定一个正整数定一个正整数定一个正整数定一个正整数n=91,n=91,判断它是不是素数。判断它是不是素数。判断它是不是素数。判断它是不是素数。 判断判断判断判断标标准:准:准:准: 素数只能被自身和素数只能被自身和素数只能被自身和素数只能被自身和1

36、1整除。例如,整除。例如,整除。例如,整除。例如,91%1=0, 91%91=0.91%1=0, 91%91=0. 思路:思路:思路:思路:将将将将2 2至至至至n-1n-1之之之之间间的所有整数,同的所有整数,同的所有整数,同的所有整数,同n n进进行求余操作,判断余行求余操作,判断余行求余操作,判断余行求余操作,判断余数是否数是否数是否数是否为为0 0, 如果如果如果如果发现发现任意一次任意一次任意一次任意一次为为0 0,则则n n必然不是素必然不是素必然不是素必然不是素数。数。数。数。循循循循环语环语句。句。句。句。2024/9/534程序结构程序结构程序结构程序结构intint mai

37、n( ) main( ) / /定定定定义变义变量、初始化量、初始化量、初始化量、初始化 / / 进进行行行行计计算、算、算、算、处处理理理理 / / 输输出出出出结结果果果果 2024/9/535intint main( ) main( ) intint n=91; n=91;intint x; x; / /循循循循环变环变量量量量intint count=0; count=0; / /用于用于用于用于统计统计n n被整除的次数被整除的次数被整除的次数被整除的次数for(xfor(x=2; x=n-1; x+)=2; x0)0) printf(“nprintf(“n不是是素数不是是素数不是是

38、素数不是是素数););elseelse printf(nprintf(n是素数是素数是素数是素数);); return 0; return 0; 2024/9/536思考思考思考思考1 1: 目的:目的:目的:目的: 假假假假设设判断是否能判断是否能判断是否能判断是否能够够整除(整除(整除(整除(n%xn%x= =0= =0)的)的)的)的计计算开算开算开算开销销很大,程序很大,程序很大,程序很大,程序应该应该尽量减少尽量减少尽量减少尽量减少该该操作。操作。操作。操作。 对对上述程序上述程序上述程序上述程序进进行行行行优优化化化化利用利用利用利用breakbreak或或或或continueco

39、ntinue缩缩减需要被减需要被减需要被减需要被检查检查的除数范的除数范的除数范的除数范围围 , 还还是是是是2, n-1?2, n-1?2024/9/537思考思考思考思考 2 2: 求出所有的求出所有的求出所有的求出所有的100-200100-200之间之间之间之间的素数的素数的素数的素数 双重循双重循双重循双重循环问题环问题环问题环问题。2024/9/5386.6 6.6 程序排错程序排错程序排错程序排错 最优秀的程序员最优秀的程序员最优秀的程序员最优秀的程序员也很难保证其编写的程序能够在计算也很难保证其编写的程序能够在计算也很难保证其编写的程序能够在计算也很难保证其编写的程序能够在计算

40、机上一次调试通过。机上一次调试通过。机上一次调试通过。机上一次调试通过。 程序程序程序程序出错并不可怕出错并不可怕出错并不可怕出错并不可怕,只要学会一定的程序测试和排错,只要学会一定的程序测试和排错,只要学会一定的程序测试和排错,只要学会一定的程序测试和排错技巧,出错就不再可怕;相反,我们还可以在错误中技巧,出错就不再可怕;相反,我们还可以在错误中技巧,出错就不再可怕;相反,我们还可以在错误中技巧,出错就不再可怕;相反,我们还可以在错误中学习并牢记宝贵的知识,并教导我们如何预防错误的学习并牢记宝贵的知识,并教导我们如何预防错误的学习并牢记宝贵的知识,并教导我们如何预防错误的学习并牢记宝贵的知识

41、,并教导我们如何预防错误的再次发生。再次发生。再次发生。再次发生。 掌握一些预防错误发生和减少错误的技术非常重要:掌握一些预防错误发生和减少错误的技术非常重要:掌握一些预防错误发生和减少错误的技术非常重要:掌握一些预防错误发生和减少错误的技术非常重要:好的算法设计好的算法设计好的算法设计好的算法设计、好的编程风格好的编程风格好的编程风格好的编程风格、限制全局数据结构的使用、限制全局数据结构的使用、限制全局数据结构的使用、限制全局数据结构的使用、边界条件测试等。边界条件测试等。边界条件测试等。边界条件测试等。VC编译软件中有自动整理格式功能编译软件中有自动整理格式功能 只要选取需要的代码,按只要

42、选取需要的代码,按ALT+F8就能自动就能自动整理成带缩进格式的整理成带缩进格式的c文件。文件。2024/9/539程序中常见的出错原因程序中常见的出错原因程序中常见的出错原因程序中常见的出错原因 1 1 1 1、编译错误;、编译错误;、编译错误;、编译错误; 编译过程中出现的错误,通常属于编译过程中出现的错误,通常属于编译过程中出现的错误,通常属于编译过程中出现的错误,通常属于语法错误语法错误语法错误语法错误,即编写的语句不符合即编写的语句不符合即编写的语句不符合即编写的语句不符合C C语言的语法规则。语言的语法规则。语言的语法规则。语言的语法规则。Undefined symbol Unde

43、fined symbol XXXXXX XXX statement missing;XXX statement missing;Expression syntax errorExpression syntax errorRedeclarationRedeclaration of XXX of XXXToo few parameter in call;Too few parameter in call;2024/9/540程序有哪些错误?程序有哪些错误?程序有哪些错误?程序有哪些错误?#include #include main() int m, i, k; printf(Please ente

44、r 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);2024/9/541程序中常见的出错原因程序中常见的出错原因程序中常见的出错原因程序中常见的出错原因22 运行错误;运行错误; 指程序在运行过程中发生的错误,往往由于指程序在运行过程中发生的错误,往往由于指程序在运行过程中发生的错误,往往由于指程序在运行过程中发生的错误,往往由于语义上的错误造成。语义上的错误造成。语义上的错误造成。语义上的错误造成。 虽然虽然虽然虽然

45、语法上正确语法上正确语法上正确语法上正确,但要求计算机去做不该但要求计算机去做不该但要求计算机去做不该但要求计算机去做不该做或者做不到的事情做或者做不到的事情做或者做不到的事情做或者做不到的事情。 例如,用例如,用例如,用例如,用0 0作为除数,运行后将显示作为除数,运行后将显示作为除数,运行后将显示作为除数,运行后将显示”Div”Divi ision by zerosion by zero” ”错误提示信息。错误提示信息。错误提示信息。错误提示信息。 还有,程序运行出现还有,程序运行出现还有,程序运行出现还有,程序运行出现“ “死循环死循环死循环死循环” ”。2024/9/542程序中常见的

46、出错原因程序中常见的出错原因程序中常见的出错原因程序中常见的出错原因33 逻辑错误逻辑错误逻辑错误逻辑错误 程序能得到运行结果,但结果总是不正确。程序能得到运行结果,但结果总是不正确。程序能得到运行结果,但结果总是不正确。程序能得到运行结果,但结果总是不正确。 这种错误比较隐蔽,编译软件很难给出错误这种错误比较隐蔽,编译软件很难给出错误这种错误比较隐蔽,编译软件很难给出错误这种错误比较隐蔽,编译软件很难给出错误信息,需要编程人员仔细分析程序本身。信息,需要编程人员仔细分析程序本身。信息,需要编程人员仔细分析程序本身。信息,需要编程人员仔细分析程序本身。 2024/9/543常见的逻辑错误常见的

47、逻辑错误常见的逻辑错误常见的逻辑错误 变量忘了赋初值,将获得随机值。变量忘了赋初值,将获得随机值。变量忘了赋初值,将获得随机值。变量忘了赋初值,将获得随机值。 运算符运算符运算符运算符= =和和和和=使用不当。使用不当。使用不当。使用不当。 用用用用=比较两个浮点数是否相等。比较两个浮点数是否相等。比较两个浮点数是否相等。比较两个浮点数是否相等。 用多个关系运算符表达一个复杂的逻辑表达式,而自己对用多个关系运算符表达一个复杂的逻辑表达式,而自己对用多个关系运算符表达一个复杂的逻辑表达式,而自己对用多个关系运算符表达一个复杂的逻辑表达式,而自己对运算规则不清楚。运算规则不清楚。运算规则不清楚。运

48、算规则不清楚。 S Scanfcanf( )( )读取值时,没有按格式控制符的要求输入数据。读取值时,没有按格式控制符的要求输入数据。读取值时,没有按格式控制符的要求输入数据。读取值时,没有按格式控制符的要求输入数据。 s scanfcanf( )( )读取值时,变量名前忘了读取值时,变量名前忘了读取值时,变量名前忘了读取值时,变量名前忘了&符号。符号。符号。符号。 printfprintf( )( )输出时,格式控制符与变量类型不符。输出时,格式控制符与变量类型不符。输出时,格式控制符与变量类型不符。输出时,格式控制符与变量类型不符。 数值计算时,计算结果的值超出了变量的表示范围。数值计算时

49、,计算结果的值超出了变量的表示范围。数值计算时,计算结果的值超出了变量的表示范围。数值计算时,计算结果的值超出了变量的表示范围。 S Scanfcanf( )( )读取读取读取读取doubledouble数据时,没有使用数据时,没有使用数据时,没有使用数据时,没有使用“ “%lf”%lf”格式控制符。格式控制符。格式控制符。格式控制符。 2024/9/544调试的基本方法调试的基本方法调试的基本方法调试的基本方法 “粗分细找粗分细找粗分细找粗分细找”定位大致的范围:归纳、推理、二分、排除定位大致的范围:归纳、推理、二分、排除定位大致的范围:归纳、推理、二分、排除定位大致的范围:归纳、推理、二分

50、、排除 缩减输入数据缩减输入数据缩减输入数据缩减输入数据设法找到能导致失败的最小输入设法找到能导致失败的最小输入设法找到能导致失败的最小输入设法找到能导致失败的最小输入 采用注释的办法切掉一些代码(采用注释的办法切掉一些代码(采用注释的办法切掉一些代码(采用注释的办法切掉一些代码(P133, P133, P133, P133, 增量测试)增量测试)增量测试)增量测试)减少有关的代码区域,调试无误后再将它们打开注释,即采减少有关的代码区域,调试无误后再将它们打开注释,即采减少有关的代码区域,调试无误后再将它们打开注释,即采减少有关的代码区域,调试无误后再将它们打开注释,即采用分而治之的策略将问题局部化用分而治之的策略将问题局部化用分而治之的策略将问题局部化用分而治之的策略将问题局部化 利用调试工具;利用调试工具;利用调试工具;利用调试工具;逐条语句跟踪逐条语句跟踪逐条语句跟踪逐条语句跟踪 插入打印语句插入打印语句插入打印语句插入打印语句观看屏幕输出结果观看屏幕输出结果观看屏幕输出结果观看屏幕输出结果2024/9/545课后作业课后作业课后作业课后作业 P142P142 习题习题习题习题:6.86.8, 6.146.14

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号