击鼓传花c语言编程题,c语言-第5章 循环程序设计.ppt

《c语言-第5章 循环程序设计.ppt》由会员分享,可在线阅读,更多相关《c语言-第5章 循环程序设计.ppt(83页珍藏版)》请在人人文库网上搜索。

1、第5章 循环程序设计,管理学院 电子商务系,2,第5章 循环程序设计,5.1 概述 5.2 while和do while循环 5.3 for循环 5.4 循环的嵌套 5.5 循环的控制 5.6 应用举例 5.7 程序调试,3,第5章 循环程序设计,4,第5章 循环程序设计,5,第5章 循环程序设计,6,第5章 循环程序设计,7,第5章 循环程序设计,8,第5章 循环程序设计,9,第5章 循环程序设计,10,第5章 循环程序设计,水温度的量变引起水的物理形态的质变: 水在标淮大气压下加温到100摄氏度变成汽 降温到0摄氏度变成冰。,11,第5章 循环程序设计,物体从地球上抛射速度的量变引起运动形。

2、式的质变: 小于7911m/s时,在地面上沿弹道飞行; 达到7911m/s时,绕地球作椭园轨道运动,成为地球的卫星; 增大到11189m/s时,脱离地球成为绕太阳运行的一个行星; 速度达到16662m/s时,脱离太阳系成为迢游太空的一个天体。,12,第5章 循环程序设计,计算机程序由若干语句顺序组成: 顺序结构的程序只能按照语句的先后顺序从前向后依次执行 分支结构程序虽然允许在执行了某个判断后跳过某些语句执行后面的语句,但也只能按语句的前后次序执行 有时,需要在程序中重复执行某个语句或语句块,就需要循环结构,13,第5章 循环程序设计,生活中的例子: 击鼓传花:大家坐成一个圈,鼓声响起的时候将。

3、花束顺序交到下一个人的手里,依次向下传递,当鼓声突然中断时停止传花,花束落在谁的手里便成为输家 4100米接力赛跑:第1个人跑完100米后将接力棒传给第2个人,第2个人再跑100米,然后是第3个人,直到第4个人跑完最后一个100米 共同点: 都要完成相同的任务:量变的重复内容 都有结束条件:发生质变的界限,14,第5章 循环程序设计,1. 计算sum=1+2+3+100,15,第5章 循环程序设计,1. 计算sum=1+2+3+100,循环体,循环控制条件,循环控制变量,循环的初始化,#include void main( ) int i=1, sum=0 ; while ( i = 100 。

4、) sum = sum + i ; i+ ; printf ( “Sum = %d n”, sum ) ; ,16,第5章 循环程序设计,2. 计算sum=2+4+6+100,循环体,循环控制条件,循环控制变量,循环的初始化,#include void main( ) int i=2, sum=0 ; while ( i = 100 ) sum = sum + i ; i+=2 ; printf ( “Sum = %d n”, sum ) ; ,17,5.2 while和do while循环,格式: while( 表达式 ) 语句 do 语句 while( 表达式 ) ; 说明: 括号中的“表。

5、达式”是循环控制条件,但不限于关系表达式和逻辑表达式 “语句”是单一语句,但可以是复合语句 如果while语句的括号后面只有“;”,则循环体为空。如果do-while语句的括号后面(分号前面)还有其他符号,则出现语法错误,18,5.2 while和do while循环,while语句的执行过程,while语句的执行过程是: 计算“表达式”的值; 若“表达式”的值不时0,为“真”,继续执行;否则,结束循环,转到while语句后面的语句继续执行程序; 执行“语句”部分,即执行循环体; 返回继续执行。,19,5.2 while和do while循环,do-while语句的执行过程,20,5.2 wh。

6、ile和do while循环,循环语句的特点: while循环是“先判断后循环”,如果开始时循环条件不满足,循环体就一次也不执行 do-while循环是“先循环后判断”,即使第一次判断的结果为“假”,循环体也已经执行了一次 但不论哪种循环,循环体中必须包含能够使循环条件变为“假”的运算,21,5.2 while和do while循环,循环的变化:sum=1+2+3+100,#include void main( ) int i=1, sum=0 ; while ( i= 100 ) sum = sum + i+ ; printf ( “Sum = %d n”, sum ) ; ,#includ。

