网站开发主要框架 后端,苏州品牌网站设计企业,网站设计的专业流程,游戏开发大亨下载《c语言-第5章 循环程序设计.ppt》由会员分享#xff0c;可在线阅读#xff0c;更多相关《c语言-第5章 循环程序设计.ppt(83页珍藏版)》请在人人文库网上搜索。1、第5章 循环程序设计,管理学院 电子商务系,2,第5章 循环程序设计,5.1 概述 5.2 while和do while循环 5.3 for循环…《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. 计算sum123100,15,第5章 循环程序设计,1. 计算sum123100,循环体,循环控制条件,循环控制变量,循环的初始化,#include void main( ) int i1, sum0 ; while ( i 100 。4、) sum sum i ; i ; printf ( “Sum %d n”, sum ) ; ,16,第5章 循环程序设计,2. 计算sum246100,循环体,循环控制条件,循环控制变量,循环的初始化,#include void main( ) int i2, sum0 ; while ( i 100 ) sum sum i ; i2 ; 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循环,循环的变化sum123100,#include void main( ) int i1, sum0 ; while ( i 100 ) sum sum i ; printf ( “Sum %d n”, sum ) ; ,#includ。7、e void main( ) int i1, sum0 ; do sum sum i ; i; while ( i 100 ); printf ( “Sum %d n”, sum ) ; ,22,5.2 while和do while循环,几何级数2x的力量 一页普通纸的厚度约为0.1mm(1mm10-3m) 珠穆朗玛峰的高度为8844.43m 编写程序计算一下普通纸对折多少次可以超过珠穆朗玛峰的高度,23,5.2 while和do while循环,#include void main( ) double paper_height, mountain_height; 。8、int number; paper_height0.0001; mountain_height8844.43; number0; 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(1pm10-12m) 编写程序计算一下这只木棰日取一半取多少天可以比铯原子的半径小,25,5.2 while和do while循环,26,5.2 while和do while循环,#include void main( ) double hammer_height, cesium_radius; int number; hammer_height0.33; cesium_radius225e-12。10、; number0; 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 i1; float f 1; while( i 10 ) f f * i; printf( %2d! %.0f n, i, f ); i ; 思考一下8-10的阶乘,#include void main( ) int i1, 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-whilewhile语句和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) i1; do f f * i; i ; while( i10 );,混乱的控 制条件,内外循环的循环控制条件通常是分开的相对独立的 i1; s0; while ( i 3 ) s s f; i 1; f1; 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 i0, 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-Aa 为对应的小写字母 如果ch为小写字母则表达式 ch-aA 为对应的大写字母,技巧,36,5.2 while和do while循环,输入一个5位数计算并输出各位的和,方法二将输入的5位数看作一个整数先读取该整数再分离出各位数字 对于整数x其个位数为 x%10 要求整数x的十位数可以先令xx/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 count0; printf( Enter characters: ); do ch getchar( ); if( chA | cha ) 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语句编程。计算sum123100,#include void。20、 main( ) int i, sum0 ; for( i 1 ; i100 ; i) sum i ; printf( “sum %d n, sum ); ,45,5.3 for语句,任意输入10个数求平均值,#include void main( ) int i ; float x, sum0 ; printf( Enter 10 numbers one by one: n ); for( i 1 ; i10 ; 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( i1; i 10 ; i ) f 1; for( j1; j i ; j ) f f * j; printf( %2d! %.0f n, i, f ); ,#include void main( ) int i1, 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(i1; i 4; i ) for( j 0; ji ; j ) putchar( ); for( j 1; j6 ; j ) putchar(*); putchar(n); ,49,5.3 for语句,例甲、乙两个会计进行点钞比赛甲的速度为5张/秒乙的为8张/秒。乙在。23、甲已经点了100张钞票后才开始问只要几秒时间乙就可以超过甲,经过 t 秒甲点过的钞票数有 x1005t 张乙的为 y8t 张 问题就是求 yx 时的 t 值,#include void main( ) int t ; int x100, y0 ; for( t0 ; x y ; t ) x 1005*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( ; (chgetchar( ) ) !n ; ) putchar( ch ) ; ,51,5.3 for语句,如果省略“表达式2”则循环控制条件总为“真”,下面的语句是“合法”的但构成了“死循环” for( i1; ; i) sum i ;,下面的程序在运行时会因为“除以零”而出错 #include void main( ) char i ; int sum0 ; for( i1; ; i) sum 1000 / i ; printf( sum%d n, sum); ,52。25、,5.4 循环的控制,复杂的循环控制条件 对循环的控制问题不仅仅是防止“死循环”还包括选择恰当的时机正确地结束循环 有的时候循环控制条件是复杂的还可能是多种条件的综合,53,例假设每个班最多有30个人依次输入每个人的成绩如果输入的不是0-100之间的数或者已经输入了30个数则结束输入输出计算结果。,#include void main( ) int i 0, flag1 ; 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( i1; i 100; i) sum i; break; printf( %d, sum ); ,57,5.4 循环的控制,continue语句,contin。28、ue语句的格式为 continue; continue语句只能用在循环结构中用于结束本次循环即跳过循环体中后面的语句开始下一次循环,下面的语句块中循环次数是100次但printf语句一次也没有执行 for( i1; i 100; i) sum i; continue; printf( %d, sum ); ,58,5.4 循环的控制,break语句和continue语句的有效范围都仅限于所在的循环语句之内。如果想从嵌套的循环结构的内循环中直接跳出到外循环之外使用一个break语句是不行的。可行的方法是在程序中引入一个标识变量在各循环的结束位置检测这一标识用多个b。29、reak语句作连续的跳转, flag 1 while( i 10 ) for( ji; j10; j) if( j2*i) flag 0;break; if( flag ! 1)break; printf(%d, i); ,59,5.4 循环的控制,例顺序打印100-1000之间所有9的倍数如果一个数同时也是7的倍数则停止打印,#include void main( ) int i ; for( i100; 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则有以下关系 x0x1/2 x1x2/2 xnxn1/2 x14x15。33、/2 已知x15220可以利用上面的关系倒推出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( i1; i 9; i ) for( j1; j i; j ) printf( %1dx%1d%-4d, j, i, j*i ); printf(n); ,67,例利用迭代公式 求 的近似值结果保留5位有效数字。,用该迭代公式求a的平方根x实际。35、是求近似值xn1即xxn1“保留5位有效数字”可理解为 |xn1-xn|/ xn110-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则方程的近似解为 x1x0f (x0) / f (x0) 再把f (x)在x1附近展开也取其线性部分。若f (x1)0则得到方程的另一个近似解 x2x1f (x1)/f (x1) 这样可得到牛顿法的一个迭代序列 xn1xnf (xn)/f (xn) 当f (xn1)0时即可认为xn1就是方程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_repeaty; flour_p3;milk_p6; butter_p10; egg_p5;sugar_p3; printf(请按以下顺序输入蛋糕成分数量。n); printf(面粉、牛奶、奶油、鸡蛋、糖n); scanf(%f%f%f%f%f, ,82,小强。46、蛋糕店之“成本核算”,while (is_repeaty) 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,小强蛋糕店之“成本核算”,小强感觉计算某个产品成本时都要重新输入相应的各个成分十分不便。看来需要请教罗老师有没有更好的办法。