您的位置: 网站首页 > 程序开发 > C语言程序设计案例教程 > 第十章 编译预处理命令 > 【10.4 思考与练习】

10.4 思考与练习

 

思考与练习

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)编写一个程序,实现输入一个年份,判断该年是否为闰年。要求分别用函数和带参数的宏来实现。