NOIP普及组初赛历年试题及答案阅读题篇.docx_第1页
NOIP普及组初赛历年试题及答案阅读题篇.docx_第2页
NOIP普及组初赛历年试题及答案阅读题篇.docx_第3页
NOIP普及组初赛历年试题及答案阅读题篇.docx_第4页
NOIP普及组初赛历年试题及答案阅读题篇.docx_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

NOIP普及组初赛历年试题及答案阅读题篇阅读程序写结果(共4 题,每题8 分,共计32 分)阅读程序题是得分的关键,因为不是让你上机去运行程序,所以要一步步地读程序,记录相关变量值的变化情况。因为程序的运行结果只有输出语句才有输出,所以只写出输出语句的结果。有时要找出规律才能写出结果,特别是循环次数多的情况,另外要注意边界值,不能多算一步也不能少算一步。解决这类问题的关键在于能够分析程序的结构以及程序段的功能。常见的有列表法、画流程图法等。完成这类题目的方法和步骤如下:1、从头到尾通读程序,大致把握程序的算法、找出这个题目的即这个程序想干什么。抓住了它,不仅得出答案变得较容易,而且对自己的结果也会比较有信心。2、通过给程序分段、理清程序的结构和层次,达到读懂程序的目的。3、阅读程序中特别注意跟踪主要变量的值的变化,可以用列表的方法,了解变量变化和程序的运行结果,注意发现规律。所谓列表法,就是将各变量名作为表头,在程序的执行过程中,将各变量值的变化记录在相应变量的下方。4、按照程序中输出格式的要求,写出运行结果,并带着结果回到程序进行检查。在阅读程序时,要特别注意过程、函数所完成的子任务以及和主程序之间的参数传递关系。在阅读程序中,比较好的方法是首先阅读主程序,看其需要调用的过程或函数是什么,最后要求输出变量是什么;其次在阅读程序中,将较长的程序分成几个程序段(特别注意循环结构、判断结构),阅读理解各程序段的功能以及各程序之间的关联。NOIP2011-1.#includeusing namespace std;int main()int i,n,m,ans;cinnm;i=n;ans=0;while(i=m)/从i=1020,共循环计数11次ans+=i;/每次循环,ans累加一次 i 值i+;coutansendl;/此时ans值应为(10+20)*11/2,即165return 0;输入: 10 20输出: 165NOIP2011-2.#include#includeusing namespace std;int main()string map= 2223334445556667778889999;/数组中元素位置是从0开始计数的string tel;int i;cintel;for(i=0;i=0) & (teli=9) )/如果输入的tel是09,直接输出tel值cout=A) & (teli=Z)coutmapteli-A;/如果输入的tel是AZ,则输出一个map数组中对应的元素/输出元素在map数组中位置为“输入字母与A的ASCII码的差值”/如果输入的是其他字符,比如“-”,则不符合循环条件,无输出coutendl;return 0;输入: CCF-NOIP-2011输出: 22366472011NOIP2011-3.#include#includeusing namespace std;const int SIZE= 100;int main()int n,i,sum,x,aSIZE;cinn;memset(a,0,sizeof(a);for(i=1;ix;ax+;/循环结束时数组中的值为:a1=1,a2=2,a3=3,a4=2,a5=1,a6=2i=0;sum=0;while(sum=6的时候,循环结束i+;sum+=ai;coutiendl;/输出循环结束时 i 的值(不是sum的值)return 0;输入:114 5 6 6 4 3 32 3 2 1输出:3NOIP2011-4.#includeusing namespace std;int solve(int n,int m)int i,sum;if(m=1) return 1;/递归函数solve(i,m)中m=1时返回函数值为1sum=0;for(i=1;inm;coutsolve(n,m)endl;/输出函数值,即sum值return 0;输入: 7 4输出: 20NOIP2012-1.#includeusing namespace std;int a, b, c, d, e, ans;int main()cinabc;d = a+b;e = b+c;ans = d+e;/ans=a+b+b+ccoutansendl;return 0;输入: 1 2 5输出: 10NOIP2012-2.#includeusing namespace std;int n, i, ans;int main()cinn;ans = 0;for (i = 1; i = n; i+)if (n % i = 0)ans+;/统计118中18的因数个数coutansendl;return 0;输入: 18输出: 6NOIP2012-3.#includeusing namespace std;int n, i, j,a100100;int solve(int x,int y)int u, v;if(x = n)return axy;/递归边界:当x=5时,solve(5,y)=a5yu= solve(x + 1, y);v= solve(x + 1, y + 1);if(u v)return axy + u;elsereturn axy + v;/用递归最终求得solve(1,1)=a11+solve(2,2)=2+12=14int main()cinn;for(i = 1; i = n; i+)for (j = 1; j aij;coutsolve(1,1)endl;return 0;输入:52-1 42 -1 -2-1 6 4 03 2 -1 5 8输出: 14NOIP2012-4.#include#includeusing namespace std;int n, ans, i, j;string s;char get(int i)if(i n)return si;elsereturn si-n;/i=8时,get(i)返回si-8,从第一个开始返回int main()cins;n= s.size();ans= 0;for(i = 1; i = n-1; i+)for (j = 0; j = n-1; j+)if (get(i+j) get(ans+j)break;/此循环执行完毕,ans=7for(j = 0; j = n-1; j+)coutget(ans+j);/1,ans+j8,输出s7+0;2,ans+j=8,输出s8-8;3,ans+j=9,输出s9-8coutendl;return 0;输入: CBBADADA输出: ACBBADADNOIP2013-1.#includeusing namespace std;int main()inta, b;cinab;couta+b=a+bendl;return 0;/输出:3+5=8输入: 3 5输出:3+5=8NOIP2013-2.#includeusing namespace std;int main()int a, b, u, i, num;cinabu;num = 0;for (i = a; i = b; i+)if (i % u) = 0)num+;/1-100之间有多少数是15的倍数coutnumendl;return 0;输入: 1 100 15输出:6NOIP2013-3.#includeusing namespace std;int main()const int SIZE = 100;int n, f, i, left, right, middle, aSIZE;cinnf;for (i = 1; i ai;left = 1;right = n;do middle= (left + right) / 2;if(f = amiddle)right = middle;elseleft = middle + 1;while (left a6,则left=7/ middle=9,17a9,则right=9/ middle=8,17a8,则right=8/ middle=7,17=a7,则right=7/ left=right,直接输出leftcoutleftendl;return 0;输入:12 172 4 6 9 11 15 1718 19 20 21 25输出: 7NOIP2013-4.#includeusing namespace std;int main()constint SIZE = 100;intheightSIZE, numSIZE, n, ans;cinn;for(int i = 0; i heighti;numi = 1;for (int j = 0; j i; j+) if (heightj = numi)numi = numj+1;/两两相比,得出num0, num1, num2, num3, num4, num5ans= 0;for(int i = 0; i ans) ans = numi;/得出num中最大值,即在数组height中第几位数值最大coutansendl;return 0;输入:62 5 3 11 12 4输出: 4不懂算法?跟踪变量!列表模拟!遇到递归?画树形图!注意边界!找到规律了?还会流程图?恭喜你,32分到手了!NOIP2014-1.#include using namespace std;int main()int a, b, c, d, ans;cin a b c;d = a - b;/将a-b=-1赋值给da = d + c;/将d+c=3赋值给aans = a * b;/ans=a*b=3*3=9cout Ans = ans endl;return 0;输入:2 3 4输出:Ans=9NOIP2014-2.#include using namespace std;int fun(int n)if (n = 1)return 1; /边界fun(1)=1if (n = 2)return 2; /边界fun(2)=2return fun(n - 2) - fun(n - 1); /fun(n)=fun(n-2)-fun(n-1)int main()int n;cin n;cout fun(n) endl;/fun(7)=fun(5)-fun(6)=-11return 0;输入: 7输出: -11NOIP2014-3.#include #include using namespace std;int main()string st;int i, len;getline(cin, st);len = st.size();for(i = 0; i = a & sti = z)sti = sti - a + A; /如果字符串st中字母小写,则替换成大写cout st endl;return 0;输入: Hello, my name is Lostmonkey.输出:HELLO, MY NAME IS LOSTMONKEY.NOIP2014-4.#include using namespace std;const int SIZE =100;int main()int pSIZE;int n, tot, i, cn;tot= 0;cin n;for(i = 1; i = n; i+)pi = 1; /p1-p30中所有元素赋值1for(i = 2; i = n; i+)if (pi = 1)tot+; /计数cn = i * 2; /找出2-30中所有2iwhile (cn = n) pcn = 0;cn += i; /找出2-30中所有3i/对2-30中素数计数,并输出个数cout tot endl;return 0;输入: 30输出: 10NOIP2015-1.#include using namespace std;int main()int a, b, c;a = 1;b = 2;c = 3;if(a b) /不符合循环条件,不执行if(a c)cout a ;elsecout b ;cout c endl;return 0;输出: 3NOIP2015-2.#include using namespace std;struct pointint x;int y; /声明结构体类型pointint main()int a, b, c;struct EXint a;int b;point c;e; /声明结构体类型EXe.a = 1; /结构体变量e中变量ae.b = 2; /结构体变量e中变量be.c.x = e.a + e.b;/结构体变量e中的结构体变量c中的变量xe.c.y = e.a * e.b;/结构体变量e中的结构体变量c中的变量ycout e.c.x , e.c.y endl;return 0;输出: 3,2NOIP2015-3.#include #include using namespace std;int main()string str;int i;int count;count = 0;getline(cin, str);for(i = 0; i = a &stri = z)count+; /统计字符串中小写字母数量cout It has count lowercases endl;return 0;输入: NOI2016will be held in Mian Yang.输出: It has 18 lowercasesNOIP2015-4.#include #include using namespace std;void fun(char *a, char *b)a = b;(*a)+; /指针题int main()char c1, c2, *p1, *p2;c1 = A;c2 = a;p1 = &c1;p2 = &c2;fun(p1, p2);/p1=p2=&c2,把c2的地址赋值给指针变量p1/p1+,则有&a+1=&b, 所以,c2=b,cout c1 c2 endl;return 0;输出: AbNOIP2016-1.#include using namespace std;int main()int max, min, sum, count = 0;int tmp;cin tmp;if(tmp = 0)return0; /如果输入的数字是0,程序退出max= min = sum = tmp;count+;while(tmp != 0) cin tmp;if(tmp != 0) sum += tmp; /求和count+;/计数if(tmp max)max = tmp; /找出最大值if(tmp min)min = tmp; /找出最小值cout max , min , sum / count endl;/输出“最大值, 最小值, 平均值”return 0;输入: 1 2 3 4 5 6 0 7输出: 6,1,3NOIP2016-2.#include using namespace std;i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论