7、e void main( ) int i=1, sum=0 ; do sum = sum + i ; i+; while ( i= 100 ); printf ( “Sum = %d n”, sum ) ; ,22,5.2 while和do while循环,几何级数2x的力量: 一页普通纸的厚度约为0.1mm(1mm=10-3m) 珠穆朗玛峰的高度为8844.43m 编写程序计算一下,普通纸对折多少次可以超过珠穆朗玛峰的高度?,23,5.2 while和do while循环,#include void main( ) double paper_height, mountain_height; 。

8、int number; paper_height=0.0001; mountain_height=8844.43; number=0; while ( paper_height mountain_height ) paper_height *= 2; number += 1; printf(对折第%d次后的高度是%g。n, number, paper_height); ,24,5.2 while和do while循环,几何级数2x的力量: 中国战国时期的赵国辩士公孙龙有一个著名命题:“一尺之棰,日取其半,万世不竭”。这是说,一尺长(0.33m)的一根木棰,每天取它一半,世世代代也取不完。这一命。

9、题,包含了某些朴素辩证法的思想,它猜测到了物质的无限可分性。但严格说来它并不科学。因为就某一具体物质形态来说,它在被分割到一定程度时就不再是这一事物了。 最大的原子是铯,半径为225pm(1pm=10-12m) 编写程序计算一下,这只木棰日取一半,取多少天可以比铯原子的半径小?,25,5.2 while和do while循环,26,5.2 while和do while循环,#include void main( ) double hammer_height, cesium_radius; int number; hammer_height=0.33; cesium_radius=225e-12。

10、; number=0; while ( cesium_radius hammer_height ) hammer_height /= 2; number += 1; printf(第%d天后的高度是%g。n, number, hammer_height); ,27,5.2 while和do while循环,恩格斯说:“纯粹的量的分割是有一个极限的,到了这个极限它就转化为质的差别;物体纯粹是由分子构成的,但它是本质上不同于分子的东西,正如分子又不同于原子一样”。 取到第3天,剩下的部分4.125cm长,这时它还能做为“木棰”吗?取到第31天,它剩下的部分已经没有分子那么大了,这时它不仅不再能成为。

11、“木棰”,连木头的物理分子都已经不是了。当然,它还可以被取下去,但随着次数的变化,它必然会发生不同层次的质变。 严格说来,应该是“一尺之棰,日取其半,三日可竭”;作为木质应该是“一只之棰,日取其半,一月乃竭”;作为物质,应该是“一尺之棰,日取其半,万世不蝎”。这就是说,不同层次的量变,总是引起与之相应的质变。,28,5.2 while和do while循环,循环的嵌套,如果在一个循环的循环体内包含另一个完整的循环则称为循环的嵌套,其中被嵌套的循环称为内循环,而嵌套了内循环的是外循环 内循环还可以嵌套循环,形成多级(层)嵌套,29,5.2 while和do while循环,顺序打印1-10的阶乘。

12、,即1!, 2!, , 10!,本题的关键是求阶乘 数学上,n!=123(n-1)n,30,5.2 while和do while循环,外循环,内循环,对比程序: #include void main( ) int i=1; float f = 1; while( i = 10 ) f = f * i; printf( %2d! = %.0f n, i, f ); i + ; 思考一下:8-10的阶乘,#include void main( ) int i=1, j ; float f ; while( i = 10 ) j = 1; f = 1; while( j = i ) f = f * 。

13、j; j + ; printf( “ %2d! = %.0f n”, i, f ); i + ; ,31,5.2 while和do while循环,循环的嵌套不仅可以发生在相同语句之间,如while嵌套while、do-while嵌套do-while,while语句和do-while语句也可以互相嵌套 (1)while(.)(2)while() while() do while(); (3)do(4)do while() do while() ; while() ;,32,5.2 while和do while循环,错误的嵌 套形式,循环必须是完整的,不允许内外循环交叉嵌套 f = 1; whi。

