您的位置: 网站首页 > 程序开发 > 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");

}

A5                           B6                            C8                     D9

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>

则以上程序的输出结果是     

Aabcdef                    Ba                            Ca                     Da

                            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);

}

A11                          B12                          C13                   D15

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);

}

A15                          B100                        C10                   D150

6)以下程序的输出结果是     

#include <stdio.h>

#define SUB(X,Y) (X)*Y

main()

{

    int a=3,b=4;

    printf("%d",SUB(a++,b++));

}

A12                          B15                          C16                   D20

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);

}

A10                          B1                            C9                     D0

8)设有以下宏定义:

#define  N  3

#define  Y(n) ((N+1)*n)

则执行语句:z=2 * (N+Y(5+1));后,z的值为     

A.出错                      B42                          C48                   D54

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));

}

A49.5                            B9.5                         C22.0                D45.0

10)以下说法中,正确的是     

A#defineprintf都是C语言语句

B#defineC语言语句,而printf不是

CprintfC语言语句,但#define不是   

D#defineprintf都不是C语言语句

11)以下程序的输出结果是     

#define f(x) x*x

main()

{

    int a=6,b=2,c;

    c=f(a)/f(b);

    printf("%d \n",c);

}

A9                          B6                            C36                   D18

12)以下程序的输出结果是     

#define  MA(x) x*(x-1)

main()

{

    int a=1,b=2;

    printf("%d \n",MA(1+a+b));

}

A6                          B8                            C10                   D12

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);

}

A5                          B6                            C7                     D8

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));

}

A19                        B17                          C15                   D12

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);

}

A10                        B20                          C25                   D30

16)以下程序的输出结果是     

#include  <stdio.h>

#define  F(X,Y) (X)*(Y)

main()

{

    int a=3,b=4;

    printf("%d\n",F(a++,b++));

}

A12                        B15                          C16                   D20

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"); 

}

A5                          B6                            C8                     D9

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; }

以下程序片段的功能是通过宏调用实现变量ab内容交换。

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