国家二级C语言(结构体、共用体、位运算及文件操作)机试模拟试卷11
选择题
1.有以下定义和语句:
struct workers
{int num;char name[20];char c;
struct
{ int day; int month; int year;} s; };
struct workers w,*pw;
pw=&w;
能给w中year成员赋1980的语句是(C)
A. w.year=1980;
B. pw->year=1980;
C. w.s.year=1980;
D. *pw.year=1980;
解析:本题主要考查的是结构体变量的嵌套定义,也就是说一个结构体变量也可以是一个结构体。在本题中works这个结构体中包含了结构体s。所以对结构体变量w中year成员的引用是w.s.year。
2.有以下程序
#include <stdio.h>
struct tt
{ int x;struct tt *y;}*p;
struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};
main( )
{ int i;
p=a;
for(i=1;i<=2;i+ +) {printf(\\(A)
A. 20,15,
B. 30,17
C. 15,30,
D. 20,30,
解析:程序定义了结构体类型tt,其成员包括一个整型数据x和指向其自身结构的指针变量y。程序在定义结构体数组a的同时对其进行了初始化。其元素a[0]的成员y被赋值为元素a[1]的地址,a[1].y被赋值为a[2]的地址,a[2].y被赋予a[3]的地址,a[3].y被赋予a[0]的地址。这就形成了一个单向的循环链表,每个元素的指针成员都指向下一个元素的地址。在主函数中,通过一个for循环语句,输出该链表前2个节点数值成员的值,即a[0].x和a[1].x。
3.有以下程序
#include <stdio.h>
#include \\(B)
A. Qian,m,85,90
B. Zhao,m,85,90
C. Zhao,f,95,92
D. Qian,f,95,92
解析:本题考查在结构体中函数的实参和形参的传递,调用f(c)后,实参传向形参,进行f()函数功能的实现,但程序中没有返回语句,故形参不能将值传回实参,它们值的传递具有不可逆性,所与printf输出的还是c中实参的值。
4.设有定义: struct {char mark[12]; int num1; double num2;} t1,t2; 若变量均已正确赋初值,则以下语句中错误的是(B)
A. t2.num1=t1.num1;\\t
B. t2.mark=t1.mark;\\t
C. t1=t2;\\t
D. t2.num2=t1.num2;
解析:这个题目主要涉及到结构体的定义与赋值操作。根据题意结构体变量t1,t2的成员变量mark是字符数组,对于字符数组之间的赋值操作应该使用循环语句对每个字符进行赋值,而选项A是用数组名实现字符数组之间的赋值操作,是错误的。
5.有以下程序
struct A {
int a; char b[10];
double c;};
void f(struct A t);
main() {
struct A 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的数据。
6.若有以下程序
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成员,而其他成员由于有单独的存储空间而不会发生改变。
7.若有以下程序
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)的主要功能申请字符串的存储空间,然后存入字符串\\
8.若有以下程序
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{\\
9.若有以下程序
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
本文档预览:3600字符,共8976字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载