备考计算机二级 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(含二级更多题目题库)

3万+

被折叠的 条评论
为什么被折叠?