14、le( i 10) i=1; do f = f * i; i +; while( i10 );,混乱的控 制条件,内外循环的循环控制条件通常是分开的,相对独立的 i=1; s=0; while ( i 3 ) s = s + f; i = 1; f=1; while( i5) i +=2; f = f * i; i+ ; ,33,5.2 while和do while循环,应用举例,输入一个5位数,计算并输出各位的和,方法一:将输入的5位数看作是5个独立的数字字符,依次读取每一个数字字符,将其转化为对应的数字后再求和 将数组字符ch转化为数字的方法为ch-0,34,5.2 while和do wh。

15、ile循环,输入一个5位数,计算并输出各位的和,#include void main( ) char ch ; int i=0, sum = 0; printf(“Enter a number with 5 digits: ”); while( i 5 ) ch = getchar( ); sum += ch - 0 ; /* 将数字字符转化为对应的数字 */ i+ ; printf( “Sum of these 5 digits is %dn”, sum ) ; ,35,5.2 while和do while循环,几种常见运算: 如果ch为数字字符,则表达式ch - 0的值为对应的数字 如果c。

16、h为大写字母,则表达式 ch-A+a 为对应的小写字母 如果ch为小写字母,则表达式 ch-a+A 为对应的大写字母,技巧,36,5.2 while和do while循环,输入一个5位数,计算并输出各位的和,方法二:将输入的5位数看作一个整数,先读取该整数,再分离出各位数字 对于整数x,其个位数为 x%10 要求整数x的十位数,可以先令x=x/10,再求x的个位数,37,5.2 while和do while循环,输入一个5位数,计算并输出各位的和,#include void main( ) int x, x1, r, sum = 0; printf(Enter a number: ); sca。

17、nf( %d, ,38,5.2 while和do while循环,任意输入一行字符,统计字母a和A的个数,#include void main( ) char ch; int count=0; printf( Enter characters: ); do ch = getchar( ); if( ch=A | ch=a ) count+; while( ch != n ); printf( Counter of a or A: %dn , count ); ,39,5.2 while和do while循环,40,5.2 while和do while循环,#include void main(。

18、 ) int f = -1, n =1 ; float t, pi = 0 ;/* t为最后一项的值 */ do f = -f ;/* 第n项的符号 */ t = 1.0 / ( 2*n -1 ) ;/* 用1.0是为了避免整除 */ pi += f * t ; n+ ; while( t 1e-5 ); pi = 4 * pi ; printf( PI = %.4f n, pi ) ; ,41,5.3 for语句,for语句是常用的、特殊的循环控制语句 for语句的功能强大,使用灵活,变化多样 for语句优点:将“循环初始化条件”、“循环控制条件”、“循环控制变量的修改”集中表示 将量变与质。

19、变的因素集中表示,42,5.3 for语句,for语句的用法 for( 表达式1 ; 表达式2 ; 表达式3 ) 语句 “表达式1”用于循环的初始化 “表达式2”是for语句的循环控制条件,当循环控制条件为1(True)或非0时,运行代表循环体的“语句”部分,可以是任何形式的表达式 “表达式3”用于修改循环控制变量的值,目的是使“表达式2”的值变为0(False),以结束循环 “语句”部分是for语句的循环体,可以是单一语句,也可以是复合语句,43,5.3 for语句,for语句的执行过程,44,5.3 for语句,使用for语句编程。计算sum=1+2+3+100,#include void。

20、 main( ) int i, sum=0 ; for( i =1 ; i=100 ; i+) sum += i ; printf( “sum = %d n, sum ); ,45,5.3 for语句,任意输入10个数,求平均值,#include void main( ) int i ; float x, sum=0 ; printf( Enter 10 numbers one by one: n ); for( i =1 ; i=10 ; i+) scanf( %f, ,46,5.3 for语句,循环的嵌套,for语句可以嵌套for语句构成循环的嵌套 for语句也可以与while语句、do-。

21、while语句互相嵌套,47,5.3 for语句,例:顺序打印1-10的阶乘,即1!, 2!, 3!, , 10!,#include void main( ) int i, j ; float f ; for( i=1; i = 10 ; i+ ) f = 1; for( j=1; j = i ; j+ ) f = f * j; printf( %2d! = %.0f n, i, f ); ,#include void main( ) int i=1, j ; float f ; while( i = 10 ) j = 1; f = 1; while( j = i ) f = f * j; j。

