1、二级 C 语言-编译预处理和动态存储分配、结构体和共用体、文件(一)及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:100.00)1.以下函数的功能是,通过键盘输入数据,为数组中的所有元素赋值。在下划线处应填入的是_。#define N 10void arrin(int xN) int i=0; while(iN)scanf(“% d“, _); A.x+i B.for(i=1; i=NUM; i+);printf(“% d/n“, i);for 循环执行的次数是_。 A.5 B.6 C.8 D.9(分数:2.50)A.B.C.D.4.以下程序的输出
2、结果为_。#include stdio.h#define SQR(x) x*xmain()int a, k=3;a=+SQR(k+1);printf(“% d/n“, a); A.6 B.10 C.8 D.9(分数:2.50)A.B.C.D.5.以下叙述中,正确的是_。 A.用#include 包含的头文件的后缀不可以是“.a” B.若一些源程序中包含某个头文件,当该头文件有错误时,只需对该头文件进行修改,包含此头文件的所有源程序不必重新进行编译 C.宏命令行可以看做是一行 C 语句 D.C 编译中的预处理是在编译之前进行的(分数:2.50)A.B.C.D.6.程序中头文件 typel.h 的
3、内容是:#define N 5#define M1 N * 3/ *程序如下: * /#include “stdio.h“#include “typel.h“#define M2 N * 2main() int i;i=M1+M2;printf(“% d/n“, i);程序编译后运行的输出结果是_。 A.10 B.20 C.25 D.30(分数:2.50)A.B.C.D.7.有以下程序:#include stdio.h#include stdlib.hint fun(int n) int * p;p=(int *)malloc(sizeof(int);*p=n;return * p;main(
4、) int a;a=fun(10);printf(“% d/n“, a+fun(a);程序的运行结果是_。 A.0 B.10 C.20 D.出错(分数:2.50)A.B.C.D.8.以下程序的输出结果是_。#include void fut(int * *s, int p23) * *s=p11; main() int a23=1,3,5,7,9,11, *p;p=(int *)malloc(sizeof(int);fut(printf(“% d/n“, *p);free (p); A.1 B.7 C.9 D.11(分数:2.50)A.B.C.D.9.对下面程序段,正确的判断是_。#defin
5、e A 3#define B(a) (A+1) *a)x=3 * (A+B(7); A.程序错误,不许嵌套宏定义 B.x=93 C.x=21 D.程序错误,宏定义不许有参数(分数:2.50)A.B.C.D.10.以下程序的输出结果为_。#include stdio.h#define F(y) 3.84+y#define PR(a) printf(“% d“, (int) (a)#define PRINT(a) PR(a); putchar(/n)main() int x=2;PRINT(F(3) *x); A.8 B.9 C.10 D.11(分数:2.50)A.B.C.D.11.以下说法中,正
6、确的是_。 A.#define 和 printf 都是 C 语句 B.#define 是 C 语句,而 printf 不是 C.printf 是 C 语句,但#define 不是 D.#define 和 printf 都不是 C 语句(分数:2.50)A.B.C.D.12.以下程序的输出结果是_。#define f(x) x*x#include stdio.hmain() int a=6, b=2, c;c=f(a)/f(b);printf(“% d/n“, c); A.9 B.6 C.36 D.18(分数:2.50)A.B.C.D.13.以下程序运行后,输出的结果是_。#define PT
7、5.5#define S(x) PT*x*x#include stdio.hmain() int a=1, b=2;printf(“% 4.1f/n“, S(a+b); A.49.5 B.9.5 C.22.0 D.45.0(分数:2.50)A.B.C.D.14.下列程序执行后的输出结果是_。#define MA(x) x* (x-1)#include stdio.hmain() int a=1, b=2; printf(“% d/n“, MA(1+a+b); A.6 B.8 C.10 D.12(分数:2.50)A.B.C.D.15.有以下程序:#define N 2#define M N +1
8、#define NUM 2 * M+1main() int i;for(i=1; i=NUM; i+) printf(“% d/n“, i);该程序中的 for 循环执行的次数是_。 A.5 B.6 C.7 D.8(分数:2.50)A.B.C.D.16.程序中头文件 typel.h 的内容是:#define N 5#define M1 N * 3程序如下:#include “typel.h“#define M2 N * 2main() int i;i=M1+M2; printf(“% d/n“, i);程序编译后运行的输出结果是_。 A.10 B.20 C.25 D.30(分数:2.50)A.
9、B.C.D.17.以下正确的描述为_。 A.每个 C 语言程序必须在开头使用预处理命令#include B.预处理命令必须位于 C 源程序的首部 C.在 C 语言中预处理命令都以“#”开头 D.C 语言的预处理命令只能实现宏定义和条件编译的功能(分数:2.50)A.B.C.D.18.从下列选项中选择不会引起二义性的宏定义是_。 A.#define POWER(x)x*x B.#define POWER(x)(x)*(x) C.#define POWER(x)(x*x) D.#define POWER(x)(x)*(x)(分数:2.50)A.B.C.D.19.设有以下宏定义:#define N
10、3#define Y(n) (N+1)*n)则执行语句“z=2 * (N+Y(5+1);“后, z 的值为_。 A.出错 B.42 C.48 D.54(分数:2.50)A.B.C.D.20.若有宏定义#define MOD(x, y) x%y,则执行以下语句后的输出为_。int z, a=15, b=100;z=MOD (b, a);printf(“% d/n“, z+); A.11 B.10 C.6 D.宏定义不合法(分数:2.50)A.B.C.D.21.以下程序的输出结果是_。#include stdio.hint a33=1,2,3,4,5,6,7,8,9, *p;f(int *s, i
11、nt p3) *s=p11; main() p=(int *)malloc(sizeof(int);f(p, a);printf(“% d/n“, *p);free(p); A.1 B.4 C.7 D.5(分数:2.50)A.B.C.D.22.以下程序的输出结果是_。#include stdio.htypedef union long x2;int y4;char z8; MYTYPE;MYTYPE them;main() printf(“% d/n“, sizeof(them); A.32 B.16 C.8 D.24(分数:2.50)A.B.C.D.23.以下程序的运行结果是_。#inclu
12、de “stdio.h“main() struct date int year, month, day; today;printf(“% d/n“, sizeof(struct date); A.6 B.8 C.10 D.12(分数:2.50)A.B.C.D.24.若有以下结构体定义:struct example int x;int y; v1;则_是正确的引用或定义。 A.example, x=10; B.example v2; v2.x=10; C.struct v2; v2.x=10; D.struct example v2=10;(分数:2.50)A.B.C.D.25.有以下程序:#i
13、nclude stdio.hmain() struct cmplxint x; int y; cnum2=1,3,2,7;printf(“% d/n“, cnum0.y/cnum0.x*cnum1.x);则正确的输出结果为_。 A.0 B.1 C.3 D.6(分数:2.50)A.B.C.D.26.设有以下定义:struct sk int a;float b; data;int *p;若要使 p 指向 data 中的 a 域,正确的赋值语句是_。 A.p= B.p=data.a; C.p= D.*p=data.a;(分数:2.50)A.B.C.D.27.以下程序的输出是_。#include st
14、dio.hmain() struct s1 int x; int y;struct s1 a=1,3;struct s1 *b=b-x=10;printf(“% d% d/n“, a.x, a.y); A.13 B.103 C.310 D.31(分数:2.50)A.B.C.D.28.以下程序的执行结果是_。#include stdio.hunion un int i;char c2;main() union un x;x.c0=10;x.c1=1;printf(“/n% d“, x.i); A.266 B.11 C.265 D.138(分数:2.50)A.B.C.D.29.以下程序的输出结果是
15、_。union myun structint 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(分数:2.50)A.B.C.D.30.已知字符 0 的 ASCII 代码值的十进制数是 48,有以下程序:#include stdio.hmain() union int i2;long k;char c4; r, *s=s-i0=0x39; s-i1=0x38;printf(“% x/n“, s-c0);其输出结果是_。 A.39 B.9 C.38 D.
16、8(分数:2.50)A.B.C.D.31.在 16 位的 PC 上使用 C 语言,若有以下定义:struct data int i;char ch;double f; b;则结构变量 b 占用内存的字节数是_。 A.1 B.2 C.8 D.11(分数:2.50)A.B.C.D.32.设有以下说明和定义语句,则下面表达式中值为 3 的是_。struct s int i;struct s *i2;static struct s a3=1, static struct s *ptr;ptr= A.ptr-i+ B.ptr+-I C.*ptr-i D.+ptr-i(分数:2.50)A.B.C.D.33
17、.有以下程序:main() union unsigned int n;unsigned char c; u1;u1.c=A;printf(“% c/n“, u1.n);执行后输出结果是_。 A.产生语法错误 B.随机值 C.A D.65(分数:2.50)A.B.C.D.34.设有以下说明语句:struct stu int a;float b; stutype;则下面的叙述,正确的是_。 A.struct 是结构体类型名 B.struct stu 是用户定义的结构体变量名 C.stutype 是用户定义的结构体变量名 D.a 和 b 都是结构体变量名(分数:2.50)A.B.C.D.35.以下程
18、序输出的结果是_。#include stdio.htypedef union long i;int k5;char c; DATE;struct date int cat;DATE cow;double dog; too;DATE max;main() printf(“% d/n“, sizeof(struct date)+sizeof(max); A.25 B.30 C.18 D.8(分数:2.50)A.B.C.D.36.以下对结构体变量 stu1 中成员 age 的非法引用是_。struct student int age;int num;stu1, *p;p= A.stu1.age B.
19、student.age C.p-age D.(*p).age(分数:2.50)A.B.C.D.37.下列程序中,结构体变量 a 所占内存字节数是_。union U char st4;int i;long l;struct A int c;union U u;a; A.4 B.5 C.6 D.8(分数:2.50)A.B.C.D.38.设有以下说明语句:struct ex int x; float y; char z; example;则下面的叙述中,不正确的是_。 A.struct 是结构体类型的关键字 B.example 是结构体类型名 C.x,y,z 都是结构体成员名 D.structex
20、是结构体类型名(分数:2.50)A.B.C.D.39.若有下面的说明和定义:struct test int m1; char m2; float m3;union uu char u15;int u22; ua; myaa;则 sizeof(struct test)的值是_。 A.12 B.16 C.14 D.9(分数:2.50)A.B.C.D.40.已知:union int i;char c;float a; test;则 sizeof(test)的值是_。 A.4 B.5 C.6 D.7(分数:2.50)A.B.C.D.二级 C 语言-编译预处理和动态存储分配、结构体和共用体、文件(一)答
21、案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:100.00)1.以下函数的功能是,通过键盘输入数据,为数组中的所有元素赋值。在下划线处应填入的是_。#define N 10void arrin(int xN) int i=0; while(iN)scanf(“% d“, _); A.x+i B.for(i=1; i=NUM; i+);printf(“% d/n“, i);for 循环执行的次数是_。 A.5 B.6 C.8 D.9(分数:2.50)A.B.C. D.解析:解析 程序中 for 循环的执行次数取决于 NUM 的值,因此正确地计算 NUM
22、的值是关键。在(M+1)*M/2 中替换 M。替换后为(N+1+1)*N+1/2;,然后替换 N 为(2+1+1)*2+1/2。这时可以根据其中的数字进行计算,得到 4*2+1/2,计算的最后结果是 8。 总结:切不可直接把值代入。例如,认为 M 的值是 3,于是认为 NUM 是(3+1)*3/2,而得出错误的结果 6。4.以下程序的输出结果为_。#include stdio.h#define SQR(x) x*xmain()int a, k=3;a=+SQR(k+1);printf(“% d/n“, a); A.6 B.10 C.8 D.9(分数:2.50)A.B.C.D. 解析:解析 此题
23、程序中定义了一个带参数的宏名为 SQR,当程序中遇到此宏名进行展开时,则应使用定义时的字符串 x*x 进行替换。替换的原则是:遇到形参 x,则以实参 k+1 代替,其他字符不变。所以,SQR(k+1)经宏展开后成为字符串 k+1*k+1。整个赋值语句的形式变为 a=+k+1*k+1;,k 的值为 3。若按从左到右的顺序运算,k 先自增 1,变为 4,则 a=4+1*4+1=9。5.以下叙述中,正确的是_。 A.用#include 包含的头文件的后缀不可以是“.a” B.若一些源程序中包含某个头文件,当该头文件有错误时,只需对该头文件进行修改,包含此头文件的所有源程序不必重新进行编译 C.宏命令
24、行可以看做是一行 C 语句 D.C 编译中的预处理是在编译之前进行的(分数:2.50)A.B.C.D. 解析:解析 #include 命令行中,头文件只要是文本文件,文件名的后缀可以是任意合法的后缀名,可以用“.a”作为后缀名。当源程序中包含头文件时,可以对其中所包含的头文件进行修改,但修改后必须对该源程序重新进行编译。宏命令行不是 C 语句。C 编译中的预处理是在编译之前进行的。6.程序中头文件 typel.h 的内容是:#define N 5#define M1 N * 3/ *程序如下: * /#include “stdio.h“#include “typel.h“#define M2
25、N * 2main() int i;i=M1+M2;printf(“% d/n“, i);程序编译后运行的输出结果是_。 A.10 B.20 C.25 D.30(分数:2.50)A.B.C. D.解析:解析 本题考查了两个知识点:一个是宏替换(不带参数和带参数的都考查了);另一个是头文件包含。需要注意的是,宏替换是先原样替换,然后再判断运算的优先级,本题难度不大,通过正常的运算可得到的答案是 25。7.有以下程序:#include stdio.h#include stdlib.hint fun(int n) int * p;p=(int *)malloc(sizeof(int);*p=n;re
26、turn * p;main() int a;a=fun(10);printf(“% d/n“, a+fun(a);程序的运行结果是_。 A.0 B.10 C.20 D.出错(分数:2.50)A.B.C. D.解析:解析 分配内存空间函数 malloc()的调用形式:(类型说明符*)malloc(size)。其功能是在内存的动态存储区中分配一块长度为“size”字节的连续区域,函数的返回值为该区域的首地址。“类型说明符”表示把该区域用于何种数据类型。8.以下程序的输出结果是_。#include void fut(int * *s, int p23) * *s=p11; main() int a2
27、3=1,3,5,7,9,11, *p;p=(int *)malloc(sizeof(int);fut(printf(“% d/n“, *p);free (p); A.1 B.7 C.9 D.11(分数:2.50)A.B.C. D.解析:解析 函数 fut()中,形参 s 是一个指向指针的指针,它接受一个基类型为 int 的指针的地址;p是一个行指针,它可以指向一个二维数组的起始行,此二维数组每行只能有 3 个元素。在 fut()函数的语句“* *s=p11;”中,可知 p11的值为 9。在主函数中,定义 p 是一个基类型为 int 的指针,通过调用 malloc()函数,在内存中分配了一个 i
28、nt 类型的存储单元,并把其地址赋给了 p,使它指向此存储单元。调用语句“fut(”,把指针 p 的地址传给了形参 s,使 s 指向了指针 p。在 fut()函数中,语句“* *s=p11;“赋值号的左边,s 中放的是主函数中指针 p 的地址,* *s 则代表主函数中指针 p 所指动态分配的存储单元;“* *s=p11;“就是把 9 赋给此动态存储单元。主函数中 printf 中的输出项是*P,即输出 p 所指动态存储单元中的值。输出结果为 9。总结:malloc()函数是在程序运行、调用该函数时,在内存开辟指定字节的存储单元。malloc()函数返回一个 void 类型的地址值,因此,若要把
29、此地址赋给基类型为 int 的指针 pi 就必须进行强制类型转换,如 pi=(int *)malloc(sizeof(int),而不能直接写成 pi=malloc(sizeof(int)。同理,若要把此地址赋给基类型为 double 的指针 pd,就应当写成pd=(double *)malloc(sizeof(double)。强制类型转换时不能把*号丢掉,如把调用语句写成(int)malloc(sizeof(int),以至要求把指针类型转换为整型,这是不允许的。9.对下面程序段,正确的判断是_。#define A 3#define B(a) (A+1) *a)x=3 * (A+B(7); A.
30、程序错误,不许嵌套宏定义 B.x=93 C.x=21 D.程序错误,宏定义不许有参数(分数:2.50)A.B. C.D.解析:10.以下程序的输出结果为_。#include stdio.h#define F(y) 3.84+y#define PR(a) printf(“% d“, (int) (a)#define PRINT(a) PR(a); putchar(/n)main() int x=2;PRINT(F(3) *x); A.8 B.9 C.10 D.11(分数:2.50)A.B. C.D.解析:11.以下说法中,正确的是_。 A.#define 和 printf 都是 C 语句 B.#
31、define 是 C 语句,而 printf 不是 C.printf 是 C 语句,但#define 不是 D.#define 和 printf 都不是 C 语句(分数:2.50)A.B.C. D.解析:12.以下程序的输出结果是_。#define f(x) x*x#include stdio.hmain() int a=6, b=2, c;c=f(a)/f(b);printf(“% d/n“, c); A.9 B.6 C.36 D.18(分数:2.50)A.B.C. D.解析:13.以下程序运行后,输出的结果是_。#define PT 5.5#define S(x) PT*x*x#inclu
32、de stdio.hmain() int a=1, b=2;printf(“% 4.1f/n“, S(a+b); A.49.5 B.9.5 C.22.0 D.45.0(分数:2.50)A.B. C.D.解析:14.下列程序执行后的输出结果是_。#define MA(x) x* (x-1)#include stdio.hmain() int a=1, b=2; printf(“% d/n“, MA(1+a+b); A.6 B.8 C.10 D.12(分数:2.50)A.B. C.D.解析:15.有以下程序:#define N 2#define M N +1#define NUM 2 * M+1m
33、ain() int i;for(i=1; i=NUM; i+) printf(“% d/n“, i);该程序中的 for 循环执行的次数是_。 A.5 B.6 C.7 D.8(分数:2.50)A.B.C. D.解析:16.程序中头文件 typel.h 的内容是:#define N 5#define M1 N * 3程序如下:#include “typel.h“#define M2 N * 2main() int i;i=M1+M2; printf(“% d/n“, i);程序编译后运行的输出结果是_。 A.10 B.20 C.25 D.30(分数:2.50)A.B.C. D.解析:17.以下正
34、确的描述为_。 A.每个 C 语言程序必须在开头使用预处理命令#include B.预处理命令必须位于 C 源程序的首部 C.在 C 语言中预处理命令都以“#”开头 D.C 语言的预处理命令只能实现宏定义和条件编译的功能(分数:2.50)A.B.C. D.解析:18.从下列选项中选择不会引起二义性的宏定义是_。 A.#define POWER(x)x*x B.#define POWER(x)(x)*(x) C.#define POWER(x)(x*x) D.#define POWER(x)(x)*(x)(分数:2.50)A.B.C.D. 解析:19.设有以下宏定义:#define N 3#de
35、fine Y(n) (N+1)*n)则执行语句“z=2 * (N+Y(5+1);“后, z 的值为_。 A.出错 B.42 C.48 D.54(分数:2.50)A.B.C. D.解析:20.若有宏定义#define MOD(x, y) x%y,则执行以下语句后的输出为_。int z, a=15, b=100;z=MOD (b, a);printf(“% d/n“, z+); A.11 B.10 C.6 D.宏定义不合法(分数:2.50)A.B. C.D.解析:21.以下程序的输出结果是_。#include stdio.hint a33=1,2,3,4,5,6,7,8,9, *p;f(int *
36、s, int p3) *s=p11; main() p=(int *)malloc(sizeof(int);f(p, a);printf(“% d/n“, *p);free(p); A.1 B.4 C.7 D.5(分数:2.50)A.B.C.D. 解析:22.以下程序的输出结果是_。#include stdio.htypedef union long x2;int y4;char z8; MYTYPE;MYTYPE them;main() printf(“% d/n“, sizeof(them); A.32 B.16 C.8 D.24(分数:2.50)A.B.C. D.解析:解析 程序说明了一
37、个共用体类型 MYTYPE;并定义了 them 为 MYTYPE 类型的共用体变量。程序要求输出变量 them 所占的字节数。共用体中包含 3 个成员,而每个成员所占的字节数都是 8,共用体变量所占内存字节数与其成员中占字节数最多的那个成员相等。23.以下程序的运行结果是_。#include “stdio.h“main() struct date int year, month, day; today;printf(“% d/n“, sizeof(struct date); A.6 B.8 C.10 D.12(分数:2.50)A. B.C.D.解析:解析 结构体变量的长度是其内部成员总长度之和
38、,本题中,struct date 中包含year、month、day 这 3 个整型变量。一个整型变量所占的字节数为 2。注意结构体和共用体的差别,这是本题容易混淆的地方。24.若有以下结构体定义:struct example int x;int y; v1;则_是正确的引用或定义。 A.example, x=10; B.example v2; v2.x=10; C.struct v2; v2.x=10; D.struct example v2=10;(分数:2.50)A.B.C.D. 解析:解析 此题考查基本的结构体定义和引用方法。选项 A 的错误是通过结构体名引用结构体成员,选项 B 的错
39、误是将结构体名作为类型名使用,选项 C 的错误是将关键字 struct 作为类型名使用,选项 D是定义变量 v2 并对其初始化的语句,初始值只有前一部分,这是允许的。25.有以下程序:#include stdio.hmain() struct cmplxint x; int y; cnum2=1,3,2,7;printf(“% d/n“, cnum0.y/cnum0.x*cnum1.x);则正确的输出结果为_。 A.0 B.1 C.3 D.6(分数:2.50)A.B.C.D. 解析:解析 程序定义了一个名为 cnum 的含有两个元素的结构体类型数组,结构体类型为 struct cmplx, c
40、num 的每个元素含有两个成员。在定义 cnum 的同时给它的元素赋初值,cnum0.x 的初值是1,cnum0.y 的初值是 3,cnum1.x 的初值是 2,cnum1.y 的初值是 7。因此,printf 输出项中的表达式可代入为 3/1*2,输出结果是 6。总结:对结构体变量(或数组)赋初值时,C 编译程序按每个成员在内存中排列的顺序,一一对应赋予初值表中的值。26.设有以下定义:struct sk int a;float b; data;int *p;若要使 p 指向 data 中的 a 域,正确的赋值语句是_。 A.p= B.p=data.a; C.p= D.*p=data.a;(
41、分数:2.50)A.B.C. D.解析:解析 结构体变量的引用方法有 3 种:结构体变量名成员名;指针变量名-成员名;(*指针变量名).成员名。因为 p 是指针变量,所以应将地址值赋给 p。27.以下程序的输出是_。#include stdio.hmain() struct s1 int x; int y;struct s1 a=1,3;struct s1 *b=b-x=10;printf(“% d% d/n“, a.x, a.y); A.13 B.103 C.310 D.31(分数:2.50)A.B. C.D.解析:解析 b 为指向结构 a 的指针,通过运算符改变了 a 成员 x 的值为 1
42、0,所以输出 103。28.以下程序的执行结果是_。#include stdio.hunion un int i;char c2;main() union un x;x.c0=10;x.c1=1;printf(“/n% d“, x.i); A.266 B.11 C.265 D.138(分数:2.50)A. B.C.D.解析:解析 此题考查共用体的特征。int 类型变量 i 和字符数组 c 共用两个字节的存储单元,通常 c0位于低字节,c1位于高字节。因此,x.i=x.c1*256+x.c0=266,故选项 A 正确。29.以下程序的输出结果是_。union myun structint x,
43、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(分数:2.50)A.B.C.D. 解析:解析 共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。在本题中,当对 a.u.y 成员赋值时,a.u.x 的值就不存在了,当对 a.u.z 赋值时,a.u.y 的值就不存在了。30.已知字符 0 的 ASCII 代码值的十进制数是 48,有以下程序:#include stdio.hmain() union int i2;long
44、 k;char c4; r, *s=s-i0=0x39; s-i1=0x38;printf(“% x/n“, s-c0);其输出结果是_。 A.39 B.9 C.38 D.8(分数:2.50)A. B.C.D.解析:解析 在共用体变量中,所有成员共用存储空间。因此变量 r 中,成员 i0和成员 c0和 c1共用 2 字节的存储空间,c0和 c1都占 1 字节,因此,c0与 i0的低 8 位共用 1 字节,而 c1与i0的高 8 位共用 1 字节。程序以十六进制数的形式输出 s-c0的值,因此只需求出在 i0的低 8 位中的值即可。程序有赋值语句:s-i0=0x39; s-i1=0x38;,根据
45、以上分析,只需关心 s-i0=0x39;的赋值即可。因为 c0与 i0的低 8 位共用 1 字节,所以 s-c0的十六进制数就是 39。31.在 16 位的 PC 上使用 C 语言,若有以下定义:struct data int i;char ch;double f; b;则结构变量 b 占用内存的字节数是_。 A.1 B.2 C.8 D.11(分数:2.50)A.B.C.D. 解析:32.设有以下说明和定义语句,则下面表达式中值为 3 的是_。struct s int i;struct s *i2;static struct s a3=1, static struct s *ptr;ptr= A