noip初赛模拟试题(c语言版).doc
初赛试题练习一(C+)一选择题 (每题2分,共20分)1 PC机中CPU进行算术和逻辑运算时,可处理的信息的长度为: A) 32位 B) 16位 C) 8位 D) 都可以2 下面关于主存储器(也称为内存)的叙述中,不正确的是: A) 当前正在执行的指令与数据都必须存放在主存储器内,否则处理器不能进行处理B) 存储器的读、写操作一次读出或写入一个字节C) 字节是主存储器中信息的基本编址单位D) 从程序设计的角度来看,cache(高速缓存)也是主存储器3 计算机的主存储器容量达到1GB时,其地址的表示至少需要使用多少个2进位? A) 10位 B) 20位 C) 30位 D) 40位4. MIPS是衡量CPU处理速度的一种常用指标,它的含义是: A) 每秒钟平均可执行的单字长定点指令的数目B) 每秒钟平均可执行指令的数目C) 每秒钟平均可执行的浮点指令的数目D) 每秒钟平均可执行的算术运算指令的数目5. 一幅1024×768的彩色图像,其数据量达2.25MB左右,若图像数据没有经过压缩处理,则该图像中的每一个像素是使用多少个二进位表示的? A) 8位B) 16位C) 24位D) 32位6下列叙述中正确的是 A)计算机病毒只感染可执行文件B)计算机病毒只感染文本文件C)计算机病毒只能通过软件复制的方式进行传播D)计算机病毒可以通过读写磁盘或网络等方式进行传播7将数组32,74,25,53,28,43,86,47中的元素按从小到大的顺序排列,每次可以交换任意两个元素,最少需要交换_次。 A)5 B)6 C)7 D)88若已知一个栈的入栈顺序是1,2,3,.,n ,其输出序列为P1,P2,P3,Pn,若P1是n,则Pi是_。 A)i B)n-1 C)n-i+1 D)不确定9下面程序的运行结果是( )。 #include<iostream.h> int x;void pr(int * z) *z+=100; cout<<”x=”<<x;int main() x=10; pr(&x); x=100; cout<<”x=”<<x<<endl; 运行结果: A)x=110 x=100 B)x=10 x=100 C)x=110 x=110 D)x=100 x=10010互联网络上的服务都是基于一种协议,WWW服务基于_协议。 A)SMIP B)HTTP C)SNMP D)TELNET二回答问题(1*8+2*12=20)1有四个人想过一座桥,他们都站在桥的某一边,每人过桥的速度都不一样:第一个人:过桥需要分钟;第二个人:过桥需要分钟;第三个人:过桥需要分钟;第四个人:过桥需要分。桥很窄,最多同时只能过两人,天很黑,只有一个手电筒,不管是谁过桥,不管是一个 人还是两个人,必须要带着手电筒。如果两人同时过,快的必须和慢的一起过。问:最少需要几分钟,四个人才能都过去?并写出过桥过程!(不允许把手电扔来扔去)2我们经常用扑克牌来算24,现在请问,如果J,Q,K算作11,12和13的话,那么52只扑克牌一共会有多少个不重复的组合方式?(比如4个1,不算重复,但是1123和1213是重复的)。三阅读程序(1*8+2*8+3*8+4*6=30)1、#include<iostream.h>int main() int s,n,m,i,j,k,tot;int a101;cin>>n>>m>>k;s=0;for (i=1;i<=n;i+) s+=1;for (i=1;i<=n;i+) ai=s;i=0;j=0;tot=0;doi+; if (i=n+1) i=1; if (ai=s) j+; if (j=m) ai=-100;tot+;j=0; cout<<i<<" "while (tot<k);输入数据:100 36 6输出结果: 2、#include<iostream.h>const int maxn=101;int ansmaxnmaxn,n=0;void work()int i=0,j=0;for (i=1;i<=n;i+) for (j=1;j<=n;j+) ansij=0; for (i=1;i<=n;i+) ans1i=1; for (i=2;i<=n;i+) for (j=1;j<=i-1;j+) ansij=ansi-jj+ansij-1; for (j=i;j<=n;j+) ansij=ansii-1+1; int main() cin>>n; work(); cout<<ansnn;输入N7时输出结果: 3、#include<iostream.h>int n,i,min,k,buf,b3001;int max(int x,int y) if (x>y) return(x); else return(y);int main() b0=0;b1=0;b2=1; cout<<"n=" cin>>n; for (i=3;i<=n;i+) min=999; for (k=1;k<=i/2;k+) buf=max(bi-2*k,bk); if (min>buf) min=buf; bi=min+1; cout<<"b("<<n<<")="<<bn<<endl;输入:n=32 输出:b(32)= 4、#include<iostream.h>int i,j;int p(int n,int x) if (n=0) return(1); else if (n=1) return(x); else return(2*n)*p(n-1,x)-(n-1)*p(n-2,x)/n);int main() cin>>i>>j; cout<<p(i,j);输入:3 5 输出:四完善程序(每空3分,共30分)1问题描述: 设有一个数组A:ARRAY0.N-1 OF INTEGER; 数组中存放的元素为0N-1之间的整数,且AiAj(当ij时)。 例如:N=6时,有: A=(4,3,0,5,1,2) 此时,数组A的编码定义如下: A0的编码为0; Ai的编码为:在A0,A1,Ai-1中比Ai的值小的个数(i=1,2,N-1) 上面数组A的编码为: B=(0,0,0,3,1,2)问题:1 )给出数组A后,求出其编码。2 )给出数组A的编码后,求出A中的原数据。要求:从键盘输入1时做第一问,输入2时做第二问。程序:#include<iostream.h>int a101,b101,n,i,j,x,num,k;int main() cout<<"input 1 or 2" cin>>k; cout<<"input n" cin>>n; for (i=0;i<=n-1;i+) cin>>ai; _(1)_ end;cout<<end;_(2)_ case 1: for (i=0;i<=n-1;i+ num=0; for (j=0;j<=i-1;j+=) if (aj<ai) _(3)_ bi=num; cout<<bi<<" " case 2: num=0; while (num!=0) j-; 44 for (x=j+1;x<=n-1;x+) if (bx=-1) _(5)_ num+; for (i=0;i<=n-1;i+)cout<<bi<<" " return 0;.2Fibonacci序列的定义如下: f(0)=0 f(1)=1 f(n)=f(n-1)+f(n-2)(n>1) 求第n项Fibonacci数列。 #include<iostream.h>int i,a,b,n,s;int main() cin>>n; if_(6)_ s=0; if (n=1) _(7)_ a=0; b=1; for (i= _(8)_ ; _(9)_ ;i+) s=a+b; _(10)_ b=s; cout<<s<<end; return 0;