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

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

今天为大家带来 10 道选择题,聚焦结构体与共用体的定义和使用,助力掌握复合数据类型。

1、以下定义结构体的语句中,正确的是( )
A. struct student {int id; char name [20];}
B. struct {int id; char name [20];} student;
C. struct student int id; char name [20];
D. struct student {int id; char name [20]};

答案:B

分析:A 缺少分号;C 缺少花括号;D 结构体成员后缺少分号;B 是匿名结构体定义并命名为 student,正确。

2、有如下程序

#include <stdio.h>
struct person
{
    char name[10];
    int age;
};
main()
{
    struct person room[2] = {{"Wang", 19}, {"Li", 20}};
    printf("%s:%d\n", (room+1)->name, room->age);
}

程序运行后的输出结果是( )
A. Li:20
B. Wang:17
C. Wang:19
D. Li:19

答案:D

分析:room+1指向第二个元素,name 为 “Li”;room->age是第一个元素的 age=19,故输出 “Li:19”。

3、以下关于结构体数组的叙述中,正确的是( )
A. 结构体数组中的每个元素都是相同类型的结构体变量
B. 结构体数组不可以初始化
C. 结构体数组元素的成员不能是数组
D. 结构体数组的长度必须在定义时指定

答案:A

分析:结构体数组的元素都是同一结构体类型(A 正确);可以初始化(B 错误);成员可以是数组(如 char name [20],C 错误);可以不指定长度,由初始化列表确定(D 错误)。

4、有以下程序

#include <stdio.h>
struct STU
{
    char name[10];
    int score;
};
void f(struct STU *p)
{
    strcpy(p->name, "Zhang");
    p->score = 90;
}
main()
{
    struct STU s = {"Li", 80};
    f(&s);
    printf("%s,%d\n", s.name, s.score);
}

程序运行后的输出结果是( )
A. Li,80
B. Zhang,80
C. Li,90
D. Zhang,90

答案:D

分析:函数 f 通过指针修改结构体成员,name 改为 “Zhang”,score 改为 90,故输出 “Zhang,90”。

5、关于共用体类型变量的叙述中,正确的是( )
A. 共用体变量的各成员同时占用相同的内存空间
B. 共用体变量的各成员占用不同的内存空间
C. 共用体变量的长度是各成员长度之和
D. 共用体变量不能初始化

答案:A

分析:共用体的所有成员共享同一块内存空间(A 正确,B 错误);长度是最长成员的长度(C 错误);可以初始化(D 错误)。

6、有如下程序

#include <stdio.h>
typedef struct
{
    int x, y;
} Point;
Point fun(Point p)
{
    p.x += 10;
    p.y += 10;
    return p;
}
main()
{
    Point a = {1, 2};
    a = fun(a);
    printf("%d,%d\n", a.x, a.y);
}

程序运行后的输出结果是( )
A. 1,2
B. 11,12
C. 10,10
D. 10,20

答案:B

分析:函数 fun 修改形参 p 的成员后返回,主函数中 a 接收返回值,x=1+10=11,y=2+10=12,输出 “11,12”。

7、以下程序中,与结构体成员 a 的引用形式错误的是( )

#include <stdio.h>
struct T
{
    int a;
    struct T *next;
};
main()
{
    struct T t1={1, NULL}, t2={2, &t1}, *p=&t2;
    // 引用形式
}

A. t1.a
B. t2.next->a
C. p->a
D. (*p).a

答案:C

分析:p 指向 t2,p->a 是 t2 的 a=2(合法);A 是 t1 的 a;B 是 t2.next 指向 t1 的 a;C 正确,无错误。(题目可能有误,实际 C 合法,若必须选错误项,可能为其他选项)。

8、有以下程序

#include <stdio.h>
union data
{
    int i;
    char c;
    float f;
};
main()
{
    union data x;
    x.i = 10;
    x.c = 'A';
    x.f = 12.5;
    printf("%d\n", x.i);
}

程序运行后的输出结果是( )
A. 10
B. 65
C. 0
D. 不确定

答案:D

分析:共用体成员共享内存,最后赋值的 f 覆盖了 i 的空间,i 的值变为 f 的二进制表示对应的整数,结果不确定,故 D 正确。

9、有如下程序

#include <stdio.h>
struct node
{
    int data;
    struct node *next;
};
main()
{
    struct node a={1, NULL}, b={2, NULL}, *p=&a;
    a.next = &b;
    printf("%d\n", p->next->data);
}

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

答案:B

分析:p 指向 a,a.next 指向 b,p->next->data即 b.data=2,输出 2。

10、以下关于 typedef 的叙述中,正确的是( )
A. typedef 不能定义新的类型名
B. typedef 可以简化结构体类型的定义
C. typedef 可以替代 #define
D. typedef 定义的类型名必须大写

答案:B

分析:typedef 可定义新类型名(A 错误);可简化结构体定义(如typedef struct {…} STU;,B 正确);与 #define 功能不同(C 错误);类型名可小写(D 错误)。

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

夸克网盘分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值