模块5循环结构程序设计电子课件 C语言程序设计案例教程.pptx
C语言程序设计案例教程模块5 循环结构程序设计任务描述假设学生成绩表如表4-1所示。编写程序,通过键盘输入所有学生的成绩score,通过选择结构语句的处理,输出相应的等级grade,分别统计及格人数c1和不及格人数c2,并输出。(1)设计循环语句,当输入负数时结束循环。(2)依次输入score,判断是哪个等级(grade)并输出,统计及格和不及格的人数。(3)输出及格和不及格人数。(1)如果已知学生的人数,在输入过程中可能输入错误的数据(如负数),同样需要以上处理,程序如何编写?(2)如果希望将总成绩score按从大到小的顺序排列,如何处理?模块5 循环结构程序设计任务目标(1)能够应用循环结构设计算法。(2)能够根据处理需要设计循环体、循环控制和设置循环初值。(3)培养软件开发必备的逻辑思维清晰、流程控制正确的基本素质。模块5 循环结构程序设计源代码展示#include main()float score;char grade;int n=0,n1=0;printf(“请输入学生的成绩:”);scanf(%f,&score);while(score=0)n+;模块5 循环结构程序设计源代码展示switch(int)(score/10.0)/*成绩score除以10然后取整*/case 10:case 9:grade=A;break;case 8:grade=B;break;case 7:case 6:grade=C;break;default:grade=D;printf(score=%.1f,grade=%cn,score,grade);/*输出score及对应的等级*/if(score=60)n1+;/*成绩及格则及格人数n1+1*/模块5 循环结构程序设计源代码展示printf(“请输入学生的成绩:”);scanf(%f,&score);printf(及格人数=%d,不及格人数=%dn,n1,n-n1);运行结果模块5 循环结构程序设计程序分析任务要求根据输入的学生成绩判断其等级并求及格、不及格人数,程序采用while循环,判断条件是score=0。等级处理采用switch语句,求及格、不及格人数需要计数,定义变量n计数总人数、n1计数及格人数,在循环体中统计对应的人数,使用n+、n1+分别实现。许多问题的求解归结为重复执行的操作。例如,输入全校学生的成绩,数值计算中的方程迭代求根,非数值计算中的对象遍历等。重复执行就是循环,重复工作是计算机特别擅长的工作之一。循环结构是结构化程序设计的3种基本结构之一,在程序设计中对于那些需要重复执行的操作利用循环结构处理既简单又方便。因此,熟练掌握循环结构的应用是程序设计最基本的要求。在C语言中有4种可以构成循环结构的语句,结构化程序设计方法主张限制使用goto语句,因此本模块主要介绍while、dowhile和for三种循环语句。5.1 while语句while语句是实现循环结构的常用语句之一,常用于实现“当型”循环。1.语法while语句的语法格式如下。while(表达式)语句序列;while是关键字,其中的表达式称为循环条件,语句序列称为循环体。图5-2while语句流程图当逻辑表达式为真(非0)时,重复执行循环体语句;当逻辑表达式为0时,终止循环,执行下一条语句。while语句的特点是先判断,后执行。其流程图如图5-2所示。使用while语句需要注意以下几点。5.1 while语句(1)while语句的特点是先计算表达式的值,然后根据表达式的值决定是否执行循环体中的语句。因此,如果表达式的值一开始就为假,那么循环体一次也不执行。(2)当循环体由多个语句组成时,必须用括起来,形成复合语句。(3)在循环体中应有使循环趋于结束的语句,以避免“死循环”的发生。5.1 while语句【例5-1】用while语句计算s=1+2+3+100。程序代码如下。#include main()int i,s;i=1;s=0;/*设循环初值*/while(i=100)/*循环终止判断*/s=s+i;/*循环体设计*/i=i+1;5.1 while语句printf(1+2+3+100=%dn,s);程序运行结果如下。1+2+3+100=50502.循环结构程序设计的关键(1)循环体的设计。遇到数列求和、求积的一类问题,一般可以考虑使用循环解决。累加:s=s+item;累乘:p=p*item;计数:c=c+1;(2)注意循环初值的设置。一般对于累加器常常设置为0,累乘器常常设置为1。注意循环控制变量初始、步长、终值设置。5.1 while语句s=0;i=1;while(i=100)s=s+i;i+;s=0;i=0;while(i100)i+;s=s+i;(3)设计特殊输入数据(远离正常数据)作为终止循环条件。循环体中要做重复的工作,同时应有使循环趋于结束的语句。【例5-2】求若干学生的某门课程的平均成绩,设置输入-1时终止循环。程序代码如下。#include main()int score,n=0;float sum=0,ave;printf(ninput scores:);5.1 while语句scanf(%d,&score);while(score!=-1)/*循环终止判断*/sum+=score;n+;scanf(%d,&score);ave=sum/n;printf(average score=%.1fn,ave);程序运行结果如下。input scores:88 76 94 87 91 68-15.1 while语句average score=84.0(4)设置某一项(趋于0)小于某一很小的数值或者满足什么条件时终止循环。【例5-3】编写程序,利用公式4=1-13+15-17+,求的近似值,直到最后一项的绝对值小于10-6为止。程序代码如下。#include#include main()int i=1,sign=1;float s=0,item=1,pi;while(fabs(item)=1e-6)5.1 while语句s=s+item;sign=-sign;i+=2;item=(float)sign/i;printf(pi=%fn,4*s);程序运行结果如下。pi=3.1415945.2 dowhile语句dowhile语句可以实现“直到型”循环,先无条件地执行循环体语句,再进行判断。直到条件为假,退出循环。dowhile语句的语法格式如下。do循环体while(表达式);执行循环体语句,当逻辑表达式为真(非0)时,重新执行循环体语句;当逻辑表达式为假(0)时,终止循环,执行下一条语句。特点是先执行,后判断。其程序流程图如图5-3所示。图5-3dowhile语句流程图有关dowhile语句的说明如下。(1)dowhile循环总是先执行一次循环体,然后求表达式的值,因此,无论5.2 dowhile语句表达式是否为真,循环体至少执行一次。(2)dowhile循环与while循环十分相似,它们的主要区别是:while循环先判断循环条件再执行循环体,循环体可能一次也不执行。dowhile循环先执行循环体,再判断循环条件,循环体至少执行一次。(3)循环体中应该有使循环趋于终止的语句。5.2 dowhile语句【例5-4】编写程序,求满足1+2+3+n1 000时n的最大值及累加和。程序代码如下。#include main()int n=0,s=0;/*设循环初值*/don=n+1;s=s+n;while(s1000);printf(n=%d,sum=%dn,n-1,s-n);程序运行结果如下。n=44,sum=9905.3 for语句for语句是实现循环最常用的语句。它不仅可以用于循环次数确定的情况,也可以用于循环次数不确定而只给出循环结束条件的情况。for语句的语法格式如下。for(表达式1;表达式2;表达式3)循环体for是关键字,其后有3个表达式,各个表达式用“;”分隔。3个表达式可以是任意的表达式,通常主要用于for循环控制。for循环执行过程如下。(1)计算表达式1。(2)计算表达式2,若其值为非0(循环条件成立),则转步骤(3)执行循环体;若其值为0(循环条件不成立),则转步骤(5)结束循环。(3)执行循环体。5.3 for语句(4)计算表达式3,然后转步骤(2)判断循环条件是否成立。(5)结束循环,执行for循环之后的语句。for循环的流程图如图5-4所示。关于for语句的几点说明如下。(1)表达式1或者循环初值可以放在语句之前,但分号不能省略。例如:for(i=1;i=100;i+)s=s+i;循环初值放在for语句之前实现如下。i=1;for(;i=100;i=i+1)s=s+i;5.3 for语句(2)如果省略表达式2,即不在表达式2的位置判断循环终止条件,循环无终止地进行,也就是认为表达式2始终为“真”,则应该在其他位置(如循环体)安排检测及退出循环的机制。(3)可以省略表达式3,但应该设法保证循环终止。例如:for(i=1;i=100;)s=s+i;i=i+1;(4)可以省略表达式1和表达式3,但应该设法保证循环终止。例如:i=1;for(;i=100;)s=s+i;i=i+1;(5)可以省略表达式1、2和3,但两个分号不能省,循环体无终止。例如:for(;)printf(“*”);循环将无限制地执行而形成无限循环(死循环)。5.3 for语句(6)表达式1和表达式3可以是逗号表达式。例如:for(s=0,i=1;i=100;s+=i,i+)从上面的说明可以看出,C语言的for语句功能强大,使用灵活,可以把循环体和一些与循环控制无关的操作也都作为表达式出现,程序短小简洁。但是,如果过分使用这个特点会使for语句显得杂乱,降低程序可读性。建议不要把与循环控制无关的内容放在for语句的3个表达式中,养成程序设计的良好风格。【例5-5】从键盘输入5位学生的成绩,编程计算并输出平均分、最高分和最低分。程序代码如下。#include main()int i;5.3 for语句float score,max=-1,min=101,sum=0;for(i=0;imax)max=score;if(scoremin)min=score;printf(average=%.1fmax=%.1fmin=%.1f n,sum/5,max,min);程序运行结果如下。5.3 for语句请输入第1位同学的成绩:88请输入第2位同学的成绩:90请输入第3位同学的成绩:80请输入第4位同学的成绩:78请输入第5位同学的成绩:66average=80.4max=90.0min=66.0【例5 6】计算n!。程序代码如下。#include main()float fact;5.3 for语句int i,n;fact=1.0;scanf(%d,&n);for(i=1;i=n;i+)fact*=i;printf(%d!=%.0fn,n,fact);程序运行结果如下。6!=720程序中fact定义为float,若定义为int或long,则输入的n值大一点儿时,就得不到理想的结果。另外,累乘变量初始化为1(fact=1.0)。5.4 循 环 嵌 套一个循环内又包含另一个循环,称为循环的嵌套。内循环中还可以嵌套循环。按照循环的嵌套次数,可有二重循环、三重循环等。一般将处于内部的循环称为内循环,处于外部的循环称为外循环。3种循环语句for语句、while语句和dowhile语句可以相互嵌套。(1)一个循环体必须完整地嵌套在另一个循环体内,不能出现交叉现象。(2)多层循环的执行顺序是:最内层先执行,由内向外逐步展开。(3)3种循环语句构成的循环可以相互嵌套。(4)并列循环允许使用相同的循环变量,但嵌套循环不允许。(5)嵌套的循环要采用缩进格式书写,使程序层次分明,便于阅读和调试。【例5-7】打印九九乘法表。1*1=1 1*2=1 1*3=3 1*9=92*1=2 2*2=4 2*3=6 2*9=185.4 循 环 嵌 套9*1=9 9*2=189*3=279*9=81程序代码如下。#include main()int i,j;for(i=1;i=9;i+)for(j=1;j=9;j+)printf(%3d*%d=%2d,i,j,i*j);printf(n);5.4 循 环 嵌 套程序运行结果如图5-5所示。5.4 循 环 嵌 套【例5-8】打印以下图案。*程序代码如下。#include main()int i,j;for(i=1;i=5;i+)/*控制行数*/5.4 循 环 嵌 套for(j=1;j=20-i;j+)/*控制每行开始空格个数*/printf();for(j=1;j=2*i-1;j+)/*控制每行*的个数*/printf(*);printf(n);/*每输出一行后换行*/5.5 break语句和continue语句在循环程序执行过程中,有时需要终止循环。C语言中提供了两个循环中断控制语句,即break语句和continue语句。break语句跳出本层循环不再执行,continue语句是结束本次循环,下次循环可以继续执行。多层循环可以设置一个标志变量,逐层跳出。5.5.1 break语句break语句用于跳出switch语句或跳出本层循环体,其语法格式如下。break;(1)break语句只用于循环语句或switch语句中。在循环语句中,break语句常常和if语句一起使用,表示当条件满足时,立即终止循环。注意break不是跳出if语句,而是跳出循环结构。(2)循环语句可以嵌套使用,break语句只能跳出(终止)其所在的循环,而不能跳出多层循环。要实现跳出多层循环可以设置一个标志变量,控制逐层跳出。【例5-9】编写程序,判断从键盘输入的自然数是否为素数(质数)。需要说明如下几点。(1)所谓素数,就是只能被1和它自身整除的大于1的整数。5.5.1 break语句(2)要判断n是否为素数,就要用2、3、n-1分别除n,如果都不能被整除,则n就是素数,正常退出循环;如果其中某个数被n整除,则n不是素数,需要退出循环。实际上要判断n是不是素数,只要用2、3、n 除n即可。程序代码如下。#include#include main()int i,n,k;printf(Input a number(1):);5.5.1 break语句scanf(%d,&n);k=sqrt(n);for(i=2;ik)printf(%d is a prime number.n,n);else printf(%d is not a prime number.n,n);程序运行结果如下。Input a number(1):175.5.1 break语句17 is a prime number.程序说明如下。(1)程序中的k值可以是n-1、n/2或n,只有当k为n时判断的次数最少,程序最优化。(2)经过分析可知,在for循环中只要某次“n%i=0”,则判定n不是素数从而跳出循环。但在输出这个数是不是素数时还要比较i与k的值,如果判断条件写错了就会前功尽弃。因此采用一个标识变量会使程序更明晰,这也是程序设计过程中常用的技巧。采用标识变量后的程序代码如下。#include#include 5.5.1 break语句main()int i,n,k,flag=1;printf(Input a number(1):);scanf(%d,&n);k=sqrt(n);for(i=2;i=k;i+)if(n%i=0)flag=0;break;5.5.1 break语句if(flag)printf(%d is a prime number.n,n);else printf(%d is not a prime number.n,n);5.5.2 continue语句continue语句的语法格式如下。continue;continue语句用于结束本次循环,即跳出本层循环中余下的尚未执行的语句,接着执行下一次循环条件的判定。执行continue语句并没有使整个循环终止,注意其与break的不同。在while和dowhile循环中,continue语句使流程直接跳到循环控制条件的测试部分,然后决定循环是否继续执行。在for循环中,遇到continue后,跳过循环体中余下的语句,而计算for语句中表达式3的值,然后测试表达式2的条件,最后根据表达式2的值来决定for循环是否执行。5.5.2 continue语句【例5-10】把1030不能被3整除的数输出。程序代码如下。#include main()int n;for(n=10;n=30;n+)if(n%3=0)continue;printf(%d,n);5.5.2 continue语句程序运行结果如下。10 11 13 14 16 17 19 20 22 23 25 26 28 29当n能被3整除时,执行continue语句,结束本次循环(跳过printf函数语句),只有n不能被3整除时才执行printf函数。当然,循环体改用下面一个语句处理更简洁。if(n%3!=0)printf(%d,n);5.6 技 能 训 练循环结构是程序设计中非常重要的内容,应该熟练掌握。通过本模块的学习,应该理解循环语句的内部执行机理,熟练掌握for语句、while语句、dowhile语句的使用。在C语言中,3种循环结构都可以用来处理同一个问题,但在具体使用时存在一些细微的差别,不能说哪种结构更优越。具体使用哪一种语句依赖于程序的可读性和程序设计者个人程序设计的风格。应当尽量选择恰当的循环结构,使程序更加容易理解。对计数型的循环或确切知道循环次数的循环,用for循环比较合适;对其他不确定循环次数的循环(如链表操作),许多程序设计者喜欢用while或dowhile循环。5.6 技 能 训 练从前面的实例中我们可以看到,有些数学问题的思路基本上有一定的模式,所以对于有些问题的处理思路有必要“死记硬背”。另外,编写能够运行的程序容易,但编写效率高的程序还是需要多动脑筋,一定要先理顺解决问题的步骤及编程思路,这就要求多写多练,养成处理问题的习惯思维。【例5-11】编写程序,将1100中个位数是6的数据输出。很多初学者会习惯上这样写:for(i=1;i=100;i+)if(i%10=6)5.6 技 能 训 练printf(%5d,i);请与下面的程序比较,哪个程序的执行效率高(循环次数少)?程序代码如下。#include main()int i,k;for(i=0;i10;i+)5.6 技 能 训 练k=i*10+6;printf(%4d,k);程序运行结果如下。6162636465666768696【例5-12】从键盘上连续输入字符,统计其中大写字母的个数,直到输入换行符结束。程序代码如下。#include 5.6 技 能 训 练main()char ch;int n=0;while(ch=getchar())!=n)if(ch=A&ch=Z)n+;printf(A-Z:%dn,n);5.6 技 能 训 练程序运行结果如下。How are you?OK A-Z:3【例5-13】模拟实现小学数学加法运算。随机产生10个两位数加法题,根据回答对错计分(每对一题得10分)。程序代码如下。#include#include main()5.6 技 能 训 练int i,a,b,c,n=0;srand(time(0);/*保证每次执行的数据不一样*/for(i=1;i=10;i+)a=rand()%90+10;b=rand()%90+10;printf(%d+%d=,a,b);scanf(%d,&c);if(a+b=c)5.6 技 能 训 练printf(正确,请继续n);n+;else printf(错了,请继续n);printf(您本次得分为:%dn,n*10);程序运行结果如图5-6所示。5.6 技 能 训 练【例5-14】输入5位学生6门课程成绩,分别计算并输出每位学生6门课程成绩的平均分。本题需要使用二重循环。外循环控制学生人数,内循环控制各门成绩。内循环用来输入某位学生的6门课成绩,并进行累加。程序代码如下。#include main()int i,j;float score,sum,ave;5.6 技 能 训 练for(i=1;i=5;i+)sum=0;printf(请输入第%d位学生的6门课成绩:,i);for(j=1;j=6;j+)scanf(%f,&score);sum+=score;ave=sum/6;5.6 技 能 训 练printf(NO.%d average=%.1fn,i,ave);程序运行结果如图5-7所示。5.6 技 能 训 练【例5-15】用40元买苹果、梨和西瓜,各个品种都要,总数为100个。假设已知苹果0.4元一个,梨0.2元一个,西瓜4.0元一个,问各种水果可以买多少个。请输出所有可能的方案。用穷举法解决这个实际问题。依题意,西瓜最多可以买9个,苹果最多可以买89个,因总和最多为100个,故梨的个数自然就可以算出来了。程序代码如下。#include main()5.6 技 能 训 练int i,j,k;for(i=1;i=9;i+)for(j=1;j=89;j+)k=100-i-j;if(40*i+4*j+2*k=400)printf(i=%d,j=%d,k=%dn,i,j,k);5.6 技 能 训 练程序运行结果如下。i=1,j=81,k=18i=2,j=62,k=36i=3,j=43,k=54i=4,j=24,k=72i=5,j=5,k=90等级考试重点及真题解析本模块主要考查循环结构设计方法,其中包括for、while、dowhile语句的使用,以及continue和break循环控制语句的使用。循环结构程序属于3种基本的程序设计方法之一,其特点是在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言提供的循环语句可以组成各种不同形式的循环结构。通过对历年考试内容的分析,本模块属于考核的重中之重,在考试中所占分值很高,考核形式也多种多样。一、重点、难点解析等级考试重点及真题解析1.while语句对while语句的几点说明如下。(1)在while循环体内允许空语句。(2)可以有多层循环嵌套。(3)循环体是多条语句时,必须用“”和“”括起来构成复合语句。(4)while语句中的表达式一般是关系表达式或逻辑表达式,只要表达式的值为真(非0),即可继续循环;应该避免非人为的死循环。等级考试重点及真题解析2.break语句和continue语句break语句有两个用途。(1)在switch语句中用来使流程跳出switch结构。(2)用在循环体内,迫使所在循环立即终止,即跳出所在循环体。而continue语句只能用于3种循环语句中,其作用是:不执行循环体中本语句之后的语句,重新判断循环控制的条件,继续下一轮循环体的执行。二、真题解析1.执行下面程序段的结果是()。2017年9月等级考试重点及真题解析int x=23;doprintf(%2d,x-);while(!x);A.打印出321B.打印出23C.不打印任何内容D.陷入死循环 第一次循环输出23且x值为22,判断条件!22为假,终止循环,答案为B。2.以下的for循环()。2017年4月for(x=0,y=0;(y!=123)&(x4);x+);等级考试重点及真题解析A.是无限循环B.循环次数不定C.执行4次D.执行3次 for循环的终止判断条件是“(y!=123)&(x4)”。因为y!=123总成立,只看后面的条件“x4”即可,当x累加到4时条件不成立终止循环。所以答案为C。3.C语言中()。2017年4月A.不能使用dowhile语句构成的循环B.dowhile语句构成的循环必须用break语句才能退出C.dowhile语句构成的循环,当while语句中的表达式值为非零时结束循环等级考试重点及真题解析D.dowhile语句构成的循环,当while语句中的表达式值为零时结束循环 可以使用dowhile语句构成循环,所以A错误,dowhile语句当条件表达式的值为零时结束循环,所以B、C错误,答案为D。4.以下程序的输出结果是()。2017年4月#include main()int i;for(i=1;i=5;i+)等级考试重点及真题解析if(i%2)printf(*);elsecontinue;printf(#);printf(n);A.*#*#*#B.#*#*#*C.*#*#D.#*#*等级考试重点及真题解析第一次循环输出*#,第二次循环执行continue,第三次循环输出*#,第四次循环执行continue,第五次循环输出*#,最后输出,所以答案为A。5.设x和y均为int型变量,则执行下面的循环后,y值为()。2014年9月for(y=1,x=1;y=10)break;if(x%2=1)x+=5;等级考试重点及真题解析continue;x-=3;A.2B.4C.6 D.8 第1次循环,满足“x%2=1”,执行x+=5后,x=6,执行continue,y+后值为2,第2次循环,因为610,且6%2=0,执行x-=3,使x=3。第3次循环,y+后值为3,310,3%2=1,执行x+=5后x=8,执行continue,y+后值为4,第4次循环,因为810,且8%2=0,执行x-=3,使x=5。第5次循环,y+后值为5,等级考试重点及真题解析5=10,执行break跳出循环。所以答案为C。6.有以下程序:#include main()int c;while(c=getchar())!=n)等级考试重点及真题解析switch(c-2)case 0:case 1:putchar(c+4);case 2:putchar(c+4);break;case 3:putchar(c+3);case 4:putchar(c+2);break;从第一列开始输入以下数据,代表一个回车符。2743程序的输出结果是()。2017年4月 等级考试重点及真题解析A.66877B.668966C.6677877D.6688766 第1次循环,读2,条件c-2=0,case 0后没有语句,执行case 1后面的putchar(c+4),输出6,继续执行case 2后的putchar(c+4),输出6,遇到break跳出switch;第2次循环,读7,条件c-2=5,跳出switch;第3次循环,读4,条件c-2=2,执行case 2后的语句putchar(c+4),输出8,遇到break跳出switch;第4次循环,读3,条件c-2=1,执行case 1后面的putchar(c+4),输出7,继续执行case 2后的putchar(c+4),输出7,遇到break跳出switch;所以输出结果为66877,答案为A。7.下面的程序()。2016年9月等级考试重点及真题解析main()int x=3;doprintf(%dn,x-=2);while(!(-x);A.输出的是1B.输出的是1和-2C.输出的是3和0D.是死循环 第1次循环,执行x-=2,使x=1,输出1,执行-x,使x=0,循环等级考试重点及真题解析条件“!(-x)”为真;第2次循环,执行x-=2,使x=-2,输出-2,执行-x,使x=-3,循环条件“!(-x)”为假,终止循环。所以答案为B。8.下面程序输出的是()。2016年9月A.741B.852C.963D.875421main()int y=9;for(;y0;y-)if(y%3=0)等级考试重点及真题解析printf(%d,-y);continue;第1次循环y=9,9%3=0,执行y,y=8,输出8,执行continue,y-,第2次循环y=7,7%3=1,执行y-,第3次循环,y=6,6%3=0,执行y,y=5,输出5,执行continue,y-,第4次循环y=4,4%3=1,执行y-,第5次循环,y=3,3%3=0,执行-y,y=2,输出2,执行continue,y-,第6次循环y=1,1%3=1,执行y-,y=0跳出循环。所以答案为B。9.若x是int型变量,且有下面的程序段:等级考试重点及真题解析for(x=3;x6;x+)printf(x%2)?(*%d):(#%dn),x);上面程序段的输出结果是()。2016年4月A.*3B.#3C.#3D.*3#4#4*4*4#5*5*5#5 根据条件表达式,当x为奇数时输出,如“*3”且不换行;x为偶数时输出,如“#4”并换行。所以答案为D。10.请读程序段:#include main()等级考试重点及真题解析int a,b;for(a=1,b=1;a=20)break;if(b%3=1)b+=3;continue;等级考试重点及真题解析b-=5;printf(%dn,a);上面程序的输出结果是()。2016年4月A.7B.8C.9D.10 程序输出的结果为循环的次数。第1次循环,条件1%3=1,执行b+=3,b=4,continue;第2次循环,条件4%3=1,执行b+=3,b=7,continue;第3次循环,条件7%3=1,执行b+=3,等级考试重点及真题解析b=10,continue;第4次循环,条件10%3=1,执行b+=3,b=13,continue;以此类推,循环8次,答案为B。11.假定a和b为int型变量,则执行以下语句后b的值为()。2014年9月a=1;b=10;dob-=a;a+;while(b-0);等级考试重点及真题解析A.9B.-2C.-1 D.8 第1次循环,执行b-=a,b=9,a+后a=2,因为9不小于0,所以终止循环,且b-,使b=8,所以答案为D。12.以下程序的输出结果是()。2013年9月A.10 1 9 2B.9 8 7 6C.10 9 9 0D.10 10 9 1main()int x=10,y=10,i;for(i=0;x8;y=+i)printf(%d%d,x-,y);因为108,执行第1次循环,输出10 10,且x使x=9;执行y=+i,使 y=1,因为98,执行第2次循环,输出9 1,且x使x=8;执行y=+i,使 y=2,但8不大于8,所以终止循环。所以答案为D。1.有以下程序。main()int i=0;等级考试重点及真题解析思考与练习while(i10)if(i1)continue;if(i=5)break;i+;while语句的执行次数是()。A.1B.10C.6D.不能确定次数2.有以下程序段。思考与练习int i,j,m=0;for(i=1;i=5;i+=4)for(j=3;j=19;j+=4)m+;printf(%dn,m);程序段的输出结果是()。A.12B.15C.10D.253.若i和k都是int型变量,有以下for语句。for(i=0,k=-1;k=1;k+)printf(*n);下面关于语句执行情况的叙述中正确的是()。思考与练习A.循环体执行两次B.循环体执行一次C.循环体一次也不执行D.构成无限循环4.有以下程序。main()int i,sum;for(i=1;i6;i+)sum+=sum;printf(%dn,sum);思考与练习程序的输出结果是()。A.15B.14C.不确定D.05.下列for语句的执行次数是()。for(i=0,j=0;!j&i=5;i+)j+;A.5B.6C.1D.无限次6.有以下程序。main()char b,c;int i;b=a;c=A;思考与练习for(i=0;i6;i+)if(i%2)putchar(i+b);elseputchar(i+c);程序运行后的输出结果是()。A.ABCDEFB.AbCdEfC.aBcDeFD.abcdef思考与练习7.有以下程序。main()int c=0,k;for(k=1;k3;k+)switch(k)default:c+=k;case 2:c+;break;case 4:c+=2;break;思考与练习printf(%dn,c);程序运行后的输出结果是()。A.3B.5C.7D.98.有以下程序。main()int n=2,k=0;while(k+&n+2);printf(%d%dn,k,n);思考与练习程序运行后的输出结果是()。A.02B.13C.57D.129.有以下程序。main()int s;scanf(%d,&s);while(s0)思考与练习switch(s)case 1:printf(%d,s+5);case 2:printf(%d,s+4);break;case 3:printf(%d,s+3);default:printf(%d,s+1);break;scanf(%d,&s);运行时,若输入1 2 3 4 5 0,则输出结果是()。思考与练习A.6566456B.66656C.66666D.666665610.有以下程序。#include main()int i=5;doif(i%3=1)if(i%5=2)printf(*%d,i);思考与练习break;i+;while(i!=0);程序的运行结果是()。A.*7B.*3*5C.*5D.*2*6二、编程题1.编写程序,求1-3+5-7+-99+101的值。2.输出100200中所有的素数,要求10个数据为一行输出。思考与练习3.计算10位同学成绩平均分(判断输入的成绩是否为0100,若输入错误,给出相应的提示,重新输入)。4.编写程序,求e的值。e1+11!+12!+13!+1n!。(1)用for循环,计算前30项。(2)用while循环,要求直至最后一项的值小于10-6。5.小明有5本新书,要借给A、B、C三位小朋友,每人每次只能借到一本,共有多少种不同的结束方案,请列出每种具体的借书方案。6.输出斐波那契数列1、1、2、3、5、8、13、前25项,要求每行输出5项。思考与练习Thank you