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

合集下载

编程技能训练与等级考试辅导:循环控制

编程技能训练与等级考试辅导:循环控制

break语句用在循环中,跳出break所在的最内层 循环。
while(………){ while(………){ for(…………….){ … break; … } … }
}
结束本次循环(continue所在的最内层循环),即跳过 循环体中尚未执行的语句。 while(………){ while(………){ for(…………….){ … continue; … } … } }
请猜测一个0~100之间的数字: 输入你猜的数字:40 你猜的数字太小了!
输入你猜的数字:50 你猜的数字太大了!
输入你猜的数字:45 你猜的数字太大了!
输入你猜的数字:43 是的,恭喜你用了 4 次猜对。那个数字就是:43
连续给出五道两位数的减法练习程序,练习者输入 答案。如果答对,给出“你答对了”的提示信息, 如果答错给出“你答错了,正确答案是。。”的提 示信息,并且要求记录答对题的数目。完成五题练 习后,要求给出完成练习的时间,及全部5道题及 答题情况显示出来。(SubtractionQuiz.java)
x1: for (int i = 0; i < 5; i++) {
System.out.println("in I loop!");
for (int j = 0; j < 5 ; j++) {
if (j == 3) { continue x1;
}
跳回x1所示循环的起始位置, 开始下一次循环
System.out.println("i=" + i + " j=" + j);
◦ while前测型循环,do-while是后测型循环 ◦ While循环的循环体很可能0循环,但 do-while循

15编程基础之循环控制(39题)

15编程基础之循环控制(39题)

注意:结果可能是实数,结果用 double 类型保存。 提示:输出时不需要对精度特殊控制,用 cout << ANSWER,或者 printf("%g", ANSWER)即可。
样例输入
20
样例输出
59.9219 0.0195313
18:角谷猜想
• 查看
Hale Waihona Puke • 提交 • 统计 • 提问总时间限制: 1000ms
输出
一个整数,即乘方结果。题目保证最终结果的绝对值不超过 1000000。
样例输入
23
样例输出
8
12:人口增长问题
• 查看
• 提交 • 统计 • 提问
总时间限制: 1000ms
内存限制: 65536kB
描述
我国现有 x 亿人口,按照每年 0.1%的增长速度,n 年后将有多少人?
输入
一行,包含两个整数 x 和 n,分别是人口基数和年数,以单个空格分隔。
输入
输入 n+1 行,第 1 行是 A 国参与决赛项目的天数 n,其后 n 行,每一行是该国某一 天获得的金、银、铜牌数目,以一个空格分开。
输出
输出 1 行,包括 4 个整数,为 A 国所获得的金、银、铜牌总数及总奖牌数,以一个 空格分开。
样例输入
3 103 310 030
样例输出
4 4 3 11
07:奇数求和
在直角坐标系的原点是大本营,救生船每次从大本营出发,救了人之后将人送回大本 营。坐标系中的点代表屋顶,每个屋顶由其位置坐标和其上的人数表 示。救生船每 次从大本营出发,以速度 50 米/分钟驶向下一个屋顶,达到一个屋顶后,救下其上 的所有人,每人上船 1 分钟,船原路返回,达到大本营,每人下船 0.5 分钟。假设 原点与任意一个屋顶的连线不穿过其它屋顶。

顺序、选择和循环控制结构——循环结构

顺序、选择和循环控制结构——循环结构

顺序、选择和循环控制结构——循环结构一、选择题1. 下列说法不正确的是( )A.For ...Next 语句适合于循环次数容易确定的情况。

B.在For n=1 to 20 step 2中,n是循环控制变量,setp 表示步长为2.C.S=1+2+3+...+100 可以用For语句来实现。

D.For n=20 to 1 step -1是错误的。

答案:D2. 执行以下程序段dim x as integer,i as integerx=0for i=5 to 1 step -2x=x+inext i后,x的值为( )A.7B.8C.9D.10答案:C3. 算法流程图如下图所示,其输出结果是( )A.126B.127C.128D.129答案:B解析:考察for语句循语句4. 以下程序代码运行后,s的结果是( ) s=0for i=1 to 10s=s+inext iA.55B.50C.10D.无法确定答案:A5. 阅读程序Private Sub form_click()a = 0For j = 1 To 15a = a + j Mod 3Next jPrint aEnd Sub程序运行后,单击窗体,则输出结果是( )A.105B.1C.120D.15答案:D解析:变量j从1到15进行循环对3求余,并将所有余数累加,由于余数只有三种可能:0、1、2,三个数循环相加5次,最后可算出总和为15。

顺序、选择和循环控制结构——循环结构一、选择题1. For…Next循环结构中step用来控制( )A.循环变量B.循环变量初值C.循环变量终值D.循环变量增量答案:D2. For…Next循环结构中循环变量初值大于终值时,步长为()A.负数B.非负数C.正整数D.正数答案:A3. 下面程序的循环次数是( )for j=8 to 35 step 3print jA.10B.9C.27D.28答案:A解析:考察for语句循环次数的判断4. For…Next中循环变量初值与终值间使用的关键字是( )A.InB.ToC.gotoD.private答案:B5. 李明同学想通过编程求“1+3+5+……+999”的和,他应选择程序基本结构中的( )A.顺序结构B.分支结构C.选择结构D.循环结构答案:D顺序、选择和循环控制结构——循环结构一、选择题1. 下列说法不正确的是( )A.For ...Next 语句适合于循环次数容易确定的情况。

信息学奥赛中级班总复习题

信息学奥赛中级班总复习题

条语句地空模板路径:时间地控制个小时个题目,或者个小时个题目.环境笔,草稿纸,计算机(不能上网地!)循环结构地程序设计循环语句:如果希望重复执行一组语句,而且重复地次数事先是确定地,而不依赖于循环中语句地运行结果.文档收集自网络,仅用于个人学习循环语句:不知道重复地次数,只知道满足某条件要执行或不执行,所以布尔表达式所含变量在循环语句中一定要有更改,否则变死循环.文档收集自网络,仅用于个人学习循环语句数组[] 前移后退位置关系:[] 上一行下一行前一列后一列主对角线:对称关系[] []上三角< 下三角>次对角线:对称关系[] []上三角< 下三角>排序,一定要滚瓜烂熟文档收集自网络,仅用于个人学习计算…之和***···*·········键入一个自然数,求这个自然数地所有约数(包括和本身)之和编程找出四位整数中满足下述关系地数:()*()输出之间地所有奇数输入若干个字符(以‘’作为结束),计算输入地字符串字母‘’或‘’出现地次数求输入地一个整数地各位数字之和求两个自然数,地最小公倍数从个数中挑选出最大地数求中地水仙花数.什么是水仙花数呢?若三位数,满足:,则成为为水仙花数.如,,所以是水仙花数.文档收集自网络,仅用于个人学习请编程输出图形(以前上课时候涉及到地所有图形)求出之间地所有质数(素数)求两个自然数和地最大公约数已知数列地前几个数分别为,,,,,,,....,编程求此数列地前项文档收集自网络,仅用于个人学习按照顺序输入个数据,以逆序方式输出将数组中第一个元素移到数组末尾,其余数据依次往前平移一个位置.对于数组,假设它地所有元素师按照递增顺序存放地.现在输入一个,如果存在于数组中,则要把元素删除;否则将插在相应地位置,保持数值地所有元素仍然递增.文档收集自网络,仅用于个人学习从键盘输入个数,将它们按照从小到大地顺序存储并输出..读入个数,输出偶数项及它们地和;输出奇数项及它们地平均数..读入个数,输出其中地最大数及其位置号..有一数组(设有个),其排列顺序如下:,,,,,,,,,,,,,,,.编一程序交换这组数中任意指定地两段不重合数据.文档收集自网络,仅用于个人学习.给定一串整数数列,求出所有地递增和递减子序列地数目.如数列,,,,,,,,可分为(,),(,,),(,,),(,),(,,)个子序列,答案就是.我们称,,,为转折元素.文档收集自网络,仅用于个人学习.将这个数字分为三组(每个数字只能使用一次),分别组成三个三位数,且这三个三位数地值构成为::地比例,试求出所有满足条件地三个三位数.文档收集自网络,仅用于个人学习.设数组是一个有个元素地整数数组,从中找出最大和地子序列..已知数组中含有个整数元素,求中有多少个最大数?多少个次大数?....多少个互不相同地数?.打印出以内以二进制和十进制正读和反读都一样地整数.读入个正整数,将其按从小到大地顺序排列,输出每个数出现地次数及其在原序列中地位置..约瑟夫问题.个人围成一圈,从第一个人开始报数,数到地人出圈.再由下一个开始报数,数到地人出圈,....依次出圈地为、、、、、、、.文档收集自网络,仅用于个人学习.多项式地和.对于一个一元多项式,可以表示为:···,可以约定,····从大到小排列,且,···均不为.求任意两个多项式地和.输出时只需打印、序列值即可.如输出格式为:文档收集自网络,仅用于个人学习多项式地输入可以模仿以上格式..回文算术任给一个三位数(进制),算出与之和.若该和数不是回文数(即从左向右读与从右向左读是同一数,如),再按上述方法求和.以此类推,直到得到回文形式地和数或者和数位数已超过位时中止计算.文档收集自网络,仅用于个人学习.找马鞍数求一个*数阵中地马鞍数,输出它地位置.所谓马鞍数,是指在行赏最小而在列上最大地数.如下为一个地例子:文档收集自网络,仅用于个人学习则第一行第一列个地数就是马鞍数.思考:马鞍数一定有吗?是唯一地吗?.数学黑洞已知:一个任意地四位正整数.将数字重新组合成一个最大地数和最小地数相减,重复这个过程,最多七步,必得.将永远出不来.求证:所有四位数数字(全相同地除外),均能得到.输出掉进黑洞地步数.文档收集自网络,仅用于个人学习.做一个加法器完成以内地加法,两个加数间用“”连接,可以连加,回车表示式子输入完成;“”表示结束运算,退出加法器文档收集自网络,仅用于个人学习. 将用逗号隔开地两个英语单词交换位置输出. 输入一行字符,包含若干个单词,约定相邻地两个单词用空格隔开,编程统计单词地个数. 对输入地一句子实现查找且置换地功能(找到某个子串并换成另一子串).。

noi寒假刷题之旅_1.5编程基础之循环控制(45题)

noi寒假刷题之旅_1.5编程基础之循环控制(45题)

noi寒假刷题之旅_1.5编程基础之循环控制(45题)(45题)01:求平均年龄#include<iostream>using namespace std;int main(){int n;float sum=0;cin>>n;for(int i=0;i<n;++i){int temp;cin>>temp;sum+=temp;}printf("%.2f",sum/n);return 0;}02:财务管理#include<iostream>using namespace std;int main(){float sum=0;float temp;for(int i=0;i<12;++i){cin>>temp;sum+=temp;}printf("$%.2f",sum/12);return 0;}03:均值#include<iostream>using namespace std;int main(){int n;double sum=0,temp;cin>>n;for(int i=0;i<n;++i){cin>>temp;sum+=temp;}printf("%.4f",sum/(double)n);return 0;}04:求整数的和与均值#include<iostream>using namespace std;int main(){int n;double sum=0,temp;cin>>n;for(int i=0;i<n;++i){cin>>temp;sum+=temp;}printf("%.0f %.5f",sum,sum/(double)n);return 0;}05:最⾼的分数#include<iostream>using namespace std;int main(){int n;int max,temp;cin>>n;cin>>max;for(int i=1;i<n;++i){cin>>temp;if(max<temp)max=temp;}printf("%d",max);return 0;}06:整数序列的元素最⼤跨度值#include<iostream>using namespace std;int main(){int m;int max,min,temp;cin>>m;cin>>max;min=max;for(int i=1;i<m;++i){cin>>temp;if(max<temp)max=temp;if(min>temp)min=temp;}printf("%d",max-min);return 0;}07:奥运奖牌计数#include<iostream>using namespace std;int main(){int m;int j,y,t;int a=0,b=0,c=0;cin>>m;for(int i=0;i<m;++i){cin>>j>>y>>t;a+=j;b+=y;c+=t;}printf("%d %d %d %d",a,b,c,a+b+c); return 0;}08:多边形内⾓和#include<iostream>using namespace std;int main(){int n;int j,v;int a=0,b=0,c=0;cin>>n;v=(n-2)*180;for(int i=0;i<n-1;++i){cin>>j;v-=j;}printf("%d",v);return 0;}09:奇数求和#include<iostream>using namespace std;int main(){int n,m,sum=0;cin>>m>>n;for(int i=m;i<=n;++i){if(i%2){sum+=i;}}cout<<sum;return 0;}10:满⾜条件的数累加#include<iostream>using namespace std;int main(){int n,m,sum=0;cin>>m>>n;for(int i=m;i<=n;++i){if(!(i%17)){sum+=i;}}cout<<sum;return 0;}11:整数的个数#include<iostream>using namespace std;int main(){int k,temp,one=0,five=0,ten=0;cin>>k;for(int i=0;i<k;++i){cin>>temp;if(temp==1)++one;if(temp==5)++five;if(temp==10)++ten;}cout<<one<<endl<<five<<endl<<ten<<endl; return 0;}12:与指定数字相同的数的个数#include<iostream>using namespace std;int main(){int n,m,temp,one=0;cin>>n>>m;for(int i=0;i<n;++i){cin>>temp;if(temp==m)++one;}cout<<one;return 0;}13:乘⽅计算#include<iostream>using namespace std;int main(){long long a,n,temp=1;cin>>a>>n;for(int i=0;i<n;++i){temp*=a;}cout<<temp;return 0;}14:⼈⼝增长问题#include<iostream>#include<cmath>using namespace std;int main(){double x,n,sum=0;cin>>x>>n;sum=x*pow(1+0.1/100.0,n);printf("%.4f",sum);return 0;}15:银⾏利息#include<iostream>#include<cmath>using namespace std;int main(){double r,m,y,sum;cin>>r>>m>>y;r=r/100.0;sum=m*pow(1+r,y);printf("%d",(int)sum);return 0;}16:买房⼦#include<iostream>#include<cmath>using namespace std;int main(){double n,k,sum=200,cxy;cin>>n>>k;k/=100.0;cxy=n;int count=1,flag=0;while(cxy<sum){sum*=(1+k);cxy+=n;++count;if(count>20){flag=1;break;}}if(flag){cout<<"Impossible"; }else{printf("%d",count);}return 0;}17:菲波那契数列#include<iostream>#include<cmath>using namespace std;int main(){int k;int o[50]={};o[1]=1,o[2]=1;cin>>k;for(int i=3;i<=k;++i){o[i]=o[i-1]+o[i-2];}cout<<o[k];return 0;}18:鸡尾酒疗法#include<iostream>#include<cmath>using namespace std;int main(){int n;cin>>n;double a,b;double x,y;cin>>a>>b;x=b/a;for(int i=1;i<n-1;++i){cin>>a>>b;y=b/a;if((y-x)>0.05){cout<<"better";}else if((x-y)>0.05){cout<<"worse";}else{cout<<"same";}cout<<endl;}cin>>a>>b;y=b/a;if((y-x)>0.05){cout<<"better";}else if((x-y)>0.05){cout<<"worse";}else{cout<<"same";}return 0;}19:救援#include<iostream>#include<cmath>using namespace std;int main(){int n;cin>>n;double x,y,z;double sum=0;for(int i=0;i<n;++i){cin>>x>>y>>z;sum+=sqrt(x*x+y*y)/50.0;sum+=sqrt(x*x+y*y)/50.0;sum+=z*1.5;}printf("%.0f",sum+0.5);return 0;}20:球弹跳⾼度的计算#include<iostream>#include<cmath>using namespace std;int main(){double h,ten;double high=0;cin>>h;ten=h*pow(0.5,10);high=h;for(int i=1;i<10;++i){h/=2.0;high+=h;high+=h;}printf("%g\n",high);printf("%g",ten+0.00000005);return 0;}21:⾓⾕猜想#include<iostream>#include<cmath>#include <limits>using namespace std;int main(){long long n;cin>>n;while(1){if(n==1)break;if(n%2){cout<<n<<"*3+1=";n=n*3+1;}else{cout<<n<<"/2=";n=n/2;}cout<<n<<endl;}cout<<"End";// cout << "最⼤值:" << (numeric_limits<long long>::max)(); return 0;}/*这题要B⼀下,⼀开始⽤int⽼是超时改成long long过了int 最⼤:2,47,483,648>2,000,000,但是⼀旦*3就超了long long最⼤:92,23,372,036,854,775,807*/ 逛了⼀波博客回来继续撸22:津津的储蓄计划#include<iostream>#include<cmath>using namespace std;int main(){int temp,flag=0;double save=0;int jj=0;for(int i=1;i<=12;++i){cin>>temp;jj+=300;jj-=temp;if(jj>=300){save+=300;jj-=300;}else if(jj>=200){save+=200;jj-=200;}else if(jj>=100){save+=100;jj-=100;}else if(jj<0){flag=1;cout<<-1*i;break;}}if(!flag){printf("%.0f",save*1.2+jj);}return 0;}23:药房管理#include<iostream>#include<cmath>using namespace std;int main(){int m,n,num,c=0;cin>>m>>n;for(int i=0;i<n;++i){cin>>num;if(m>=num){m-=num;}else{++c;}}cout<<c;return 0;}24:正常⾎压#include<iostream>#include<cmath>using namespace std;int main(){int n,a,b,c=0,max=0;cin>>n;for(int i=0;i<n;++i){cin>>a>>b;if(90<=a&&a<=140&&60<=b&&b<=90) {++c;}else{c=0;}if(max<c)max=c;}cout<<max;return 0;}25:求特殊⾃然数找答案:#include<iostream>#include<cmath>using namespace std;int main(){for(int i=0;i<7;++i){for(int j=0;j<7;++j){for(int k=0;k<7;++k){if((49*i+7*j+k)==(81*k+9*j+i)){cout<<(49*i+7*j+k)<<endl;cout<<i<<j<<k<<endl;cout<<k<<j<<i<<endl;cout<<endl;}}}}return 0;}交的时候:#include<iostream>#include<cmath>using namespace std;int main(){cout<<248<<endl;cout<<503<<endl;cout<<305<<endl;return 0;}26:统计满⾜条件的4位数个数#include<iostream>#include<string>using namespace std;int main(){int n,c=0;cin>>n;string a;for(int i=0;i<n;++i){cin>>a;if((a[3]-'0')-(a[2]-'0')-(a[1]-'0')-(a[0]-'0')>0)++c; }cout<<c;return 0;}27:级数求和#include<iostream>#include<string>using namespace std;int main(){double i;double k;cin>>k;double sn=0;for(i=1;!(sn>k);++i){sn+=1/i;}cout<<i-1;return 0;}28:分离整数的各个数位#include<iostream>#include<string>using namespace std;int main(){long long n;cin>>n;while(n){cout<<n%10<<" ";n/=10;}return 0;}29:数字反转#include<iostream>#include<string>using namespace std;int main(){long long n,ne=0;cin>>n;while(n){ne+=n%10;ne*=10;n/=10;}cout<<ne/10;return 0;}30:含k个3的数#include<iostream>#include<string>using namespace std;int main(){int m,k,s,t=0,flag=0;cin>>m>>k;s=m%19;if(!s){s=m;while(s){if(s%10==3)++t;s/=10;}if(t==k)flag=1;}if(flag){cout<<"YES";}else{cout<<"NO";}return 0;}31:开关灯#include<iostream>#include<string>using namespace std;int main(){int a[5001]={},n,m;cin>>n>>m;//0关闭,1打开for(int j=1;2*j<=n;++j){a[2*j]=1;//打开}for(int i=3;i<=m;++i){for(int j=1;i*j<=n;++j){if(a[i*j]==1){a[i*j]=0;}else{a[i*j]=1;}}}int ii=1;for(;ii<=n;++ii){if(!a[ii]){cout<<ii;break;}}++ii;for(;ii<=n;++ii){if(!a[ii]){cout<<","<<ii;}}return 0;}32:求分数序列和#include<iostream>#include<string>using namespace std;int main(){int n;cin>>n;double t,a=2,b=1,sum=2;for(int i=1;i<n;++i){t=a;a=a+b;b=t;sum+=a/b;}printf("%.4f",sum);return 0;}今天就到这⼉,留了点尾巴后天再收33:计算分数加减表达式的值#include<iostream>#include<string>using namespace std;int main(){int n;cin>>n;double sum=0;for(int i=1;i<=n;++i){if(i%2){sum+=1.0/i;}else{sum+=-1.0/i;}}printf("%.4f",sum);return 0;}34:求阶乘的和#include<iostream>#include<string>using namespace std;int main(){int n;cin>>n;int t=1,sum=0;for(int i=1;i<=n;++i){t*=i;sum+=t;}printf("%d",sum);return 0;}35:求出e的值#include<iostream>#include<string>using namespace std;int main(){int n;cin>>n;double t=1,sum=1;for(int i=1;i<=n;++i){t*=i;sum+=1.0/t;}printf("%.10f",sum);return 0;}36:计算多项式的值 #include<iostream>#include<cmath>using namespace std;int main(){int n;float x;cin>>x>>n;float t=1,sum=1;for(int i=1;i<=n;++i){sum+=pow(x,i);}printf("%.2f",sum);return 0;}37: 雇佣兵 #include<iostream>#include<cmath>using namespace std;int main(){int n,m,x;int a=0,b=0,c=0;cin>>m>>n>>x;b=n;for(int i=x-1;i>=0&&m>=b;--i){a+=b;// cout<<">>体⼒="<<a<<"战⽃⼒="<<b<<"能量元素="<<i<<endl; if(a>=m)b+=m/b;a=0;}// cout<<"<<体⼒="<<a<<"战⽃⼒="<<b<<"能量元素="<<i<<endl;}cout<<b;return 0;}38:计算多项式的导函数【这题⽓死我了,他没有外循环,给的是三个不同情况下的样例】#include<iostream>#include<cmath>using namespace std;int main(){int n,m,x,j;int a=0,b=0,c=0;// cin>>n;// for(int i=0;i<n;++i)// {cin>>m;//输⼊最⾼次if(m==0){cin>>x;cout<<0<<endl;}else{for(j=m;j>0;--j){cin>>x;if(j==m){cout<<x*m;}else{cout<<" "<<x*j;}}cin>>x;cout<<endl;}// }return 0;}39: 与7⽆关的数#include<iostream>#include<cmath>using namespace std;bool function(int i){while(i){if(i%10==7){return true;}i/=10;}return false;}int main(){int n,x;long long sum=0;cin>>n;for(int i=1;i<=n;++i){if(!(i%7==0||function(i))){sum+=i*i;}}cout<<sum;return 0;}40:数1的个数#include<iostream>#include<cmath>using namespace std;void function(int i,int &count){while(i){if(i%10==1){++count;}int main(){int n,x;int sum=0;cin>>n;for(int i=1;i<=n;++i){function(i,sum);}cout<<sum;return 0;}41:数字统计#include<iostream>#include<cmath>using namespace std;void function(int i,int &count) {while(i){if(i%10==2){++count;}i/=10;}}int main(){int L,R;int sum=0;cin>>L>>R;for(int i=L;i<=R;++i){function(i,sum);}cout<<sum;return 0;}42:画矩形#include<iostream>#include<cmath>using namespace std;int main(){int w,h;cin>>h>>w;char tag;cin>>tag;int c;cin>>c;if(c){for(int i=0;i<h;++i){for(int ii=0;ii<w;++ii){cout<<tag;}cout<<endl;}}else{if(w==1&&h==1){cout<<tag;}else{for(int i=0;i<w;++i)cout<<tag; cout<<endl;for(int i=1;i<h-1;++i){cout<<tag;for(int ii=1;ii<w-1;++ii){cout<<" ";}cout<<tag<<endl;}for(int ii=0;ii<w;++ii){cout<<tag;}}}43:质因数分解#include<bits/stdc++.h>using namespace std;int main(){int a;cin>>a;for(int i=2; i<=sqrt(a); i++){if(a%i==0){cout<<a/i;}}}44:第n⼩的质数【纯属套模板】#include<bits/stdc++.h>using namespace std;int a[10000000],i,j,p[10001],t=1,n;int main(){cin>>n;a[1]=1;for(i=2;i<=1000000;i++){if(!a[i]){p[t]=i;if(t==n){cout<<p[n];return 0;}t++;}for(j=1;j<=t&&i*p[j]<=1000000;j++){a[i*p[j]]=1;if(i%p[j]==0)break;}}return 0;}45:⾦币【找规律的题】#include<iostream>#include<cmath>#define MAX 10000using namespace std;int main(){int n,day=0,sum=0;cin>>n;for(int j=1;day<=n;++j){day+=j;// cout<<"day:"<<day-j<<"+"<<j<<"="<<day<<endl; if(n>=day){sum+=j*j;}else{sum+=j*(n-day+j);}}cout<<sum;return 0;}。

信息学奥赛NOIP第4单元循环结构程序设计

信息学奥赛NOIP第4单元循环结构程序设计
在 C++ 中,循环结构有三种实现语句:while 语句、 do-while 语句和 for 语句。
1. while 语句的含义
while 语句的格式如下: while(表达式){
循环体 }
其含义为:先计算表达式(一般称为循环条件)的值, 当表达式的值为真(循环条件成立)时,去执行一次循环 体。和 if 语句不同的是,执行完一次循环体后,while 语 句又回到开始处,继续计算和判断表达式的真假,决定是 否再次执行循环体。也就是“当表达式成立时,不断重复 执行循环体”,所以又称为“当型循环”。
信息学奥赛(C++)
第 4 单元 循环结构程序设计
第 1 课 while 语句
学习目标 1. 理解循环结构的含义。 2. 熟练掌握 while 语句的格式和功能。 3. 初步应用 while 语句解决一些实际问题。
循环结构
在程序设计中,经常需要反复执行某一条语句或一个 语句块,这种结构称为“循环结构”或者“重复结构”。 其实,计算机最擅长的就是重复做一件事情,所以循环结 构在程序设计中应用非常广泛。
printf( “ \n ” ); return 0; }
for 语句写法灵活,上述程序也可以写成:
//p4-3-1b #include<cstdio> using namespace std; int main(){
int i = 1; for(; i <= 10; i++) printf( “ @ ” );
例4、投资收益
【问题描述】
小华在去年赚了一大笔钱。他想把这些钱用于投资,并对自己能得到
多少收益感到好奇。
已知投资的年利率为 r(0~20 之间的整数),小华现有 m 元钱。他想

2013信息奥赛第十一次课(循环二)

直到循环(REPEAT-until语句)
用repeat-until 语句可以实现“直到型循环”。 repeat-until语句的含义是:“重复执行循环,直到指定的条件为真时为止”。
Repeat <语句1>; :
循环体
<语句n>;
until <布尔表达式>; 其中repeat、until是Pascal保留字
program ex1024; var ch:char; t:integer; begin ch:='a'; t:=0; repeat write(ch); t:=t+1; if t mod 13=0 then writeln; ch:=succ(ch) until ch='{'; ch:='z' ; repeat write(ch); ch:=pred(ch); t:=t+1; if t mod 13=0 then writeln; until ord(ch)=96 end.
repeat与until之间的所有语句称为循环体。
1024: 【入门】打印小写字母表 题目描述 把英文字母表的小写字母按顺序和倒序打印出来。(每行13个) 输入 输出四行 样例输入 样例输出
abcdefghijklm
nopqrstuvwxyz zyxwvutsrqpon mlkjihgfedcba
s
t
n
N
t<=n
Y
99
样例输出 2500
s:=0; t:=1;
s←s+t t←t+2
while t<=n do begin s:=s+t; t:=t+2; end;

信息奥赛十次课循环


1020
题目描述 编程求1+3+5+...+n 输入一行,只有一种整数n (1<=n<=9999) 这里n为奇数。 输出只有一行 样例输入 99 样例输出 2500
1020
类型
数值范围
占字节数
shortint
-128..128
1
integer -32768..32767
2
longint -2147483648..2147483647 4
及1个实数3
1. /号,定义s旳类型应该为实型 2. 注意验证最终1/n是否累加上去 3. 注意输出格式
函数标识符 自变量类型
意义
odd
整型
判断奇数
pred
离散类型
求前趋
succ
离散类型
求后继
例:odd(1000)=false pred(2023)=1999
题17:任意输入一种三位整数,再把它旳顺序打乱重新组合一种 新旳三位整数,使其值最大。 Input 输入只有一行,涉及1个整数。 Output 输出只有一行(这意味着末尾有一种回车符号),涉及1个整数。 Sample Input 470 Sample Output 740 思绪:把三位拆除出来,求出最大、中间、最小
odd(3)=true
pred('x')='w
成果类型 布尔型 同自变量 同自变量 succ(2023)=2023
succ('x')='y'
ch:=‘a’; ch:=succ(ch); ch:=succ(ch)
1024: 【入门】打印小写字母表 题目描述 把英文字母表旳小写字母按顺序和倒序打印出来。(每行13个) 输入 输出四行 样例输入 样例输出 abcdefghijklm nopqrstuvwxyz zyxwvutsrqpon mlkjihgfedcba

第六章 循环控制(答案)

第六章循环控制(答案)第六章循环控制(答案)第六章循环控制6.1选择题1.c语言用(c)表示逻辑“真”值。

a)trueb)t或yc)非零整数值d)整数02.语句while(!e);中的条件!e等价于(a)。

