1.选择题
(1)以下for程序中,语句构成的循环执行了 次。
#include <stdio.h>
#define N 2
#define M N+1
#define NUM (M+1)*M/2
main()
{
int i,n=0;
for (i=1;i<=NUM;i++);
{
n++;
printf("%d",n);
}
printf("\n");
}
A.5 B.6 C.8 D.9
(2)有以下程序:
#include <stdio.h>
#define N 6
main()
{
char c[N];
int i=0;
for(;i<N;c[i]=getchar(),i++);
for(i=0;i<N;putchar(c[i]),i++);
}
输入以下三行,每行输入都是从第一列开始:
a<CR>
b<CR>
cdef<CR>
则以上程序的输出结果是 。
A.abcdef B.a C.a D.a
b b b
c cd cdef
d
e
f
(3)以下程序的输出结果是 。
#include <stdio.h>
#define FUDGE(y) 2.84+y
#define PR(a) printf("%d",(int)(a))
#define PRINT1(a) PR(a);putchar('\n')
main()
{
int x=2;
PRINT1(FUDGE(5)*x);
}
A.11 B.12 C.13 D.15
(4)在宏定义#define PI 3.14159中,用宏名PI代替一个 。
A.单精度数 B.双精度数 C.常量 D.字符串
(5)以下程序片段的输出结果 。
#include <stdio.h>
#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",k);
}
A.15 B.100 C.10 D.150
(6)以下程序的输出结果是 。
#include <stdio.h>
#define SUB(X,Y) (X)*Y
main()
{
int a=3,b=4;
printf("%d",SUB(a++,b++));
}
A.12 B.15 C.16 D.20
(7)执行以下程序后,a的值是 。
#include <stdio.h>
#define SQR(X) X*X
main()
{
int a=10,k=2,m=1;
a/=SQR(k+m)/SQR(k+m);
printf("%d\n",a);
}
A.10 B.1 C.9 D.0
(8)设有以下宏定义:
#define N 3
#define Y(n) ((N+1)*n)
则执行语句:z=2 * (N+Y(5+1));后,z的值为 。
A.出错 B.42 C.48 D.54
(9)以下程序的输出结果是 。
#include <stdio,h>
#define PT 5.5
#define S(x) PT* x * x
main()
{
int a=1,b=2;
printf("%4.1f\n",S(a+b));
}
A.49.5 B.9.5 C.22.0 D.45.0
(10)以下说法中,正确的是 。
A.#define和printf都是C语言语句
B.#define是C语言语句,而printf不是
C.printf是C语言语句,但#define不是
D.#define和printf都不是C语言语句
(11)以下程序的输出结果是 。
#define f(x) x*x
main()
{
int a=6,b=2,c;
c=f(a)/f(b);
printf("%d \n",c);
}
A.9 B.6 C.36 D.18
(12)以下程序的输出结果是 。
#define MA(x) x*(x-1)
main()
{
int a=1,b=2;
printf("%d \n",MA(1+a+b));
}
A.6 B.8 C.10 D.12
(13)以下程序中的for循环执行的次数是 。
#define N 2
#define M N+1
#define NUM 2*M+1
main()
{
int i;
for(i=1;i<=NUM;i++)
printf("%d\n",i);
}
A.5 B.6 C.7 D.8
(14)以下程序的输出结果是 。
#define M(x,y,z) x*y+z
main()
{
int a=1,b=2,c=3;
printf("%d\n",M(a+b,b+c,c+a));
}
A.19 B.17 C.15 D.12
(15)若程序中头文件typel.h的内容是:
#define N 5
#define M1 N*3
则以下程序的输出结果是 。
#define M2 N*2
#include <stdio.h>
#include "typel.h"
main()
{
int i;
i=M1+M2;
printf("%d\n",i);
}
A.10 B.20 C.25 D.30
(16)以下程序的输出结果是 。
#include <stdio.h>
#define F(X,Y) (X)*(Y)
main()
{
int a=3,b=4;
printf("%d\n",F(a++,b++));
}
A.12 B.15 C.16 D.20
(17)以下程序中,for语句构成的循环执行了 次。
#include <stdio.h>
#define N 2
#define M N+1
#define NUM (M+1)*M/2
main()
{
int i,n=0;
for(i=1;i<=NUM;i++);
{
n++;
printf("%d",n);
}
printf("\n");
}
A.5 B.6 C.8 D.9
2.填空题
(1)以下程序的输出结果是 。
#define PR(ar) printf("%d",ar)
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));
}
}
}
(2)以下程序的输出结果是 。
#define MAX(x,y) (x)>(y)?(x):(y)
main()
{
int a=5,b=2,c=3,d=3,t;
t=MAX(a+b,c+d)*10;
printf("%d\n",t);
}
(3)设有如下宏定义:
#define MYSWAP(z,x,y) { z=x; x=y; y=z; }
以下程序片段的功能是通过宏调用实现变量a、b内容交换。
float a=5,b=16,c;
MYSWAP( ,a,b);
(4)以下程序的输出结果是 。
#define N 10
#define s(x) x*x
#define f(x) (x*x)
main()
{
int i1,i2;
i1=1000/s(N);
i2=1000/f(N);
printf("%d %d\n",i1,i2);
}
(5)以下程序的输出结果是 。
#define MCRA(m) 2*m
#define MCRB(n,m) 2*MCRA(n)+m
main()
{
int i=2,j=3;
printf("%d\n",MCRB(j,MCRA(i)));
}
3.上机操作题
(1)编写一个程序,实现输入两个整数,求它们相除的余数。要求用带参数的宏来实现。
(2)编写一个程序,实现从3个数中找出最大的数。要求分别用函数和带参数的宏来实现。
(3)编写一个程序,实现用来交换两个参数的值。要求分别用函数和带参数的宏来实现。
(4)编写一个程序,实现输入一个年份,判断该年是否为闰年。要求分别用函数和带参数的宏来实现。