编译预处理和动态存储分配及答案Word格式.docx
《编译预处理和动态存储分配及答案Word格式.docx》由会员分享,可在线阅读,更多相关《编译预处理和动态存储分配及答案Word格式.docx(12页珍藏版)》请在冰点文库上搜索。
6
C)7
D)6
(4)以下叙述中正确的是
A)预处理命令行必须位于源文件的开头
B)在源文件的一行上可以有多条预处理命令
C)宏名必须用大写字母表示
D)宏替换不占用程序的运行时间
(5)有以下程序
main()
chara[]=”abcdefg”,b[10]=”abcdefg”;
printf(“%d
%d\n”,sizeof(A),sizeof(B));
执行后输出结果是
A)7
7
B)88
C)810
D)1010
(6)有以下程序
#define
x*x
inti;
i=f(4+4)/f(2+2);
printf(“%d\n”,i);
A)28
B)22
C)16
D)4
(7)有以下程序
#include
<
stdio.h>
F(X,Y)(X)*(Y)
main()
a=3,b=4;
printf("
%d\n"
F(a++,b++));
A)12
B)15
D)20
(8)有以下程序
char
s[]="
\n123\\"
%d,%d\n"
strlen(s),sizeof(s));
A)赋初值的字符串有错
B)6,7
C)5,6
D)6,6
(9)有以下程序
main(int
arge,char
*argv[])
n,i=0;
while(arv[1][i]!
='
\0'
n=fun();
i++;
printf(%d\n"
n*argc);
fun()
staticint
s=0;
s+=1;
return
s;
假设程序经编译、连接后生成可执行文件exam.exe,若键入以下命令行
exam
123<
回车>
则运行结果为
(10)有以下程序
{chara[]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘h’,‘\0’};
int
i=sizeof(a);
printf(“%d,%d\b”i,j);
A)9,9
B)8,9
C)1,8
D)9,8
(11)程序中头文件typel.h的内容是:
N
5
M1
N*3
程序如下:
“type1.h”
M2
N*2
{inti;
i=M1+M2;
程序编译后运行的输出结果是:
A)10
B)20
C)25
D)30
(12)有以下程序
stdlib.h>
{char*p,*q;
p=(char*)malloc(sizeof(char)*20);
q=p;
scanf(“%s%s”,p,q);
printf(“%s%s\n”,p,q);
}
若从键盘输入:
abcdef<
,则输出结果是:
A)defdef
B)abcdef
C)abcd
D)dd
(13)若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是
A)p=2*(int*)malloc(sizeof(int));
B)p=(int*)malloc(2*sizeof(int));
C)p=(int*)malloc(2*2);
D)p=(int*)calloc(2,sizeof(int));
(14)以下程序的输出结果是
st[20]=“hello\0\t\\\”;
printf(%d%d\n”,strlen(st),sizeof(st));
A)99
B)520
C)1320
D)2020
(15)以下程序的输出结果是
amovep(int
p,int
(a)[3],int
n)
i,j;
for(i=0;
i<
i++)
for(j=0;
j<
n;
j++){
*p=a[i][j];
p++;
}
*p,a[3][3]={{1,3,5},{2,4,6}};
p=(int*)malloc(100);
amovep(p,a,3);
printf(“%d%d\n”,p[2],p[5]);
free(p);
A)56
B)25
C)34
D)程序错误
(16)以下程序的输出结果是
M(x,y,z)
x*y+z
a=1,b=2,c=3;
printf(“%d\n”,M(a+b,b+c,c+a));
A)19
B)17
C)15
D)12
(17)以下程序的输出结果是
A)16
B)2
C)9
D)1
SQR(X)
X*X
a=16,k=2,m=1;
a/=SQR(k+m)/SQR(k+m);
printf(“d\n”,a);
(18)若定义了以下函数:
voidf(……)
{……
*p=(double*)malloc(10*sizeof(double));
……
p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是
A)double
*p
B)float
**p
C)double
D)float
*p
(19)有如下程序
M
N+1
NUM
2*M+1
#main()
i;
for(i=1;
=NUM;
i++)printf(“%d\n”,i);
该程序中的for循环执行的次数是
A)5
B)6
C)7
D)8
(20)下列程序执行后的输出结果是
A)6
B)8
C)10
#define
MA(x)x*(x-1)
main()
{inta=1,b=2;
%d\n"
MA(1+a+b));
(21)若有说明:
long*p,a;
则不能通过scanf语句正确给输入项读入数据的程序段是
A)*p=&
a;
scanf("
%ld"
,p);
B)p=(long*)malloc(8);
C)scanf("
,p=&
a);
D)scanf("
,&
(22)以下程序的输出结果是
A)1
B)4
D)5
#include
a[3][3]={1,2,3,4,5,6,7,8,9,},*p;
main(
)
{
p=(int*)malloc(sizeof(int));
f(p,a);
,*p);
f(int*s,
p[][3])
*s=p[1][1];
(23)以下程序的输出结果是
A)9
C)36
D)18
a=6,b=2,c;
c=f(a)/f(b);
,c);
(24)以下程序运行后,输出结果是
A)49.5
B)9.5
C)22.0
D)45.0
#include<
stdio,h>
PT
5.5
S(x)
PT*x*x
a=1,b=2;
%4.1f\n"
S(a+b));
(25)以下程序运行后,输出结果是
B)7
D)11
fut(int
**s,int
p[2][3])
**s=p[1][1];
a[2][3]={1,3,5,7,9,11},
*p;
p=(int
*)malloc(sizeof(int));
fut(&
p,a);
*P);
(26)设有以下宏定义:
Y(n)
((N+1)*n)
则执行语句:
z=2*(N+Y(5+1));
后,z的值为
A)出错
B)42
C)48
D)54
(27)若有说明,double*p,a;
则能通过scanf语句正确给输入项读入数据的程序段是
A)*p=&
a;
%lf"
p);
B)p=(double*)malloc(8);
scanf("
%f"
C)p=&
a);
D)p=&
%le"
(28)执行下面的程序后,a的值是
{inta=10,k=2,m=1;
a/=SQR(k+m)/SQR(k+m);
B)1
D)0
(29)以下程序的输出结果是
fut(int**s,intp[2][3])
inta[2][3]={1,3,5,7,9,11},*p;
p=(int*)malloc(sizeof(int));
fut(&
primtf("
*p);
(30)若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元:
int*p;
p=__________malloc(sizeof(int));
则应填入
A)int
B)inst*
C)(*int)
D)(int*)
(31)请读程序:
#include<
#defineSUB(X,Y)(X)*Y
{inta=3,b=4;
%d"
SUB(a++,b++));
上面程序的输出结果是
(32)请读程序:
voidfun(float*pl,float*p2,float*s)
{s=(float*)calloc(1,sizeof(float));
*s=*p1+*(p2++);
{floata[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
fun(a,b,s)
%f\n"
*s);
A)11.100000
B)12.100000
C)21.100000
D)1.100000
(33)在宏定义#definePI3.14159中,用宏名PI代替一个
A)单精度数
B)双精度数
C)常量
D)字符串
(34)请选出以下程序段的输出结果
#defineMIN(x,y)
(x)<
(y)?
(x):
(y)
{inti,j,k;
i=10;
j=15;
k=10*MIN(i,j);
k);
A)15
B)100
D)150
(35)sizeof(double)是 【35】。
A)一种函数调用
B)一个双精度型表达式
C)一个整型表达式
D)一个不合法的表达式
(36)以下for语句构成的循环执行了【36】次。
#include<
(M+1)*M/2
i,n=0;
for(i=1;
i++);
{n++;
n);
\n"
);
C)8
D)9
(37)以下程序的输出结果是 【37】。
#include<
FUDGE(y)
2.84+y
PR(a)
(int)(a))
PRINT1(a)
PR(a);
putchar('
\n'
)
{intx=2;
PRINT1(FUDGE(5)*x);
A)11
B)12
C)13
D)15
二、填空题:
(1)已有定义:
double
,请写出完整的语句,利用malloc函数使p指向一个双精度型
的动态存储单元【1】。
(2)以下程序运行后的输出结果是【2】
.
4*x*x+1
{
i=6,j=8;
S(i+j));
(3)以下程序中,for循环体执行的次数是【3】
。
N2
MN+1
KM+1*M/2
for(i=1;
K;
{...}
...
(4)以下程序中给指针p分配三个double型动态内存单元,请填空。
main()
double*p;
p=(double*)malloc(【4】);
p[0]=1.5;
p[1]=2.5;
p[2]=3.5;
printf(“%f%f%f\n”,p[0],p[1],p[2]);
(5)以下程序的输出结果是【5】。
#defint
MCRA(m)
2*m
MCRB(n,m)
2*MCRA(n)+m
i=2,j=3;
MCRB(j,MCRA(i)));
(6)下面程序的运行结果是【6】。
10
s(x)
inti1,i2;
i1=1000/s(N);
i2=1000/f(N);
printf(“%d
%d\n”,i1,i2);
(7)设有如下宏定义
MYSWAP(z,x,y)
{z=x;
x=y;
y=z;
以下程序段通过宏调用实现变量a、b内容交换,请填空。
float
a=5,b=16,c;
MYSWAP(
【7】,a,b);
(8)用以下语句调用库函数malloc,使字符指针st指向具有11个字节的动态存储空间,请填空。
st=(char*)【8】;
(9)以下程序的输出结果是[9]。
MAX(x,y)
(x)>
(x):
a=5,b=2,c=3,d=3,t;
t=MAX(a+b,c+d)*10;
printf(“%d\n”,t);
(10)若要使指针p指向一个double类型的动态存储单元,请填空。
p=
[10]
malloc(sizeof(double));
(11)下面程序的输出是
【11】。
#definePR(ar)printf("
ar)
{intj,a[]={1,3,5,7,9,11,13,15},*p=a+5;
for(j=3;
j;
j--)
{switch(j)
{case1:
case2:
PR(*p++);
break;
case3:
PR(*(--p));
答案:
一、选择题:
01)
C
02)
C
03)
04)
D
05)
06)
A
07)
A
08)
09)
10)
D
11)
12)
13)
14)
B
15)
16)
17)
18)
19)
20)
B
21)
22)
23)
24)
25)
26)
27)
28)
29)
30)
31)
32)
33)
34)
35)
36)
37)
二、填空题:
(1)p=(double*)malloc(sizeof(double))
(2)81
(3)4
(4)3*sizeof(double)
(5)16
(6)1000
(7)c
(8)Malloc(11)或malloc(sizeof(char)*11)
(9)7
(10)(double*)
(11)9911