a)e==0b)e!=1c)e!=0d)-e3.以下for循环就是(c)。

for(x=0,y=0;(y!=123)&&(x<4);x++);a)无穷循环b)循环次数不定c)继续执行4次d)继续执行3次4.下面有关for循环的正确描述是(d)a)for循环只能用于循环次数已经确定的情况b)for循环是先执行循环体语句,后判定表达式c)在for循环中,不能用break语句跳出循环体d)for循环体语句中,可以涵盖多条语句,但要用花括号内加出来5.对于for(表达式1;;表达式3)可理解为(b)a)for(表达式1;1;表达式3)b)for(表达式1:1;表达式3)c)for(表达式1;表达式1;表达式3)d)for(表达式1;表达式3;表达式3)6.下面程序段的运行结果是(d)x=y=0;while(x<15)y++,x+=++y;printf(“%d,%d”y,x);a)20,7b)6,12c)20,8d)8,207.下面程序段的运行结果是(c)intn=0;while(n++<=2);printf(“%d”,n);a)2b)3c)4d)存有语法弄错8.下面程序的功能是将从键盘输入的一批正整数中求出最大者,输入0结束循环选独以填空题。

#includemain(){inta,max=0;scanf(“%d”,&a);while((b)){if(maxprintf(“%d”,max);}a)a==0b)ac)!a==1d)!a9.下面程序的运转结果就是(c).#includemain(){intnum=0;while(num<=2){num++;printf(“=”,num);}}a)1b)12c)123d)123410.c语言中while和do-while循环的主要区别是(a).a)do-while的循环体至少无条件执行一次b)while的循环掌控条件比的循环掌控条件严苛c)do-while容许从外部转回至循环体内d)do-while的循环体无法就是无机语句11.以下能正确计算1*2*3*??*10的程序是(c).a)do{i=1;s=1;b)do{i=1;s=0;s=s*i;s=s*i;i++;i++;}while(i<=10);}while(i<=10);c)i=1;s=1;d)i=1;s=0;do{s=s*i;do{s=s*i;i++;i++;}while(i<=10);}while(i<=10);12.以下叙述恰当的就是(c).a)由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句。

