第七届分区联赛普及组初赛
(普及组C++语言 二小时完成)
一、选择一个正确答案代码(A/B/C/D),填入每题的括号内(每题1.5分,多选无分,共30分)
1.在计算机内部,一切信息存取、处理和传递的形式是( )
A)ASCII码 B)BCD码 C)二进制 D)十六进制
2.在树型目录结构中,不允许两个文件名相同主要指的是( )
A)同一个磁盘的不同目录下 B)不同磁盘的同一个目录下
C)不同磁盘的不同目录下 C)同一个磁盘的同一个目录下
3.WORD是一种( )
A)操作系统 B)文字处理软件 C)多媒体制作软件 D)网络浏览器
4.计算机软件保护法是用来保护软件( )的。
A)编写权 B)复制权 C)使用权 D)著作权
5.下面关于算法的错误说法是( )
A)算法必须有输出 B)算法必须在计算机上用某种语言实现
C)算法不一定有输入 D)算法必须在有限步执行后能结束
6.解释程序的功能是( )
A)将高级语言程序转换为目标程序 B)将汇编语言程序转换为目标程序
C)解释执行高级语言程序 D)解释执行汇编语言程序
7.与二进制数101.01011等值的十六进制数为( )
A)A.B B)5.51 C)A.51 D)5.58
8.断电后计算机信息依然存在的部件为( )
A)寄存器 B)RAM存储器 C)ROM存储 D)运算器
9.2KB的内存能存储( )个汉字的机内码
A)1024 B)516 C)2048 D)218
10.DOS暂驻区中的程序主要是用于( )
A)执行DOS内部命令 B)执行DOS外部命令
C)执行DOS所有命令 D)基本输入输出
11.若我们说一个微机的CPU是用的PII300,此处的300确切指的是( )
A)CPU的主时钟频率 B)CPU产品的系列号
C)每秒执行300百万条指令 D)此种CPU允许最大内存容量
12.运算17 %4的结果是( )
A)7 B)3 C)1 D)4
13.应用软件和系统软件的相互关系是( )
A)后者以前为基础 B)前者以后者为基础
C)每一类都以另一类为基础 D)每一类都不以另一类为基础
14.以下对Windows的叙述中,正确的是( )
A)从软盘上删除的文件和文件夹,不送到回收站
B)在同一个文件夹中,可以创建两个同类、同名的文件
C)删除了某个应用程序的快捷方式,将删除该应用程序对应的文件
D)不能打开两个写字板应用程序
15.Email邮件本质上是一个( )
A)文件 B)电报 C)电话 D)传真
16.计算机病毒是( )
A)通过计算机传播的危害人体健康的一种病毒
B)人为制造的能够侵入计算机系统并给计算机带来故障的程序或指令集合
C)一种由于计算机元器件老化而产生的对生态环境有害的物质
D)利用计算机的海量高速运算能力而研制出来的用于疾病预防的新型病毒
17.下列设备哪一项不是计算机输入设备( )
A)鼠标 B)扫描仪 C)数字化仪 D)绘图仪
18.在计算机硬件系统中,cache是( )存储器
A)只读 B)可编程只读 C)可擦除可编程只读 D)高速缓冲
19.在顺序表(2,5,7,10,14,15,18,23,35,41,52)中,用二分法查找12,所需的关键码比较的次数为( )
A)2 B)3 C)4 D)5
20.若已知一个栈的入栈顺序是1,2,3,…,n,其输出序列为P1,P2,P3,…,Pn,若P1是n,则Pi是( )
A)i B)n-1 C)n-i+1 D)不确定
二、问题求解(5+7=12分)
1.在a,b,c,d,e,f六件物品中,按下面的条件能选出的物品是:
(1)a,b两样至少有一样
(2)a,d不能同时取
(3)a,e,f中必须有2样
(4)b,c要么都选,要么都不选
(5)c,d两样中选一样
(6)若d不选,则e也不选
2.平面上有三条平行直线,每条直线上分别有7,5,6个点,且不同直线上三个点都不在同一条直线上。问用这些点为顶点,能组成多少个不同三角形?
三、阅读程序,写出正确的程序运行结果(5+8+9+9=31分)
1、int fun(int x)
{
if(x==0||x==1)
return 3;
else
return x-fun(x-2);
}
int main()
{
cout<
}
输出:
2.
int main()
{
int i,j,f;
int a[9];
for(i=1;i<=8;i++)
{
f=i%2;
if(f==0)
a[i]=0;
else
a[i]=1;
for(j=1;j<=i;j++)
if(f==0)
a[i]+=j;
else
a[i]*=j;
}
for(i=1;i<=8;i++)
cout<}
输出
3.
int main()
{
int p,q,s,t;
cin>>p;
for(q=p+1;q<=2*p;q++)
{
t=0;
s=(p*q)%(q-p);
if(s==0)
{
t=p+q+p*q/(q-p);
cout<}
}
}
输入:12
输出:
4.
int n,k,i;
int a[40];
void find(int x)
{
int s,i1,j1;
bool p;
i1=0,p=true;
while(p)
{
i1++;s=0;
for(j1=0;j1if(a[j1]>a[i1]) s++;
if(s==x-1)
{
cout<}
}
}
int main()
{
cin>>n>>k;
for(i=0;icin>>a[i];
find(k);
find(n-k);
}
输入:10 4
12 34 5 65 67 87 7 90 120 13
输出:
四、完善程序(每空3分 共27分)
1.输入n个0到100之间的整数,由小到大排序输出,每行输出8个
程序清单:
int main()
{
int i,j,k,n,x;
int b[101];
cin>>n;
for(i=0;i<=100;i++)b[i]=0;
for(i=1;i<=n;i++)
{
cin>>x;b[x]= ①
}
②
for(i=0;i<=100;i++)
while( ③ )
{
cout<< ④ <<" ";
k++;b[i]--;
if( ⑤ )cout<}
}
2.在A,B两个城市之间设有N个路站(如下图中的S1,且N<100),城市与路站之间、路站和路站之间各有若干条路段(各路段数≤20,且每条路段上的距离均为一个整数)。
A,B的一条通路是指:从A出发,可经过任一路段到达S1,再从S1出发经过任一路段,…最后到达B。通路上路段距离之和称为通路距离(最大距离≤1000)。当所有的路段距离给出之后,求出所有不同距离的通路个数(相同距离仅记一次)。
例如:下图所示是当N=1时的情况:
从A到B的通路条数为6,但因其中通路5+5=4+6,所以满足条件的不同距离的通路条数为5。
算法说明:本题采用穷举算法。
数据结构:n:记录A,B间路站的个数
数组d[i,0]记录第i-1到第i路站间路段的个数
d[i,1],D[i,2],…记录每个路段距离
数组b[i]记录当前第i站是取的是第几条路段
数组g记录可取到的距离
程序清单:
int main()
{
int i,j,n,s;
int b[101],d[101][21];
bool g[1001];
cin>>n;
for(i=1;i<=n+1;i++)
{
cin>>d[i][0];
for(j=1;j<=d[i][0];j++)
cin>>d[i][j];
}
d[0][0]=1;
for(i=1;i<=n+1;i++)
b[i]=1;//开始时每站都取第一条路
for(i=0;i<=1000;i++)
g[i]=0;
while( ① )
{
s=0;
for(i=1;i<=n+1;i++)s= ② ;
g[s]=true;j=n+1;
while( ③ ) j--;
if(j==0)break;//j到0表示所有的可以取的路都取完了,应该跳出循环
b[j]++;//取下一条路
for(i=j+1;i<=n+1;i++)
b[i]=1;//将后面各段都取回第一条路
}
s=0;
for(i=1;i<=1000;i++)
s= ④ ;
cout<system("Pause");
}