6.下面程序执行FOR循环时,j的初值是 3 ,终值是 0 。 #include “stdio.h” #define BOT (-2) #define TOP (BOT+5) #define PRI(arg) printf(“%d\\n”,arg) #define FOR(arg) for(;(arg);(arg)--) void main() { int i=BOT,j=TOP; FOR(j) switch(j) { case 1: PRI(i++); case 2: PRI(j); break; default: PRI(i); } }
7.下面程序的运行结果是 1 12 123 1234
TABLE 。
#include “stdio.h” #define PRI printf #define NL “\\n” #define D “%d” #define D1 D NL #define D2 D D NL #define D3 D D D NL #define D4 D D D D NL #define S “%s” void main() { int a,b,c,d; char string[]=“TABLE”; a=1; b=2; c=3; d=4; PRI(D1,a); PRI(D2,a,b); PRI(D3,a,b,c); PRI(D4,a,b,c,d);
15
PRI(S,string); }
8.设有以下程序,为使之正确运行,请填入应包含的命令行。 /* a.c */ #include
9.以下程序的运行结果是 c=2 。 #include “stdio.h” #define DEBUG void main() { int a=20,b=10,c; c=a/b; #ifndef DEBUG printf(“a=%o,b=%o,”,a,b); #endif printf(“c=%d\\n”,c); }
10.以下程序的输出结果为 c language 。 #include “stdio.h” #define LETTER 0 void main() { char str[20]=“C Language”,c;
int i=0;
while((c=str[i++])!=‘\\0’) { #if LETTER if(c>=‘a’&&c<=‘z’) c=c-32; #else if(c>=‘A’&&c<=‘Z’) c=c+32; #endif printf(“%c”,c);
16
}
}
三、编程题(共20分,每题10分)
1.输入两个整数,求它们相除的余数。用带参的宏来编程实现。
2.试定义一个带参的宏swap(x,y),以实现两个整数之间的交换,并利用它将一维数组a和b的值
进行交换。
17
1.
#define MOD(x,y) ((x)%(y)) #include \void main() {
int a,b,c;
scanf(\,&a,&b); c=MOD(a,b);
printf(\,a,b,c); }
2.
#define swap2(x,y){int s=x;x=y;y=s;} #include
void main() { int a1[3]={1,2,3}; int a2[3]={11,12,13}; int i;
printf(\交换前 a1:\\n\); for (i=0;i<3;i++)
printf(\,a1[i]);
printf(\);
printf(\交换前 a2:\\n\); for (i=0;i<3;i++)
printf(\,a2[i]);
printf(\);
for(i=0;i<3;i++) { swap2(a1[i],a2[i]); }
printf(\交换后 a1:\\n\); for (i=0;i<3;i++)
printf(\,a1[i]);
printf(\);
printf(\交换后 a2:\\n\); for (i=0;i<3;i++)
printf(\,a2[i]);
printf(\); }
18
第九部分 指 针
一、选择题(共20分,每题1分)
1.若已定义:int *p,a;,则语句p=&a;中的运算符“&”的含义是 D 。
A.位与运算 B.逻辑与运算 C.取指针内容 D.取变量地址 2.若有定义int a[10],*p=a; ,则p+5表示 A 。
A.元素a[5]的地址 B.元素a[5]的值 C.元素a[6]的地址 D.元素a[6]的值
3.若有定义int a[5],*p=a; ,则对a数组元素的正确引用是 D 。
A.*&a[5] B.a+2 C.*(p+5) D.*(a+2) 4.下列选项中正确的语句组是___D___。
A.char s[8]; s={\.char *s; s={\C.char s[8]; s=\.char *s; s=\
5.若有说明:int i, j=2,*p=&i; ,则能完成i=j赋值功能的语句是 B 。
A.i=*p; B.*p=j; C.i=&j; D.i=&p;
6.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是 D 。
A.a,point,*&a B.&*a,&a,*point C.*&point,*point,&a D.&a,&*point ,point
7.若有定义:int a[2][3], 则对a数组的第i行j列元素地址的正确引用为 D 。
A.*(a[i]+j) B.(a+i) C.*(a+j) D.a[i]+j 8.有以下函数,该函数的返回值是 C 。
int fun(int *p) { return *p;}
A.不确定的值 B.形参p中存放的值 C.形参p所指存储单元中的值 D.形参p的地址值
9.若已定义:int a[ ]={0,1,2,3,4,5,6,7,8,9},*p=a,i;
其中 0
A.a[p-a] B.*(&a[i]) C.p[i] D.a[10]
10.定义一个函数实现交换x和y的值,并将结果返回。能够实现此功能的是 C 。
A.void swapa(int x,int y) B.void swapb(int *x,int *y)
{ int temp; { int temp;
temp=x;x=y;y=temp; temp=x;x=y;y=temp; } }
C.void swapc(int *x,int *y) D.void swapd(int *x,int *y)
{ int temp; { int *temp;
temp=*x;*x=*y;*y=temp; temp=x;x=y;y=temp; } }
19