1、国家二级 C语言机试(结构体、共用体与文件)模拟试卷 1及答案与解析 一、选择题 1 下面结构体的定义语句中,错误的是( )。 ( A) struct ord int x;int y;int z; struct ord a; ( B) struct ord int x;int y;int z; struct ord a; ( C) struct ord int x;int y;int z; a; ( D) struct int x;int y;int z; a; 2 有以下程序 #include typedef struct int b, p; A; void f(A c) /* 注意: c是
2、结构变量名 */ int j; c.b += 1; c.p+=2; main() int i; A a=1,2; f(a); printf(“%d,%dn“, a.b, a.p); 程序运行后的输出结果是( )。 ( A) 1,2 ( B) 2,4 ( C) 1,4 ( D) 2,3 3 有以下程序 #include main() unsigned char a=8, c; c = a3; printf(“%dn“, c); 程序运行后的输出结果是( )。 ( A) 1 ( B) 16 ( C) 32 ( D) 0 4 读取二进制文件的函数调用形式为: fread(buffer,size,co
3、unt,fp); 其中 buffer代表的是( )。 ( A)一个内存块的首地址,代表读入数据存放的地址 ( B)一个整型变量,代表待读取的数据的字节数 ( C)一个文件指针,指向待读取的文件 ( D)一个内存块的字节数 5 以下叙述中错误的 是( )。 ( A)可以通过 typedef增加新的类型 ( B)可以用 typedef将已存在的类型用一个新的名字来代表 ( C)用 typedef定义新的类型名后,原有类型名仍有效 ( D)用 typedef可以为各种类型起别名,但不能为变量起别名 6 有以下程序 #include struct S int a, b; data2=10,100,20
4、,200; main() struct S p=data1; printf(“%dn“, +(p.a) ); 程序运行后的输出结果是( )。 ( A) 21 ( B) 11 ( C) 20 ( D) 10 7 有以下程序 #include main() unsigned char a=2, b=4, c=5, d; d = a | b; d printf(“%dn“, d); 程序运行后的输出结果是( )。 ( A) 4 ( B) 3 ( C) 5 ( D) 6 8 有以下程序 #include #include main() int *a,*b,*c; a=b=c=(int *)malloc
5、(sizeof(int); *a=1;*b=2,*c=3; a=b; printf(“%d,%d,%dn“,*a,*b,*c); 程序运行后的输出结果是( )。 ( A) 3,3,3 ( B) 2,2,3 ( C) 1,2,3 ( D) 1,1,3 9 以下叙述中正确的是( )。 ( A)当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失 ( B)打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖 ( C)在 一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1个数据 ( D) C语言中的文件是流式文件,因此只能顺序存取数据 10 设有
6、定义: struct complex int real,unreal; data1=1,8,data2; 则以下赋值语句中错误的是( )。 ( A) data2=(2,6); ( B) data2=data1; ( C) data2.real=data1.real; ( D) data2.real=data1.unreal; 11 有以下程序 #include struct Sint n; int a20; ; void f(struct S *p) int i,j, t; for (i=0; in-1; i+) for (j=i+1; jn; j+) if (p-ai p-aj) t= p-
7、ai; p-ai = p-aj; p-aj = t; main() int i; struct S s=10, 2,3,1,6,8,7,5,4,10,9; f( for (i=0; i #include typedef struct char name9; char sex; int score2; STU; STU f (STU a) STU b=“Zhao“, m, 85, 90; int i; strcpy( a.name, b.name ); a.sex = b.sex; for ( i=0; i main() FILE *fp; int a10=1,2,3, i, n; fp = f
8、open(“d1.dat“, “w“); for (i=0; i1 ); 输出结果是( )。 ( A) 4 ( B) 8 ( C) 16 ( D) 2 17 以下叙述中错误 的是( )。 ( A) getchar函数用于从磁盘文件读入字符 ( B) gets函数用于从终端读入字符串 ( C) fputs函数用于把字符串输出到文件 ( D) fwrite函数用于以二进制形式输出数据到文件 18 有以下程序 #include main() FILE *pf; char *s1=“China“, *s2=“Beijing“; pf=fopen(“abc.dat“,“wb+“); fwrite(s2,
9、7,1,pf); rewind(pf); /*文件位置指针回到文件 开头 */ fwrite(s1,5,1,pf); fclose(pf); 以上程序执行后 abc.dat文件的内容是( )。 ( A) Chinang ( B) China ( C) ChinaBeijing ( D) BeijingChina 19 有以下结构体说明、变量定义和赋值语句 struct STD char name10; int age; char sex; s5,*ps; ps= 则以下 scanf函数调用语句有错误的是( )。 ( A) scanf(“%d“,ps-age); ( B) scanf(“%d“,
10、 ( C) scanf(“%c“, ( D) scanf(“%s“,s0.name); 20 若有以下语句 typedef struct S int g; char h; T; 以下叙述中正确的是( )。 ( A)可用 T定义结构体变量 ( B)可用 S定义结构体变量 ( C) S是 struct 类型的变量 ( D) T是 struct S类型的变量 21 有以下程序 #include #include struct A int a; char b10; double c; ; struct A f(struct A t); main() struct A a=1001,“ZhangDa“,
11、1098.0; a=f(a); printf(“%d,%s,%6.1fn“,a.a,a.b,a.c); struct A f(struct A t) t.a=1002; strcpy(t.b,“ChangRong“); t.c=1202.0; return t; 程序运行后的输出结果是( )。 ( A) 1002,ChangRong,1202.0 ( B) 1002,ZhangDa,1202.0 ( C) 1001,ChangRong,1098.0 ( D) 1001,ZhangDa,1098.0 22 有以下程序 #include main() int a=1, b=2, c=3, x; x
12、 = (ab) printf(“%dn“,x); 程序的运行结果是( )。 ( A) 3 ( B) 1 ( C) 2 ( D) 0 23 有以下 程序 #include main() FILE *fp; int k, n, a6=1,2,3,4,5,6; fp = fopen(“d2.dat“, “w“); fprintf(fp, “%d%d%dn“, a0,a1,a2); fprintf(fp, “%d%d%dn“, a3,a4,a5); fclose(fp); fp = fopen(“d2.dat“, “r“); fscanf(fp, “%d%d“, printf(“%d %dn“, k,
13、 n); fclose(fp); 程序运行后的输出结果是( )。 ( A) 123 456 ( B) 1 4 ( C) 123 4 ( D) 1 2 24 设有以下语句 typedef struct TT char c; int a4; CIN; 则下面叙述中正确的是( )。 ( A)可以用 CIN定义结构体变量 ( B) TT是 struct类型的变量 ( C)可以用 TT定义结构体变量 ( D) CIN是 struct TT类型的变量 25 有以下程序 #include struct ord int x,y; dt2=1,2,3,4; main() struct ord *p=dt; pr
14、intf(“%d,“,+(p-x); printf(“%dn“,+(p-y); 程序运行后的输出结果是( )。 ( A) 2,3 ( B) 4,1 ( C) 3,4 ( D) 1,2 26 有以下程序 #include main() int a=2, b; b = a main() FILE *fp; int a10=1,2,3,0,0, i; fp = fopen(“d2.dat“, “wb“); fwrite(a, sizeof(int), 5, fp); fwrite(a, sizeof(int), 5, fp); fclose(fp); fp = fopen(“d2.dat“, “rb
15、“); fread(a, sizeof(int), 10, fp); fclose(fp); for (i=0; ix ( B) pt-x ( C) *pt-y ( D) (pt+)-x 30 有以下程序 #include struct S int n; int a20; ; void f(int *a, int n) int i; for (i=0; i #include typedef struct char name9; char sex; float score2; STU; void f(STU a) STU b=“Zhao“, m, 85.0, 90.0; int i; strcp
16、y(a.name, b.name); a.sex = b.sex; for (i=0; i“的运算规则是把左边运算数的各二进制位全部右移 n位, n取决于 “右边的数值。字符 a的 ASCII码值为 8,对应二进制为 1000,所以a3=1,输出的字符 c的 ASCII码值为 1,答案选 A。 【知识模块】 结构体、共用体与文件 4 【正确答案】 A 【试题解析】 语句 “fread(buffer,size,count,fp);“中, buffer为数据块的指针,指向一个内存块的首地址,该内存块存放的是输入的数据,答案选 A。 【知识模块】 结构体、共用体与文件 5 【正确答案】 A 【试题解
17、析】 typedef为类型定义符,使用的一般形式为 “typedef 原类型名 新类型名 ;“,它用于给已知类型取别名,作用仅仅是用 “新类型名 “代替 “原类型名 “,并没有产生新的数据类型,答案选 A。 【知识模块】 结构体、共用体与文件 6 【正确答案】 A 【试题解析】 结构体只是用户自己定义的一种类型,使用方法和 C语言中的基本数据类型一致。语句 “struct S p=data1;“定义了一个结构体类型为 S的结构体变量 p,并将 data第二个元素的值赋值给 p,所以 p.a与 data1.a等价,值为20,所以输出的结果为 21。答案选 A。 【知识模块】 结构体、共用体与文件
18、 7 【正确答案】 A 【试题解析】 计算语句 “d=a|b“时, 字符 a的 ASCII码为 2,对应二进制为0010;字符 b的 ASCII码为 4,对应二进制为 0100;所以按位或 “|“运算之后 d的二进制为 0110。计算语句 “ d “时,字符 c的 ASCII码为 5,对应二进制为0101,所以按位与 “将指针 a、 b、 c指向了同一个内存地址,所以, *a、 *b、 *c始终保持一致,语句 “*a=1;*b=2,*c=3;“执行完毕后, *a=*b=*c=3,语句 “a=b“只是把 b指向的地址指给指针 a,执行完毕后仍然*a=*b=*c=3,所以输出结果为选项 A)。 【
19、知识模块】 结构体、共用体与文件 9 【正确答案】 A 【试题解析】 对已有文件进行写操作不一定覆盖原文件的数据,可根据打开文件的方式不同在文件末尾追加写入数据,选项 B)错误;要读到第 1个数据只需要用指针定向函数 rewind()将文件指针重新指向文件首即可,选项 C)错误; C语言中的文件 分为顺序读写文件和随机读写文件两种,随机读写文件可以从任意位置开始读写,选项 D)错误。答案选 A)。 【知识模块】 结构体、共用体与文件 10 【正确答案】 A 【试题解析】 给结构体变量的初始化需要用一对大括号将各成员的初始值括起来,而不是小括号,选项 A)错误,答案选 A)。 【知识模块】 结构
20、体、共用体与文件 11 【正确答案】 A 【试题解析】 函数 f()将结构体成员的数组 a中的前 n个数据按照从小到大的顺序排列,所以调用 f(“将指针 s2指向的 7个字节的数据写入到abc.dat文件中,而后将文件指针 fp重定向指向文 件首,再执行语句“fwrite(s1,5,1,pf);“时将 s1指向的 5个字符写入当前文件,原先写入的数据会被部分覆盖,最后文件中的内容为 Chinang,答案选 A。 【知识模块】 结构体、共用体与文件 19 【正确答案】 A 【试题解析】 scanf函数的一般形式为 scanf(“格式控制字符串 “,输入项 1,输入项2,) ,输入项由地址运算符
21、“),所以 输出的为改变后的值,答案选 A。 【知识模块】 结构体、共用体与文件 22 【正确答案】 A 【试题解析】 语句 “x = (ab)“先计算表达式 “(ab)“,即计算 “00010010“结果为 0011,然后计算 “0011“定义了一个结构体指针并指向数组 dt的首地址,所以 p与 dt、 dt0等价, p-x值为 1, p-y值为 2,自加 1后的值分别为2、 3,所以输出结果为选项 A)。 【知识模块】 结构体、共用体与文件 26 【正确答案】 A 【试题解析】 左移运算符 “x值为 11, pt-x值为 10, *pt-y的值为 1, (pt+)-x的值为20,所以答案选 A。 【知识模块】 结构体、共用体与文件 30 【正确答案】 A 【试题解析】 函数 f()的功能是将 a指向的数组中前 n-1个元素累加其在数组中的下标,所以输出结果为 2,4,3,9,12,12,11,11,18,9,,答案选 A。 【知识模块】 结构体、共用体与文件 31 【正确答案】 A 【试题解析】 函数 f()传递的参数为结构体变量,也是一种值传参,形参的变化不能影响到实参,所以调用函数 f(c)对 c中的数据没有影响。所以输出结果为选项A)。 【知识模块】 结构体、共用体与文件