2025年9月计算机二级C语言程序设计——选择题打卡Day10

备考计算机二级 C 语言 程序设计考试,选择题是不容忽视的重要部分。

今天为大家带来 10 道选择题,聚焦指针与数组的复杂应用,助力突破难点。

1、有以下程序

#include <stdio.h>
main()
{
    int a[5] = {1,2,3,4,5}, *p = a;
    printf("%d\n", *(p+2));
}

程序运行后的输出结果是( )
A. 1
B. 2
C. 3
D. 4

答案:C

分析:p指向数组首地址(a[0]),p+2表示向后移动 2 个元素的地址(指向a[2]),*(p+2)取出该地址的值 3,故 C 正确。

2、以下定义中,p是指向数组的指针的是( )
A. int *p [5];
B. int (*p)[5];
C. int p [5];
D. int *p ();

答案:B

分析:A 是指针数组(数组元素为 int 指针);B 是指向 “包含 5 个 int 元素的数组” 的指针;C 是普通 int 数组;D 是返回 int 指针的函数声明。故 B 正确。

3、有以下程序

#include <stdio.h>
main()
{
    int a[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}}, *p = &a[0][0];
    printf("%d\n", *(p+4));
}

程序运行后的输出结果是( )
A. 5
B. 4
C. 6
D. 3

答案:A

分析:二维数组在内存中按行连续存储,元素顺序为 1、2、3、4、5、6、7、8、9。p指向首元素,p+4指向第 5 个元素(值为 5),故 A 正确。

4、以下程序段中,能正确输出字符串的是( )
A. char *str = “hello”; printf (“% s”, str);
B. char str [5] = “hello”; printf (“% s”, str);
C. char *str; *str = “hello”; printf (“% s”, str);
D. char str [5]; str = “hello”; printf (“% s”, str);

答案:A

分析:A 中指针str指向字符串常量,可通过%s输出;B 中数组长度为 5,无法存储 “hello”(含 ‘\0’ 共 6 个字符),会溢出;C 中未初始化指针str就赋值,存在风险;D 中数组名是常量,不能直接赋值。故 A 正确。

5、有如下程序

#include <stdio.h>
main()
{
    int a[2][3] = {1,2,3,4,5,6};
    int (*p)[3] = a;
    printf("%d %d\n", *(*(p+1)+1), (*p)[1]);
}

程序运行后的输出结果是( )
A. 5 2
B. 4 2
C. 5 3
D. 6 3

答案:A

分析:p是指向二维数组行的指针,p+1指向第二行,*(p+1)+1指向第二行第二列(值 5);(*p)[1]是第一行第二列(值 2),故输出 “5 2”,A 正确。

6、以下关于指针数组的叙述中,正确的是( )
A. 指针数组的每个元素都是同类型的指针
B. 指针数组的长度必须在定义时指定
C. 指针数组的元素不能指向字符串
D. 指针数组中的指针必须指向相同类型的数据

答案:A

分析:指针数组是 “元素为指针的数组”,每个元素类型相同(A 正确);可通过初始化列表确定长度(B 错误);可指向字符串(如char *strs[]={"a","b"},C 错误);指针可指向不同类型数据(需强制转换,D 错误)。

7、有以下程序

#include <stdio.h>
main()
{
    int a[4] = {1,2,3,4}, *p[4], i;
    for(i=0; i<4; i++)
        p[i] = &a[i];
    printf("%d\n", *p[2]);
}

程序运行后的输出结果是( )
A. 1
B. 2
C. 3
D. 4

答案:C

分析:p是指针数组,p[i]指向a[i]p[2]指向a[2]*p[2]a[2]=3,故 C 正确。

8、以下程序段中,不能正确遍历数组元素的是( )
A. int a [5] = {1,2,3,4,5}, *p; for (p=a; p<a+5; p++) printf (“% d”, *p);
B. int a [5] = {1,2,3,4,5}, i; for (i=0; i<5; i++) printf (“% d”, a [i]);
C. int a [5] = {1,2,3,4,5}, *p = a; while (p < a+5) printf (“% d”, *p++);
D. int a [5] = {1,2,3,4,5}, *p = a; for (i=0; i<5; i++) printf (“% d”, p [i++]);

答案:D

分析:D 中p[i++]会导致下标和指针同时递增,遍历错误(实际访问a[0]a[2]a[4]后越界);A、B、C 均正确遍历数组,故 D 错误。

9、有如下程序

#include <stdio.h>
void fun(int *x, int n)
{
    int i, t;
    for(i=0; i<n/2; i++)
    {
        t = x[i];
        x[i] = x[n-1-i];
        x[n-1-i] = t;
    }
}
main()
{
    int a[5] = {1,2,3,4,5};
    fun(a,5);
    for(i=0; i<5; i++)
        printf("%d", a[i]);
}

程序运行后的输出结果是( )
A. 54321
B. 12345
C. 13542
D. 21543

答案:A

分析:fun函数反转数组,调用后a变为{5,4,3,2,1},故输出 A。

10、以下关于数组名作为函数参数的叙述中,正确的是( )
A. 数组名作为实参时,传递的是数组所有元素的值
B. 函数形参必须是数组名
C. 函数形参可以是指针变量
D. 数组名作为参数时,函数中不能修改数组元素的值

答案:C

分析:数组名作为实参传递的是首地址(A 错误);形参可以是指针(如void fun(int *x),C 正确,B 错误);函数中可通过指针修改数组元素(D 错误)。

希望这 10 道题能帮助大家对计算机二级 C 语言的知识点有更深入的理解和掌握。如果想要获取完整版 PDF(含二级更多题目题库)

夸克网盘分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值