初中信息奥赛题库——编程基础之循环控制
C第6章循环控制

2 13 89 610 4181 28657 196418 1346269 9227465 63245986
3 21 144 987 6765 46368 317811 2178309 14930352 102334155
2022/12/21
第6章 循环控制
34
例6.5. 求100~200的素数.
表达式1、表达式3可以是逗号表达式,以使循环 变量值在修改时可以对其它变量赋值。
如
for (sum=0,i=1;i<=100;i++,i++)
相当于: sum=0;
for (i=1;i<=100;i=i+2)
2022/12/21
第6章 循环控制
20
表达式2可以是关系表达式,也可以是数值表达式 或字符表达式。只要值0.即执行循环体.
第6章 循环控制
16
思考:同FOR语句控制的循环的差异 (count)<-循环次数 循环体
(count)<-(count)-1
(count)=0?
2022/12/21
第6章 循环控制
17
表达式3亦可省略,但在循环体中须有语句修改循环变量; 以使表达式2在某一时刻为0而正常结束循环。
例: for (sum=0,i=1;i<=100;) { sum=sum+i; i++; }
C有三种循环语句,均可以相互嵌套:
while ( )
for (; ;)
{…
{…
while ( )
while ( ) { }
{…
do
} } 均为正确的嵌套。
{ } while ( ); … }
循环语句与循环控制

循环语句与循环控制Turbo C 2.0提供三种基本的循环语句: for语句、while语句和do-while语句。
一、循环语句(一)、for循环它的一般形式为:for(<初始化>;<条件表过式>;<增量>)语句;初始化总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一个关系表达式,它决定什么时候退出循环;增量定义循环控制变量每循环一次后按什么方式变化。
这三个部分之间用;分开。
例如:for(i=1;i<=10;i++)语句;上例中先给i赋初值1,判断i是否小于等于10,若是则执行语句,之后值增加1。
再重新判断,直到条件为假,即i>10时,结束循环。
注意:(1).for循环中语句可以为语句体,但要用{和}将参加循环的语句括起来。
(2).for循环中的初始化、条件表达式和增量都是选择项,即可以缺省,但;不能缺省。
省略了初始化,表示不对循环控制变量赋初值。
省略了条件表达式,则不做其它处理时便成为死循环。
省略了增量,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。
(3).for循环可以有多层嵌套。
例如:for(;;) 语句;for(i=1;;i+=2) 语句;for(j=5;;) 语句;这些for循环语句都是正确的。
main(){int i,j;printf(i j\n);for(i=0;i<2;i++)for(j=0;j<3;j++)printf(%d %d\n,i,j);}输出结果为:i j0 00 10 21 01 11 2用for循环求1+2+……+100的和:main(){int sn=0,i;for(i=1;i<=100;i++)sn+=i; /*1+2+……+100*/printf(%d\n,sn);}从程序可以看出,使用循环语句可以大大简化代码。
(二)、while循环它的一般形式为:while(条件)语句;while循环表示当条件为真时,便执行语句。
C 程序设计循环控制

<2> 如果表达式2省略,即不判断循环条件,循环无终止地进行 下去.也就是认为表达式2始终为真.见图6.7.
例如:
for<i=1; ;i++> sum=sum+i; 表达式1是一个赋值表达式,表达式2空缺.它相当于:
i=1; while<1> {sum=sum+1;
i++;} <3> 表达式3也可以省略,但此时程序设计者应另外
do
循环体语句
while <表达式>;
它是这样执行的:先执行一次指定的循环体 语句,然后判别表达式,当表达式的值为非零 <"真"> 时,返回重新执行循环体语句,如此反 复,直到表达式的值等于0为止,此时循环结束. 可以用图6.3表示其流程.请注意do while循
图6.3
例6.3用do while语句求∑nn1=0.01 先画出流程图,见图6.4.
因此熟练掌握选择结构和循环结构的概念及使用是程序 设计的最基本的要求.
<1> 用goto语句和if语句构成循环;
<2> 用while语句;
<3> 用do\|while语句;
<4> 用for语句.
在下面各节中将分别作介绍.
6.2 goto语句以及用goto语句构成循环
goto语句为无条件转向语句,它的一般形式为 goto语句标号;
〔5〕三个表达式都可省略,如:
for<;;> 语句
相当于
while<1>语句.
即不设初值,不判断条件<认为表达式2为真值>,循环 变量不增值.无终止地执行循环体.
信息学奥赛NOIP第4单元循环结构程序设计.ppt

