CSP-J初赛程序阅读填空题

发布于:2025-08-28 阅读:81

CSP-J初赛程序阅读填空题

题目1:后置与前置递增运算符

cpp

#include <iostream>using namespace std;int main() {
    int a = 5, b = 3;
    cout << (a++) + (++b) << endl;
    cout << a << " " << b << endl;
    return 0;}

输出结果:

答案:
9
6 4

解析:

  • a++ 是后置递增,先使用a的值5,然后a变为6

  • ++b 是前置递增,先递增b为4,然后使用4

  • 第一行输出:5 + 4 = 9

  • 第二行输出:a=6, b=4



题目2:循环控制与条件判断

cpp

#include <iostream>using namespace std;int main() {
    int i, sum = 0;
    for (i = 1; i <= 5; i++) {
        if (i % 2 == 0) ______;
        sum += i;
    }
    cout << sum << endl;
    return 0;}

填空: 应该填入什么关键字?

答案: continue

解析:

  • 当i为偶数时跳过当前循环,继续下一次循环

  • 只有奇数会被累加到sum中

  • 最终sum = 1 + 3 + 5 = 9



题目3:指针与数组操作

cpp

#include <iostream>using namespace std;int main() {
    int a[5] = {1, 2, 3, 4, 5};
    int *p = a;
    cout << ______ << endl; // 输出a[2]的值
    cout << ______ << endl; // 输出a[0]+2的值
    return 0;}

填空: 完成代码以得到指定输出

答案:
*(p+2)
*p+2

解析:

  • p指向数组a的首地址

  • *(p+2)是a[2]的值3

  • *p是a[0]的值1,*p+2=1+2=3

  • 输出:

text

3
3



题目4:后置递增与条件判断

cpp

#include <iostream>using namespace std;int main() {
    int x = 10;
    if (______ > 10) {
        cout << "yes " << x << endl;
    } else {
        cout << "no " << x << endl;
    }
    return 0;}

填空: 填入表达式使得输出为"no 11"


答案: x++

解析:

  • x++ > 10:先判断x>10(10>10为假),然后x增加为11

  • 进入else分支,输出"no 11"




题目5:数字反转算法

cpp

#include <iostream>using namespace std;int main() {
    int n = 1234, reverse = 0;
    while (n) {
        reverse = ______ + n % 10;
        n /= 10;
    }
    cout << reverse << endl;
    return 0;}

填空: 完成数字反转算法

答案: reverse * 10

解析:

  • 将数字1234反转

  • 过程:

    • 第一次:reverse=0*10+4=4, n=123

    • 第二次:reverse=4*10+3=43, n=12

    • 第三次:reverse=43*10+2=432, n=1

    • 第四次:reverse=432*10+1=4321, n=0

  • 输出:4321



题目6:斐波那契数列生成

cpp

#include <iostream>using namespace std;int main() {
    int a = 0, b = 1, c, i;
    cout << a << " " << b << " ";
    for (i = 0; i < 3; i++) {
        c = ______;
        cout << c << " ";
        a = b;
        b = c;
    }
    return 0;}

填空: 完成斐波那契数列生成


答案: a + b

解析:

  • 斐波那契数列生成

  • 输出前两个数0和1

  • 循环3次计算后续数:

    • 第一次:c=0+1=1,输出1,a=1,b=1

    • 第二次:c=1+1=2,输出2,a=1,b=2

    • 第三次:c=1+2=3,输出3,a=2,b=3

  • 输出:0 1 1 2 3



题目7:循环控制与break语句

cpp

#include <iostream>using namespace std;int main() {
    int i, j;
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            if (i == j) ______;
            cout << i << " " << j << endl;
        }
    }
    return 0;}

填空: 填入关键字使得输出为:


1 0
2 0
2 1


答案: break

解析:

  • 当i==j时break,跳出内层循环

  • 输出i!=j且在内层循环break之前的值



题目8:switch语句与default分支

cpp

#include <iostream>using namespace std;int main() {
    int a = 5;
    switch(a) {
        case 1: a += 1;
        case 5: a += 5;
        case 10: a += 10;
        ______: a = 0;
    }
    cout << a << endl;
    return 0;}

填空: 填入关键字使得输出为0


答案: default

解析:

  • a=5,匹配case 5

  • 执行a+=5,a变为10

  • 没有break,继续执行case 10: a+=10,a变为20

  • 继续执行default: a=0

  • 输出:0



题目9:二维数组与对角线元素求和

cpp

#include <iostream>using namespace std;int main() {
    int arr[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
    int i, j, sum = 0;
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            if (______) sum += arr[i][j];
        }
    }
    cout << sum << endl;
    return 0;}

填空: 填入条件使得输出为主对角线元素和15


答案: i == j

解析:

  • 计算矩阵主对角线元素和

  • 主对角线元素:arr[0][0]=1, arr[1][1]=5, arr[2][2]=9

  • 和=1+5+9=15



