阅读程序专题

本试卷共 6 道阅读程序题,包含判断题与选择题,每题均附标准答案与解析。请仔细阅读代码与题目描述,按要求作答,祝您考试顺利!

Q1:姓名

填空1

:程序 1:小模拟(统计某数位出现次数)#include using namespace std;int n, k, cnt = 0;void dep(int x) {    int a;    while(x 1) {        a = x % 10;        if (a == k) cnt++;        x = x / 10;    }}int main() {    cin n k;    dep(n);    cout cnt endl;    return 0;} 

Q2:【程序1】判断题:将第 7 行“a = x % 10;”改为“a = x - x/10*10;”,程序的运行结果不会改变。

正确
错误

Q3:【程序1】判断题:如果 k=10,则程序一定输出 0。

正确
错误

Q4:【程序1】判断题:如果 k=0,则程序一定输出 0。

正确
错误

Q5:【程序1】选择题:如果输入是 n=11123, k=1,程序的输出结果是()。

A.1
B.2
C.3
D.5

Q6:【程序1】选择题:如果输入是 n=12233, k=2,程序的输出结果是()。

A.1
B.2
C.3
D.5

:分割线

:程序 2:字符串模拟(字母桶计数)#include using namespace std;char st[100];int cnt[100];int len, sum = 0;int main() {    scanf(%s, st);    len = strlen(st);    for(int i = 0; i len; i++) {        if (st[i] = a && st[i] = z) st[i] = st[i] - a + A;    }    for(int i = 0; i len; i++) {        if (st[i] = A && st[i] = Z) {            cnt[st[i]-A]++;        }    }    for(int i = 0; i 26; i++) {        printf(%d , cnt[i]);        sum = sum + cnt[i];    }    printf(\n);    printf(%d\n, sum);    return 0;}

Q7:【程序2】判断题:若输入全为小写字母且互不相同,则输出一定为 26。

正确
错误

Q8:【程序2】判断题:大小写字母分别计数,因此 A 和 a 会被视为不同字符。

正确
错误

Q9:【程序2】判断题:若输入为空字符串,则程序会发生运行时错误。

正确
错误

Q10:【程序2】选择题:若输入字符串中没有任何字母(如全为数字或符号),程序输出是()。

A.1
B.26
C.52
D.0

Q11:【程序2】选择题:若输入为 aAbBcCdD(4 个不同小写+3 个不同大写,注意字母不重复),程序统计不同字母的个数为()。

A.3
B.5
C.7
D.26

:分割线

:程序 3:数组模拟(桶计数,从大到小取偶次)#include using namespace std;int n, sum = 0, js = 0;int a[1005], b[1005], maxn = 0;int main() {    cin n;    for(int i = 1; i = n; i++) {        cin a[i];        b[a[i]]++;        if (a[i] maxn) maxn = a[i];    }    for(int i = maxn; i = 1; i--) {        if (b[i] 0) {            js = js + 1;            if (js % 2 == 0) sum += b[i];        }    }    cout sum endl;    return 0;} 

Q12:【程序3】判断题:程序从大到小遍历不同值,并累加偶数次序位上的频次。

正确
错误

Q13:【程序3】判断题:若 maxn 初始为 0,输入数据均为正整数,则 maxn 最终会更新为 a 数组中的最大值。

正确
错误

Q14:【程序3】判断题:将第 2 个 for 循环的起始条件改为 i=n 而不是 i=maxn,结果一定不变。

正确
错误

Q15:【程序3】选择题:若输入 n=5,a 数组为 1,2,3,4,5(各出现 1 次),程序输出是()。

A.2
B.3
C.4
D.5

Q16:【程序3】选择题:若频次分布为 1→2、2→1、3→3、4→1,程序输出 sum 为()。

A.3
B.5
C.7
D.9

:分割线

:程序 4:数组模拟(约瑟夫环变体)#include using namespace std;int n, k, live[100];int main() {    cin n k;    for(int i = 1; i = n; i++) live[i] = 1;    int ind=0;    for(int i = 1; i n; i++) {        int bs = 0;        while(bs != k) {            ind++;            if (ind n) ind = 1;            if (live[ind]==1) bs++;        }        live[ind] = 0;    }    for(int i = 1; i = n; i++)        if (live[i] == 1) cout i ;    return 0;} 

