C语言笔试题.docx
《C语言笔试题.docx》由会员分享,可在线阅读,更多相关《C语言笔试题.docx(10页珍藏版)》请在冰豆网上搜索。
C语言笔试题
(一)选择题
第1题:
#include
staticjmp_bufbuf;
main()
{
volatileintb;
b=3;
if(setjmp(buf)!
=0)
{
printf("%d",b);
exit(0);
}
b=5;
longjmp(buf,1);
}
请问,这段程序的输出是
(a)3
(b)5
(c)0
(d)以上均不是
第2题:
main()
{
structnode
{
inta;
intb;
intc;
};
structnodes={3,5,6};
structnode*pt=&s;
printf("%d",*(int*)pt);
}
这段程序的输出是:
(a)3
(b)5
(c)6
(d)7
第3题:
intfoo(intx,intn)
{
intval;
val=1;
if(n>0)
{
if(n%2==1)val=val*x;
val=val*foo(x*x,n/2);
}
returnval;
}
这段代码对x和n完成什么样的功能(操作)?
(a)x^n (x的n次幂)
(b)x*n(x与n的乘积)
(c)n^x(n的x次幂)
(d)以上均不是
第4题:
main()
{
inta[5]={1,2,3,4,5};
int*ptr=(int*)(&a+1);
printf("%d%d",*(a+1),*(ptr-1));
}
这段程序的输出是:
(a)22
(b)21
(c)25
(d)以上均不是
第5题:
voidfoo(int[][3]);
main()
{
inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};
foo(a);
printf("%d",a[2][1]);
}
voidfoo(intb[][3])
{
++b;
b[1][1]=9;
}
这段程序的输出是:
(a)8
(b)9
(c)7
(d)以上均不对
第6题:
main()
{
inta,b,c,d;
a=3;
b=5;
c=a,b;
d=(a,b);
printf("c=%d",c);
printf("d=%d",d);
}
这段程序的输出是:
(a)c=3d=3
(b)c=5d=3
(c)c=3d=5
(d)c=5d=5
第7题:
main()
{
inta[][3]={1,2,3,4,5,6};
int(*ptr)[3]=a;
printf("%d%d",(*ptr)[1],(*ptr)[2]);
++ptr;
printf("%d%d",(*ptr)[1],(*ptr)[2]);
}
这段程序的输出是:
(a)2356
(b)2345
(c)4500
(d)以上均不对
第8题:
int*f1(void)
{
intx=10;
return(&x);
}
int*f2(void)
{
int*ptr;
*ptr=10;
returnptr;
}
int*f3(void)
{
int*ptr;
ptr=(int*)malloc(sizeof(int));
returnptr;
}
上面这3个函数哪一个最可能引起指针方面的问题
(a)只有f3
(b)只有f1andf3
(c)只有f1andf2
(d)f1,f2,f3
第9题:
main()
{
inti=3;
intj;
j=sizeof(++i+++i);
printf("i=%dj=%d",i,j);
}
这段程序的输出是:
(a)i=4j=2
(b)i=3j=2
(c)i=3j=4
(d)i=3j=6
第10题:
voidf1(int*,int);
voidf2(int*,int);
void(*p[2])(int*,int);
main()
{
inta;
intb;
p[0]=f1;
p[1]=f2;
a=3;
b=5;
p[0](&a,b);
printf("%d\t%d\t",a,b);
p[1](&a,b);
printf("%d\t%d\t",a,b);
}
voidf1(int*p,intq)
{
inttmp;
tmp=*p;
*p=q;
q=tmp;
}
voidf2(int*p,intq)
{
inttmp;
tmp=*p;
*p=q;
q=tmp;
}
这段程序的输出是:
(a)5555
(b)3535
(c)5353
(d)3333
第11题:
voide(int);
main()
{
inta;
a=3;
e(a);
}
voide(intn)
{
if(n>0)
{
e(--n);
printf("%d",n);
e(--n);
}
}
这段程序的输出是:
(a)0120
(b)0121
(c)1201
(d)0211
第12题:
typedefint(*test)(float*,float*)
testtmp;
tmp的类型是
(a)函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments)
Pointertofunctionofhavingtwoargumentsthatispointertofloat
(b)整型
(c)函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments),并且函数的返回值类型是整型
Pointertofunctionhavingtwoargumentthatispointertofloatandreturnint
(d)以上都不是
第13题:
main()
{
charp;
charbuf[10]={1,2,3,4,5,6,9,8};
p=(buf+1)[5];
printf("%d",p);
}
这段程序的输出是:
(a)5
(b)6
(c)9
(d)以上都不对
第14题:
Voidf(char**);
main()
{
char*argv[]={"ab","cd","ef","gh","ij","kl"};
f(argv);
}
voidf(char**p)
{
char*t;
t=(p+=sizeof(int))[-1];
printf("%s",t);
}
这段程序的输出是:
(a)ab
(b)cd
(c)ef
(d)gh
第15题:
#include
intripple(int,...);
main()
{
intnum;
num=ripple(3,5,7);
printf("%d",num);
}
intripple(intn,...)
{
inti,j;
intk;
va_listp;
k=0;
j=1;
va_start(p,n);
for(;j{
i=va_arg(p,int);
for(;i;i&=i-1)
++k;
}
returnk;
}
这段程序的输出是:
(a)7
(b)6
(c)5
(d)3
第16题:
intcounter(inti)
{
staticintcount=0;
count=count+i;
return(count);
}
main()
{
inti,j;
for(i=0;i<=5;i++)
j=counter(i);
}
本程序执行到最后,j的值是:
(a)10
(b)15
(c)6
(d)7
(二)编程题
1.请填写下列两个函数分别实现对变量a实现置位和清除“BIT3”位。
#defineBIT3(0x1<<3)
staticinta;
voidset_bit3(void)
{
代码部分
}
voidclear_bit3(void)
{
代码部分
}
2.编写strcpy函数
已知strcpy函数的原型是
char*strcpy(char*strDest,constchar*strSrc);
其中strDest是目的字符串,strSrc是源字符串。
(1)不调用C++/C的字符串库函数,请编写函数strcpy
(2)strcpy能把strSrc的内容复制到strDest,为什么还要char*类型的返回值?
3.用堆栈解决一个问题,定义一个二维数组:
intmaze[5][5]={
0,1,0,0,0,
0,1,0,1,0,
0,0,0,0,0,
0,1,1,1,0,
0,0,0,1,0,
};
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。
3.编写一个统计工厂产量直方图程序:
程序运行效果如下:
请输入工厂代号:
1
请输入该工厂产量(吨):
127485
还有其它工厂吗?
(Y/N):
Y
请输入工厂代号:
2
请输入该工厂产量(吨):
1227485
还有其它工厂吗?
(Y/N):
N
工厂代号产量(吨)(每万吨记一个星)
1123443434**********
23443434*******