题目10:引用变量与赋值操作

cpp

#include <iostream>using namespace std;int main() {
    int a = 10;
    int &b = a;
    ______ = 20;
    cout << a << endl;
    return 0;}

填空: 填入变量名使得输出为20


答案: b

解析:

  • b是a的引用,修改b就是修改a

  • b=20,a也被修改为20

  • 输出:20




题目11:循环嵌套与条件判断

cpp

#include <iostream>using namespace std;int main() {
    int count = 0;
    for (int i = 1; i <= 3; i++) {
        for (int j = 1; j <= 3; j++) {
            if (______) {
                count++;
            }
        }
    }
    cout << count << endl;
    return 0;}

填空: 填入条件使得输出为5


答案: i != j

解析:

  • 输出为5表示有5对(i,j)满足条件

  • 当i≠j时计数,总共有3×3=9种组合,减去i=j的3种,剩下6种

  • 但输出为5,说明可能还有其他条件,实际应为i+j>3或其他条件

  • 原题可能描述有误,但根据输出5,应该是i+j>3



题目12:位运算与逻辑运算

cpp

#include <iostream>using namespace std;int main() {
    int a = 5, b = 3;
    int c = a & b;
    int d = a | b;
    cout << c << " " << d << endl;
    return 0;}

填空: 预测输出结果


答案:
1
7

解析:

  • 5的二进制:0101

  • 3的二进制:0011

  • 按位与(&):0001 = 1

  • 按位或(|):0111 = 7



题目13:递归函数调用

cpp

#include <iostream>using namespace std;int func(int n) {
    if (n <= 1) return 1;
    return ______;}int main() {
    cout << func(5) << endl;
    return 0;}

填空: 完成递归函数计算阶乘


答案: n * func(n-1)

解析:

  • 递归计算阶乘

  • func(5)=5×func(4)=5×4×func(3)=...=5×4×3×2×1=120



题目14:字符串处理

cpp

#include <iostream>#include <string>using namespace std;int main() {
    string s = "Hello";
    int len = s.length();
    for (int i = 0; i < len; i++) {
        if (______) {
            cout << s[i];
        }
    }
    return 0;}

填空: 填入条件使得输出为"Hlo"


答案: i % 2 == 0

解析:

  • 输出索引为偶数的字符

  • H(0), e(1), l(2), l(3), o(4)

  • 输出索引0,2,4的字符:"Hlo"



题目15:数组元素交换

cpp

#include <iostream>using namespace std;int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int temp = arr[0];
    arr[0] = arr[4];
    ______ = temp;
    for (int i = 0; i < 5; i++) {
        cout << arr[i] << " ";
    }
    return 0;}

填空: 完成首尾元素交换


答案: arr[4]

解析:

  • 将数组首尾元素交换

  • 交换后数组变为:5, 2, 3, 4, 1

  • 输出:5 2 3 4 1



题目16:数学运算与类型转换

cpp

#include <iostream>using namespace std;int main() {
    int a = 10, b = 3;
    double c = ______;
    cout << c << endl;
    return 0;}

填空: 填入表达式使得输出为3.33333


答案: (double)a / b

解析:

  • 整数除法10/3=3

  • 需要将其中一个操作数转换为double类型

  • (double)a / b = 10.0 / 3 = 3.33333



题目17:循环与break语句

cpp

#include <iostream>using namespace std;int main() {
    int i, sum = 0;
    for (i = 1; i <= 10; i++) {
        if (sum > 15) ______;
        sum += i;
    }
    cout << sum << endl;
    return 0;}

填空: 填入关键字使得输出为21


答案: break

解析:

  • 当sum>15时跳出循环

  • 累加过程:1,3,6,10,15,21

  • 当i=6时,sum=21>15,跳出循环

  • 输出:21



题目18:指针运算

cpp

#include <iostream>using namespace std;int main() {
    int arr[5] = {10, 20, 30, 40, 50};
    int *p = arr;
    cout << *(p+2) << endl;
    cout << *p+______ << endl;
    return 0;}

填空: 填入数字使得两个输出相同


答案: 20

解析:

  • *(p+2)是arr[2]=30

  • *p是arr[0]=10,需要加20得到30

  • 输出:


30
30



题目19:条件运算符

cpp

#include <iostream>using namespace std;int main() {
    int a = 5, b = 3;
    int c = (a > b) ? ______ : b;
    cout << c << endl;
    return 0;}

填空: 填入表达式使得输出为5


答案: a

解析:

  • 条件运算符:如果a>b为真,则返回a,否则返回b

  • a=5>b=3,返回a

  • 输出:5



题目20:函数参数传递

cpp

#include <iostream>using namespace std;void swap(int &a, int &b) {
    int temp = a;
    a = b;
    b = temp;}int main() {
    int x = 5, y = 3;
    ______;
    cout << x << " " << y << endl;
    return 0;}

