2019年余姚市程序设计竞赛初赛试题
(C++/Pascal语言 二小时完成 )
●● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 ●●
一.单项选择题 (共20题,每题2分,共计40分。每题有且仅有一个正确答案。)
1、已知英文字母a的ASCll代码值是十进制数97,那么字母e的ASCll 代码十六进制表示值是( )
A)64H B)65H C)66H D)101
2、美籍匈牙利数学家冯·诺依曼对计算机科学发展所做出的贡献包括( )。
A) 提出理想计算机的数学模型,成为计算机科学的理论基础。
B) 提出存储程序工作原理,对现代电子计算机的发展产生深远影响。
C) 采用集成电路作为计算机的主要功能部件。
D) 指出计算机性能将以每两年翻一番的速度向前发展。
3、IPv6地址是由( ) 位二进制数码表示的。
A) 16 B) 32 C) 128 D) 64
4、目前计算机芯片(集成电路)制造的主要原料是( ),它是一种可以在沙子中提炼出的物质。
A) 硅 B) 铜 C) 锗 D) 铝
5、彩显示器所显示的彩,是由红、蓝和( )混合而成的。
A) 黄 B) 绿 C) 橙 D) 紫
6、以下字符串中,字典序最小的 ( )。
A) YYOI2019 B) YYOIC C) YYOIC++ D) YYOIP
7、佳佳在网上购买了一个空间,建设了一个网站。那么,他向网站上上传网页时最有可能采用的网络协议是( )。
A) HTTP B) TCP C) POP3 D) FTP
8、下列著名人物中,不是计算机相关领域专家的是
A) 王选 B) 图灵 C) 冯诺依曼 D) 屠呦呦
9、 小明一回到家,第一件事情就是对电脑喊一声“开机”,该台电脑就乖乖地开机了。这种现象说明了该台电脑使用的技术是()
A) 网络技术 B) 语音识别技术 C) 字符识别技术 D) 自动关机技术
10、如果将人体比作计算机,那么人体的记忆中枢相当于以下计算机部件的:( )
A) 运算器 B) 中央处理器 C) 控制器 D) 内存
11、一个正整数在十六进制下有200位,则它在二进制下最多可能有( )位。
A) 798 B) 799 C) 800 D) 801
12、后缀表达式abc+*d-中,a=1,b=2,c=3,d=4,则该后缀表达式的值是:
A) 3 B) -1 C) 5 D) 1
13、十进制小数0.625转成二进制数是( )。
A) 0.1 B) 0.101 C) 0.011 D) 0.01
14、对于栈来说,若进栈序列为1、2、3、4、5、6,进栈过程中可以出栈,则下列出栈序列中不可能的是( )。
A) 134256 B) 243165 C) 345621 D) 145623
15、若根节点的深度为1,1024个节点的二叉树,深度最少是
A) 9 B)10 C) 11 D) 12
16、一棵二叉树前序遍历为ABDECFGH,后序遍历为EDBGFHCA,以下可能的中序遍历有( )。
A) BDEAFGCH B) EDBAGFCH C) DBEAFGCH D) DEBAFCGH
17、深度优先搜索时,控制与记录搜索过程的数据结构是( ):
A) 链表 B) 队列 C) 栈 D) 散列表
18、给定一个长度为5 的进队序列(每个元素互不相同),一共存在的出队序列种数为:
A) 1 B) 5 C) 25 D) 42
Pascal代码:
var
n,i,j:longint;
st:string;
begin
readln(n);
st:='';
for i:=1 to n do
begin
j:=1;
while j<=i do
begin
st:=st+'*';
j:=j+2;
end;
writeln(st);
end;
end.
19、有如下程序段, 该程序段运行时,在控制台输入5,则输出的内容为( )。C++代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n; string st;
st="";
cin>>n;
for(int i=1; i <= n; i++){
for(int j=1; j <= i; j+=2)
st=st+"*";
cout<<st<<endl;
}
return 0;
}
*
*
**
**
***
A)
*
***
******
**********
***************
D)
*
**
****
******
*********
C)
*
**
***
****
*****
B)
Pascal代码
i:=1; j:=10;
readln(Key);
while(i<=j) do
begin
m:=(i+j) div 2;
if Key<=a[m] then j:=m-1
else i:=m+1;
end;
20、某二分查的算法程序段如下:C++代码
i=1; j=10;
scanf("%d", &Key);
while(i<=j){
m=(i+j)/2;
if(Key<=a[m]) j=m-1;
else i=m+1;
}
数组元素a[1]到a[10]的值依次为“12,19,27,27,27,31,38,46,55,72”。控制台输入“27”后运行程序段,运行结束后,下列说法不正确的是:
A)程序运行结束后j不等于1
B)j=m-1被执行了2次
C)该次程序运行后,m存储最左边的Key值的位置
D)将m=(i+j)/2(或m:=(i+j) div 2)改成m=(i+j+1)/2(或m:=(i+j+1) div 2)分别执行程序段
后,m的值相同。
二.阅读程序(程序输入不超过定义变量、数组或字符串定义的范围;判断题正确填“T”,错误填“F”;无特殊说明,判断题1分,选择题2分,共计30分)
Pascal 代码:
1 var
2 i,x:longint;
3 flag:boolean;
4 begin
5 readln(x);
6 flag:=true;
7 for i:=2 to x-1 do
8 if x mod i=0 then
9 begin
10 writeln(i);
11 flag:=false;
12 break;
13 end;
14 if flag then writeln('Yes')
15 else writeln('No');
printf怎么输出字符串的一部分16 end.
C++ 代码:
1 #include<bits/stdc++.h>
2 using namespace std;
3 int main(){
4 int x;
5 scanf("%d", &x);
6 bool flag=true;
7 for(int i = 2; i <= x-1; i++)
8 if(x%i==0)
9 {
10 printf("%d\n", i);
11 flag=false;
12 break;
13 }
14 if(flag) printf("Yes\n");
15 else printf("No\n");
16 return 0;
17 }
1. 判断题:
1)程序运行后,在控制台输入-1,会导致程序崩溃
2)若将第7行“x-1”改成(C++)“sqrt(x)”、(Pascal)“trunc(sqrt(x))”程序运行结果不会改变(当输入的x为大于1的整数)。
3)程序第6行,变量flag可以不赋初值,不影响程序运行结果。
4)程序第12行的“break”语句删除,会影响程序运行结果。
选择题
5)该程序段时间复杂度为:
A)O(1) B) O(n) C) O(lgn) D) O(sqrt(n))
6)当输入x为39时,控制台输出的第一行为:
A)3 B) 38 C) Yes D) No
7)当输入x为97时,控制台输出的第一行为:
A)7 B) 97 C) Yes D) No
2.
Pascal 代码:
1 var
2 a,f,sum:array[0..200000] of longint;
3 n,i,maxx,tmp:longint;
4 function yes(a,b:longint):longint;
5 begin
6 if a>b then exit(b)
7 else exit(a);
8 end;
9 begin
10 readln(n);
11 for i:=1 to n do read(a[i]);
12 tmp:=1000000007;
13 maxx:=-1000000007;
14 for i:=1 to n do
15 begin
16 sum[i]:=sum[i-1]+a[i];
17 tmp:=yes(sum[i-1],tmp);
18 f[i]:=sum[i]-tmp;
19 end;
20 for i:=1 to n do if(f[i]>maxx) then maxx:=f[i];
22 writeln(maxx);
23 end.
C++ 代码:
1 #include<bits/stdc++.h>
2 using namespace std;
3 int a[200001],f[200001],sum[200001],n;
4 int tmp=1e9+7;
5 int maxx=-1e9-7;
6 int yes(int a, int b){
7 if(a>b) return b;
8 else return a;
9 }
10 int main(){
11 scanf("%d",&n);
12 for(int i=1;i<=n;i++)
13 scanf("%d",&a[i]);
14 for(int i=1;i<=n;i++){
15 sum[i]=sum[i-1]+a[i];
16 tmp=yes(sum[i-1],tmp);
17 f[i]=sum[i]-tmp;
18 }
19 for(int i=1;i<=n;i++)
20 if(f[i]>maxx)
21 maxx=f[i];
22 printf("%d\n",maxx);
23}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论