高等教育出版社
信息学奥赛课课通(C++)
例1、用 do-while 语句实现输出一行 10 个“@”。
//p4-2-1 #include<cstdio> using namespace std; int main(){
高等教育出版社
信息学奥赛课课通(C++)
【样例输入】 5 5000 6077 【样例输出】 4
//p4-2-3 #include<iostream> using namespace std; int main(){
double r,m,y; int k = 0; cin >> r >> m >> y; do{
高等教育出版社
信息学奥赛课课通(C++)
例3、统计正数
【问题描述】 输入若干整数,以 0 结尾,统计其中有多少个正整数。 【输入格式】 一行若干整数,最后一个为 0。 【输出格式】 一行一个整数,表示输入的数据中正整数的个数。 【样例输入】 3 6 -3 2 0 【样例输出】 3
高等教育出版社
信息学奥赛课课通(C++)
//p4-3-1a #include<cstdio> using namespace std; int main(){
for(int i = 1; i <= 10; i++) printf( “ @ ” );
printf( “\n ” ); return 0; }
第六章 循环控制

当流程到达do后,立即执行循环体语 句,然后再对条件表达式进行测试。该 语句结构使循环至少执行一次。 同样,继续条件的不断变化很重要,否 则会导致死循环。
循环变量初始化
Yes 循环体改变 循环变量
继续条件
No
例如:
int i = 1, sum = 0; do {
语句标号用标识符表示,它的命名规则与变量名相同。
结构化程序设计方法主张限制使用goto语句,因为滥用goto语句将使 程序流程无规律、可读性差。但也不是绝对禁止使用goto语句。
100
例如以下程序求 n n 1
#include <iostream.h>
void main() {
int i=1,sum=0; loop:
循环体中应该有使循环趋向结束的语句。继续条件的不断变化很重要, 否则会导致死循环。
while循环中的继续条件是一个表达式,并没有更多的限定,所以,上 例可以在继续条件处放上一个逗号表达式,完成同样的功能: while(sum += i++, i<=100); 但是这种写法可读性较差。
6.4 do-while语句
for语句将循环体所用的控制放在循环顶部统一表示,因此显得更直观。 除此之外,还充分表现了其灵活性。
for (i=1; i<=100; i++) {
sum += i; }
(1)表达式1可以省略。此时应在for语句之前给循环变量赋初值。 i = 1; for (; i<= 100; i++) sum += i;
(6)表达式1,表达式2,表达式3都可以为任何表达式。如: for (sum=0; i<=100; i++) sum += i;
C语言循环控制练习题

C语言循环控制练习题1. 编写一个程序,输出1到100之间所有能被3整除但不能被5整除的数。
答案:c#includeint main{int i;for (i = 1; i <= 100; i++) {if (i % 3 == 0 && i % 5 != 0) {printf("%d ", i);}}return 0;}2. 编写一个程序,计算1到100之间所有奇数的和。
答案:c#includeint main{int i, sum = 0;for (i = 1; i <= 100; i += 2) {sum += i;}printf("奇数的和为:%d\n", sum);return 0;}3. 编写一个程序,输出九九乘法表。
答案:c#includeint main{int i, j;for (i = 1; i <= 9; i++) {for (j = 1; j <= i; j++) {printf("%d * %d = %d\t", j, i, j * i); }printf("\n");}return 0;}4. 编写一个程序,判断一个数是否为素数。
答案:c#includeint main{int num, i, isPrime = 1;printf("请输入一个正整数:");scanf("%d", &num);for (i = 2; i <= num / 2; i++) {if (num % i == 0) {isPrime = 0;break;}}if (isPrime) {printf("%d是素数\n", num);} else {printf("%d不是素数\n", num);}return 0;}5. 编写一个程序,计算一个数的阶乘。
初中信息技术循环结构

初中信息技术循环结构在初中信息技术的学习中,循环结构是一个非常重要的概念。
它就像是一个勤劳的小助手,能够帮助我们更高效地完成一些重复的任务。
循环结构是什么呢?简单来说,就是让计算机按照我们设定的规则,反复执行一段代码,直到满足特定的条件为止。
想象一下,你需要在一张纸上连续写100 个“我爱学习”,如果一个一个地写,那得多累啊!但如果我们告诉计算机“重复写‘我爱学习’,一共写 100 次”,这就是一个循环。
循环结构有两种常见的类型:for 循环和 while 循环。
先来说说 for 循环。
它就像是一个有着明确计划的执行者。
比如“for (int i = 0; i < 10; i++)”,这里面“int i =0”是给一个变量 i 赋初始值 0,“i <10”是设定循环的条件,也就是只要 i 小于 10 就继续循环,“i++”则是每次循环结束后 i 的变化,这里是每次加 1。
所以这个循环会从 i 等于 0 开始,每次循环 i 增加 1,直到 i 等于 9 结束,一共执行10 次。
再看看 while 循环。
它更像是一个等待条件满足的观察者。
比如“while (i <10)”,只要 i 小于 10,就会一直执行后面的代码。
但是,在 while 循环里,我们得自己在代码里面去改变 i 的值,不然就会陷入死循环,也就是一直不停地重复执行,计算机可就“累坏”啦。
循环结构在我们的生活中有很多实际的应用。
比如说,我们要计算1 到 100 所有整数的和。
如果不用循环,那得一个一个加,多麻烦!但有了循环就简单多了。
我们可以用一个变量 sum 来保存累加的结果,从 1 开始,每次循环都把当前的数字加到 sum 里,一直加到 100。
又比如,我们要打印出 10 行“”号组成的三角形。
通过循环,控制每行“”号的数量逐渐增加,就能轻松实现。
在编程中使用循环结构,还需要注意一些问题。
首先,一定要确保循环能够正常结束,不然就会出现前面说的死循环。
c语言循环语句和循环控制例题解析

一、循环控制(一)、break语句break语句通常用在循环语句和开关语句中。
当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则将成为一个死循环而无法退出。
break在switch中的用法已在前面介绍开关语句时的例子中碰到,这里不再举例。
当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起。
即满足条件时便跳出循环。
例如:int main(int argc, char *argv[]){int sn=0,i;for(i=1;i<=100;i++){if(i==51) break; /*如果i等于51,则跳出循环*/sn+=i; /*1+2+……+50*/}printf(%d\n,sn);}可以看出,最终的结果是1+2+……+50。
因为在i等于51的时候,就跳出循环了。
自己写写怎样在while和do--while循环中增加break语句。
注意:1. break语句对if-else的条件语句不起作用。
2. 在多层循环中,一个break语句只向外跳一层。
例如:int main(int argc, char *argv[]){int i,j;printf(i j\n);for(i=0;i<2;i++)for(j=0;j<3;j++){if(j==2) break;printf(%d %d\n,i,j);}}输出结果为:i j0 00 11 01 1当i==0,j==2时,执行break语句,跳出到外层的循环,i变为1。
(二)、continue语句continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。
continue语句只用在for、while、do-while等循环体中, 常与if条件语句一起使用,用来加速循环。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
01:求平均年龄描述: 班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位。
输入第一行有一个整数n(1<= n <= 100),表示学生的人数。
其后n行每行有1个整数,表示每个学生的年龄,取值为15到25。
输出输出一行,该行包含一个浮点数,为要求的平均年龄,保留到小数点后两位。
提示要输出浮点数、双精度数小数点后2位数字,可以用下面这种形式:printf("%.2f", num);02:均值描述: 给出一组样本数据,计算其均值。
输入输入有两行,第一行包含一个整数n(n小于100),代表样本容量;第二行包含n个绝对值不超过1000的浮点数,代表各个样本数据。
输出输出一行,包含一个浮点数,表示均值,精确到小数点后4位。
03:求整数的和与均值描述: 读入n(1 <= n <= 10000)个整数,求它们的和与均值。
输入输入第一行是一个整数n,表示有n个整数。
第2~n+1行每行包含1个整数。
每个整数的绝对值均不超过10000。
输出输出一行,先输出和,再输出平均值(保留到小数点后5位),两个数间用单个空格分隔。
04:最高的分数描述: 孙老师讲授的《计算概论》这门课期中考试刚刚结束,他想知道考试中取得的最高分数。
因为人数比较多,他觉得这件事情交给计算机来做比较方便。
你能帮孙老师解决这个问题吗?输入输入两行,第一行为整数n(1 <= n < 100),表示参加这次考试的人数.第二行是这n个学生的成绩,相邻两个数之间用单个空格隔开。
所有成绩均为0到100之间的整数。
输出输出一个整数,即最高的成绩。
05:整数序列的元素最大跨度值描述: 给定一个长度为n的非负整数序列,请计算序列的最大跨度值(最大跨度值 = 最大值减去最小值)。
输入一共2行,第一行为序列的个数n(1 <= n <= 1000),第二行为序列的n个不超过1000的非负整数,整数之间以一个空格分隔。
输出输出一行,表示序列的最大跨度值。
代码:program g;var n,i,max,min,x,f:integer;//e:integer;beginrepeatreadln(n)until((n>=1) and (n<=1000)) ;read(max);min:=max;for i:=1 to n-1 dobeginread(x);if x>max then max:=x;if x<min then min:=x;end;f:=max-min;write(f);//read(e);end.06:奥运奖牌计数描述: 2008年北京奥运会,A国的运动员参与了n天的决赛项目(1≤n≤17)。
现在要统计一下A国所获得的金、银、铜牌数目及总奖牌数。
输入输入n+1行,第1行是A国参与决赛项目的天数n,其后n行,每一行是该国某一天获得的金、银、铜牌数目,以一个空格分开。
输出输出1行,包括4个整数,为A国所获得的金、银、铜牌总数及总奖牌数,以一个空格分开。
program Project1;var n,suma,sumg,sumc,i,g,a,c,s:integer;x:integer;beginrepeatread(n)until ((n>=0) and (n<=17));sumg:=0;suma:=0;sumc:=0;for i:=1 to n dobeginread(g,a,c);sumg:=sumg+g;suma:=suma+a;sumc:=sumc+c;end;s:=sumg+suma+sumc;write(sumg,' ',suma,' ',sumc,' ',s);read(x);end.07:奇数求和描述: 计算非负整数 m 到 n(包括m 和 n )之间的所有奇数的和,其中,m 不大于 n,且n 不大于300。
例如 m=3, n=12, 其和则为:3+5+7+9+11=35。
输入两个数 m 和 n,两个数以一个空格分开,其中 0 <= m <= n <= 300 。
输出输出一行,包含一个整数,表示m 到 n(包括m 和 n )之间的所有奇数的和program Project1;var n,m,sum,i:integer;x:integer;beginrepeatread(m,n)until ((m<=n) and (m>=0) and (n<=300));sum:=0;if (m mod 2=1) thenbegini:=m;while(i<=n) dobeginsum:=sum +i;i:=i+2;end;end;i:=m+1;while(i<=n) dobeginsum:=sum +i;i:=i+2;end;write(sum);read(x);end.08:满足条件的数累加描述: 将正整数 m 和 n 之间(包括 m 和 n)能被 17 整除的数累加。
其中,0 < m < n < 1000。
输入一行,包含两个整数m和n,其间,以一个空格间隔。
输出输出一行,包行一个整数,表示累加的结果。
09:整数的个数描述: 给定k(1<k<100)个正整数,其中每个数都是大于等于1,小于等于10的数。
写程序计算给定的k个正整数中,1,5和10出现的次数。
输入输入有两行:第一行包含一个正整数k,第二行包含k个正整数,每两个正整数用一个空格分开。
输出输出有三行,第一行为1出现的次数,,第二行为5出现的次数,第三行为10出现的次数。
10:与指定数字相同的数的个数描述: 输出一个整数序列中与指定数字相同的数的个数。
输入输入包含2行:第1行为N和m,表示整数序列的长度(N <= 100)和指定的数字,中间用一个空格分开;第2行为N个整数,整数之间以一个空格分开。
输出输出为N个数中与m相同的数的个数。
11:乘方计算描述: 给出一个整数a和一个正整数n,求乘方a n。
输入一行,包含两个整数a和n。
-1000000 <= a <= 1000000,1 <= n <= 10000。
输出一个整数,即乘方结果。
题目保证最终结果的绝对值不超过1000000。
12:人口增长问题描述: 我国现有x亿人口,按照每年0.1%的增长速度,n年后将有多少人?输入一行,包含两个整数x和n,分别是人口基数和年数,以单个空格分隔。
输出输出最后的人口数,以亿为单位,保留到小数点后四位。
1 <= x <= 100, 1 <= n<= 100。
13:菲波那契数列描述: 菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。
给出一个正整数k,要求菲波那契数列中第k个数是多少。
输入输入一行,包含一个正整数k。
(1 <= k <= 46)输出输出一行,包含一个正整数,表示菲波那契数列中第k个数的大小15:鸡尾酒疗法描述: 鸡尾酒疗法,原指“高效抗逆转录病毒治疗”(HAART),由美籍华裔科学家何大一于1996年提出,是通过三种或三种以上的抗病毒药物联合使用来治疗艾滋病。
该疗法的应用可以减少单一用药产生的抗药性,最大限度地抑制病毒的复制,使被破坏的机体免疫功能部分甚至全部恢复,从而延缓病程进展,延长患者生命,提高生活质量。
人们在鸡尾酒疗法的基础上又提出了很多种改进的疗法。
为了验证这些治疗方法是否在疗效上比鸡尾酒疗法更好,可用通过临床对照实验的方式进行。
假设鸡尾酒疗法的有效率为x,新疗法的有效率为y,如果y-x大于5%,则效果更好,如果x-y大于5%,则效果更差,否则称为效果差不多。
下面给出n组临床对照实验,其中第一组采用鸡尾酒疗法,其他n-1组为各种不同的改进疗法。
请写程序判定各种改进疗法效果如何。
输入第一行为整数n( 1 < n <= 20);其余n行每行两个整数,第一个整数是临床实验的总病例数(小于等于10000),第二个疗效有效的病例数。
这n行数据中,第一行为鸡尾酒疗法的数据,其余各行为各种改进疗法的数据。
输出有n-1行输出,分别表示对应改进疗法的效果:如果效果更好,输出better;如果效果更差,输出worse;否则输出same16:救援描述: 救生船从大本营出发,营救若干屋顶上的人回到大本营,屋顶数目以及每个屋顶的坐标和人数都将由输入决定,求出所有人都到达大本营并登陆所用的时间。
在直角坐标系的原点是大本营,救生船每次从大本营出发,救了人之后将人送回大本营。
坐标系中的点代表屋顶,每个屋顶由其位置坐标和其上的人数表示。
救生船每次从大本营出发,以速度50 米/分钟驶向下一个屋顶,达到一个屋顶后,救下其上的所有人,每人上船1分钟,船原路返回,达到大本营,每人下船0.5 分钟。
假设原点与任意一个屋顶的连线不穿过其它屋顶。
输入第一行,一个整数,表示屋顶数n。
接下来依次有n 行输入,每一行上包含两个表示屋顶相对于大本营的平面坐标位置的实数(单位是米)、一个表示人数的整数,数之间以一个空格分开。
输出一行,救援需要的总时间,精确到分钟 (向上取整)。
17:球弹跳高度的计算描述: 一球从某一高度落下(整数,单位米),每次落地后反跳回原来高度的一半,再落下。
编程计算气球在第10次落地时,共经过多少米? 第10次反弹多高?输入输入一个整数h,表示球的初始高度。
输出输出包含两行:第1行:到球第10次落地时,一共经过的米数。
第2行:第10次弹跳的高度。
注意:结果可能是实数,结果用double类型保存。
提示:输出时不需要对精度特殊控制,用cout << ANSWER,或者printf("%g",ANSWER)即可。
18:角谷猜想描述: 所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。
如,假定初始整数为5,计算过程分别为16、8、4、2、1。
程序要求输入一个整数,将经过处理得到1的过程输出来。
输入一个正整数N(N <= 2,000,000)输出从输入整数到1的步骤,每一步为一行,每一部中描述计算过程。
最后一行输出"End"。
如果输入为1,直接输出"End"。
19:津津的储蓄计划描述: 津津的零花钱一直都是自己管理。
每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。
为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。