一、选择题(1)有以下程序main()
{ char p[]={'a', 'b', 'c'},
q[]="abc";
printf("%d %d\n", sizeof(p),sizeof(q));
};程序运行后的输出结果是A)4 4B)3 3C)3 4D)4 3(2)有以下程序#
define f(x) (x*x)
main()
{ int i1, i2;
i1=f(8)/f(4)
; i2=f(4+4)/f(2+2) ;
printf("%d,
%d\n",i1,i2);
}程序运行后的输出结果是A)64,
28B)4,
4C)4,
3D)64, 64(3)有以下程序main()
{ char a[7]="a0\0a0\0";int i,j;
i=sizeof(a); j=strlen(a);
printf("%d %d\n",i,j);
}程序运行后的输出结果是 A)2 2B)7 6C)7 2D)6 2(4)以下叙述中正确的是 A)预处理命令行必须位于源文件的开头B)在源文件的一行上可以有多条预处理命令C)宏名必须用大写字母表示D)宏替换不占用程序的运行时间(5) 有以下程序main( )
{ char a[]=”abcdefg”,b[10]=”abcdefg”;
printf(“%d %d\n”,sizeof(A) ,sizeof(B) );
}执行后输出结果是A) 7 7B) 8 8C) 8 10D) 10 10
(6) 有以下程序#define f(x) x*x
main( )
{ int i;
i=f(4+4)/f(2+2);
printf(“%d\n”,i);
}执行后输出结果是A) 28B) 22C) 16D) 4
(7) 有以下程序#include
#define F(X,Y) (X)*(Y)
main ()
{ int a=3, b=4;
printf("%d\n", F(a++,b++));
}程序运行后的输出结果是A)
12B)
15 C)
16 D) 20
(8) 有以下程序main()
{ char s[]="\n123\\";
printf("%d,%d\n",strlen(s),sizeof(s));
}执行后输出结果是A) 赋初值的字符串有错B) 6,7C)
5,6D) 6,6
(9) 有以下程序main(int arge,char *argv[])
{ int n,i=0;
while(arv[1][i]!='\0'
{ n=fun(); i++;}
printf(%d\n",n*argc);
}
int fun()
{ static int s=0;
s+=1;
return s;
}假设程序经编译、连接后生成可执行文件exam.exe,若键入以下命令行exam 123则运行结果为(10) 有以下程序main()
{ char a[ ]={‘a’,‘b’,‘c’,‘d’, ‘e’, ‘f’, ‘g’,‘h’,‘\0’};
int i,j;
i=sizeof(a); j=strlen(a);
printf(“%d,%d\b”i,j);
}程序运行后的输出结果是A)9,9B)8,9C)1,8D)9,8
(11) 程序中头文件typel.h
的内容是:#define N 5
#define M1 N*3程序如下:#define “type1.h”
#define M2 N*2
main()
{ int i;
i=M1+M2; printf(“%d\n”,i);
}程序编译后运行的输出结果是:A)
10
B)
20C) 25D) 30
(12) 有以下程序#include
main()
{ char *p,*q;
p=(char*)malloc(sizeof(char)*20); q=p;
scanf(“%s%s”,p,q); printf(“%s%s\n”,p,q);
}若从键盘输入:abc def,则输出结果是:A) def
defB) abc
defC) abc
dD) d d
(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) 以下程序的输出结果是main()
{ char st[20]= “hello\0\t\\\”;
printf(%d %d \n”,strlen(st),sizeof(st));
}A) 9 9B) 5
20C) 13
20 D) 20 20
(15) 以下程序的输出结果是amovep(int p, int (a)[3],int n)
{ int i, j;
for( i=0;i
for(j=0;j
}
}
main()
{ int *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)
56B)
25C)
34D) 程序错误(16) 以下程序的输出结果是#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)
19B)
17C)
15D) 12
(17) 以下程序的输出结果是A)
16B)
2C)
9D) 1
#define SQR(X) X*X
main()
{ int a=16, k=2, m=1;
a/=SQR(k+m)/SQR(k+m);
printf(“d\n”,a);
}
(18) 若定义了以下函数:void f(……)
{……
*p=(double
*)malloc( 10*sizeof( double));
……
}
p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是A) double *pB) float **p C)
double **pD) float *p
(19) 有如下程序#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
(20) 下列程序执行后的输出结果是A)
6 B)
8 C)
10 D) 12
#define MA(x) x*(x-1)
main()
{ int a=1,b=2; printf("%d \n",MA(1+a+b));}
(21) 若有说明:long
*p,a;则不能通过scanf语句正确给输入项读入数据的程序段是A) *p=&a;scanf("%ld",p);B) p=(long *)malloc(8);scanf("%ld",p);C) scanf("%ld",p=&a);D) scanf("%ld",&a);(22) 以下程序的输出结果是A) 1
B)
4
C)
7 D) 5
#include int a[3][3]={1,2,3,4,5,6,7,8,9,},*p;main( )
{ p=(int*)malloc(sizeof(int));f(p,a);printf("%d \n",*p);}
f(int
*s,int p[][3])
{ *s=p[1][1];
}
(23) 以下程序的输出结果是A)
9 B)
6 C)
36 D) 18
#define f(x) x*x
main( )
{ int a=6,b=2,c;c=f(a) / f(b);printf("%d \n",c);}
(24) 以下程序运行后,输出结果是A)
49.5B)
9.5C)
22.0D) 45.0
#include
#define PT 5.5
#define S(x) PT* x * x
main()
{ int a=1,b=2;
printf("%4.1f\n",S(a+b));
}
(25) 以下程序运行后,输出结果是A)
1B)
7C)
9D) 11
fut(int **s,
int p[2][3])
{ **s=p[1][1];}
main()
{ int a[2][3]={1,3,5,7,9,11}, *p;
p=(int *) malloc(sizeof(int));
fut(&p,a);
printf("%d\n",*P);
}
(26) 设有以下宏定义:
#define N 3
#define Y(n) ( (N+1)*n)则执行语句:z=2 * (N+Y(5+1));后,z的值为A) 出错B)
42C)
48D) 54
(27) 若有说明,double
*p,a;则能通过scanf语句正确给输入项读入数据的程序段是A)*p=&a;
scanf("%lf",p);B)p=(double
*)malloc(8);scanf("%f",p);C)
p=&a;scanf("%lf",a);D)p=&a; scanf("%le",p);
(28) 执行下面的程序后,a的值是#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)
10B)
1C)
9D) 0
(29) 以下程序的输出结果是fut (int**s,int p[2][3])
{ **s=p[1][1]; }
main( )
{ int
a[2][3]={1,3,5,7,9,11},*p;
p=(int*)malloc(sizeof(int));
fut(&p,a);
primtf("%d\n",*p); }A)
1B)
7C)
9D) 11
(30) 若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元:int *p;
p=__________ malloc( sizeof(int));则应填入A)
intB) inst
*C)
(*int)D) (int *)
(31) 请读程序:
#include
#define SUB(X,Y) (X)*Y
main()
{ int a=3, b=4;
printf("%d", SUB(a++, b++));
}上面程序的输出结果是A)
12B)
15C)
16D) 20
(32) 请读程序:
#include
void fun(float *pl, float *p2, float *s)
{ s=( float * )calloc( 1, sizeof(float));
*s=*p1+ *(p2++);
}
main()
{ float a[2]={1.1, 2.2}, b[2]={10.0, 20.0}, *s=a;
fun(a, b, s)
printf("%f\n",*s);
}上面程序的输出结果是A)
11.100000B)
12.100000C)
21.100000D) 1.100000
(33) 在宏定义 #define PI
3.14159中,用宏名PI代替一个A) 单精度数B) 双精度数C) 常量D) 字符串(34) 请选出以下程序段的输出结果#include
#define MIN(x,y) (x)
(x):(y)
main()
{ int i,j,k;
i=10; j=15;
k=10*MIN(i,j);
printf("%d\n",k);
}A)
15B)
100C)
10D) 150
(35) sizeof(double)是 【35】
。A)一种函数调用B)一个双精度型表达式C)一个整型表达式D)一个不合法的表达式(36) 以下for语句构成的循环执行了
【36】
次。# include
# 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)
5B)
6C)
8D) 9
(37) 以下程序的输出结果是 【37】
。# include
# 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)
11B)
12C)
13D) 15