C语言试题.docx
《C语言试题.docx》由会员分享,可在线阅读,更多相关《C语言试题.docx(18页珍藏版)》请在冰豆网上搜索。
![C语言试题.docx](https://file1.bdocx.com/fileroot1/2023-2/21/f8a3d6d2-93f9-4ce8-a4fd-4c272cc3bc84/f8a3d6d2-93f9-4ce8-a4fd-4c272cc3bc841.gif)
C语言试题
一、选择题(1-10每题1分,11-30每题1.5分,共40分)
1.下列选项中,可以作为用户标识符的是
A)voidB)8_8C)_a_0D)a*b
2.若有定义:
floata=22;inti=0,k=18;则不符合C语言规定的赋值语句是
A)k=i++;B)i=(i*k)>=(i-k);C)i=a%11;D)k=!
a;
3.若执行了语句:
floatx=1008;inta=15;则表达式(int)(x+y)%7/17的值为
A)23B)1C)0D)无法确定
4.若有定义语句:
inta=1;doubleb=3.14;,则表达式‘X’+a+b的结果的类型是
A)charB)intC)doubleD)float
5.如有定义语句:
intx=12,y=8,z;,在其后执行语句z=0.9+x/y,则z的值为
A)1.9B)1C)2D)2.4
6.以下是if语句的一种形式:
if(表达式)语句
其中关于“表达式”的说明正确的是:
A)必须是逻辑表达式B)必须是关系表达式
C)必须是逻辑表达式或关系表达式D)可以是任意合法的表达式
7.若有定义:
inta,b;,通过语句scanf(“%d;%d”,&a,&b);,能把整数3赋给变量a,5赋给变量b的输入数据是
A)35B)3,5C)3;5D)35
8.若有定义语句:
intk1=10,k2=20;,执行表达式
(k1=k1>k2)&&(k2=k2>k1)后,k1和k2的值分别为
A)0和1B)0和20C)10和1D)10和20
9.下列语句中正确的是:
A)charstr[10];str=“Hello”;B)char*str;str=“Hello”;
C)charstr[10];str={“Hello”};D)char*str;str={“Hello”};
10.设有定义inta[10],*p=a;以下能够代表数组元素a[4]的是:
A)a+4B)*(p+4)C)*a+4D)*p+4
11.有以下程序
#include
intmain()
{
inta=1,b=0;
if(--a)
b++;
elseif(a==0)
b+=2;
else
b+=3;
printf(“%d\n”,b);
return0;
}
程序运行后的输出结果是
A)0B)1C)2D)3
12.下列条件语句中输出结果与其他语句不同的是
A)if(a)printf(“%d\n”,x);elseprintf(“%d\n”,y);
B)if(a==0)printf(“%d\n”,y);elseprintf(“%d\n”,x);
C)if(a!
=0)printf(“%d\n”,x);elseprintf(“%d\n”,y);
D)if(a==0)printf(“%d\n”,x);elseprintf(“%d\n”,y);
13.有以下程序:
#include
voidmain()
{inta=7;
while(a--);
printf(“%d\n”,a);
}
程序运行后的输出结果是
A)-1B)0C)1D)7
14.以下不能输出字符A的语句是(注:
字符A的ASCII码值为65,字符a的ASCII码值为97)
A)printf(“%c\n”,’a’-32);B)printf(“%d\n”,’A’);
C)printf(“%c\n”,65);D)printf(“%c\n”,’B’-1);
15.有以下程序(注:
字符a的ASCII码值为97)
#include
voidmain()
{char*s={“abc”};
do
{printf(“%d”,*s%10);++s;}
while(*s);
}
程序运行后的输出结果是
A)abcB)789C)7890D)979898
16.若有定义语句:
doublea,*p=&a;以下叙述中错误的是
A)定义语句中的*号是一个地址运算符
B)定义语句中的*号是一个说明符
C)定义语句中的p只能存放double类型变量的地址
D)定义语句中,*p=&a把变量a的地址作为初值赋给指针变量p
17.有以下程序:
#include
doublef(doublex);
voidmain()
{doublea=0;inti;
for(i=0;i<30;i+=10)a+=f((double)i);
printf(“%5.0f\n”,a);
}
doublef(doublex)
{returnx*x+1;}
程序运行后的输出结果是
A)503B)401C)500D)1404
18.若定义语句:
intyear=2009,*p=&year;,以下不能使变量year中的值增至2010的语句是
A)*p+=1;B)(*p)++;C)++(*p);D)*p++;
19.以下定义数组的语句中错误的是
A)intnum[]={1,2,3,4,5,6};
B)intnum[][3]={{1,2},3,4,5,6};
C)intnum[2][4]={{1,2},{3,4},{5,6}};
D)intnum[][4]={1,2,3,4,5,6};
20.有以下程序
#include
voidfun(int*p)
{printf(“%d\n”,p[5]);}
main()
{inta[10]={1,2,3,4,5,6,7,8,9,10};
fun(&a[3]);
}
程序运行后的输出结果是
A)5B)6C)8D)9
21.有以下函数
intfun(char*x,char*y)
{intn=0;
while((*x==*y)&&*x!
=’\0’){x++;y++;n++;}
returnn;
}
函数的功能是
A)查找x和y所指字符串中是否有‘\0‘
B)统计x和y所指字符串中最前面连续相同的字符个数
C)将y所指字符串赋给x所指存储空间
D)统计x和y所指字符串中相同的字符个数
22.数学上的式子1A)11&&x<=10D)以上都不对
23.若有定义语句:
char*s1=”OK”;*s2=”ok”;,以下选项中,能够输出“OK”的语句是
A)if(strcmp(s1,s2)==0)puts(s1);
B)if(strcmp(s1,s2)!
=0)puts(s2);
C)if(strcmp(s1,s2)==1)puts(s1);
D)if(strcmp(s1,s2)!
=0)puts(s1);
24.以下程序的主函数中调用了在其前面定义的fun函数
#include
voidmain()
{doublea[15],k;
k=fun(a);
}
则以下选项中错误的fun函数首部是
A)doublefun(doublea[15])
B)doublefun(double*a)
C)doublefun(doublea[])
D)doublefun(doublea)
25.有以下程序:
#include
intf(intm)
{staticintn=0;
n+=m;
returnn;
}
voidmain()
{intn=0;
printf(“%d,”,f(++n));
printf(“%d\n”,f(n++));
}
程序运行后的输出结果是
A)1,2B)1,1C)2,3D)3,3
26.若有定义语句:
inta=3,b=2,c=1;,以下选项中错误的赋值表达式是
A)a=(b=4)=3;B)a=b=c+1;
C)a=(b=4)+c;D)a=1+(b=c=4);
27.有以下程序
#include
voidmain()
{ints;
scanf("%d",&s);
while(s>0)
{switch(s)
{case1:
printf("%d",s+5);
case2:
printf("%d",s+4);break;
case3:
printf("%d",s+3);
default:
printf("%d",s+1);break;
}
scanf("%d",&s);
}
}
运行时,若输入123450<回车>,则输出结果是
A)6566456B)66656C)66666D)6666656
28.有以下程序
#include
#defineS(x)4*(x)*x+1
voidmain()
{intk=5,j=2;
printf("%d\n",S(k+j));
}
程序运行后的输出结果是
A)197B)143C)33D)28
29.有如下程序,其中k的初始值为八进制数
#include
voidmain()
{intk=011;
k++;
printf(“%d\n”,k);
}
则程序运行后的输出结果是:
A)12B)11C)10D)9
30.设有定义:
struct{charmark[12];intnum1;doublenum2;}t1,t2;,若变量均已正确赋初值,则以下语句中错误的是
A)t1=t2;B)t2.num1=t1.num1;
C)t2.mark=t1.mark;D)t2.num2=t1.num2;
二、填空题(【1】-【10】每空1分,【11】-【20】每空2分,共30分)
1、以下程序实现两个字符串的连接。
不用strcat函数,填空请将程序补充完整
voidstr_cat(charS1[80],S2[40])
{
inti=0,j=0;
while(【1】)
i++;
while(S2[j]!
=’\0’)
【2】
【3】
printf(“\n连接后的字符串为:
%s”,S1);
}
2、以下程序计算1!
+2!
+…+10!
的值,请填空:
void main()
{
intf=1,i,j,sum=0;
for(j=1;j<=10;j++)
{
for(i=1;【4】;i++)
【5】
【6】
f=1;
}
printf("1!
+2!
+…+10!
=%d",sum);
}
3、请将以下程序补充完整,实现求二维数组中最大元素值及其行列号。
voidmain()
{inta[5][5],i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{scanf(“%d”,&a[i][j]);}
}
intsum=a[0][0],row,col;
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
{
if(【7】)
{
【8】
【9】
【10】
}
}
}
printf(“a[%d][%d]=%d”,row,col,sum);
}
4、以下程序是从键盘输入字符统计小写字母个数,读入字符‘#’时停止统计,请填空:
voidmain()
{
intn=0,c;
while((c=getchar())!
=【11】)
{
if(【12】)n++;
}
printf("%d\n",n);
}
5、以下程序是找年龄最大的人,输出其姓名和年龄。
请将以下程序补充完整:
#defineN4
structman
{charname[20];
intage;
}person[N]={“li”,18,”wang”,19,”zhang”,22,”sun”,20};
voidmain()
{
structman*q,*p;
inti,m=0;
p=person;q=person;
for(i=0;iif(m<_【13】)
{q=p++;
【14】
}
print(“【15】,%d”,q->name,q->age);
}
6、以下程序实现数组的逆序输出,请填空:
#defineN5
voidmain()
{inta[N]={9,6,8,4,1},i,temp;
printf(“\noriginalarray:
\n”);
for(i=0;iprintf(“%4d”,a[i]);
for(i=0;【17】;i++)
{temp=a[i];
【18】
a[N-i-1]=temp;
}
printf(“sortedarray:
\n”);
for(i=0;iprintf(“%4d”,a[i]);
}
7从键盘读取一个字符串,统计出现某特定字符个数.请完善该程序:
voidmain()
{inti=0,num=0;
charstr[20],ch;
ch=getchar();
【19】
while(str[i]!
=’\0’)
{
if(【20】)num++;
i++;
}
printf(“the%cnumis%d\n”,ch,num);
}
三、读程序,写出运行结果(每小题3分,共15分)
1.
voidfunc1(inti);
voidfunc2(inti);
charst[]="hello,friend!
";
voidfunc1(inti)
{
printf("%c",st[i]);
if(i<3)
{i+=2;func2(i);}
}
voidfunc2(inti)
{
printf("%c",st[i]);
if(i<3){i+=2;func1(i);}
}
voidmain()
{inti=0;func1(i);printf("\n");}
2.
voidmain()
{
inti=0,s=0;
do{
if(i%2){i++;continue;}
i++;
s+=i;
}while(i<7);
printf("%d\n",s);
}
3.
voidf(intx,inty)
{
intt;
if(x}
voidmain()
{
inta=4,b=3,c=5;
f(a,b);
f(a,c);
f(b,c);
printf("%d,%d,%d",a,b,c);
}
4.
voidfun(int*a,inti,intj)
{
intt;
if(i}
voidmain()
{
inta[]={18,2,5,4,7,6},i,j,s=0,m=5;
for(j=0;j<6;j++)
{
fun(a,s,m);
s++;
m--;
}
for(i=0;i<6;i++)
printf("%d",a[i]);
}
5.
#defineA4
#defineBA-2
voidpoint(char*t)
{
t+=B/2;
*t=*t+1;
}
voidmain()
{charb[]="abcdef",*p=b;
point(p);
printf("%s\n",b);
}
四.编程题(第一题7分,第二题8分,共15分)
1.通过键盘输入3×3的整数矩阵,编程求出矩阵主对角线上元素之和。
2.编写函数,其功能是在字符串s1的指定位置f前插入字符串s2,要求函数首部为:
voidinsert(char*s1,char*s2,intf)。
参考答案
一、选择题(1-10每题1分,11-30每题1.5分,共40分)
1-5CCCCB
6-10DCBBB
11-15CDABB
16-20AADCD
21-25BCDDA
26-30AABCC
二、填空题(每题2分,共30分)
1s1[i]!
='\0'ors1[i]!
=0
2s1[i++]=s2[j++]
3s1[i]='\0'ors1[i]=0
4i<=j
5f=f*iorf*=i
6sum=sum+forsum+=f
7a[i][j]>=sum
8sum=a[i][j];
9row=i;
10col=j;
11'#'
12c>='a'&&c<='z'
13p->ageor(*p).ageorperson[i].age
14m=q->age;orm=(*q).age;orm=person[i].age
15%s
16i++
17i18a[i]=a[N-i-1];
19gets(str);orscanf("%s",str);
20str[i]==ch
三、读程序,写出程序运行结果(每题3分,共15分)
1.hlo
2.16
3.4,3,5
4.6745218
5.abceef
四、编程题(第1题7分,第2题8分,共15分)
1.
#include
intsummary(intb[3][3])
{
inti,sum=0;
for(i=0;i<3;i++)
{
sum=sum+b[i][i];
}
returnsum;
}
voidmain()
{
inta[3][3],sum=0;
inti,j;
printf("pleaseinputrectangleelements:
\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
sum=summary(a);
printf("sumis%d",sum);
}
2.
voidinsert(char*s1,char*s2,intf)
{
inti,j;
chart;
for(i=f,j=0;s2[j];i++,j++)
{
t=s1[i];
s1[i]=s2[j];
s2[j]=t;
}
for(j=0;s2[j];j++,i++)
s1[i]=s2[j];
s1[i]='\0';
}