c语言笔试练习题.docx
《c语言笔试练习题.docx》由会员分享,可在线阅读,更多相关《c语言笔试练习题.docx(60页珍藏版)》请在冰豆网上搜索。
c语言笔试练习题
3.1 综合练习题1
3.1.1 试题
一、 选择(1-30每题1分,31-45每题2分,共60分)
1. 在C语言中,如果下面的变量都是int类型,则输出的结果是( )
#include
main()
{
intsum,pad;
sum=pad=5;pad=sum++,pad++,++pad;
printf("%d\n",pad);
}
A)7 B)6 C)5 D)4
2. 以下程序的输出结果是( )
#include
main()
{inti=010,j=10;
printf("%d,%d\n",++i,j--);}
A) 11,10 B)9,10 C)010,9 D)10,9
3. 已知在ASCⅡ代码中,字母A的序号是65,以下程序的输出的结果是( )
#include
main()
{charc1='A',c2='Y';
printf("%d,%d\n",c1,c2);}
A) 因输出格式不合法,输出错误信息 B)65,90 C)A,Y D)65,89
4. 指针s所指字符串的长度为( )
char*s="\\"Name\\Address\n";
A)19 B)15 C)18 D)说法不合法
5. 设有说明int(*ptr)[m];其中的标识符ptr是( )
A) M个指向整型变量的指针
B) 指向M个整型变量的函数指针
C) 一个指向具有M个整型元素的一维数组的指针
D) 具有M个指针元素的一维指针数组,每个元素都只能指向整型量
6. 语句while(!
E);中的条件!
E等介于
A)E==0 B)E!
=1 C)E!
=0 D)~E
7. 以下程序的输出结果是( )
#include
main()
ptrintf("%d\n",NULL);}
A)不确定的(因变量无定义) B)0 C)-1 D)1
8. 以下函数调用语句中含有( )个实参。
func((exp1,exp2),(exp3,exp4,exp5));
A)1 B)2 C)4 D)5
9. 设有以下语句:
chara=3,b=6,c;
则c的二进制值是( )
A)00011011 B)00010100 C)00011100 D)00011000
10. 下面的程序中( )有错误(每行程序前面的数字是行号)。
行号 程序代码
1 #include
2 main()
3 {
4 floata[3]={0,0};
5 inti;
6 for(i=0;i<3,i++)scanf(“%d”,&a[i]);
7 for(i=1;i<3,i++)a[0]=a[0]+a[i];
8 printf(“%f\n”,a[0]);
9 }
A)没有 B)第4行 C)第6行 D)第8行
11. 设有语句inta=3;则执行了语句a+=a-=a*a;后,变量a的值是( )
A)3 B)0 C)9 D)-12
12. 以下的for循环( )
for(x=0,y=0;(y!
=123)&&(x<4);x++);
A)是无限循环 B)循环次数不定 C)执行4次 D)执行3次
13. 设有语句chara=`\72`;则变量a( )
A)包含有1个字符 B)包含有2个字符
C)包含有3个字符 D)说明不合法
14. 以下的程序的输出结果是( )
#include
#include
main()
{inta=1,b=4,c=2;
floatx=10.5,y=4.0;
floatz;
z=(a+b)/c+sqrt((double)y)*1.2/c+x;
printf("%f\n",z);}
A)14.00000 B)015.400000 C)13.700000 D)14.900000
15. sizeof(double)是( )
A)一种函数调用B)一个双精度型表达式C)一个整型表达式D)一个不合法的表达式
16. C语言中( )
A)不能使用do-while语句构成的循环
B)do-while语句构成的循环必须用break语句才能退出
C)do-while语句构成的循环,当while语句的中表达式值为非零时结束循环
D)do-while语句构成的循环,当while语句的中表达式值为零时结束循环
17. 以下的程序的输出结果是( )
#include
#include
main()
{charstr[12]={'s','t','r','i','n','g'};
printf("%d\n",strlen(str));}
A)6 B)7 C)11 D)12
18. 以下的程序的输出结果是( )
#include
main()
{inta=2,c=5;
printf("a=%%d,b=%%d\n",a,c);}
A)a=%2,b=%5 B)a=2,b=5 C)a=%%d,b=%%d D)a=%d,b=%d
19. 以下的程序的输出结果是( )
#include
main()
{inta,b,d=241;
a=d/100%9;
b=(-1)&&(-1);
printf("%d,%d\n",a,b);}
A)6,1 B)2,1 C)6,0 D)2,0
20. 以下的程序的输出结果是( )
#include
main()
{inti;
for(i=1;i<=5;i++)
{if(i%2)
printf("*");
elsecontinue;
printf("#");
}
printf("$\n");
}
A)*#*#*#$ B)#*#*#*$ C)*#*#$ D)#*#*$
21. 以下for语句构成的循环执行了( )次。
#include
#defineN2
#defineMN+1
#defineNUM(M+1)*M/2
main()
{inti,n=0;
for(i=1;i<=NUM;i++);
{n++;printf(“%d”,n);}
printf(“\n”);}
A)5 B)6 C)8 D)9
22. 设有以下语句,则( )不是对a数组元素的正确引用,其中0≤i<10。
inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;
A)a[p-a] B)*(&a[i]) C)p[i] D)*(*(a+i))
23. 以下程序的输出结果是( )
#include
#defineN6
main()
{charc[N];inti=0;
for(;ifor(i=0;i输入以下三行,每行输入都是在第一列上开始,代表一个回车符:
a
b
cdef
A)abcdef B)a C)a D)a
b b b
cd cdef c
d
e
f
24. 以下程序调用findmax函数求数组中最大元素在数组中的下标,请选择填空
#include
findmax(s,t,k)
int*s,t,*k;
{intp;
for(p=0,(*k=p);pif(s[p]>s[*k])
;
}
main()
{inta[10],i,k;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
findmax(a,10,&k);
printf("%d,%d\n",k,a[k]);
}
A)k=p B)*k=p-s C)k=p-s D)*k=p
25. 有以下程序:
#include
unionpw
{inti;charch[2];}a;
main()
{a.ch[0]=13;a.ch[1]=0;printf("%d\n",a.i);}
程序的输出结果是( )。
(注意:
ch[0]在低字节,ch[1]在高字节。
)
A)13 B)14 C)208 D)209
26. 有以下程序:
#include
main()
{intc;
while((c=getchar())!
='\n')
{
switch(c-'2')
{
case0:
case1:
putchar(c+4);
case2:
putchar(c+4);break;
case3:
putchar(c+3);
case4:
putchar(c+2);break;
}
}
printf("\n");
}
从第一列开始输入以下数据,代表一个回车符。
2743
程序的输出结果是( )。
A)66877 B)66866 C)667777 D)668866
27. 以下程序的输出结果是( )。
main()
{char*alpha[6]={"ABCD","EFGH""IJKL","MNOP","QRST","UVWX"};
char**p;
inti;
p=alpha;
for(i=0;i<4;i++)
printf("%s",p[i]);
printf("\n");
}
A)ABCDEFGHIJKL B)ABCD C)ABCDEFGHIJKLMNOP D)AEIM
28. 以下程序的输出结果是( )。
#include
#defineFUDGE(y)2.84+y
#definePR(a)printf("%d",(int)(a))
#definePRINT1(a)PR(a);putchar('\n')
main()
{intx=2;PRINT1(FUDGE(5)*x);}
A)11 B)12 C)13 D)15
29. 以下程序的输出结果是( )。
#include
main()
{inti=1,j=3;
printf("%d,",i++);
{
inti=0;
i+=j*2;
printf("%d,%d,",i,j);
}
printf("%d,%d\n",i,j);
}
A)1,6,3,1,3 B)1,6,3,2,3 C)1,6,3,6,3 D)1,7,3,2,3
30. 以下程序的输出结果是( )。
#include
main()
{intk=4,m=1,p;
p=func(k,m);
printf("%d,",p);
p=func(k,m);
printf("%d\n",p);
}
func(inta,intb)
{
staticintm=0,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
A)8,17 B)8,16 C)8,20 D)8,8
31. 设有以下语句:
charstr[4][12]={“aaa”,“bbbb”,“ccccc”,”dddddd”},
*strp[4];
inti
for(i=0;i<4;i++)strp[i]=str[i];
( )不是对字符串的正确引用,其中0≤k<4
A)strp B)str[k] C)strp[k] D)*strp
32. 设有以下语句:
charstr1[]=“string”,str2[8],*str3,*str4=“string”;
则( )不是对库函数strcpy的正确调用,此库函数用业复制字符串。
A)strcpy(str1,“HELLO1”); B)strcpy(str2,“HELLO2”);
C)strcpy(str3,“HELLO3”); D)strcpy(str4,“HELLO4”);
33. C语言中形参的缺省存储类别是( )。
A)自动(auto) B)静态(static) C)寄存器(register) D)外部(extern)
34. 设有以下语句:
structst{intn;structst*next;};
staticstuctsta[3]={5,&a[1],7&a[2],9,'\0'},*p;
p=&a[0];
则表达式( )的值是6。
A)p++->n B)p->n++ C)(*p).n++ D)++p->n
35. 以下四个程序中,( )不能对两个整型变量的值进行交换。
A)#include B)#include
main() main()
{inta=10,b=20;swap(&a,&b); {inta=10,b=20;
printf("%d%d\n",a,b); swap(&a,&b);
} printf("%d%d\n",a,b);
swap(p,q) }
int*p,*q; swap(p,q)
{ int*p,*q;
int*t; {
t=(int)malloc(sizeof(int)); intt;
t=p;*p=*q;*q=*t; } t=*p;*p=*q;*q=t; }
C)#include D)#include
main() main()
{ {
int*a,*b; inta=10,b=20;
a=10,b=20; intx=&a,y=&b;
swap(a,b);\ swap(x,y);
printf("%d%d\n",*a,*b); printf("%d%d\n",a,b);
} }
swap(p,q) swap(p,q)
int*p,*q; int*p,*q;
{ {
intt; intt;
t=*p;*p=*q;*q=t; t=*p;*p=*q;*q=t;
} }
二、 程序填空
1. 以下C语言程序将磁盘中的一个文件复制到另一个文件中,两个文件名在命令行中给出。
#include
main(intargc,char*argv[])
{
FILE*f1,*f2;charch;
if(argc< )
{
printf("Parametersmissing!
\n");
exit(0);
}
if(((f1=fopen(argv[1],"r"))==NULL)||((f2=fopen(argv[2],"w"))==NULL))
{
printf("Cannotopenfile!
\n");
exit(0);
}
while( )
fputc(fgetc(f1),f2);
fclose(f1);
fclose(f2);
}
2. 以下程序中的trap函数是一个用梯形法求定积分的通用函数。
梯形法求定积分的公式为:
s=((f(a)+f(b))/2+∑f(a+i*h))*h,h=|----|
i=1…n
其中,n为积分小区间数。
以下程序调用trap函数求定积分,被积函数是
f(x)=x*x+3*x+2,且n=1000,a=0,b=4.
#include
#include
doubletrap(double(*fun)(),doublea,doubleb)
{
doublet,h;
inti,n=1000;
t=0.5*((*fun)(a)+(*fun)(b));
h=fabs(a-b)/(double)(n);
for(i=1;i<=n-1;i++)
t=t+ ;
t=t*h;
return(t);
}
doublemypoly(doublex)
{
return(x*x+3.0*x+2.0);
}
main()
{
doubley,(*pf)();pf= ;
y=trap(pf,0.0,4.0);
printf("%f\n",y);
}
3. 以下程序求a数组中的所有素数的和,函数isprime用来判断自变量是否为素数。
素数是只能被1和本身整除且大于1的自然数。
#include
main()
{inti,a[10],*p=a,sum=0;
printf("Enter10num:
\n");
for(i=0;i<10;i++)scanf("%d",&a[i]);
for(i=0;i<10;i++)
if(isprime(*(p+ ))==1){printf("%d",*(a+i));sum+=*(a+i);}
printf("\nThesum=%d\n",sum);}
isprime(x)
intx;
{inti;for(i=2;i<=x/2;i++)
if(x%i==0)return(0);
else ;}
4. 以下程序调用invert 函数按逆序重新放置a数组中元素的值。
a数组中的值在
main函数中读入。
#include
#defineN10
invert(s,i,j)
int*s,i,j;
{intt;
if(i{t=*(s+i);*(s+i)=*(s+j);*(s+j)=t;
invert(s, ,j-1);
}
}
main()
{inta[N],i;
for(i=0;iinvert(a,0,N-1);
for(i=0;iprintf("\n");}
5. 以下程序建立了一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为-1时,表示输入结束(链表头结点的data域不放数据,表空的条件是ph->next==NULL
#include
structlist{intdata;structlist*next;};
creatlist()
{structlist*p,*q,*ph;
inta;
ph=(structlist*)malloc(sizeof(structlist));
p=q=ph;
printf("Inputanintegernumber,enter-1toend:
\n");
scanf