Q17:【程序4】判断题:live 数组用 1 表示存活、0 表示出局,报数时只对 live[ind]==1 的人计数。

正确
错误

Q18:【程序4】判断题:ind 超过 n 时会回到 1,实现环形报数。

正确
错误

Q19:【程序4】判断题:程序最终输出的是最后一个存活者的编号。

正确
错误

Q20:【程序4】选择题:在特定输入下,程序输出的幸存者编号为 2,对应的选项是()。

A.1
B.2
C.n-1
D.n

Q21:【程序4】选择题:当 k 取某特殊值时,幸存者编号总是 n,对应选项是()。

A.n
B.1
C.n/2
D.2

:分割线

:程序 5:指向法(二分图配对计数)#include using namespace std;int n, w1 = 0, w2 = 0;int a[100], b[100];int main() {    int x, y;    cin n;    for(int i = 1; i = n; i++) {        a[i] = 0;        b[i] = 0;    }    for(int i = 1; i = n; i++) {        cin x y;        if (a[x] != 0) b[a[x]] = 0;        else w1++;        a[x] = y;        b[y] = x;    }    for(int i = 1; i = n; i++) {        if (a[i] 0) w2++;        if (b[i] 0) w2++;    }    cout w1*2-w2 endl;    return 0;} 

Q22:【程序5】判断题:w2 统计的是 a、b 两个数组中大于 0 的元素总个数,且每个数对 (x,y) 一定贡献 2 个计数。

正确
错误

Q23:【程序5】判断题:若每次输入都把之前的映射完全覆盖且最终无有效映射,则 w2 一定等于 2n。

正确
错误

Q24:【程序5】判断题:b[y]=x 表示建立从 y 到 x 的反向映射,且可能覆盖旧值。

正确
错误

Q25:【程序5】选择题:在特定输入下,w1 的输出结果为 0,对应选项是()。

A.0
B.1
C.n
D.2n

Q26:【程序5】选择题:在特定输入下,w2 的输出结果为 99,对应选项是()。

A.0
B.99
C.100
D.200

:分割线

:程序 6:递归类(二分分治交换计数)#include using namespace std;int n, a[1000], b[1000];int ff(int l, int r) {    if (l == r) return 1;    int mid = (l+r) / 2, Lv = 0, Rv = 0;    for(int i = l; i = mid; i++)        if (a[i] b[i]) {            Lv++;            int tmp = a[i];            a[i] = b[i];            b[i] = tmp;        }    for(int i = mid+1; i = r; i++)        if (b[i] a[i]) {            Rv++;            int tmp = a[i];            a[i] = b[i];            b[i] = tmp;        }    int lf = ff(l, mid);    int rf = ff(mid+1, r);    return lf * Lv + rf * Rv;}int main() {    cin n;    for(int i = 0; i n; i++) cin a[i];    for(int i = 0; i n; i++) cin b[i];    cout ff(0, n-1) endl;

Q27:【程序6】判断题:将递归边界“if(l == r) return 1;”改为“if(l r) return 1;”,程序结果不变。

正确
错误

Q28:【程序6】判断题:交换第 21 行“int lf = ff(l, mid);”和第 22 行“int rf = ff(mid+1, r);”的顺序,结果不变。

正确
错误

Q29:【程序6】选择题:假设 n=10,且满足 a[i]=i,b[i]=n-1-i,则程序的输出是()。

A.0
B.1
C.10
D.100

Q30:【程序6】选择题:假设 n=100,且满足 a[i]=i,b[i]=n-1-i,则程序的输出是()。

A.0
B.100
C.5000
D.10000

Q31:【程序6】选择题:假设 n=10,且满足所有 b[i] a[i],则程序的输出是()。

A.0
B.10
C.15
D.30
阅读程序专题
关于
2个月前
更新
0
频次
42
题目数
分享
问问AI
有问题?问问AI帮你修改 改主题:如咖啡问卷改为奶茶问卷