22、 + ; printf( “ %2d! = %.0f n”, i, f ); i + ; ,48,5.3 for语句,例:打印几何图形,对于这类问题,每行中星号的个数、总行数等都应该用循环结构进行控制,而不是直接输出若干行字符串,#include void main( ) int i, j ; for(i=1; i = 4; i+ ) for( j = 0; ji ; j+ ) putchar( ); for( j = 1; j=6 ; j+ ) putchar(*); putchar(n); ,49,5.3 for语句,例:甲、乙两个会计进行点钞比赛,甲的速度为5张/秒,乙的为8张/秒。乙在。

23、甲已经点了100张钞票后才开始,问:只要几秒时间乙就可以超过甲?,经过 t 秒,甲点过的钞票数有 x=100+5t 张,乙的为 y=8t 张 问题就是求 yx 时的 t 值,#include void main( ) int t ; int x=100, y=0 ; for( t=0 ; x y ; t+ ) x = 100+5*t ; y = 8 * t; printf( Time is %d secondsn, t); ,50,5.3 for语句,for语句的变化形式,可以省略for语句的“表达式1”或“表达式3”,也可以都省略(“退化为”while语句),例:将用键盘输入的若干字符顺序输。

24、出到屏幕上,#include void main( ) char ch ; for( ; (ch=getchar( ) ) !=n ; ) putchar( ch ) ; ,51,5.3 for语句,如果省略“表达式2”,则循环控制条件总为“真”,下面的语句是“合法”的,但构成了“死循环”: for( i=1; ; i+) sum += i ;,下面的程序在运行时会因为“除以零”而出错: #include void main( ) char i ; int sum=0 ; for( i=1; ; i+) sum += 1000 / i ; printf( sum=%d n, sum); ,52。

25、,5.4 循环的控制,复杂的循环控制条件 对循环的控制问题,不仅仅是防止“死循环”,还包括选择恰当的时机,正确地结束循环 有的时候,循环控制条件是复杂的,还可能是多种条件的综合,53,例:假设每个班最多有30个人,依次输入每个人的成绩,如果输入的不是0-100之间的数,或者已经输入了30个数,则结束输入,输出计算结果。,#include void main( ) int i = 0, flag=1 ; float score, ave = 0 ; printf( Enter scores one by one:n ); while ( i 100 ) flag = 0; else ave +=。

