练习9-1答案
一、选择题
1.typedef unsigned long LONG的作用是( D )。
A.建立了一种新的数据类型B.定义了一个整形变量
C.定义了一个长整型变量D.定义了一个新的数据类型标识符2.下面的4个运算符中,优先级最低的是( D )。
A.( ) B.. C.-> D.++
3.已知:
struct
{int i;
char c;
float a;
} test;
则sizeof(test)的值是( D )。
A.4 B.5 C.6 D.7
4.当声明一个结构变量时系统分配给它的内存是( A )。
A.各成员所需内存量的总和B.结构中第一个成员所需内存量C.成员中占内存量最大者所需的容量D.结构中最后一个成员所需内存量5.以下对结构类型变量的定义中错误的是( D )。
A.typedef struct student B.struct student
{ i nt num; {int num;
float age; float age;
} STUDENT std1; } std1;
C.struct D.struct
{ i nt num; {int num;
float age; float age;
} std1; } student;
struct student std1;
6.根据下面的定义,能打印出字母M的语句是( D )。
struct person
{char name[9];
int age;
};
struct person class[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]); 7.以下scanf函数调用语句中对结构变量成员的错误引用是( D )。
struct pupil
{char nam[20];
int age;
int sex
} pup[5], *p;
p=pup;
A.scanf("%s", pup[1].name); B.scanf("%d", &pup[0].age);
C.scanf("%d", &(p->sex)); D.scanf("%d", p->age);
8.若有以下程序段:
struct dent
{int n;
int *m;
};
int a=1, b=2, c=3;
struct dent s[3]={{101, &a}, {102, &b}, {103, &c}};
struct dent *p=s;
则以下表达式中值为2的是( D )。
A.(p++)->m B.*(p++)->m C.(*p).m D.*(++p)->m
二、填空题
9.已知:
struct
{int x, y;
} s[2]={{1, 2}, {3, 4}}, *p=s;
则表达式++p->x的值( ①2 ),表达式(++p)->x的值是( ②3 )。
10.下面的程序从终端上输入n个人的年龄、性别和姓名,然后输出。则①是( p+n )、
②是( gets(p->name) 或scanf("%s", p->name) )、③是( p+n )。
#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= ① ;
for (; p { printf("age:sex:name"); scanf("%u%s", &p->age, p->sex); ② ; } } data_out(struct man *p, int n) { struct man *q= ③ ; for (; p printf("%s;%u%s\n", p->name, p->age, p->sex); } 三、读程序,写结果。 11.下面程序的运行结果是( Zhao )。 #include struct stu { int num; char name[10]; int age; }; void fun(struct stu *p) { printf("%s\n", (*p).name); } main() { struct stu students[3]={{9801,"Zhang",20},{9802,"Wang",19},{9803,"Zhao",18}}; fun(students+2); } 12.下列程序输出结果是( 1, ninicomputer )。 #include "stdio.h" struct tree { int x; char *s; } t; func(struct tree t) { t.x=10; t.s="computer"; return(0); } main() { t.x=1; t.s="minicomputer"; func(t); printf("%d, %s\n", t.x, t.s); } 练习9-2答案 一、选择题 1.设有以下说明和定义语句,则下面表达式中值为3的是( D )。 struct s {int i1; struct s *i2; }; static struct s a[3]={1, &a[1], 2, &a[2], 3, &a[0]}; static struct s *ptr; ptr=&a[1]; A.ptr->i1++ B.ptr++->i1 C.*ptr->i1 D.++(ptr->i1) 2.下面对枚举变量的定义中,正确的是( D )。 A.enum color {red, blue, green;} a, b; B.enum color={red, blue, green} a,b; C.enum color={"red", "blue", "green"} a, b; D.enum color {red, blue, green} a, b; 3.执行以下语句后的输出结果是( A )。 enum weekday {sun, mon=3, tue, wed, thu}; enum weekday workday; workday=wed; printf("%d\n", workday); A.5 B.3 C.4 D.编译时出错4.已知: union {int i; char c; float a; } test; 则sizeof(test)的值是( A )。 A.4 B.5 C.6 D.7 5.已知函数原型为: struct tree *f(int x1, int *x2, struct tree x3, struct tree *x4) 其中tree为已定义过的结构,且有下列变量定义:struct tree pt, *p; int i; 请选择正确的函数调用语句( B )。 A.&pt=f(10, &i, pt, p) B.p=f(i++, &i, pt, &pt); C.f=f(i+1, &(i+2), *p, p); D.f(i+1, &i, p, p); 二、读程序,写结果 6.下面程序的运行结果是: ( mix.i=12345678 mix.k=5678 mix.ii=78 mix.s[0]=78□□□□□mix.s[1]=56 mix.s[2]=34□□□□□mix.s[3]=12 )。(注:□表示空格。) #include main() {union { long i; int k; char ii; char s[4]; } mix; mix.i=0x12345678; printf("mix.i=%lx\n", mix.i); printf("mix.k=%x\n", mix.k); printf("mix.ii=%x\n", mix.ii); printf("mix.s[0]=%x\tmix.s[1]=%x\n", mix.s[0], mix.s[1]); printf("mix.s[2]=%x\tmix.s[3]=%x\n", mix.s[2], mix.s[3]); } 7.下面程序对应的运行结果是: ( 380039 9 )。 #include main() {union { int i[2]; long k; char c[4]; } t, *s=&t; s->i[0]=0x39; s->i[1]=0x38; printf("%lx\n", s->k); printf("%c\n", s->c[0]); }