NOIP普及组初赛历年试题及答案阅读题篇

上传人:世*** 文档编号:154441472 上传时间:2020-12-06 格式:DOCX 页数:28 大小:22.83KB
返回 下载 相关 举报
NOIP普及组初赛历年试题及答案阅读题篇_第1页
第1页 / 共28页
NOIP普及组初赛历年试题及答案阅读题篇_第2页
第2页 / 共28页
NOIP普及组初赛历年试题及答案阅读题篇_第3页
第3页 / 共28页
NOIP普及组初赛历年试题及答案阅读题篇_第4页
第4页 / 共28页
NOIP普及组初赛历年试题及答案阅读题篇_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《NOIP普及组初赛历年试题及答案阅读题篇》由会员分享,可在线阅读,更多相关《NOIP普及组初赛历年试题及答案阅读题篇(28页珍藏版)》请在金锄头文库上搜索。

1、NOIP普及组初赛历年试题及答案阅读题篇阅读程序写结果(共4 题,每题8 分,共计32 分)阅读程序题是得分的关键,因为不是让你上机去运行程序,所以要一步步地读程序,记录相关变量值的变化情况。因为程序的运行结果只有输出语句才有输出,所以只写出输出语句的结果。有时要找出规律才能写出结果,特别是循环次数多的情况,另外要注意边界值,不能多算一步也不能少算一步。解决这类问题的关键在于能够分析程序的结构以及程序段的功能。常见的有列表法、画流程图法等。完成这类题目的方法和步骤如下:1、从头到尾通读程序,大致把握程序的算法、找出这个题目的即这个程序想干什么。抓住了它,不仅得出答案变得较容易,而且对自己的结果

2、也会比较有信心。2、通过给程序分段、理清程序的结构和层次,达到读懂程序的目的。3、阅读程序中特别注意跟踪主要变量的值的变化,可以用列表的方法,了解变量变化和程序的运行结果,注意发现规律。所谓列表法,就是将各变量名作为表头,在程序的执行过程中,将各变量值的变化记录在相应变量的下方。4、按照程序中输出格式的要求,写出运行结果,并带着结果回到程序进行检查。在阅读程序时,要特别注意过程、函数所完成的子任务以及和主程序之间的参数传递关系。在阅读程序中,比较好的方法是首先阅读主程序,看其需要调用的过程或函数是什么,最后要求输出变量是什么;其次在阅读程序中,将较长的程序分成几个程序段(特别注意循环结构、判断

3、结构),阅读理解各程序段的功能以及各程序之间的关联。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= 999;/数组中元

4、素位置是从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输出: NOIP2011-3.#include#includeusing namespace std;const int

5、 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

6、,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 na

7、mespace 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(

8、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(

9、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;输入:

10、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;输入:

11、 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;nu

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号