26、 score; i+ ; if( i 0 ) ave = ave / i; printf(Average: %.2fn, ave); ,54,5.4 循环的控制,下面的程序块常用来对输入的数据进行限制: do scanf(%d, 或者,?(讨论一下),技巧,55,例:利用随机数产生一个乘法算式,用户输入算式的运算结果,由程序判断对错。,#include #include void main( ) int iFor = 0, iErr =0 ; int x, y, iAns ; char ch; do iFor +; x = rand() % 100;y = rand() % 100; prin。

27、tf( %d x %d = ? , x, y ); scanf( %d, ,56,5.4 循环的控制,break语句,break语句的格式为: break; 在switch语句中,break语句用于跳过后面的语句,结束switch语句 在循环结构中,break语句的作用是跳出循环结构,执行循环后面的语句,在下面的程序块中,由于break语句的作用,循环只进行了1次,printf语句一次也没有执行,并且永远也不会被执行: for( i=1; i 100; i+) sum += i; break; printf( %d, sum ); ,57,5.4 循环的控制,continue语句,contin。

28、ue语句的格式为: continue; continue语句只能用在循环结构中,用于结束本次循环,即跳过循环体中后面的语句,开始下一次循环,下面的语句块中,循环次数是100次,但printf语句一次也没有执行: for( i=1; i 100; i+) sum += i; continue; printf( %d, sum ); ,58,5.4 循环的控制,break语句和continue语句的有效范围都仅限于所在的循环语句之内。如果想从嵌套的循环结构的内循环中直接跳出到外循环之外,使用一个break语句是不行的。可行的方法是:在程序中引入一个标识变量,在各循环的结束位置检测这一标识,用多个b。

29、reak语句作连续的跳转, flag =1 while( i 10 ) for( j=i; j10; j+) if( j=2*i) flag =0;break; if( flag != 1)break; printf(%d, i); ,59,5.4 循环的控制,例:顺序打印100-1000之间所有9的倍数,如果一个数同时也是7的倍数则停止打印,#include void main( ) int i ; for( i=100; i1000; i+) if( i % 9 !=0 ) continue ; printf( %5d, i ) ; if( i % 7 =0 ) break; ,60,5.。

30、4 循环的控制,例:求任意正整数的除了自身以外的最大因数,#include void main( ) int i, n; printf( Enter a number: ); scanf(%d, ,61,5.4 循环的控制,goto语句,goto语句是从早期程序设计语言遗留下来的一个语句,称为无条件跳转语句,已被淘汰 goto语句的使用格式是: goto 语句标号; “语句标号”是一个特殊的标识符,由字母、数字或下划线组成(第一个字符不能是数字),后面跟冒号“:”,放在语句行的最前头,#include void main( ) int i =100; while( i1000 ) if( i 。

31、% 9 !=0 ) goto Next ; printf( “%5d”, i ) ; Next: i +; ,例:打印所有的100-1000间9的倍数,62,5.5 应用举例,阿米巴原虫,以细菌和更小的原虫为食,中枢神经系统的阿米巴原虫感染,水溶组织内阿米巴在一个试管中吞吃细菌,被称为“食脑变形虫”的阿米巴原虫能从人的鼻子里钻入大脑,将人的脑子“吃”掉。,63,5.5 应用举例,例:阿米巴用简单分裂方式繁殖,每分裂一次用时3分钟。将若干个阿米巴放在一个盛满营养液的容器内,45分钟后容器内充满了阿米巴。已知容器最多可以装阿米巴220个,试问,开始的时候往容器内放了多少个阿米巴?,分析:根据题意,。

32、阿米巴每3分钟分裂一次,那么从开始将阿米巴放入容器里面,到 45 分钟后充满容器,需要分裂15次。而“容器最多可以装阿米巴220个”,即阿米巴分裂15次以后得到的个数是220。题目要求计算分裂之前的阿米巴数,不妨使用倒推的方法,从第15次分裂之后的220个,倒推出第 15 次分裂之前(即第14次分裂之后)的个数,再进一步倒推出第 14次分裂之前、第13次分裂之前、第1次分裂之前的个数。,64,5.5 应用举例,设开始时阿米巴的个数为x0,第1次、第2次、第3次第15次分裂之后的个数分别为x1、x2、x3、x15,则有以下关系: x0=x1/2 x1=x2/2 xn=xn+1/2 x14=x15。

33、/2 已知x15=220,可以利用上面的关系倒推出x0,#include #include void main( ) int i ; long x = pow(2, 20) ; for( i = 15; i0 ; i-) x = x / 2 ; printf( There are %d amebas.n , x ) ; ,65,例:谷角猜想,对于任意一个自然数n,若n为偶数,则将其除以2;若n为奇数,则将其乘以3,然后再加1。如此反复,经过有限次运算后,总可以得到自然数1。试编程验证之。,#include void main( ) int n ; printf( Enter a number:。

34、 ) ; scanf( %d, ,66,5.5 应用举例,例:打印九九乘法口诀表 要求:九九乘法口诀表呈三角形,共有9行。第1行有1列,第2行有2列,第9行有9列。打印方法是,用外循环控制行数,包括打印一行中的所有列和换行,在内循环中,打印某一行上的所有列。,#include void main( ) int i, j; for( i=1; i = 9; i+ ) for( j=1; j = i; j+ ) printf( %1dx%1d=%-4d, j, i, j*i ); printf(n); ,67,例:利用迭代公式 求 的近似值,结果保留5位有效数字。,用该迭代公式求a的平方根x,实际。

35、是求近似值xn+1,即xxn+1,“保留5位有效数字”可理解为 |xn+1-xn|/ xn+110-5,#include #include void main( ) float x, y, y0 ; printf( Enter a positive: ) ; do scanf(%f, ,68,例:利用牛顿迭代法求方程的 在2附近的一个实根。,对于方程f (x)=0,把f (x)在x0附近展开成泰勒级数: f (x) = f (x0) + (xx0) f (x0) + (xx0)2 f (x0) + 取线性部分作为方程f (x) = 0的近似方程,则有: f (x0) + f (x0)(xx0)。

36、 = 0 设f (x0) 0,则方程的近似解为: x1=x0f (x0) / f (x0) 再把f (x)在x1附近展开,也取其线性部分。若f (x1)0,则得到方程的另一个近似解: x2=x1f (x1)/f (x1) 这样,可得到牛顿法的一个迭代序列: xn+1=xnf (xn)/f (xn) 当f (xn+1)0时即可认为xn+1就是方程f (x)=0的近似解。对于本题, f (x) = 5x3 - 3x2 - 22 f (x) = 15x2 - 6x x0 = 2,69,例:利用牛顿迭代法求方程的 在2附近的一个实根。,#include void main( ) float x, y,。

37、 y1; x = 2; do y = x*x* ( 5*x - 3 ) - 22 ; y1 = (15 * x 6 ) * x ; x = x y / y1; while( fabs( y ) 1e-5 ) printf(The root is %fn, x); ,70,5.6 程序调试,对于程序设计而言,即使优秀的程序员也不能保证不会犯错误 一个优秀的程序,不在于使用了先进的算法,而在于仅仅包含少量的错误 程序中的错误是在所难免的,关键是发现并纠正错误 初学程序设计的人有必要从一开始就养成良好的习惯,培养严谨的工作作风,并逐步掌握一些编程技巧,71,5.6 程序调试,程序调试的一般策略 程序。

38、中的错误一般可分为: 语法错误比较容易发现,通常,有语法错误的程序不能通过编译和连接,也就不能生成可执行的程序 逻辑错误又叫语义错误,也就是不能正确地表达所需要的功能,是较常见的错误之一。其外部表现为,程序可以运行,但有时出错,有时又不出错。逻辑错误通常比较难于被发现,查错和纠错对任何程序员来说都是挑战 设计错误比较少见,通常是由于对问题的分析不彻底造成的,纠正这类错误需要重新设计程序,72,5.6 程序调试,调试程序的一般步骤为: 静态检查,也就是人工检查,是在完成程序设计后,在上机调试前,仔细地对程序代码进行全面的检查。通过静态检查,不仅可以发现程序中的语法错误,也可以发现逻辑错误,甚至发。

39、现设计上的缺陷。为便于查错,应力求做到编码的标准化、文档化,增强编码的可读性、可理解性、可维护性。要做到:采用结构化方法,划分功能模块和程序段,采用必要的缩进和对齐,简化表达式,每行只有一个语句,尽量使用注释,使用有意义的标识符, 动态检查,是指通过上机调试发现错误的过程。完成编码后,可以借助编译程序检查隐藏的语法错误,如错误标识符、非法的表达式、错误的函数调用等。利用连接程序,可以检查连接错误,如调用了未定义的函数、缺乏必要的函数定义等。通过试运行程序,可以发现一些逻辑错误,如错误的计算、有问题的输入和输出等,73,5.6 程序调试,程序中的错误有两种:Error和Warning Error。

40、是必须要纠正的,任何Error都会导致编译或连接失败 Warning一般不影响生成可执行的“程序”,但程序有缺陷 合格的程序员不仅要纠正致命Error,也要重视并纠正Warning 当程序中错误较多时,应从最前面的错误开始逐一改正有些错误实际出自同样的原因,只要纠正了其中的一个就会消除所有这些错误,74,5.6 程序调试,程序的跟踪与调试,以Visual C+ 6.0为例,1、程序的“调试”运行方式 打开主菜单,点击 “Go”(快捷键是F5),75,5.6 程序调试,2、使程序暂停的方法 执行到光标处:将光标放在一个语句行上,单击“debug”工具栏中的“Run to Cursor”按钮 设置。

41、断点:将光标放在一个语句行上,然后点击“Add/Remove Breakpoint”按钮 ,即可在此设置(或取消)一个断点 “中断”(Break)方式:当程序运行在调试方式下时,单击“Break”按钮,即可立即“中断”程序的运行;要恢复暂停程序的执行,只要单击“Go”按钮即可,76,5.6 程序调试,3、在“暂停”状态下常见的操作 单步运行程序。点击“Step Over”按钮 或“Step Into”按钮即可一行一行地执行程序,每执行完一行都自动进入暂停状态 观察变量的值。使用“Variables”窗口可观察程序中的各种变量的当前值,点击其中的“Locals”选项卡可以显示所定义的变量的值。在。

42、“Watch”窗口中,也可以添加或删除要观察的变量的值。当“Watch”有效时,点击选中源代码窗口,把鼠标指向任何变量,稍待片刻,就会弹出该变量的值 修改变量的值。要临时修改变量的值,可以双击改变量的“Value”域(在Variables窗口或Watch窗口都有效),进行编辑 模拟计算。单击“QuickWatch”按钮 ,弹出“QuckWatch”对话框,可以用当前程序中的变量组成算式进行简单的模拟运算,77,5.6 程序调试,4、查错的技巧 程序中隐藏的错误通常难于发现,可以采取一些技巧: 在程序中加入一些“调试代码”,输出变量的中间值以帮助判断但这种办法并不理想,一来使用起来不方便,二来破。

43、坏了程序的原有结构,三是在不需要的时候还要一一删除,不注意会遗漏。使用条件编译会更好些 通过设置断点、跟踪运行等方式调试程序,这是比较高效的方法一旦怀疑某段程序有错,可以在程序段的开始位置设置断点,当程序运行到断点而暂停时,通过一步一步地执行程序,并观察变量的变化,判断错误是否存在。但这种方法也有不利的地方,比如,如果程序段所表达的逻辑比较复杂,或者循环次数很多,都会导致调试困难 程序的单元测试法。对程序段的执行逻辑进行仔细分析,划分程序执行路径的种类,针对每种路径设计若干组不同的输入数据,依次使用这些数据来测试程序,观察程序的运行状态和结果,以发现可能隐藏着的错误,78,小强蛋糕店之“成本核。

44、算”,小强蛋糕店开张已经快有两个月了,小强起早贪黑、没日没夜地干活,但是每到月底结算的时候,他却发现经济上入不敷出!虽然小强天性“乐善好施”、“学雷锋做好事”,但是如果长期如此,蛋糕店不久也会“关门大吉”了。 为了找出原因所在,小强打算应用罗老师传授的“循环程序结构”编写一个计算机程序,对制作的每款蛋糕进行“成本核算”,计算出合理的成本价格,以利于今后的经营。,79,小强蛋糕店之“成本核算”,蛋糕主要原料是面粉、牛奶、奶油、鸡蛋和糖,小强蛋糕的主要原料成分表如下所示:,80,小强蛋糕店之“成本核算”,面粉、牛奶、奶油、鸡蛋和糖的当前市场价格表如下所示:,81,小强蛋糕店之“成本核算”,小强蛋糕。

45、店设计的“成本核算”程序cost.c如下:,#include void main( ) float flour_w, milk_w, butter_w, egg_w, sugar_w; float flour_p, milk_p, butter_p, egg_p, sugar_p; float ave_p; char is_repeat=y; flour_p=3;milk_p=6; butter_p=10; egg_p=5;sugar_p=3; printf(请按以下顺序输入蛋糕成分数量。n); printf(面粉、牛奶、奶油、鸡蛋、糖:n); scanf(%f%f%f%f%f, ,82,小强。

46、蛋糕店之“成本核算”,while (is_repeat=y) ave_p = (flour_w*flour_p + milk_w*milk_p + butter_w*butter_p + egg_w*egg_p + sugar_w*sugar_p)/500; printf(这款蛋糕的主要成本价格是%.2f元。n, ave_p); printf(还需要对其它蛋糕进行成本核算吗?n); getchar(); printf(需要输入y,否则输入n:); scanf(%c, ,83,小强蛋糕店之“成本核算”,小强感觉计算某个产品成本时都要重新输入相应的各个成分,十分不便。看来,需要请教罗老师,有没有更好的办法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值