D) 一个变量说明为static存储类是为了限制其它编译单位的引用.
二. 填空题
[12.9] 以下程序的输出结果是______.
main()
{ int a=3, b=2, c=1; c-=++b; b*=a+c;
{ int b=5, c=12; c/=b*2; a-=c;
printf(“%d,%d,%d,”,a,b,c); a+=- -c; }
printf(“%d,%d,%d\\n”,a,b,c); }
[12.10] 以下程序的输出结果是______.
void fun()
{ static int a;
a +=2; printf(“%d”,a ); }
main()
{ int cc;
for(cc=1; cc<=4 ; cc++) fun(); printf(“\\n”) }
第十三章 编译预处理和动态存储分配
一. 选择题
[13.1] 以下程序的输出结果是
A) 15 B) 100 C) 10
D) 150
#define MIN(x,y) (x)<(y)?(x):(y) main()
{ int i,j,k;
i=10: j=15; k=10*MIN(i,j); printf(%d\\n\ }
[13.2] 以下程序中的for循环执行的次数是 A)5 B)6 C)8 D)9
#define N 2 #define M N+1
#define NUM (M+1)*M/2 main()
{ int i;
for (i=1:i<=NUM; i++); printf(\
}
[13.3] 以下程序的输出结果是
A)11 B)12 C)13 D)15
#define FUDGF(y) 2.84+y
#define PR(a) printf(\#define PRINT1(a) PR(a): putchar('\\n') main()
{ int x=2;
PRINT1(FUDGF(5)* x); }
[13.4] 以下程序的输出结果是 A)1 B)7 C)9 D)11
fut(int **s,int P[2][3]) { **s=p[1][1]; } main()
{ int a[2][3]={1,3,5,7,9,11 },*p; p=(int *)malloc(sizeof(int)); fut(&p,a);
printf(\}
[13.5] 若要使指针变量P指向一个double类型的动态存储单元,在下划线处应填入 A)double B)double* C)(*double) D)(double *)
double *p;
p=____________malloc(sizeof(double)); [13.6] 以下程序的输出结果是
A)11.10 B)12.00 C)21.10 D)1.10
void fun(float *p1,float *p2,float *s) { s=(float *)calloc(1,sizeof(float) ); *s=*p1+*p2++; }
main()
{ float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a; fun(a,b,s);
printf(\ }
[13.7] 以下叙述中正确的是
A) 用#include包含的头文件的后缀不可以是\
B) 若一些源程序中包含某个头文件:当该头文件有错时,只需对该头文件进行修
改,
包含此头文件所有源程序不必重新进行编译.
C) 宏命令行可以看做是一行C语句. D) C编译中的预处理是在编译之前进行的.
二. 填空题
[13.8] 以下程序的输出结果是________.
#define PR(ar) printf(\main()
{ int j,a[]={1,3,5,7,9,11,13,15},*p=a+5; for (j=3; j; j--) switch(j) {case 1 :
case 2 : PR(*p++); break; case 3 : PR(*(--p)); } }
[13.9] 下面程序调用getone函数开辟一个动态存储单元,调用assone函数把数据输入此动态存储单元, 调用outone函数输出此动态存储单元中的数据.请填空.
#include \ getone(int **s)
{ *s=(________)malloc(sizeof(int)); } assone(int *s)
{ scanf(\ outone int *b)
{ printf(\ main() {int *P;
getone(&p); assone(p); outone(p); }
三. 编程题
[13.10] 请写出一个宏定义MYALPHA(C),用以判断C是否是字母字符,若是,得1,否则得0. [13.11] 请写出一个宏定义swap(t,x,y)用以交换t类型的两个参数. 提示:用复合语句的形式.
[13.12] 请编写程序,利用malloc函数开辟动态存储单元,存放输入的三个整数.
然后按从小到大的顺序输出这三个数.
第十四章结构体。共用体和用户定义类型
一. 选择题
[14.1] 根据以下的定义,能输出字母M的语句是
A) printf(\
A) B) printf(\
C) printf(\
D) printf(\
struct person {char name[9];int age; } struct person class[10]={\ \ \ \
[14.2] 以下程序的输出结果是 A)0 B)1 C)3 D)6
main()
{struct cmplx{int x; int y;} cnum[2]={1,3,2,7}; printf(\
[14.3] 若有以下说明和语句,则值为6的表达式是 A)P++->n B)p->n++ c)(*p).n++ D)++p->n
struct st {int n;
struct st *next; };
struct st a[3],*p;
a[0].n=5; a[0].next=&a[1]; a[1].n=7; a[1].next=&a[2]; a[2].n=9; a[0].next='\\0'; p=&a[0];
[14.4] 已知字符0的ASCII代码值的十进制数是48,且数组的第0个元素在低位,以下程
序的输出结果是
A)39 B)9 C)38
D)8
main()
{ union {int i[2]; long k; char c[4]; }r,*s=&r;
s->i[0]=0x39; s->i[1]=0x38; printf(\
[14.5] 以下程序的输出结果是
A) 32 B)16 C) 8 D) 24 typeedef union { long x[2]; int y[4]; char z[8]; } MYTYPE; MYTYPE them; main()
{ printf(“%d\\n”,sizeof(them)); }
[14.6] 以下程序的输出结果是
A) 10 B) 50 C) 51 D) 60 20 60 60 70 20 21 11 31 struct st { int x; int *y; } *p;
int dt[4]={10,20,30,40};
struct st aa[4]={50,&dt[0],60, &dt[0],60, &dt[0],60, &dt[0],}; main() { p=aa;
printf(“%d\\n”,++p->x); printf(“%d\\n”,(++p)->x); printf(“%d\\n”,++(*p->y)); }
[14.7] 若已建立下面的链表结构,指针p,s分别指向图中所示结点,
则不能将s所指的结点插入到链表末尾的语句是
A) s->next=NULL; p=p->next; p->next=s; B) p=p->next;s->next=p->next;p->next=s; C) p=p->next; s->next=p; p->next=s; D) p=(*p).next; (*s).next=(*p).next=s;
head