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,以下可能的中序遍历有(    )。
ABDEAFGCH    BEDBAGFCH    CDBEAFGCH    DDEBAFCGH
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小时内删除。