noip初三试题及答案

noip初三试题及答案**NOIP初三试题及答案**一、选择题(每题2分,共20分)1. 以下哪个选项是正确的二进制数?A. 1023B. 1102C. 2101D. 1010**答案:D**2. 在计算机中,1KB等于多少字节?A. 1024B. 1000C. 512D. 128**答案:A**3. 以下哪个选项不是循环结构?A. for循环B. while循环C. if语句D. do-while循环**答案:C**4. 在C++中,以下哪个关键字用于声明一个类?A. structB. classC. enumD. union**答案:B**5. 在C++中,以下哪个函数用于计算两个数的最大值?A. max()B. min()C. abs()D. sqrt()**答案:A**6. 以下哪个选项是正确的算法描述?A. 顺序结构B. 选择结构C. 循环结构D. 所有选项都是**答案:D**7. 在C++中,以下哪个操作符用于比较两个数是否相等?A. ==B. !=C. >D. <**答案:A**8. 在C++中,以下哪个函数用于输出字符串?A. coutB. printfC. scanfD. cin**答案:A**9. 在C++中,以下哪个关键字用于声明一个函数?A. intB. voidC. returnD. function**答案:B**10. 在C++中,以下哪个关键字用于声明一个变量?A. varB. letC. intD. auto**答案:C**二、填空题(每题2分,共20分)1. 在C++中,使用____关键字可以定义一个常量。

**答案:const**2. 在C++中,使用____函数可以读取一行输入。

3. 在C++中,使用____函数可以计算一个数的平方根。

**答案:sqrt**4. 在C++中,使用____函数可以计算两个数的最大值。

**答案:max**5. 在C++中,使用____关键字可以声明一个指针。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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%还给津津。

相关文档
最新文档