国家二级C语言机试(结构体、共同体、位运算及文件操作)模拟试卷13
选择题
1.下列说法正确的是()。(C)
A. 使用typedef可以定义新的数据类型
B. 使用struct可以定义新的数据类型
C. 使用typedef可以对现有类型起别名,但不能定义数据类型
D. 使用new关键字可以定义新的数据类型
解析:C语言中只能通过struct关键字定义新的结构体,使用typedef对现有类型起别名,但不能定义新的数据类型,所以答案C正确。
2.以下说法正确的是( )。(D)
A. typedef和struct可以联合使用来定义新数据类型
B. typedef只能单独使用
C. struct只能单独使用
D. 以上说法都不正确
解析:typedef和struct可以联合使用来定义新的结构体,但不能定义新的数据类型。所以A,B,C选项的说法均不正确。答案选D项。
3.若typedef char T[3];T*a;上述定义中a的类型与下面选项中完全相同的是( )。(D)
A. char(*A)[3];
B. char*a;
C. char a[3];
D. char*a[3];
解析:C语言允许用typed说明一种新类型名。题目中利用typedef定义了字符数组类型T,而后定义了该类型的指针a,因此a为指针数组。
4.关于typedef的叙述中正确的是( )。(C)
A. 在使用typedef改变原类型的名称后,只能使用新的类型名
B. 使用typedef说明新类型名时,后面不能加分号
C. 在程序中,允许用typedef来说明一种新的类型名
D. 使用typedef说明新类型名时,其格式是:typedef新类型名原类型名
解析:C语言允许用typedef说明一种新类型名。typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。
5.对以下程序段的叙述中正确的是( )。
typedef struct NODE
{int num;struct NODE*next;
}mynode;(C)
A. 以上的说明形式非法
B. NODE是一个结构体类型
C. mynode是一个结构体类型
D. mynode是一个结构体变量
解析:本题考查结构体和typedef类型定义。本题的声明代码相当于两部分,首先定义street NODE,然后是以typedef定义mynode类型,因此mynode是结构体类型NODE的别名或标识度。选项C正确,其他选项错误。
6.以下程序的输出结果是( )。
struct STR{int a,b;}data[2]={10,100,20,200};
main(){
struct STR p=data[1];printf(’’%d\n’’,++(p.a));}(C)
A. 11
B. 20
C. 21
D. 10
解析:在题目中定义了结构体STR类型的数组变量data,并对其赋初值。在程序中定义了指向结构体STR类型的变量p,并把数组data的第二个元素data[1]的值赋给它,所以此时成员变量p.a的值等于20,在输出时分别加1,所以输入结果为选项C。
7.以下程序的输出结果是( )。
struct STR{int n;int a[20];};
void f(struct STR*p)
{int i,j,t;
for(i=0;i
一1;i++)
for(j=i+1;j
n;j++)
if(p一>a[i]>p一>a[j]){t=p一>a[i];p一>a[i]=p一>a[j];p一>a[j]=t;}
l
}
main()
{int i;struct STR s={10,{2,3,1,6,8,7,5,4,10,9}};
f(&s);
for(i=0;i<s.n;i++)printf(’’%d,’’,s.a[i]);
}(D)
A. 10,9,8,7,6,5,4,3,2,1,
B. 10,9,8,7,6,1,2,3,4,5,
C. 2,3,1,6,8,7,5,4,10,9,
D. 1,2,3,4,5,6,7,8,9,10,
解析:题目中函数的功能使用了结构体指针变量实现对一维数组的元素从小到大排序。用关系表达式p一>a[i]>p一>a[j]实现一维数组中相邻元素两两比较,大的元素向后移,小的元素向前移。在主函数中语句f(&s);的功能实现对结构体变量s中一维数组的元素从小到大的排序,所以循环语句的输出结果为1,2,3,4,5,6,7,8,9,10。
8.设struct STR{char name[10];int age;char sex;}s[5],*ps;ps=&s[0];则以下scanf函数调用语句有错误的是( )。(D)
A. scanf(’’%c’’,&(ps一>sex));
B. scan(’’%d’’,&s[0].age);
C. scanf(’’%s’’,s[0].name);
D. scanf(’’%d’’,ps一>age);
解析:题目中程序段定义了结构体变量数组s[5]和指针变量ps,然后ps指向数组s[5]中的第一个元素,因而ps一>age引用s[0].age。因为在输入scanf()函数中,第2个参数应该表示为地址变量,而选项D表示的值,而不是一个地址值。
9.以下程序的输出结果是( )。
#include
#include
struet A
{int a;char b[10];double c;};
struet A f(struet A t);
main()
{struct A a={1001,’’Bob’’,1098.0};
a=f(a);printf(’’%d,%s,%6.1f\n’’,a→a,a→b,a→c);}
struct A f(struct A t)
{t.a=1002;strcpy(t.b,’’Mike’’);t.c=1202.0;return t;}(B)
A. 1002,Bob,1202.0
B. 1002,Mike,1202.0
C. 1001,Mike,1098.0
D. 1001,Bob,1098.0
解析:在主函数中定义结构体A的变量a,并对其赋初值,再调用函数f(a),在函数f(a)中对结构体变量a的各个成员重新进行了赋值操作,并把其值输出。
10.以下程序的输出结果是( )。
#includestruct STR{int x,y;}dt[2]={1,2,3,4};main(){struct STR*p=dt;
printf(’’%d,’’,++(p一>x));printf(’’%d\n’’,++(p一>y));}(B)
A. 1,2
B. 2,3
C. 3,4
D. 4,1
解析:在题目中首先定义了结构体ORD,并定义了ORD类型的数组变量dt,并对其赋初值。在程序中定义了指向结构体时类型的指针变量P,并
本文档预览:3600字符,共8678字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载