10.4 综合自测
一、选择题
1.对下面程序段,正确的判断是( )。
#define A 3
#define B(a)((A+1)*a)
x=3*(A+B(7));
A.程序错误,不许嵌套宏定义 B.x=93
C.x=21 D.程序错误,宏定义不许有参数
2.以下程序的输出结果为( )。
#include <stdio.h>
#define F(y)3.84+y
#define PR(a)printf("% d",(int)(a))
#define PRINT(a)PR(a);putchar('\n')
main()
{ int x=2;
PRINT(F(3)*x);
}
A.8 B.9 C.10 D.11
3.以下说法中,正确的是( )。
A.#define和printf都是C语句 B.#define是C语句,而printf不是
C.printf是C语句,但#define不是 D.#define和printf都不是C语句
4.以下程序的输出结果是( )。
#define f(x)x*x
#include <stdio.h>
main()
{ int a=6,b=2,c;
c=f(a)/f(b);
printf("% d \n",c);
}
A.9 B.6 C.36 D.18
5.以下程序运行后,输出的结果是( )。
#define PT 5.5
#define S(x)PT*x *x
#include <stdio.h>
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
6.下列程序执行后的输出结果是( )。
#define MA(x)x*(x-1)
#include <stdio.h>
main()
{ int a=1,b=2;printf("% d \n",MA(1+a+b));
}
A.6 B.8 C.10 D.12
7.有以下程序:
#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);
}
该程序中的for循环执行的次数是( )。
A.5 B.6 C.7 D.8
8.程序中头文件typel.h 的内容是:
#define N 5
#define M1 N*3
程序如下:
#include "type1.h"
#define M2 N*2
main()
{ int i;
i=M1+M2;printf("% d\n",i);
}程序编译后运行的输出结果是( )。
A.10 B.20 C.25 D.30
9.以下正确的描述为( )。
A.每个C语言程序必须在开头使用预处理命令#include<stdio.h>
B.预处理命令必须位于C源程序的首部
C.在C语言中预处理命令都以“#”开头
D.C语言的预处理命令只能实现宏定义和条件编译的功能
10.从下列选项中选择不会引起二义性的宏定义是( )。
A.#definePOWER(x)x*x B.#definePOWER(x)(x)*(x)
C.#definePOWER(x)(x*x) D.#definePOWER(x)((x)*(x))
11.设有以下宏定义:
#define N 3
#define Y(n) ((N+1)*n)
则执行语句"z=2 * (N+Y(5+1));"后,z的值为( )。
A.出错 B.42 C.48 D.54
12.若有宏定义#defineMOD(x,y) x%y,则执行以下语句后的输出为( )。
int z,a=15,b=100;
z=MOD(b,a);
printf("% d\n",z++);
A.11 B.10 C.6 D.宏定义不合法
13.以下程序的输出结果是( )。
#include<stdio.h>
int a[3][3] ={1,2,3,4,5,6,7,8,9},*p;
f(int *s,int p[][3])
{*s=p[1][1];}
main()
{ p=(int*)malloc(sizeof(int));
f(p,a);
printf("% d \n",*p);
free(p);
}
A.1 B.4 C.7 D.5
二、操作题
下列给定程序中,函数fun()的功能是:将形参s所指字符串中的所有字母字符按顺序前移,其他字符按顺序后移,处理后将新字符串的首地址作为函数值返回。
例如,若s所指字符串为asd123fgh543df,处理后新字符串为asdfghdf123543。
请在标号处填入正确的内容,使程序得出正确的结果。
注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构。
试题程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *fun(char *s)
{ int i,j,k,n;char *p,*t;
n=strlen(s)+1;
t=(char*)malloc(n*sizeof(char));
p=(char*)malloc(n*sizeof(char));
j=0;k=0;
for(i=0;i<n;i++)
{ if(((s[i] > = 'a')&&(s[i] < = 'z'))||
((s[i] > = 'A')&&(s[i] < = 'Z'))){
t[j] =【1】;j++;}
else
{p[k] =s[i];k++;}
}
for(i=0;i<【2】;i++)t[j+i] =p[i];
t[j+k] =【3】;
return t;}
main()
{ char s[80];
printf("Please input:");scanf("% s",s);
printf("\nThe result is:% s\n",fun (s));
}