Dotcpp  >  试卷列表  >  NOIP第二十届全国青少年信息学奥林匹克联赛初赛试题[2014普及组]

NOIP第二十届全国青少年信息学奥林匹克联赛初赛试题[2014普及组]


第1题

以下哪个是面向对象的高级语言( )。

共 1.5 分 

第2题

1TB 代表的字节数是 ( ) 。

共 1.5 分 

第3题

二进制数 00100100 和 00010101 的和是 ( )。

共 1.5 分 

第4题

以下哪一种设备属于输出设备 ( )。

共 1.5 分 

第5题

下列对操作系统功能的描述最为完整的是 ( ) 。

共 1.5 分 

第6题

CPU、存储器、 I/O 设备是通过 ( ) 连接起来的。

共 1.5 分 

第7题

断电后会丢失数据的存储器是( )。

共 1.5 分 

第8题

以下哪一种是属于电子邮件收发的协议( )。

共 1.5 分 

第9题

下列选项中不属于图像格式的是 ( ) 。

共 1.5 分 

第10题

链表不具有的特点是 ( ) 。

共 1.5 分 

第11题

下列各无符号十进制整数中,能用八位二进制表示的数中最大的是 ( ) 。

共 1.5 分 

第12题

下列几个 32 位 IP 地址中,书写错误的是 ( )。

共 1.5 分 

第13题

要求以下程序的功能是计算: s=1+1/2+1/3+...+1/10

1
2
3
4
5
6
7
8
9
10
11
12
#include<iostream>
using namespace std;
int main()
{
    int n;
    float s;
    s = 1.0;
    for(n = 10; n > 1; n--)
        s = s + 1 / n;
    cout << s << endl;
    return 0;
}

程序运行后输出结果错误,导致错误结果的程序行是 ( ) 。

共 1.5 分 

第14题

设变量 x 为 float 型且已赋值,则以下语句中能将 x 中的数值保留到小数点后两位,并 将第三位四舍五入的是 ( ) 。

共 1.5 分 

第15题

有以下程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
    int s, a, n;
    s = 0;
    a = 1;
    cin >> n;
    do
    {
        s += 1;
        a -= 2;
    while(a != n);
    cout << s << endl;
    return 0;
}

若要使程序的输出值为 2 ,则应该从键盘给 n 输入的值是 ( ) 。

共 1.5 分 

第16题

一棵具有 5 层的满二叉树中结点数为 ( ) 。

共 1.5 分 

第17题

有向图中每个顶点的度等于该顶点的 ( ) 。

共 1.5 分 

第18题

设有 100 个数据元素,采用折半搜索时,最大比较次数为 ( )。

共 1.5 分 

第19题

若有如下程序段,其中 s、a、b 、c 均已定义为整型变量,且 a、 c 均已赋值, c>0 。

1
2
3
s = a;
for(b = 1; b <= c; b++)
    s += 1;

则与上述程序段功能等价的赋值语句是( )。

共 1.5 分 

第20题

计算机界的最高奖是( )。

共 1.5 分 

第21题

把 M 个同样的球放到 N 个同样的袋子里,允许有的袋子空着不放,问共有多少种不同 的放置方法? (用 K 表示 )。 例如, M=7 ,N=3 时, K=8 ;在这里认为和是同一种放置方法。 问: M=8 ,N=5 时, K=_____ 。

共 5 分 

第22题

如图所示,图中每条边上的数字表示该边的长度,则从 A 到 E 的最短距离是______。

Snipaste_2021-01-25_22-19-36.png

共 5 分 

第23题

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
int main()
{
    int a, b, c, d, ans;
    cin >> a >> b >> c;
    d = a - b;
    a = d + c;
    ans = a * b;
    cout << "Ans = " << ans << endl;
    return 0;
}

输入:

2 3 4

输出:____


共 8 分 

第24题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int fun(int n)
{
    if(n == 1)
        return 1;
    if(n == 2)
        return 2;
    return fun(n - 2) - fun(n - 1);
}
int main()
{
    int n;
    cin >> n;
    cout << fun(n) << endl;
    return 0;
}

输入:

7

输出:____


共 8 分 

第25题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
using namespace std;
int main()
{
    string st;
    int i, len;
    getline(cin, st);
    len = st.size();
    for(i = 0; i < len; i++)
        if(st[i] >= 'a' && st[i] <= 'z')
            st[i] = st[i] - 'a' 'A';
    cout << st << endl;
    return 0;
}

输入:

Hello, my name is Lostmonkey.

输出:____


共 8 分 

第26题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;
const int SIZE = 100;
int main()
{
    int p[SIZE];
    int n, tot, i, cn;
    tot = 0;
    cin >> n;
    for(i = 1; i <= n; i++)
        p[i] = 1;
    for(i = 2; i <= n; i++)
    {
        if(p[i] == 1)
            tot++;
        cn = i * 2;
        while(cn <= n)
        {
            p[cn] = 0;
            cn += i;
        }
    }
    cout << tot << endl;
    return 0;
}

输入:

30

输出:____


共 8 分 

第27题

(数字删除)下面程序的功能是将字符串中的数字字符删除后输出。请填空。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;
int delnum(char *s)
{
    int i, j;
    j = 0;
    for(i = 0; s[i] != '\0'; i++)
        if(s[i] < '0' ① s[i] > '9')
        {
            s[j] = s[i];
            ②;
        }
    return ③;
}
const int SIZE = 30;
int main()
{
    char s[SIZE];
    int len, i;
    cin.getline(s, sizeof(s));
    len = delnum(s);
    for(i = 0; i < len; i++)
        cout << ④;
    cout << endl;
    return 0;
}


共 12 分 

第28题

(最大子矩阵和)给出 m 行 n 列的整数矩阵,求最大的子矩阵和(子矩阵不能为空)。

输入第一行包含两个整数 m 和 n,即矩阵的行数和列数。之后 m 行,每行 n 个整数,描述整个矩阵。程序最终输出最大的子矩阵和。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
using namespace std;
const int SIZE = 100;
int matrix[SIZE + 1][SIZE + 1];
int rowsum[SIZE + 1][SIZE + 1]; //rowsum[i][j]记录第 i 行前 j 个数的和
int m, n, i, j, first, last, area, ans;
int main()
{
    cin >> m >> n;
    for(i = 1; i <= m; i++)
        for(j = 1; j <= n; j++)
            cin >> matrix[i][j];
    ans = matrix ①;
    for(i = 1; i <= m; i++)
        
    for(i = 1; i <= m; i++)
        for(j = 1; j <= n; j++)
            rowsum[i][j] = ③;
    for(first = 1; first <= n; first++)
        for(last = first; last <= n; last++)
        {
            ④;
            for(i = 1; i <= m; i++)
            {
                area += ⑤;
                if(area > ans)
                    ans = area;
                if(area < 0)
                    area = 0;
            }
        }
    cout << ans << endl;
    return 0;

共 16 分 

试卷信息

题量: 28 道
总分: 100 分
一、单项选择题(1-20 共 20 题);
二、问题求解(21-22 共 2 题);
三、阅读程序写结果。(23-26 共 4 题);
四、完善程序(27-28 共 2 题)。