填空: 调用函数交换x和y的值


答案: swap(x, y)

解析:

  • 使用引用参数实现交换

  • 调用swap(x,y)后,x和y的值交换

  • 输出:3 5



CSP-J初赛程序阅读填空题(21-30题)

题目21:数组初始化与访问

cpp

#include <iostream>using namespace std;int main() {
    int arr[5] = {1};
    for (int i = 1; i < 5; i++) {
        arr[i] = ______;
    }
    for (int i = 0; i < 5; i++) {
        cout << arr[i] << " ";
    }
    return 0;}

填空: 填入表达式使数组变为{1,2,4,8,16}


答案: arr[i-1] * 2

解析:

  • 数组初始化为{1,0,0,0,0}

  • 需要生成等比数列,公比为2

  • arr[i] = arr[i-1] * 2

  • 输出:1 2 4 8 16



题目22:字符处理与ASCII码

cpp

#include <iostream>using namespace std;int main() {
    char c = 'A';
    cout << (char)(c + ______) << endl;
    return 0;}

填空: 填入数字使输出为'D'


答案: 3

解析:

  • 'A'的ASCII码是65

  • 'D'的ASCII码是68

  • 需要加3:65+3=68

  • 输出:D



题目23:循环与continue语句

cpp

#include <iostream>using namespace std;int main() {
    int sum = 0;
    for (int i = 1; i <= 10; i++) {
        if (i % 3 == 0) ______;
        sum += i;
    }
    cout << sum << endl;
    return 0;}

填空: 填入关键字使输出为37


答案: continue

解析:

  • 当i是3的倍数时跳过累加

  • 累加1,2,4,5,7,8,10

  • 和=1+2+4+5+7+8+10=37



题目24:递归与斐波那契数列

cpp

#include <iostream>using namespace std;int fib(int n) {
    if (n <= 1) return n;
    return ______;}int main() {
    cout << fib(5) << endl;
    return 0;}

填空: 完成斐波那契数列递归函数


答案: fib(n-1) + fib(n-2)

解析:

  • 斐波那契数列:fib(0)=0, fib(1)=1, fib(2)=1, fib(3)=2, fib(4)=3, fib(5)=5

  • 输出:5



题目25:二维数组与对角线

cpp

#include <iostream>using namespace std;int main() {
    int arr[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
    int sum = 0;
    for (int i = 0; i < 3; i++) {
        sum += ______;
    }
    cout << sum << endl;
    return 0;}

填空: 填入表达式计算反对角线元素和


答案: arr[i][2-i]

解析:

  • 反对角线元素:arr[0][2]=3, arr[1][1]=5, arr[2][0]=7

  • 和=3+5+7=15

  • 输出:15



题目26:指针与数组

cpp

#include <iostream>using namespace std;int main() {
    int arr[3] = {10, 20, 30};
    int *p = arr;
    cout << *p << endl;
    cout << *(______) << endl;
    return 0;}

填空: 填入表达式使第二个输出为30


答案: p+2

解析:

  • p指向arr[0]

  • p+2指向arr[2]

  • *(p+2)=30

  • 输出:

10
30



题目27:字符串长度计算

cpp

#include <iostream>#include <cstring>using namespace std;int main() {
    char str[] = "Hello";
    int len = ______;
    cout << len << endl;
    return 0;}

填空: 填入表达式计算字符串长度


答案: strlen(str)

解析:

  • "Hello"有5个字符

  • strlen(str)=5

  • 输出:5



题目28:循环与数学运算

cpp

#include <iostream>using namespace std;int main() {
    int n = 5, fact = 1;
    for (int i = 1; i <= n; i++) {
        ______;
    }
    cout << fact << endl;
    return 0;}

填空: 填入表达式计算阶乘


答案: fact *= i

解析:

  • 计算5的阶乘:5!=120

  • fact = 1×2×3×4×5=120

  • 输出:120



题目29:条件判断与逻辑运算

cpp

#include <iostream>using namespace std;int main() {
    int a = 5, b = 3;
    if (______) {
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }
    return 0;}

填空: 填入条件使输出为"Yes"


答案: a > b && a % 2 == 1

解析:

  • 需要满足两个条件:a>b且a是奇数

  • a=5>b=3且5是奇数

  • 输出:Yes



题目30:函数重载

cpp

#include <iostream>using namespace std;int add(int a, int b) {
    return a + b;}double add(double a, double b) {
    return ______;}int main() {
    cout << add(2, 3) << endl;
    cout << add(2.5, 3.5) << endl;
    return 0;}

填空: 完成重载函数使输出为6.0


答案: a + b

解析:

  • 第一个add调用int版本,输出5

  • 第二个add调用double版本,输出6.0

  • 输出:

5
6







二维码

扫一扫关注我们

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭或者错误的内容,欢迎发送邮件至272813839@qq.com举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容或者修正错误的内容。

标签:

相关文章