《c语言第5章-循环结构.pptx》由会员分享,可在线阅读,更多相关《c语言第5章-循环结构.pptx(60页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1导入在第三章里我们已经知道,循环结构就是在一定条件成立的情况下反复执行一些语句或操作,即有些语句会被反复多次执行。要想写好循环,首先要能够从问题的描述和解题步骤中去发现是否需要使用循环。在分析问题时,要注意识别出解决步骤中重复执行的类似动作,这是重要的线索,说明可能需要引进一个循环结构,统一处理这些重复的动作,尤其是重复次数不确定或者过多的情况。第1页/共60页2本章目标掌握循环结构的使用时机掌握循环的三种结构牢记构成循环的要素掌握使用continue和break提前结束循环的用法掌握嵌套循环理解三种循环结构各自的特点和适用情况第2页/共60页3引入例子1、输出一排50个“*”作为分割线;重
2、复打印50次“*”例子2、一个老师给多个班上同一门课,每次考试后都要统计各个分数段的人数(不及格,中等,良好,优秀)和平均分。如何设计一个程序来完成此功能设有4个计数器,分别记录各个分数段的人数。用一个单元来存放总分数,用一个单元来存放总人数。重复以下动作:读入一个学生的成绩总人数加一总分数加上当前的学生成绩判断当前学生成绩属于哪一个分数段,对应的分数段人数加一第3页/共60页4循环结构的必要性例1、应用中我们经常会遇到采用若干个“-”或“*”形成一行,作为项目间的分割线或者对输出进行布局,程序是如何编写这样的输出呢?分析:如果使用当前学习过的顺序设计,有两种方法。1、通过一条printf语句
3、一次性输出指定数量的字符。printf(“-n”);printf(“-n”);printf(“-n”);写printf语句时需要仔细核实字符数量,以免出错。2、连续写n条printf语句,每个printf语句输出一个字符.Printf(“-”);Printf(“-”);Printf(“-”);Printf(“-”);当n过大时,就会出现整个屏幕都是printf语句,不仅书写繁琐,而且可读性也很差。第4页/共60页5循环结构的必要性例2、实现数学中常见的累加和问题,求1-4所有数的立方和分析:需要调用4次pow函数来分别计算1-5所有数的立方和,然后再进行多次累加。long a,s;a=pow(
4、1,3);s=s+a;a=pow(2,3);s=s+a;a=pow(3,3);s=s+a;a=pow(4,3);s=s+a;上面两个程序很明显无法令人满意,里面有太多重复的类似的语句,尤其是当重复次数大到一定程度时(10000),其程序书写的繁琐已经使得其失去了计算机辅助计算的优越性。第5页/共60页6循环结构的必要性通过观察可以发现,这两个程序共同的特点就是有很多重复类似的操作语句,如果能够将其合并或者简化将会使程序变得更为简洁,也更有效率。针对例2,里面重复的类似语句主要是两个,一个是计算当前数的立方,另一个是把当前计算出的立方结果加到结果变量s上。可以采用如下思路进行简化:变量i代表当前
5、需要计算立方和的数,赋初值为1,s代表立方和的结果,赋初值为0;(int i=1,s=0)如果a的值小于等于100,就重复以下动作:(while(i100)计算i的立方并将其加到变量s上 (s+=pow(i,3);)将i的值加1 (i+;)这样通过100次的重复操作,即完成了这个计算任务。这样的重复类似动作通过循环语句实现就会变得很清晰,只要把重复动作的控制条件想清楚了,就不难写出如下程序第6页/共60页7循环结构的必要性可见,在程序设计中使用循环结构还是非常必要的,循环结构常见的应用情况包括:输出同样字符构成的图案。如常见的若干个“-”构成的点划线,*型图案等需要对一系列类似的数据做同样的处
6、理。如已知50个学生三门课的成绩,计算每个学生的平均分,既是对50组类似的数据,进行同样的加和求平均数的操作。数学计算中常用的累加,累乘等运算。产生一批可以通过统一规律算出来的数据。如根据前两项的值计算出斐波那契数列前20项。从第三项开始,每一项都是由其前两项的和产生。需要反复从一个结果计算出另一个结果第7页/共60页8常用的循环结构 C语言中对循环结构的表示,大体可以分为两类,即“当型”循环和“直到”型循环。1、当型循环。此种循环为先判断条件是否成立,然后再根据判断结果决定是否执行一次循环体,即当循环条件满足时,才执行一次循环体。故称为“当型”循环。如图6-1所示。执行过程:1、循环变量赋初
7、值2、计算条件表达式的值,若为假,则跳过循环,执行后续语句;若为真,则跳到步骤3)。3、执行循环体语句一次,执行结束后,跳到2)重复执行第8页/共60页9常用的循环结构2、直到型循环此种循环先执行一次循环体,然后才进行条件判断,即重复执行循环体直到条件表达式为假为止,故称为“直到型”循环。如图6-2所示。执行过程:1、循环变量赋初值2、执行循环体语句一次。3、计算条件表达式的值,若为假,则跳过循环,执行后续语句;若为真,则跳到步骤2)重复执行。第9页/共60页10常用的循环结构二者比较:共同点:都属于循环结构,即在一定条件成立情况下循环执行循环体。不同点:当型循环是先进行条件判断,然后再根据判
8、断结果决定是否执行循环体,故如果一开始条件表达式即为假,则循环体一次都不会被执行到。而对于直到型循环,循环体则至少会被执行一次,即使初始时条件表达式为假,因为是先执行后判断。在条件表达式初始值为真时,这两种循环完全等价。第10页/共60页11常用的循环结构1、铁路售票系统,针对某列火车,具有n个座位,进行售票。(注:由于有多个售票点同时进行卖票,故单个售票点并不清楚当前车票是否还有剩余。)分析:对于具体的售票点而言,由于其当前并不清楚车票的剩余情况,故其必须先进行核实,当有剩余票的时候才能卖票,具体卖票的动作包括出票给顾客,同时将剩余票数减一。故属于当型循环,即只有在“有票”这个条件成立的前提
9、下才能执行卖票的动作。流程图如下:q示例:看下面两则例题,判断适合采用哪种循环结构实现,并画出流程图。有票?卖票给顾客总票数减1告知顾客列车票已售罄真假第11页/共60页12常用的循环结构2、猜数游戏,即系统自动产生一个1-100的随机数,看谁能使用最少的次数猜中。分析:系统产生随机数后,用户至少需要猜测1次,才知道是否猜中,即用户需要不断猜数,直到猜中为止。故其适用于直到型循环,流程图如下:猜 中?猜数次数加1结束打印猜数次数真假第12页/共60页13构成循环结构的要素 从发现重复类似的动作到写出一个循环结构,需要考虑和解决很多具体问题。首先是确定哪些是循环中要处理的动作,即循环体;再有就是
10、循环的控制,即在循环开始时数据的状态、循环得以继续(或终止)的条件、以及如何在循环停止后得到需要的数据。程序设计时对应需要解决的问题包括:循环的条件如何表示?哪些语句是重复多次执行的?循环中涉及哪些变量?循环开始前应该给它们什么初值?循环体中应该如何修改它们?第13页/共60页14构成循环结构的要素我们将上述几个条件称为构成循环的要素,即循环体,循环变量,循环条件循环条件:循环得以继续或终止的条件,通常采用条件表达式表示,当条件表达式为真时执行循环体,为假时结束循环。循环体:重复执行的语句体。循环变量:控制循环次数的变量,即出现在循环条件表达式中的变量,其控制循环是否要重复执行。需要在循环开始
11、前为其赋初值,循环体中需要修改循环变量的值,如果循环体中忘记修改循环变量的值,可能会造成循环无法退出,即死循环,同时也可能引起其他意向不到的结果,如内存溢出等。第14页/共60页15C 语言中的各种循环需要多次重复执行一个或多个任务的问题考虑使用循环来解决可以是完全相同的任务,也可是按一定规律变化的任务第15页/共60页16C 语言中的各种循环条条 件件P P P PA当型循环(当型循环(while/forwhile/for)直到型循环(直到型循环(do-whiledo-while)真假假条条 件件P P P PA假真第16页/共60页17while 循环while(表达式)语句;while
12、循环的一般语法:Index=0;while(index 0)/循环条件printTicket();/循环体count-;/处理循环变量printf(“票已售罄!”);第19页/共60页20While循环示例例如:假设班级有62个学生,从键盘输入每个学生的当前课程成绩,计算整个班级的平均分(流程图+代码)输入完成如何表示:用一个变量表示当前读入学生的数量,每读入一个学生成绩后,数量+1,当数量大于62时,即表示输入完成。int count=0;float score,sum=0;while(count 62)scanf(“%f”,&score);sum+=score;count+;printf(
13、“avg=%fn”,sum/count);输入完成?加到总成绩上平均成绩=总成绩/62;真假已输入成绩学生的数量加1;读入当前学生成绩第20页/共60页21/分析程序运行结果#includevoid main()int num=1,result;while(num=10)result=num*10;printf(%d 10%d n,num,result);num+;while 循环示例1内存内存numresult1null102输出:1 10 102 10 203 10 304 10 405 10 506 10 607 10 708 10 809 10 9010 10 10011100第21页
14、/共60页22while 循环示例2问题描述:从键盘输入若干个整数,输入-1表示输入结束。统计 输入整数的数量,并计算这些整数的和并打印。分析:输入/输出算法描述是否有重复的部分什么时候重复结束是-1?加到总数上输入结束计算总和并输出真假已输入数据的数量加1;读入下一个数据输入数据#include void main()int c=0,count=0,num=0;scanf(%d,&c);while(c!=-1)count+=c;num+;scanf(%d,&c);printf(“共共输输入入%d个整数,和个整数,和为为:%dn”,num,count);输入:1234567-1共输入7个整数,
15、和为:27第22页/共60页23for(表达式1 ;表达式2 ;表达式3 )语句;for 循环的一般语法:for 循环counter=0;inum=1;cnt=100;counter=10;inum 0counter+;inum=inum+1;cnt-分号用于分隔 for 循环的三个表达式1234第23页/共60页24for 循环说明:表达式1完成变量的初始化工作,表达式2是循环是否继续的条件表达式,表达式3常用语循环变量的更新,语句部分是循环体。执行过程:执行表达式1,此步骤只在循环开始前做一次,用于对循环变量初始化。求表达式2的值,如果得到0,即循环条件不满足,则循环结束,否则就继续。执行
16、作为循环体的语句。执行表达式3,完成对循环变量值的修改。转到2继续执行。for语句等价于下列语句:语句等价于下列语句:表达式表达式1;while(表达式(表达式2)语句;语句;表达式表达式3;第24页/共60页25for 循环示例1qfor语句最简单的形式:for(for(循环变量赋初值;循环条件;循环变量增值循环变量赋初值;循环条件;循环变量增值)例如例如:for(i=1;i=100;i+)sum=sum+i;相当于:相当于:i=1;i=1;while(i=100)while(i=100)sum=sum+i;sum=sum+i;i+;i+;用for语句简单、方便。第25页/共60页26for
17、 循环示例2采用for循环输出前面的乘法表/分析程序运行结果#includevoid main()int num,result;for(num=1;num=k或标志为假修改标志变量为假测试结束返回主程序真假测试数加1标志flag为真,测试数据i从2开始K%i=0?真假第28页/共60页29#include void main()int k,flag=1,i;printf(“请输入需要测试的数:”);scanf(“%d”,&k);for(i=2;ik,flag=1;i+)if(k%i =0)flag=0;if (flag=1)printf(“k 是素数!n”);elseprintf(“k 不是素
18、数!n”);第29页/共60页30for 循环注意:for循环中表达式1、表达式2和表达式3都可以没有,也可以一部分有,但是其中的分号不能少。缺少第一个和第三个表示不作那部分动作,如循环变量的初始化也可放在for语句的前面做,循环变量的迭代也可以放到循环体里完成;缺少第二个则表示循环条件为1,也就是一个条件始终为真的循环,此时若在循环体也没有循环结束的语句,则会成为无休止循环,也称死循环。这种无休止循环有些时候是有意义的,如操作系统里的命令解释循环,以及有些需要24*7运行的程序,都可以借助死循环来实现。第30页/共60页31for 循环的表达式for 循环中有三个表达式for 语句中的各个表
19、达式都可以省略。但一般要么三个都省,用于设计死循环,否则都不省,只省略一个条件的情况很少用。分号分隔符不能省略for(;);可省略不能省略第31页/共60页32省略三个表达式for(;)printf(这将一直进行下去这将一直进行下去);i=getchar();if(i=X|i=x)break;即不为循环变量赋初值,不设置循环条件(认为表达式2为真值),不修改循环变量的值,无终止地执行循环体。此时应在循环体内设法结束循环,否则会成为死循环第32页/共60页33do-while 循环do 语句;while(表达式);do-while 循环的一般语法:do .scanf(“%c”,&answer);
20、while(answer!=n);工作原理示例循环变量赋初值条件成立?1、执行循环体语句2、修改循环变量跳出循环继续执行是否第33页/共60页34问题描述:猜数游戏。要求猜一个介于110之间的数字,根据用户猜测的数与标准值进行对比,并给出提示,以便下次猜测能接近标准值,直到猜中为止。分析:流程图循环条件如何表示do-while 循环示例 给出大小提示猜对?假猜数次数加1真输入猜数提示猜对输出猜数次数开始结束第34页/共60页35do-while 循环示例 int number=5,guess;printf(猜一个介于 1 与 10 之间的数n);do printf(请输入您猜测的数:);sca
21、nf(%d,&guess);if (guess number)printf(太大n);else if(guess number)printf(太小n);while (guess!=number);printf(您猜中了!答案为%dn,number);猜一个介于猜一个介于 1 与与 10 之间的数之间的数请输入您猜测的数:请输入您猜测的数:3太小太小请输入您猜测的数:请输入您猜测的数:5您猜中了您猜中了!答案为答案为 5输入数字 5 后,dowhile 循环中的条件为假,输出结果消息后,程序终止。第35页/共60页36比较 while 和 do-whilewhile(循环条件)循环体;do 循环
22、体;while(循环条件);do-while 循环是先执行后判断,所以,即使开始条件为假,循环体也至少会被执行一次。while循环是先判断后执行,所以,如果条件为假,则循环体一次也不会被执行。q 比较 while 和 do-while 循环的工作原理第36页/共60页37例例5.3 while和和do-while循环的比较循环的比较#include#include#include#include void main()void main()void main()void main()int sum=0 int sum=0,i;int sum=0i;int sum=0,i;i;scanf(“%d
23、 scanf(“%d,&i);scanf(”%d&i);scanf(”%d,&i);&i);while(i=10)do while(i=10)do sum=sum+I;sum=sum+i;sum=sum+I;sum=sum+i;i+;i+;i+;i+;while(i=10);while(i=10);printf(“sum=%dn,printf(“sum=%dn”,printf(“sum=%dn,printf(“sum=%dn”,sum);sum);sum);sum);运行结果:运行结果:1 1 sum=55 sum=55 再运行一次:再运行一次:1111sum=11sum=11说明:说明:说明
24、:说明:当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同。否则,二者结果不相同。运行结果:运行结果:1 1 sum=55 sum=55 再运行一次:再运行一次:1111sum=0sum=0第37页/共60页38嵌套循环 循环也可以像其他控制结构一样进行嵌套,即循环结构的循环体里仍然包含循环结构,而且可以多级嵌套。通常将最外面的一层循环称为外层循环,里面的一个或多个循环称为内层循环。具有一个外层循环和一个内层循环的双重循环是较常见的嵌套循环结构,此时外层循环每执行一次,内层循环都要完整的执行一次。例子:假设要统计某小区内某栋楼的居住人数,这栋楼有5个单元,每个单元有12户人
25、家。统计的方法是从第一单元开始,依次统计12户人家的居住人数,然后再统计第二单元,直到五个单元全部统计完成。此例中统计5个单元为外层循环,统计每个单元内的12户人家则为内层循环,即每统计一个单元都要访问12户人家。int sum=0,i,j;for(i=0;i5;i+)for(j=0;j12;j+)sum+=curCount;第38页/共60页39嵌套循环示例注意:1、i控制外层循环执行的次数,j控制内层循环执行的次数,不要试图用一个变量同时控制内层和外层循环,容易出错。2、有很多情况下内层循环变量的取值会与外层循环变量的当前值有关系。3、循环嵌套的重点是逐层分析,注意内层循环变量每次执行时的
26、初始状态和外层循环变量的当前值。例如:打印如下星形图案*第39页/共60页40#include Void main()Int i,j;For(i=0;i5;i+)For(j=0;ji;j+)Printf(“*”);Printf(“n”);I=0J-0,0J=0 输出1个*,然后输出换行I=1J-0,1J=0输出2个*,然后输出换行J=1I=2J-0,2J=0输出3个*,然后输出换行J=1J=2I=3J-0,3J=0输出4个*,然后输出换行J=1J=2J=3I=4J-0,4J=0输出5个*,然后输出换行J=1J=2J=3J=4第40页/共60页41嵌套循环示例例:求10到40之间的所有素数。在前
27、例中介绍了如何判断给定整数k是否素数的方法,即用循环考察k%i(i=2,3,k-1)若存在某个i使k%i为0,则k不是素数,否则k是素数。k是通过输入提供的。本例要求10到40之间的所有素数,可以在外层加一层循环,用于提供要考察的整数:k=10,11,39,40。即外层循环提供要考察的整数k,内层循环则判别k是否素数。第41页/共60页42#include void main()int k,flag=1,i;for(k=10;k=40;k+)for(i=2;ik,flag=1;i+)if(k%i =0)flag=0;if (flag=1)printf(“k 是素数!n”);elseprintf
28、(“k 不是素数!n”);第42页/共60页43嵌套循环示例p下面通过跟踪程序的运行,了解程序的执行流程及各变量值的变化情况。这种以具体数据代入程序跟踪运行的方法有助于理解程序中算法和思路。虽然效率低一些,却很实用。k=10:l=1,i=2 因为k%2=0,所以l=0(k不是素数)k=11:l=1,i=2,3,10 因为k%i!=0,所以l=1(k是素数)k=12:l=1,i=2 因为k%2=0,所以l=0(k不是素数)k=40:l=1,i=2 因为k%2=0,所以l=0(k不是素数)p所以输出:11 13 17 19 23 29 31 37p以上程序还可以改进:p素数中除了2以外,其它均为奇
29、数,因此,外层循环可以改为:for(k=11;k40;k+=2)p若自然数k是素数,则k不能被2,3,整除。所以内层循环可以改为:for(i=2;i=sqrt(k);i+)并在程序开头增加命令#include math.h。第43页/共60页44break语句和continue语句为了使程序设计更加灵活,能够方便的在从循环中退出或跳转,C语言提供了continue语句和break语句。while()continue;while()break;跳出整个循环继续下一次循环第44页/共60页45continue语句程序设计过程中,有时不希望结束循环,但要跳过当前的迭代,继续执行下一次循环。Conti
30、nue语句即可实现这样的功能。它的书写格式为:continue;这里,continue是系统关键字,不能再用于其它用途。下面是使用continue的一个例子:int day;for(day=1;day7;day+)If(day=4)Continue;其它语句块此例中,变量day从1变化到7执行“其它语句块”,当day的值为4时,会执行continue语句,跳过当前循环,即位于continue后的循环体语句均被跳过,直接进入day+,然后继续下一次循环第45页/共60页46问题描述:求整数1100的累加值,但要求跳过所有个位为3的数。#includevoid main()int i,sum=0;
31、for(i=1;i=100;i+)if(i%10=3)continue;sum+=i;printf(sum=%d n,sum);continue 语句示例内存内存isumnull0131循环执行到 i=13 78输出:sum=45701循环执行到 i=101 1014570第46页/共60页47break语句在选择结构中我们已经使用过了break语句,用于终止switch块中代码的执行,跳出switch结构,并继续执行switch结构后的第一行语句。Break语句在循环体内的作用和switch基本相同,用于跳出当前循环,转而执行其后面的语句。需要特殊注意的是,如果在多重循环中使用break语句
32、,只会跳出当前的循环,不会一下跳出多重循环。例如:int n,sum;for(;)scanf(“%d”,&n);if(n=-1)break;sum+=n;printf(“sum=%dn”,sum);第47页/共60页48break 语句跳出 for 循环for(;)printf(这将一直进行下去这将一直进行下去);i=getchar();if(i=X|i=x)break;跳出 while 循环while(1)if(x=10)break;跳出 do-while 循环do if(x=10)break;while(x 15);第48页/共60页49问题描述:统计从键盘输入的若干个字符中有效字符的个数
33、,以换行符作为输入结束。有效字符是指第一个空格符前面的字符,若输入字符中没有空格符,则有效字符为除了换行符之外的所有字符。#includevoid main()int count=0,ch;printf(n 请输入一行字符:);while(ch=getchar()!=n)if(ch=)break;count+;printf(n 共有%d 个有效字符。n,count);break 语句示例内存内存chcountH0_ 请输入一行字符:Hello world 共有 5 个 有效字符1循环执行 5 次5第49页/共60页50各种循环的比较 C语言中构成循环结构的有while、do_while和for
34、循环语句。下面对它们进行粗略比较。三种循环语句均可处理同一个问题。它们可以相互替代。例1、求10个数中的最大值。思路:从键盘上输入第一个数,并假定它是最大值存放在变量max中。以后每输入一个数便与max进行比较,若输入的数较大,则最大值是新输入的数,把它存放到max。当全部10个数输入完毕,最大值也确定了,即max中的值。第50页/共60页51各种循环的比较 for语句和while语句先判断循环控制条件,后执行循环体;而do_while语句是先执行循环体,后进行循环控制条件的判断。for语句和while语句可能一次也不执行循环体;而do_while语句至少执行一次循环体。for和while循环
35、属于“当型”循环;而do_while循环属于“直到型”循环。do_while语句和while语句多用于循环次数不定的情况,如例6-5。对于循环次数确定的情况,使用for语句更方便,如例6-7 do_while语句更适合于第一次循环肯定执行的场合。第51页/共60页52各种循环的比较例如,输入学生成绩,为了保证输入的成绩均在合理范围内,可以用do_while语句进行控制。(直到输入成绩数据合法为止)do scanf(%d,&n);while(n100|n100|n100|n100|n0;)scanf(%d,&n);显然,用for语句或while语句不如用do_while语句更自然。第52页/共6
36、0页53循环结构综合实例-1 某教师同时承担三个班级的同一门课程,每个班的人数不同,要求编写一个程序实现计算每个班级的平均分。分析:根据题意,需要依次输入三个班的学生成绩,每输入一个班后计算出平均分,故这里面应该有两层重复动作,一个是班级的重复(1-3),另一个是学生的重复(1-n),故需要使用双重循环。外层处理班级的循环次数一定,1-3,故可采用for循环,内层循环由于各个班级的学生人数不固定,需要采用特殊标记作为结束标志,建议采用while循环实现。具体流程图如下:第53页/共60页54开始变量i表示班级,初始为1;变量count记录每个班人数变量sum记录每个班总分数i=3计算每个班级的
37、平均分输出结果结束班级人数计数器清零班级总分数清零以-1作为输入结束标记score=-1读入一个成绩保存到score中读入一个成绩保存到score中班级总人数+1当前成绩加到总分数上输出平均成绩 总成绩/总人数是否是否第54页/共60页55Void main()int i,count=0;float sum,score;for(i=1;i3;i+)fflush(stdin);count=0;sum=0;printf(“Please Input No%d class scores:”,i);scanf(“%f”,&score);while(score!=-1)sum+=score;count+;
38、scanf(“%f”,&score);printf(“No%d class average score=%fn”,i,sum/count);第55页/共60页56开始变量i表示班级,初始为1;变量count记录每个班人数变量sum记录每个班总分数i=3计算每个班级的平均分输出结果结束班级人数计数器清零班级总分数清零以-1作为输入结束标记score=-1读入一个成绩保存到score中班级总人数+1当前成绩加到总分数上输出平均成绩 总成绩/总人数是否是否第56页/共60页57Void main()int i,count=0;float sum,score;for(i=1;i3;i+)fflush(
39、stdin);count=0;sum=0;printf(“Please Input No%d class scores:”,i);while(1)scanf(“%f”,&score);if(score!=-1)sum+=score;count+;elsebreak;printf(“No%d class average score=%fn”,i,sum/count);第57页/共60页58循环结构综合实例-2接收终端键盘输入的若干字符,以换行符n结束,统计其中元音字符的数量。分析:前面我们已经做过如何判断一个字符是否为元音,这里只需要对每个输入的字符都进行一次判断即可,故只需要将判断单个字符是否
40、为元音的那部分程序套入循环结构中即可。简单流程图如下:开始变量ch用于存储当前读入的字符,count存储统计结果ch=n结束是读入一个字符,保存到chch 元音?否是否count变量+1统计结束,输出统计结果第58页/共60页59Void main()int count=0;char ch;while(1)fflush(stdin);ch=getch();if (ch!=n)switch(ch)case a:count+;break;case e:count+;break;case i:count+;break;case o:count+;break;case u:count+;break;elsebreak;第59页/共60页60感谢您的欣赏!第60页/共60页