内容正文:
《编程语言基础——C语言》高等教育出版社(第五版)
第七章 结构体和共用体 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题2分,共40分)
1. 设有以下语句,则下面叙述中正确的是( )
typedef struct REC
{ char c; int a[4];} REC1;
A. 可以用REC定义结构体变量 B. REC1是 struct REC类型的变量
C. REC是struct 类型的变量 D. 可以用REC1定义结构体变量
答案:D
2. 下列关于结构的说法错误的是( )
A. 结构中可设定若干个不同数据类型的成员
B. 结构是由用户自定义的一种数据类型
C. 结构中成员的数据类型可以是另一个已定义的结构
D. 在定义结构时,可以为成员设置默认值
答案:D
3. 以下关于结构体的叙述中,错误的是( )
A. 结构体中的成员可以具有不同的数据类型
B. 构体中的成员不可以与结构体变量同名
C. 结构体是一种可由用户构造的数据类型
D. 结构体中的成员可以是指向自身结构的指针类型
答案:B
4. 以下对结构体类型变量st的定义中,错误的是( )
A. struct { char c;int a;} st;
B. struct { char c;int a;} TT; struct TT st;
C. typedef struct { char c;int a;} TT; TT st;
D. #define TT struct TT{ char c;int a;} st;
答案:B
5. 说明一个结构体变量时,系统分配给它的内存是( )
A. 各成员所需内存量的总和
B. 结构中第一个成员所需内存量
C. 成员中占内存量最大者所需的容量
D. 结构中最后一个成员所需内存量
答案:A
6. C语言结构体类型变量在程序执行期间( )
A. 所有成员一直驻留在内存中
B. 只有一个成员驻留在内存中
C. 部分成员驻留在内存中
D. 没有成员驻留在内存中
答案:A
7. C语言共用体类型变量在程序执行期间( )
A. 所有成员一直驻留在内存中
B. 只有一个成员驻留在内存中
C. 部分成员驻留在内存中
D. 没有成员驻留在内存中
答案:B
8. 以下对共用体类型数据的正确叙述是( )
A.一旦定义了一个共用体变量后,即可引用该变量或该变量中的任意成员
B.一个共用体变量中可以同时存放其所有成员
C.一个共用体变量中不能同时存放其所有成员
D.共用体类型数据可以出现在结构体类型定义中,但结构体类型数据不能出现在共用体类型定义中。
答案:C
9. 设有以下说明语句,则下面的叙述不正确的是( )
struct stu
{ int a; float b;} stutype;
A. struct 是结构体类型的关键字
B. struct stu 是用户定义的结构体类型名
C. stutype 是用户定义的结构体类型名
D. a 和b都是结构体成员名
答案:C
10. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int main( )
{ struct date
{ int year, month, day;
}today;
printf("%d
",sizeof(struct date));getch();}
A.6 B.8 C.10 D.12
答案:D
11. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int main( )
{ struct person { char name[9]; int age;};
struct person a[10]={"John",17, "Paul",19,"Mary",18, "adam",16};
printf("%c",a[2]. name[1]);
printf("%c
",a[2].name[0]);
getch();}
A.d B.M C.aM D.PM
答案:C
12. 若有如下定义,则以下对结构体成员的引用中错误的是( )
struct person { int id;char name[10]; } per, *s=&per;
A. per. name
B. s—>name[O]
C. (*per).name[8]
D. ( *s).id
答案:C
13. 已知学生记录及变量的定义如下, 以下能给s中的year成员赋值2025的语句是( )
struct student
{ int no; char name[20]; char sex;
struct { int year,month,day;} birth;
};
struct student s, * ps;
ps=&s;
A. s. year=2025;
B. ps. year=2025;
C. ps—>year=2025;
D. s.birth. year=2025;
答案:D
14. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int main( )
{ struct cmplx { int x;int y;}
cnum[2]={2,7,6,3};
printf("%d
",cnum[0]. y/cnum[0]. x * cnum[1]. x);
getch();}
A.18 B.0 C.2 D.7
答案:A
15. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int main( )
{ struct WTU { char name[12]; char sex; double score[2];};
struct WTU x={"Lin",'f',88.9,74.25} ,y={"Ma",'m',84.1,95.5}; y=x;
printf("%s,%c,%2.0f,%2.0f
",y.name,y.sex,y.score[1],y.score[0]);
getch();}
A. Lin,f,74,89 B.Ma,m,84,95
C.Lin,f,88.9,74.25 D.Ma,m,84.1,95.5
答案:A
16. 若有以下定义和语句, 则以下语句正确的是( )
union data
{ int i; char c; float f;} a;
int n;
A. a=5; B. a={2,’a',1.2}; C. printf("%d
",a); D. n=a;
答案:B
17. 设有以下说明,则下面不正确的叙述是( )
union data
{ int i; char c; float f;} un;
A. un 所占的内存长度等于成员f的K度
B. un 的地址和它的各成员地址都是同一地址
C. un 可以作为函数参数
D. 不能对 un赋值,但可以在定义 un时对它初始化
答案:C
18. 定义以下结构体数组,那么语句:printf”%d”,s[0].x*s[1].x)的输出结果为( )
struct c{int x,int y;}s[2]={1,3,2,7};
A.14 B.12 C.2 D.6
答案:C
19. 定义以下结构体类型,那么语句:printf(“%d”,sizeof(a))的输出结果为( )
struct s{int x;float f;}a[3];
A.8 B.12 C.4 D.24
答案:D
20. 对于以下定义,说法不正确的一项是( )
union data {int i;char c;float f;}a,b;
A.变量a所占的内存长度等于成员f的长度
B.变量a的地址和它各成员地址都是相同的
C.不能对变量a赋初值
D.可以在定义的时候对a进行初始化
答案:A
二、程序运行结果题(本题共7小题,每题3分,共21分)
21. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
struct n { int x;char c;};
int main( )
{ struct n a={20,'a'};
func(a);printf("%d,%c",a.x,a.c);getch();}
int func(struct n b)
{ b. x=20;b. c='y';}
答案:20,a
22. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
main()
{ struct ABCD
{ struct { int x; int y;}on;
int a; int b;}e;
e.a=4;e.b=5;
e.on. x=e.a * e.b;
e.on. y=e.a+e.b;
printf("%d,%d",e. on. x,e. on. y);getch();}
答案:20,9
23. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
struct ppt
{ float i; char arr[20];};
int main( )
{ struct ppt bt;
printf("bt size:%d
",sizeof(struct ppt));getch();}
答案:bt size:8
24. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
#include<string.h>
struct std{ int num;char name[10];double m;};
void fun(struct std k)
{ k.num=101; strcpy(k. name, "LiLin");
k.m=1227.0;}
int main( )
{struct std q={ 34, "LiWei",2025.3};fun(q);
printf("%d,%s,%6.1f
",q.num,q.name,q.m);getch();}
答案:34,LiWei,2025.3
25. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
union pw
{ int i;char ch[2];} a;
main( )
{ a. ch[0]=34;a. ch[1]=0;
printf("%d
",a.i);getch();}
答案:34
26. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int main( )
{ int j;
union { int a;long b;unsigned char c;}m;
m.b=0125;
printf("%o,",m. a);printf("%x
",m. c);getch();}
答案:125,55
27. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int main( )
{ union { long a;int b;char c;double f;}m;
printf("%d
",sizeof(m));getch();}
答案:8
三、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分)
28. 函数 findbook 的功能是:在有 M个元素的结构体数组 s中查找名为nam的书。若找到,函数返回数组下标;否则,函数返回一1。请填空。
#include <string.h〉
#define M 100
struct data
{ int id;
char name[20];
double price;} book[M];
int findbook(struct data s[], char nam[])
{ int i;
for(i=0;i<M;i++)
if(strcmp(【1】)==0) return i;
【2】 ;}
答案:
【1】s[i].name,nam
【2】return -1
29. 以下程序用来按学生姓名查询其排名和平均成绩。查询可连续进行,直到输入0时结束。请填空。
#include <stdio. h〉
#include <string.h>
#define NUM 4
struct student
{ int rank; char * name; float score;};
【1】 stu[]={ 3, "LiWei", 82.3,
4, "WangYang", 88.2,
1, "LiuXin", 94.1,
2, "FangHui", 93.6, };
int main( )
{ char str[10]; int i;
do { printf("Enter a name:");
scanf("%s",str);
for (i=0;i<NUM;i++)
if(【2】)
{ printf("name :%8s
",stu[i].name);
printf("rank:%3s
",stu[i]. rank);
printf("average :%5.lf
",stu[i]. score);
【3】;
}
if(【4】) printf("Not found'n");
} while(strcmp(str,”O")!=0);}
答案:
【1】struct student
【2】strcmp(str,str[i].name)==0
【3】break
【4】i>=NUM
30. 以下程序用来输出结构体变量ex所占存储单元的字节数,请填空。
struct st
{ char name[20];double score;};
main()
{【1】 ex;
printf”ex size:%d
”,sizeof(【2】));}
答案:
【1】struct st
【2】struct st或ex
四、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。(每处3分,共15分)
31. 以下程序用于输入两个学生的姓名和成绩,然后输出这两个学生的平均成绩,程序中存在5处错误,请改正。
L1 #include<stdio.h>
L2 #include<conio.h>
L3 define N 2
L4 struct Student
L5 { char name[4];
L6 float score;};
L7 main()
L8 {struct Student stu[N];
L9 int i=0;float rels=0;
L10 for(;i<N;i++)
L11 { printf("input scores of student%d:
",i+1);
L12 printf("name:");
L13 scanf("%s",&stu[i].name);
L14 printf("score:");
L15 scanf("%f",stu[i].score); }
L16 for(i=0;i<N;i++)
L18 rels+=stu[i].name;
L19 printf("avg score is:%3.2f",rels);
L20 getch();}
答案:
【1】L3 #define N 2
【2】L13 scanf("%s",stu[i].name);
【3】L15 scanf("%f",&stu[i].score); }
【4】L18 rels+=stu[i].score;
【5】L19 printf("avg score is:%3.2f",rels/N);
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$
《编程语言基础——C语言》高等教育出版社(第五版)
第七章 结构体和共用体 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题2分,共40分)
1. 设有以下语句,则下面叙述中正确的是( )
typedef struct REC
{ char c; int a[4];} REC1;
A. 可以用REC定义结构体变量 B. REC1是 struct REC类型的变量
C. REC是struct 类型的变量 D. 可以用REC1定义结构体变量
2. 下列关于结构的说法错误的是( )
A. 结构中可设定若干个不同数据类型的成员
B. 结构是由用户自定义的一种数据类型
C. 结构中成员的数据类型可以是另一个已定义的结构
D. 在定义结构时,可以为成员设置默认值
3. 以下关于结构体的叙述中,错误的是( )
A. 结构体中的成员可以具有不同的数据类型
B. 构体中的成员不可以与结构体变量同名
C. 结构体是一种可由用户构造的数据类型
D. 结构体中的成员可以是指向自身结构的指针类型
4. 以下对结构体类型变量st的定义中,错误的是( )
A. struct { char c;int a;} st;
B. struct { char c;int a;} TT; struct TT st;
C. typedef struct { char c;int a;} TT; TT st;
D. #define TT struct TT{ char c;int a;} st;
5. 说明一个结构体变量时,系统分配给它的内存是( )
A. 各成员所需内存量的总和
B. 结构中第一个成员所需内存量
C. 成员中占内存量最大者所需的容量
D. 结构中最后一个成员所需内存量
6. C语言结构体类型变量在程序执行期间( )
A. 所有成员一直驻留在内存中
B. 只有一个成员驻留在内存中
C. 部分成员驻留在内存中
D. 没有成员驻留在内存中
7. C语言共用体类型变量在程序执行期间( )
A. 所有成员一直驻留在内存中
B. 只有一个成员驻留在内存中
C. 部分成员驻留在内存中
D. 没有成员驻留在内存中
8. 以下对共用体类型数据的正确叙述是( )
A.一旦定义了一个共用体变量后,即可引用该变量或该变量中的任意成员
B.一个共用体变量中可以同时存放其所有成员
C.一个共用体变量中不能同时存放其所有成员
D.共用体类型数据可以出现在结构体类型定义中,但结构体类型数据不能出现在共用体类型定义中。
9. 设有以下说明语句,则下面的叙述不正确的是( )
struct stu
{ int a; float b;} stutype;
A. struct 是结构体类型的关键字
B. struct stu 是用户定义的结构体类型名
C. stutype 是用户定义的结构体类型名
D. a 和b都是结构体成员名
10. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int main( )
{ struct date
{ int year, month, day;
}today;
printf("%d
",sizeof(struct date));getch();}
A.6 B.8 C.10 D.12
11. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int main( )
{ struct person { char name[9]; int age;};
struct person a[10]={"John",17, "Paul",19,"Mary",18, "adam",16};
printf("%c",a[2]. name[1]);
printf("%c
",a[2].name[0]);
getch();}
A.d B.M C.aM D.PM
12. 若有如下定义,则以下对结构体成员的引用中错误的是( )
struct person { int id;char name[10]; } per, *s=&per;
A. per. name
B. s—>name[O]
C. (*per).name[8]
D. ( *s).id
13. 已知学生记录及变量的定义如下, 以下能给s中的year成员赋值2025的语句是( )
struct student
{ int no; char name[20]; char sex;
struct { int year,month,day;} birth;
};
struct student s, * ps;
ps=&s;
A. s. year=2025;
B. ps. year=2025;
C. ps—>year=2025;
D. s.birth. year=2025;
14. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int main( )
{ struct cmplx { int x;int y;}
cnum[2]={2,7,6,3};
printf("%d
",cnum[0]. y/cnum[0]. x * cnum[1]. x);
getch();}
A.18 B.0 C.2 D.7
15. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int main( )
{ struct WTU { char name[12]; char sex; double score[2];};
struct WTU x={"Lin",'f',88.9,74.25} ,y={"Ma",'m',84.1,95.5}; y=x;
printf("%s,%c,%2.0f,%2.0f
",y.name,y.sex,y.score[1],y.score[0]);
getch();}
A. Lin,f,74,89 B.Ma,m,84,95
C.Lin,f,88.9,74.25 D.Ma,m,84.1,95.5
16. 若有以下定义和语句, 则以下语句正确的是( )
union data
{ int i; char c; float f;} a;
int n;
A. a=5; B. a={2,’a',1.2}; C. printf("%d
",a); D. n=a;
17. 设有以下说明,则下面不正确的叙述是( )
union data
{ int i; char c; float f;} un;
A. un 所占的内存长度等于成员f的K度
B. un 的地址和它的各成员地址都是同一地址
C. un 可以作为函数参数
D. 不能对 un赋值,但可以在定义 un时对它初始化
18. 定义以下结构体数组,那么语句:printf”%d”,s[0].x*s[1].x)的输出结果为( )
struct c{int x,int y;}s[2]={1,3,2,7};
A.14 B.12 C.2 D.6
19. 定义以下结构体类型,那么语句:printf(“%d”,sizeof(a))的输出结果为( )
struct s{int x;float f;}a[3];
A.8 B.12 C.4 D.24
20. 对于以下定义,说法不正确的一项是( )
union data {int i;char c;float f;}a,b;
A.变量a所占的内存长度等于成员f的长度
B.变量a的地址和它各成员地址都是相同的
C.不能对变量a赋初值
D.可以在定义的时候对a进行初始化
二、程序运行结果题(本题共7小题,每题3分,共21分)
21. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
struct n { int x;char c;};
int main( )
{ struct n a={20,'a'};
func(a);printf("%d,%c",a.x,a.c);getch();}
int func(struct n b)
{ b. x=20;b. c='y';}
22. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
main()
{ struct ABCD
{ struct { int x; int y;}on;
int a; int b;}e;
e.a=4;e.b=5;
e.on. x=e.a * e.b;
e.on. y=e.a+e.b;
printf("%d,%d",e. on. x,e. on. y);getch();}
23. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
struct ppt
{ float i; char arr[20];};
int main( )
{ struct ppt bt;
printf("bt size:%d
",sizeof(struct ppt));getch();}
24. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
#include<string.h>
struct std{ int num;char name[10];double m;};
void fun(struct std k)
{ k.num=101; strcpy(k. name, "LiLin");
k.m=1227.0;}
int main( )
{struct std q={ 34, "LiWei",2025.3};fun(q);
printf("%d,%s,%6.1f
",q.num,q.name,q.m);getch();}
25. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
union pw
{ int i;char ch[2];} a;
main( )
{ a. ch[0]=34;a. ch[1]=0;
printf("%d
",a.i);getch();}
26. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int main( )
{ int j;
union { int a;long b;unsigned char c;}m;
m.b=0125;
printf("%o,",m. a);printf("%x
",m. c);getch();}
27. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int main( )
{ union { long a;int b;char c;double f;}m;
printf("%d
",sizeof(m));getch();}
三、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分)
28. 函数 findbook 的功能是:在有 M个元素的结构体数组 s中查找名为nam的书。若找到,函数返回数组下标;否则,函数返回一1。请填空。
#include <string.h〉
#define M 100
struct data
{ int id;
char name[20];
double price;} book[M];
int findbook(struct data s[], char nam[])
{ int i;
for(i=0;i<M;i++)
if(strcmp(【1】)==0) return i;
【2】 ;}
29. 以下程序用来按学生姓名查询其排名和平均成绩。查询可连续进行,直到输入0时结束。请填空。
#include <stdio. h〉
#include <string.h>
#define NUM 4
struct student
{ int rank; char * name; float score;};
【1】 stu[]={ 3, "LiWei", 82.3,
4, "WangYang", 88.2,
1, "LiuXin", 94.1,
2, "FangHui", 93.6, };
int main( )
{ char str[10]; int i;
do { printf("Enter a name:");
scanf("%s",str);
for (i=0;i<NUM;i++)
if(【2】)
{ printf("name :%8s
",stu[i].name);
printf("rank:%3s
",stu[i]. rank);
printf("average :%5.lf
",stu[i]. score);
【3】;
}
if(【4】) printf("Not found'n");
} while(strcmp(str,”O")!=0);}
30. 以下程序用来输出结构体变量ex所占存储单元的字节数,请填空。
struct st
{ char name[20];double score;};
main()
{【1】 ex;
printf”ex size:%d
”,sizeof(【2】));}
四、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。(每处3分,共15分)
31. 以下程序用于输入两个学生的姓名和成绩,然后输出这两个学生的平均成绩,程序中存在5处错误,请改正。
L1 #include<stdio.h>
L2 #include<conio.h>
L3 define N 2
L4 struct Student
L5 { char name[4];
L6 float score;};
L7 main()
L8 {struct Student stu[N];
L9 int i=0;float rels=0;
L10 for(;i<N;i++)
L11 { printf("input scores of student%d:
",i+1);
L12 printf("name:");
L13 scanf("%s",&stu[i].name);
L14 printf("score:");
L15 scanf("%f",stu[i].score); }
L16 for(i=0;i<N;i++)
L18 rels+=stu[i].name;
L19 printf("avg score is:%3.2f",rels);
L20 getch();}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$