选择题
1. 设有以下语句
typedef struct TT {char c; int a[4];}CIN;
则下面叙述中正确的是______。
A、可以用TT定义结构体变量 B、TT是struct类型的变量
C、可以用CIN定义结构体变量 D、CIN是struct TT类型的变量
2. 有以下结构体说明、变量定义和赋值语句
struct STD
{ char name[10];int age;char sex;
}s[5],*ps; ps=&s[0];
则以下scanf函数调用语句中错误引用结构体变量成员的是______。
A、scanf("%s",s[0].name); B、scanf("%d",&s[0].age);
C、scanf("%c",&(ps->sex)); D、scanf("%d",ps->age);
3. 有以下程序
typedef struct{int b,p;}A;
void f(A c) /* 注意:c是结构变量名 */
{ int j;
c.b+=1; c.p+=2;}
main()
{ int i;
A a={1,2};
f(a);
printf("%d,%d\n",a.b,a.p);}
程序运行后的输出结果是______。
A、2,3 B、2,4 C、1,4 D、1,2
4. 若有以下定义和语句
union date
{ int i; char c; float f;} x; int y;
则以下语句正确的是______。
A、x=10.5; B、x.c=101; C、y=x; D、printf("%d\n", x);
5. 有以下程序段
typedef struct NODE
{int num; struct NODE *next; }OLD;
以下叙述中正确的是______。
A、以上的说明形式非法 B、NODE是一个结构体类型
C、OLD是一个结构体类型 D、OLD是一个结构体变量
6. 以下对结构体类型变量td的定义中,错误的是______。
A、typedef struct aa B、struct aa
{ int n; { int n;
float m; float m;
}AA; }td;
AA td; struct aa td;
C、struct D、struct
{ int n; { int n;
float m; float m;
}aa; }td;
struct aa td;
7.有以下程序:
struct STU{char name[10]; int num;};
void f1(struct STU c)
{struct STU b={"LiSiGuo",2042};c=b;}
void f2(struct STU *c)
{struct STU b={"SunDan",2044};*c=b;}
main()
{struct STU a={"YangSan",2041},b={"WangYin",2043};
f1(a);
f2(&b);
printf(“%d %d”,a.num,b.num)
}
执行后输出结果是______。
A、2041 2044 B、2041 2043 C、2042 2044 D、2042 2043
8. 有以下程序:
#include
union pw { int i; char ch[2];}a;
main()
{ a.ch[0]=13;a.ch[1]=0;
printf("%d\n",a.i);}
程序的输出结果是(注意:ch[0]在低字节,ch[1]在高字节)______。
A、13 B、14 C、208 D、209
10.有以下程序:
struct s
{ int x,y; } data[2]={10,100,20,200};
main()
{ struct s *p=data;
printf("%d\n",++(p->x));}
程序运行后的输出结果是______。
A、10 B、11 C、20 D、21
11. 有以下程序段
typedef struct node{int data; struct node *next; } *NODE;
NODE p;
以下叙述中正确的是______。
A、p是指向struct node结构变量的指针的指针 B、NODE p;语句出错
C、p是指向struct node结构变量的指针 D、p是struct node结构变量
12.有以下程序段
struct st
{int x;int *y;}*pt;
int a[]={1,2},b[]={3,4};
struct st c[2]={10,a,20,b};pt=c;
以下选项中表达式的值为11的是______。
A、*pt->y B、pt->x C、++pt->x D、(pt++)->x
13.有以下说明和定义语句
struct student
{ int age; char num[8];};
struct student stu[3]={{20,"200401"},{21,"200402"},{19,"200403"}};
struct student *p=stu;
以下选项中引用结构体变量成员的表达式错误的是______。
A、(p++)->num B、p->num C、(*p).num D、stu[3].age
14.已知字符0的ASCII码为十六进制的30,下面程序
main()
{ union{ unsigned char c;
unsigned int i[4]; }z;
z.i[0]=0x39; z.i[1]=0x36;
printf("%c\n",z.c); }
A、6 B、9 C、0 D、3
15. 有以下程序
#include
#include
typedef struct{ char name[9]; char sex; float score[2]; } STU;
void f(STU a)
{ STU b={"Zhao",'m',85.0,90.0}; int i;
strcpy(a.name,b.name);
a.sex=b.sex;
for(i=0;i<2;i++) a.score[i]=b.score[i];
}
main()
{ STU c={"Qian",'f',95.0,92.0};
f(c); printf("%s,%c,%2.0f,%2.0f\n",c.name,c.sex,c.score[0],c.score[1]);
}
程序的运行结果是______。
A、Qian,f,95,92 B、Qian,m,85,90 C、Zhao,f,95,92 D、Zhao,m,85,90
16. 以下关于typedef的叙述错误的是______。
A、用typedef可以增加新类型
B、typedef只是将已存在的类型用一个新的名字来代表
C、用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名
D、用typedef为类型说明一个新名,通常可以增加程序的可读性
17. 以下结构体类型说明和变量定义中正确的是______。
A、typedef struct
{int n; char c;} REC;
REC t1,t2;
B、struct REC;
{int n; char c;};
REC t1,t2;
C、typedef struct REC;
{int n=0; char c= 'A';}t1,t2;
D、struct
{int n; char c;} REC;
REC t1,t2;
18. 设有以下定义
union data
{ int d1; float d2; } demo;
则下面叙述中错误的是______。
A、变量demo与成员d2所占的内存字节数相同 B、变量demo中各成员的地址相同
C、变量demo和各成员的地址相同 D、若给demo.d1赋99后,demo.d2中的值是99.0
19. 若程序中有以下的说明和定义:
struct abc
{ int x;char y; }//因为这里缺少分号
struct abc s1,s2;
则会发生的情况是______。
A、编译时错 B、程序将顺序编译、连接、执行
C、能顺序通过编译、连接、但不能执行 D、能顺序通过编译、但连接出错
21. 有以下程序
#include
struct st
{ int x,y;} data[2]={1,10,2,20};
main()
{ struct st *p=data;
printf("%d,",p->y); printf("%d\n",(++p)->x);
}
程序的运行结果是______。
A、10,1 B、20,1 C、10,2 D、20,2
22. 以下程序的输出结果是______。
main( )
{ union { char i[2];
int k;
} r;
r.i[0]=2; r.i[1]=0;
printf("%d\n",r.k);
}
A、2 B、1 C、0 D、不确定
24. 设有以下说明语句
struct ex
{ int x; float y;char z; } example;
则下面的叙述中不正确的是______。
A、struct是结构体类型的关键字 B、example是结构体类型名
C、x,y,z都是结构体成员名 D、struct ex是结构体类型
25. 以下各选项企图说明一种新的类型名,其中正确的是______。
A、typedef v1 int; B、typedef v2=int; C、typedef int v3; D、typedef v4: int
26. 以下程序的输出结果是______。
union myun
{ struct
{ int x,y,z;}u;
int k;
}a;
main()
{ a.u.x=4;a.u.y=5;a.u.z=6;
a.k=0;
printf("%d\n",a.u.x);
}
A、4 B、5 C、6 D、0
27. 以下程序的输出结果是______。
struct HAR
{ int x,y;struct HAR *p;} h[2];
main()
{ h[0].x=1;h[0].y=2;
h[1].x=3;h[1].y=4;
h[0].p=&h[1];h[1].p=h;
printf("%d%d\n",(h[0].p)->x,(h[1].p)->y);
}
A、12 B、23 C、14 D、32
28. 设有以下说明语句
typedef struct
{ int n;
char ch[8];
}PER;
则下面叙述中正确的是______。
A、PER是结构体变量名 B、PER是结构体类型名
C、typedef struct是结构体类型 D、struct是结构体类型名
29. 设有如下说明
typedef struct
{int n;char c;double x;}STD;
则以下选项中 ,能正确定义结构体数组并赋初值的语句是______。
A、STD tt[2]={{1,'A',62},{2,'B',75}}; B、STD tt[2]={1,"A",62,2,"",75};
C、struct tt[2]={{1,'A'},{2,'B'}} ;D、struct tt[2]={{1,"A",62.5},{2,"B",75.0}};
30. 设有如下定义:
struct ss
{ char name[10];
int age;
char sex;
} std[3],*p=std;
下面各输入语句中错误的是______。
A、scanf("%d",&(*p).age); B、scanf("%s",&std.name);
C、scanf("%c",&std[0].sex); D、scanf("%c",&(p->sex));
七
1. 若有定义“struct AA {int a; char b; double c;}x;”,则x占用空间大小为____11或13____字节。
2. 当定义一个结构体变量时,系统分配给该变量的内存大小等于各成员所需内存大小的__和_____。
3. C提供的预处理命令有宏定义命令,条件编译命令和___文件包含命令_________。
4.共用体变量所占用的内存空间是其各个成员所占内存空间_____的最大值_______。
5.调用系统函数时,要先使用#include命令包含该系统函数的原型语句所在的___头文件_______。
6. 在#include命令中所包含的头文件,可以是系统定义的头文件,也可以是__用户______定义的头文件。
7. 使用#include命令可以包含一个头文件,也可以包含一个__程序____文件。
8. 在C程序中包含一个头文件或程序文件的预编译命令为____#include ______。
9. 程序中的预处理命令是指以__#____字符开头的命令。
10. 设有如下宏定义
#define MYSWAP(z,x,y) {z=x; x=y; y=z;}
以下程序段通过宏调用实现变量a,b内容的交换,请填空。
float a=5,b=16,c;
MYSWAP(__c____,a,b); 标准答案为:c
11. 共用体变量(能/不能)__不能___用做函数的参数,函数(能/不能)__不能____返回共用体变量。
12. 以下程序的的输出结果是______。
#include
#define M 5
#define N M+M
main()
{ int k ;
k=N*N*5; printf("%d\n ",k);
}
标准答案为:55
13. 有以下定义和语句,则sizeof(a)的值是__10或_16___,而sizeof(a.share)的值是__4____。
struct date
{ int day;
int mouth;
int year;
union { int share1;
float share2;
}share;
} a;
14. 下面程序的运行结果是:__80____。
typedef union student
{char name[10];
long sno;
char sex;
float score[4];
}STU;
main()
{STU a[5];
printf("%d\n",sizeof(a));
}
15.引用结构体变量中成员的一般形式是____ 结构体变量名.成员名 __。
指针、结构体
1. 人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。
#include
#include
#define N 8
typedef struct
{ char num[10];
int year,month,day ;
}STU;
__ STU ____ fun(STU *std, char *num)
{ int i; STU a={"",9999,99,99};
for (i=0; i
if( strcmp(___std[i].num___,num)==0 )
return (___std[i]___);
return a;
}
main()
{ STU std[N]={ {"111111",1984,2,15},{"222222",1983,9,21},{"333333",1984,9,1},
{"444444",1983,7,15},{"555555",1984,9,28},{"666666",1983,11,15},
{"777777",1983,6,22},{"888888",1984,8,19}};
STU p; char n[10]="666666";
p=fun(std,n);
if(p.num[0]==0)
printf("\nNot found !\n");
else
{ printf("\nSucceed !\n ");
printf("%s %d-%d-%d\n",p.num,p.year,p.month,p.day);
}
}
第1 处内容为[STU fun(STU *std, char *num)]
第2 处内容为[if( strcmp(std[i].num,num)==0 )]
第3 处内容为[return (std[i]);]
2. 人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。
#include
#define N 8
typedef struct
{ int num;
int year,month,day ;
}STU;
int fun(STU *std, STU *k, int year)
{ int i,n=0;
for (i=0; i
if( ___std[i].year___==year)
k[n++]= ___std[i]___;
return (___n___);
}
main()
{ STU std[N]={ {1,1984,2,15},{2,1983,9,21},{3,1984,9,1},{4,1983,7,15},
{5,1985,9,28},{6,1982,11,15},{7,1982,6,22},{8,1984,8,19}};
STU k[N]; int i,n,year;
printf("Enter a year : "); scanf("%d",&year);
n=fun(std,k,year);
if(n==0)
printf("\nNo person was born in %d \n",year);
else
{ printf("\nThese persons were born in %d \n",year);
for(i=0; i
printf("%d %d-%d-%d\n",k[i].num,k[i].year,k[i].month,k[i].day);
}
}
第1 处内容为[if( std[i].year==year)]
第2 处内容为[k[n++]= std[i];]
第3 处内容为[return (n);]
3. 给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系数a。
#include
typedef struct
{ int num;
char name[9];
float score[3];
}STU;
void show(STU tt)
{ int i;
printf("%d %s : ",tt.num,tt.name);
for(i=0; i<3; i++)
printf("%5.1f",tt.score[i]);
printf("\n");
}
void modify(___STU___ *ss,float a)
{ int i;
for(i=0; i<3; i++)
ss->__score[i]__ *=a;
}
main( )
{ STU std={ 1,"Zhanghua",76.5,78.0,82.0 };
float a;
printf("\nThe original number and name and scores :\n");
show(std);
printf("\nInput a number : "); scanf("%f",&a);
modify(__&std__,a);
printf("\nA result of modifying :\n");
show(std);
}
第1 处内容为[void modify(STU *ss,float a)]
第2 处内容为[ss->score[i] *=a;]
第3 处内容为[modify(&std,a);]
4. 给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。
#include
typedef struct
{ int num;
char name[10];
}PERSON;
void fun(PERSON ___1___) std[]或*std
{
___2___ temp; PERSON
if(std[0].num>std[1].num)
{ temp=std[0]; std[0]=std[1]; std[1]=temp; }
if(std[0].num>std[2].num)
{ temp=std[0]; std[0]=std[2]; std[2]=temp; }
if(std[1].num>std[2].num)
{ temp=std[1]; std[1]=std[2]; std[2]=temp; }
}
main()
{ PERSON std[ ]={ 5,"Zhanghu",2,"WangLi",6,"LinMin" };
int i;
fun(___3___); std
printf("\nThe result is :\n");
for(i=0; i<3; i++)
printf("%d,%s\n",std[i].num,std[i].name);
}
4.给定程序中,函数fun的功能是:将形参std所指结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。
#include
typedef struct
{ char name[10];
int age;
}STD;
STD fun(STD std[], int n)
{ STD max; int i;
max= ___1___;*std或std[0]
for(i=1; i
if(max.age<___2___) max=std[i];
return max;
}
main( )
{ STD std[5]={"aaa",17,"bbb",16,"ccc",18,"ddd",17,"eee",15 };
STD max;
max=fun(std,5);
printf("\nThe result: \n");
printf("\nName : %s, Age : %d\n", ___3___,max.age);
}
第1 处内容为[max= *std;]
第2 处内容为[if(max.age<std[i].age) max=std[i];]
第3 处内容为[printf("\nName : %s, Age : %d\n", max.name,max.age);]
5.下面程序的功能是按学生的姓名查询其成绩排名和平均成绩。查询时可连续进行,直到输入0时才结束。
#include
#include
#define NUM 4
struct student
{ int rank;
char *name;
float score;
};
___1___ stu[ ]={ 3,"liming",89.3,
4,"zhanghua",78.2,
1,"anli",95.1,
2,"wangqi",90.6
};
main()
{ char str[10];
int i;
do
{ printf("Enter a name");
scanf("%s",str);
for( i=0;i
if(___2___ )
{ printf("Name :%8s\n",stu[i].name);
printf("Rank :%3d\n",stu[i].rank);
printf("Average :%5.1f\n",stu[i].score);
___3___;
}
if( i>=NUM ) printf("Not found\n");
}while( strcmp(str,"0")!=0 );
}
答案:① struct student ② strcmp(stu[i].name,str)==0 ③ break
6.下面程序的功能是从终端上输入5个人的年龄、性别和姓名,然后输出。
#include "stdio.h"
struct man
{ char name[20];
unsigned age;
char sex[7];
};
main ( )
{ struct man person[5];
data_in(person,5);
data_out(person,5);
}
data_in(struct man *p, int n )
{ struct man *q =___1___ ;
for( ;p;p++ )
{ printf( "age:sex:name" );
scanf("%u%s", &p->age, p->sex);
__2___ ;
}
}
data_out( struct man *p, int n )
{ struct man *q = ___3___;
for( ;p;p++ )
printf("%s;%u;%s\n", p->name, p->age, p->sex);
}
答案:① p+n ② gets(p->name) ③ p+n
11. 已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体中,给定程序的功能是找出成绩最低的学生记录,通过形参返回主函数。
#include
#include
#define N 10
typedef struct ss
{ char num[10]; int s; } STU;
fun(STU a[], STU *s)
{
___1___ h; int i ; STU
h = a[0];
for ( i = 1; i < N; i++ )
if ( a[i].s < h.s ) ___2___ = a[i]; h
*s = ___3___ ; h
}
main()
{ STU a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},
{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} }, m;
int i;
printf("***** The original data *****\n");
for ( i=0; i< N; i++ )printf("No = %s Mark = %d\n", a[i].num,a[i].s);
fun ( a, &m );
printf ("***** THE RESULT *****\n");
printf ("The lowest : %s , %d\n",m.num, m.s);}
12. 给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。
#include
typedef struct
{ int num;
char name[10];
}PERSON;
void fun(PERSON ___1___)std
{
___2___ temp; PERSON
if(std[0].num>std[1].num)
{ temp=std[0]; std[0]=std[1]; std[1]=temp; }
if(std[0].num>std[2].num)
{ temp=std[0]; std[0]=std[2]; std[2]=temp; }
if(std[1].num>std[2].num)
{ temp=std[1]; std[1]=std[2]; std[2]=temp; }
}
main()
{ PERSON std[ ]={ 5,"Zhanghu",2,"WangLi",6,"LinMin" };
int i;
fun(___3___);std
printf("\nThe result is :\n");
for(i=0; i<3; i++)
printf("%d,%s\n",std[i].num,std[i].name);}
本文来源:https://www.2haoxitong.net/k/doc/bcfb18c4daef5ef7ba0d3c5a.html
文档为doc格式