国家二级C语言机试(结构体、共用体、位运算及文件操作)模拟试卷7
选择题
1.有以下程序
struct A{int a;char b[10];
double c;};
void f(struct A t);
main(){structA a={1001,\\(B)
A. 1002,ChangRong,1202.0
B. 1001,ZhangDa,1098.0
C. 1001,ChangRong,1098.0
D. 1002,ZhangDa,1202.0
解析:在主函数中定义结构体A的变量a,并对其赋初值,再调用函数f(a),形参t接收实参的数据,在函数f(t)中对结构体变量t的各个成员进行了赋值操作,需要注意的,形参和实参之间是数据传递,因此对形参的操作对实参不产生影响,因此在主函数输出仍然输出变量a的数据。
2.若有以下程序
struct stu{char*name,gender;int score;};
main(){struct stu a={NULL,’m’,290},b;
a.name=(char*)malloc(10);
strcpy(a.name,\\(D)
A. Zhao,m,290,Qian,f,350
B. Qian,f,350,Qian,f,350
C. Zhao,m,290,Zhao,f,350
D. Qian,m,290,Qian,f,350
解析:主函数中定义结构体类型struct stu,有三个成员,第一个成员为字符指针变量。主函数中为stu类型变量a赋值,首先为a.name成员分配存储空间,存入数据。b=a;语句执行完毕以后,a和b的各个成员值相同,需要注意的是b.name和a.name成员都保存了同一段内存的地址,凼此当为变量b赋值的时候,同样更改了a的name成员,而其他成员由于有单独的存储空间而不会发生改变。
3.若有以下程序
typedef struct stu{char*name,gender;int score;}STU;
void f(char*p){P=(char*)malloc(10);strcpy(p,\\(D)
A. Zhao,m,290,Qian,f,350
B. Qian,f,350,Qian,f,350
C. Qian,m,290,Qian,f,350
D. Zhao,m,290,Zhao,f,350
解析:函数f(char*p)的主要功能申请字符串的存储空间,然后存入字符串\\
4.若有以下程序
typedef struct stu{char name[10],gender;int score;}STU;
void f(STU a,STU b){
b=a;
printf(\\(B)
A. Zhao,m,290,Zhao,m,290
B. Zhao,m,290,Qian,f,350
C. Qian,f,350,Qian,f,350
D. Zhao,m,290,Zhao,f,350
解析:函数f(STU a,STU b)的主要功能是为把结构体变量a的值存放到b中,然后输出b中各个成员的值。主函数中调用函数f(a,b),输出赋值以后b的数据,实际为a{\\
5.若有以下程序
typedef struct stu{char name[10],gender;int score;)STU;
void f(char*P){strcpy(P,\\(C)
A. Zhao,m,290,Zhao,m,290
B. Qian,f,350,Qian,f,350
C. Zhao,m,290,Qian,f,350
D. Zhao,m,290,Zhao,f,350
解析:主函数中结构体变量定义同时赋初值。执行b=a;语句后,b的数据和a的数据相同,调用函数f(b.name),形参指针p接收实参b.name的地址,此时p和b.name指向同一个存储空间,流程转到f执行,p指向的存储空间仔放字符串\\
6.为了建立如图所示的存储结构(即每个结点含两个域,data是数据域,next是指向结点的指针域),则在__________处应填入的选项是
Struct link{char data;___________}node;
(A)
A. struct link*next;
B. link next;
C. link*next;
D. struct link next;
解析:单链表为动态分配的存储宅问,在分配时,每个结点之间可以是不连续的(结点内是连续的)。结点之问的联系用指针实现,即在结点结构中定义一个成员项用来存放下一结点的首地址,这个用于存放地址的成员,常把它称为指针域,该指针为了保持链表中结点的地址,因此其基类型和结点的类型相同,选项为A。
7.若有以下程序段
struct st{int n;struct st*next;};
struct st a[3]={5,&a[1],7,&a[2],9,’\0’},*p;
P=&a[0];
则以下选项中值为6的表达式是(A)
A. ++(p->n)
B. (*p).n
C. p->n++
D. P->n
解析:选项A)中表达式++(p->n)为前缀自加表达式,p->n和a[0].n等价,其值为5,前缀自加后值为6。选项B)中表达式(*p).n和选项D)的表达式p->n含义相同,表示取结构指针p所指向的成员,因此值为5。选项C)中表达式p->n++为后缀自加表达式,相当于(p->n)++,表达式值为5。
8.以下叙述中正确的是(D)
A. 结构体类型中的成分只能是C语言中预先定义的基本数据类型
B. 在定义结构体类型时,编译程序就为它分配了内存空间
C. 结构体类型中各个成分的类型必须是一致的
D. 一个结构体类型可以由多个称为成员(或域)的成分组成
解析:结构体类型,它是由若干“成员”组成,每一个成员可以是一个基本数据类型或者是一个构造类型。在说明和使用之前必须先定义它,也就是构造它。
定义一个结构的一般形式为:
struct 结构名
{成员列表};
成员列表由若干个成员组成,对何个成员也必须作类型说明,
其形式为:类型说明符成员名;
可以说明类型不同的各个成员。
9.以下叙述中正确的是(C)
A. 结构体类型中的各个成分均不能是数组或指针
B. 结构体类型的变量,不能在声明结构体类型组成时一起定义
C. 使用typedef定义新类型名后,新类型名与原类型名实际上是等价的
D. 元素为结构体类型的数组,只能在声明过结构体类型之后,单独进行定义
解析:C语言允许用typedef说明一种新类型名,typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新
本文档预览:3600字符,共8583字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载