
Chapter9 用户自己建立数据类型练习题
一、选择题
1.定义以下结构体类型
struct s
{
int a;
char b;
float f;
};
则语句 printf("%d",sizeof(struct s))的输出结果为【 】。
A.7 B. 8 C. 9 D. 12
2.当定义一个结构体变量时,系统为它分配的内存空间是【 】。
A.结构中一个成员所需的内存容量 B.结构中第一个成员所需的内存容量
C.结构体中占内存容量最大者所需的容量 D.结构中各成员所需内存容量之和
3.定义以下结构体类型
struct s
{
int x;
float f;
} a[3];
语句 printf("%d",sizeof(a))的输出结果为 【 】。
A.4 B.12 C.24 D.6
4.定义以下结构体类型
struct student
{
char name[10];
int score[50];
float average;
} stud1;
则 stud1 占用内存的字节数是【 】。
A.64 B.216 C.228 D. 7
5.设有一结构体类型变量定义如下:
struct date
{
int year;
int month;
int day;
};
struct worklist
{
char name[20];
char sex;
struct date birthday;
} person;

若对结构体变量 person 的出生年份进行赋值时,下面正确的赋值语句是【 】。
A. year=1976 B. birthday.year=1976
C. person.birthday.year=1976 D. person.year=1976
6.若程序中有以下的说明和定义:
struct abc
{
int x;
char y;
}
struct abc s1, s2;
则会发生的情况是【 】。
A. 编译时错 B. 程序将顺序编译、连接、执行
C. 能顺序通过编译、连接、但不能执行 D. 能顺序通过编译、但连接出错
7.定义以下结构体数组
struct c
{
int x;
int y;
}s[2] = { 1,3,2,7 };
语句 printf("%d",s[0].x*s[1].x)的输出结果为 【 】 。
A.14 B.6 C.2 D.21
8.运行下列程序段,输出结果是 【 】。
struct country
{
int num;
char name[10];
}x[5] = { 1,"China",2,"USA",3,"France",4, "England",5, "Spanish" };
struct country* p;
p = x + 2;
printf("%d,%c", p->num, (*p).name[2]);
A.3,a B.4,g C.2,U D.5,S
9.下面程序的运行结果是【 】。
struct KeyWord
{
char Key[20];
int ID;
}kw[] = { "void",1,"char",2,"int",3,"float",4,"double",5 };
int main()
{
printf("%c,%d\n", kw[3].Key[0], kw[3].ID);
return 0;
}
A.i,3 B.n,3 C.f,4 D.l,4
10.如果有下面的定义和赋值,则使用【 】不可以输出 n 中 data 的值。
struct SNode
{
unsigned id;

int data;
}n, * p;
p = &n;
A.p.data B.n.data C.p->data D.(*p).data
11.根据下面的定义,能输出 Mary 的语句是【 】。
struct person
{
char name[9];
int age;
};
struct person c[5] = { "John",17,"Paul",19,"Mary",18,"Adam",16 };
A.printf("%s\n",c[1].name); B.printf("%s\n",c[2].name);
C.printf("%s\n",c[3].name); D.printf("%s\n",c[0].name);
12.定义以下结构体数组
struct date
{
int year;
int month;
int day;
};
struct s
{
struct date birthday;
char name[20];
} x[4] = { {2008, 10, 1, "guangzhou"}, {2009, 12, 25, "Tianjin"} };
语句 printf("%s,%d,%d,%d",x[0].name,x[1].birthday.year); 的输出结果为 【 】。
A.guangzhou,2009 B.guangzhou,2008 C.Tianjin,2008 D.Tianjin,2009
13.定义以下结构体数组
struct
{
int num;
char name[10];
}x[3] = { 1,"china",2,"USA",3,"England" };
语句 printf("\n%d,%s",x[1].num,x[2].name)的输出结果为【 】。
A.2,USA B.3,England C.1,china D.2,England
14. 定义以下结构体数组
struct date
{
int year;
int month;
};
struct s
{
struct date birth;
char name[20];
}x[4] = { {2008,8,"hangzhou"},{2009,3,"Tianjin"} };
语句 printf("%c,%d",x[1].name[1],x[1].birth.year);的输出结果为【 】。

A.a,2008 B.hangzhou,2008 C.i,2009 D.Tianjin,2009
15.运行下列程序,输出结果是【 】。
struct contry
{
int num;
char name[20];
}x[5] = { 1,"China",2,"USA",3,"France",4,"Englan",5,"Spanish" };
int main()
{
int i;
for (i = 3; i < 5; i++)
printf("%d%c", x[i].num, x[i].name[0]);
return 0;
}
A.3F4E5S B.4E5S C.F4E D.c2U3F4E
16.有以下程序输出结果是【 】。
#include<stdio.h>
struct stu
{
int num;
char name[10];
int age;
};
void fun(struct stu* p)
{
printf("%s\n", (*p).name);
}
int main()
{
struct stu students[3] = { {9801,"Zhang",20},{9802,"Wang",19},{9803,"Zhao",18} };
fun(students + 2);
return 0;
}
A.Zhang B.Zhao C.Wang D.18
17.设有如下定义:
struct sk
{
int a;
float b;
} data, * p;
若有 p=&data;则对 data 中的 a 域的正确引用是【 】。
A. data->a B. (*data).a C. p->a D. (*p)->a
18.根据下面的定义,能打出字母 M 的语句是【 】。
struct person
{
char name[9];
int age;
};

struct person c[10] = {〞John〞,17, 〞Paul〞,19, 〞Mary〞,18, 〞Adam〞,16 };
A.printf(〞%c\n〞,class[3].name); B.printf(〞%c\n〞,class[3].name[1]);
C.printf(〞%c\n〞,class[2].name[1]); D.printf(〞%c\n〞,class[2].name[0];
19. 下列程序的执行结果为【 】。
#include<stdio.h>
struct s1
{
char* s;
int i;
struct s1* sip;
};
int main()
{
static struct s1 a[] = { {"abcd",1,a + 1},{"efgh",2,a + 2},{"ijkl",3,a} };
struct s1* p = a;
int i = 0;
printf("%s%s%s", a[0].s, p->s, a[2].sip->s);
printf("%d%d", i + 2, --a[i].i);
printf("%c\n", ++a[i].s[3]);
return 0;
}
A. abcd abcd abcd 2 0 e B. abcd efgh ijkl 2 0 e
C. abcd abcd ijkl 2 0 e D. abcd abcd abcd 2 1 e
20. 下面程序的输出结果为【 】。
#include <stdio.h>
struct st
{
int x;
int* y;
} *p;
int dt[4] = { 10,20,30,40 };
struct st aa[4] = { 50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3] };
int main()
{
p = aa;
printf("%d\n", ++p->x);
printf("%d\n", (++p)->x);
printf("%d\n", ++(*p->y));
return 0;
}
A.10 B.50 C. 51 D.60
20 60 60 70
20 21 21 31
21. 有以下程序
#include <stdio.h>
int main()
{
struct STU