c语言试题及答案.docx
《c语言试题及答案.docx》由会员分享,可在线阅读,更多相关《c语言试题及答案.docx(24页珍藏版)》请在冰豆网上搜索。
c语言试题及答案
《C语言》课程综合复习资料
一、单选题
1.在C语言中,字符型数据在存中的存储形式是
A)原码B)补码C)反码D)ASCII码
2.在C语言中,十进制数47可等价地表示为
A)2fB)02fC)57D)057
3.设有定义:
intx=12,n=5;则表达式x%=(n%2)的值为
A)0B)1C)2D)3
4.设有定义语句:
charstr[][20]={,"Beijing","中国石油大学"},*p=str;
则printf("%d\n",strlen(p+20));输出结果是
A)10B)6C)0D)20
5.已定义以下函数:
fun(int*p)
{return*p;}
该函数的返回值是
A)不确定的值B)形参p所指存储单元中的值
C)形参p中存放的值D)形参p的地址值
6.C语言中,函数返回值的类型是由
A)return语句中的表达式类型决定
B)调用函数的主调函数类型决定
C)调用函数时的临时类型决定
D)定义函数时所指定的函数类型决定
7.有以下函数定义:
voidfun(intn,doublex){……}
若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是
A)fun(inty,doublem);B)k=fun(10,12.5);
C)fun(10,12.5);D)voidfun(10,12.5);
8.以下选项中不能正确赋值的是
A)charb[]={′H′,′e′,′l′,′l′,′o′,′!
′};
B)charb[10];b="Hello!
";
C)charb[10]="Hello!
";
D)char*str="Hello!
";
9.若有以下定义:
chars[20]="programming",*ps=s;则不能代表字符g的表达式是
A)ps+3B)s[3]C)ps[3]D)ps+=3,*ps
10.当对两个字符串进行比较时,应该使用的函数是
A)strcatB)strcmpC)strcpyD)strlen
11.若i为整型变量,则以下循环的次数是
for(i=2;i==0;)printf(“%d”,i--);
A)无限次B)0次C)1次D)2次
12.以下关于数组的描述正确的是
A)数组大小固定,但是可以有不同类型的数组元素
B)数组大小可变,但是所有数组元素的类型必须相同
C)数组大小固定,所有元素的类型必须相同
D)数组大小可变,可以有不同类型的数组元素
13.以下能正确定义数组并正确赋初值的语句是
A)intN=5,b[N][N];B)inta[1][2]={{1},{3}};
C)intc[2][]={{1,2},{3,4}};D)intd[3][2]={{1,2},{34}};
14.设有定义inta[]={1,5,7,9,11,13},*p=a+3;则*(p-2),*(a+4)的值是
A)511B)19C)59D)有错误
15.已知charb[5],*p=b;,则正确的赋值语句是
A)b=“abcd”;B)*b=“abcd”;C)p=“abcd”;D)*p=“abcd”;
16.用数组名作为函数调用时的实参,则实际传递给形参的是
A)数组的第一个元素值B)数组中全部元素值
C)数组的首地址D)数组的元素个数
17.以下叙述中不正确的是
A)在不同的函数中可以使用相同名字的变量
B)函数中的形式参数是局部变量
C)在一个函数定义的变量只在本函数围有效
D)在一个函数的复合语句中定义的变量在本函数围有效
18.当对两个字符串进行比较时,应该使用的函数是
A)strcatB)strcmpC)strcpyD)strlen
19.有如下定义:
longm;charc;floatx;doubley;则表达式c+m*x/y的值的类型是
A)longB)charC)floatD)double
20.假设已定义charc[8]="test";inti;则下面的输出函数调用中错误的是
A)printf("%s",c);B)for(i=0;i<8;i++)printf("%c",c[i]);
C)puts(c)D)for(i=0;i<8;i++)puts(c[i]);
21.若有以下定义:
chars[20]="programming",*ps=s;则不能代表字符g的表达式是
A)ps+3B)s[3]C)ps[3]D)ps+=3,*ps
22.以下选项中不能正确赋值的是
A)charb[]={′H′,′e′,′l′,′l′,′o′,′!
′};
B)charb[10];b="Hello!
";
C)charb[10]="Hello!
";
D)char*str="Hello!
";
23.有以下函数定义:
voidfun(intn,doublex){……}
若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是_________。
A)fun(inty,doublem);B)k=fun(10,12.5);
C)fun(10,12.5);D)voidfun(10,12.5);
24.从变量的作用域来分,可分为全局变量和局部变量,形参是
A)局部变量B)全局变量C)静态变量D)动态变量
二、读程序,写出程序的执行结果
1.#include
voidmain()
{intx[]={1,2,3};
ints,i,*p=x;
s=1;
for(i=0;i<3;i++)
s*=*(p+i);
printf(“%d\n”,s);
}
答案6
2.#include
charfun(char*s)
{if(*s>=a&&*s<=z)
*s=*s-32;
return*s;
}
voidmain()
{chara[20]="Welcome",*p,ch;
for(p=a;*p!
=\0;p++)
{ch=fun(p);
putchar(ch);
}
}
答案WELCOME
3.#include
voidmain()
{intx=26587,x1,r,sum=0;
x1=x;
while(x>0)
{r=x%10;
sum+=r;
x/=10;
}
printf("Sumofthedigitsin%dis%d",x1,sum);
}答案Sumofthedigitsin26587is28
4.#include
intfun(intx)
{inty=1;
staticintz=4;
z+=1;++y;
return(x+y+z);
}
voidmain()
{inti;
for(i=1;i<=3;i++)
printf("%3d",fun(i));
}
81012
5.#include
voidmain()
{intx=3,y=4;
intj;
for(j=1;y>0;y--)j=j*x;
printf(“j=%d\n”,j);
}
运行结果:
j=81
6.#include
voidmain()
{intx,y;
for(y=1,x=1;y<=20;y++)
{if(x>=8)break;
if(x%2==1){x+=5;continue;}
x-=3;
}
printf("x=%d,y=%d\n",x,y);
}
运行结果:
x=8,y=4
7.#include
voidmain()
{charx[]="language";
char*ptr=x;
while(*ptr)
{printf("%c\n",*ptr-32);
ptr++;
}
}
运行结果:
L
A
N
G
U
A
G
E
8.#include
voidmain()
{intx[]={5,6,7};
ints=1,i,*p=x;
for(i=0;i<3;i++)
s*=*(p+i);
printf(“%d\n”,s);
}
运行结果:
210
9.#include
intfun(intx)
{return(x>0?
x:
-x);
}
voidmain()
{inta=12;
printf(“%d,%d\n”,a,fun(a));
}
运行结果:
12,12
10.#include
voidex()
{staticintx=3;
--x;
printf(“%d”,x);
}
voidmain()
{ex();
ex();
}
运行结果:
21
11.#include
voidmain()
{inti=0,a=0;
while(i<20)
{for(;;)
if((i%10)==0)break;
elsei--;
i+=11;
a+=i;
}
printf("%d\n",a);
}
32
12.#include
voidmain()
{inta[3][4]={{1,2,3,4},{9,7,10,6},{-1,8,-5,5}};
inti,j,row=0,colum=0,max;
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max)
{max=a[i][j];
row=i;
colum=j;
}
printf("max=%d,row=%d,colum=%d",max,row,colum);
}
max=10,row=1,colum=2
13.#include
intf(intb[],intm,intn)
{inti,s=0;
for(i=m;ireturns;
}
voidmain()
{intx,a[]={1,2,3,4,5,6,7,8,9,10};
x=f(a,3,8);
printf("%d\n",x);
}
18
14.#include
voidswap(intb[])
{int*p,*p1,*p2;
p1=&b[0];p2=&b[1];
p=p1;p1=p1+1;p2=p;
}
voidmain()
{inta[]={5,9};
printf("%d,%d\n",*a,*(a+1));
swap(a);
printf("%d,%d\n",a[0],a[1]);
}
5,9
15.#include
intb=3;
intfun(int*a)
{b+=*a;
return(b);
}
voidmain()
{inta=2,b=2;
b+=fun(&a);
printf(“%d\n”,b);
}
7
16.#include
voidmain()
{inta[10],*p,*s,i;
for(i=0;i<10;i++)scanf(%d”,a+i);
for(p=a,s=a;p-a<10;p++)if(*p>*s)s=p;
printf(“max=%d,index=%d\n”,*s,s-a);
}
简述上列程序完成的功能:
查找数组中最大值并记录元素下标
17.#include
voidmain()
{intx,y;
for(y=1,x=1;y<=20;y++)
{if(x>=8)break;
if(x%2==1){x+=5;continue;}
x-=3;
}
printf(“x=%d,y=%d\n”,x,y);
}运行结果:
x=8,y=4
18.#include
#defineN3
voidzz(intx[N][N])
{inti,j,t;
for(i=0;ifor(j=0;j
{t=x[i][j];x[i][j]=x[j][i];x[j][i]=t;}
}
voidmain()
{intstr[N][N]={1,2,3,4,5,6,7,8,9},i,j;
zz(str);
for(i=0;i{for(j=0;jprintf("\n");
}
}
运行结果:
147
258
369
19.#include
voidmain()
{chara[20]="abcXYZ",c;
inti,j;
j=strlen(a)-1;
for(i=0;j>i;i++,j--)
{c=*(a+i);*(a+i)=*(a+j);*(a+j)=c;}
puts(a);
}运行结果:
ZXYcba
20.#include
inta=100,b=200;
voidf()
{printf(“%d,%d\n”,a,b);
a=1;b=2;
}
voidmain()
{inta=5,b=7;
f();
printf(“%d,%d\n”,a,b);
}运行结果:
5,7
21.#include
intd=1;
intfun(intp)
{staticintd=3;
d+=p;
printf("%3d",d);
return(d);
}
voidmain()
{printf("%3d\n",fun(2+fun(d)));
}运行结果:
5,12,12
22.#include
voidmain()
{charx[]="123456789",*p=x;
inti=0;
while(*p)
{if(i%2==0)*p='*’;
p++;i++;
}
puts(x);
}
运行结果:
*2*4*6*8*
三、编程题
1.编程输入实数x,计算下面函数的值,并输出y值。
x2x<1
y=3x-11x10
x>10
程序结果:
#include
voidmain()
{
intx,y;
scanf(“%d”,&x);
if(x<1)
y=x*x;
else
if(x>=1&&x<=10)y=3*x-1;
elsey=x/5;
printf(“x=%d,y=%d\n”,x,y);
}
2.编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,并输出统计结果。
程序结果:
#include
#include
voidmain() /*主函数*/
{
charc; /*定义变量*/
intm=0,n=0,a=0,b=0;
printf("请输入任意字符串.\n"); /*输入提示部分,提示输入*/
while((c=getchar())!
='\n') /*循环语句,将由键盘输入的非'\n'字符赋值给c*/
{
if((c>=65&&c<=90)||(c>=97&&c<=122)) /*第一个选择语句,统计英文字符个数*/
{
m=m+1;
}
elseif(c==32) /*第二个选择语句,统计空格字符的个数*/
{
n=n+1;
}
elseif(c>=48&&c<=57) /*第三个选择语句,统计数字字符的个数*/
{
a=a+1;
}
else /*统计其他字符的个数*/
b=b+1;
}
printf("%d%d%d%d",m,a,n,b); /*输出最后统计结果*/
getch(); /*输出结果后屏幕停留*/
}
3.编写打印如下图形的程序(必须用循环语句实现)
*
**
***
****
*****
程序结果:
#include
main()
{
intn,i,j;
printf(“n=%d\n”);
scanf(“%d”,&n);
for(i=0;i{
for(j=0;jfor(j=0;j
printf(“\n”);
}
4.编写程序,从键盘上任意输入20个整数,存入一个数组中,然后输出这些数中最大数及其下标以及最小数及其下标
程序结果:
#include
voidmain()
{
inta[20],i,max,min,num1,num2;
for(i=0;i<20;i++)
{printf(“inputthenumber%d:
”,i);
scanf(“%d”,&a[i]);
printf(“\n”);
}
for(i=0;i<20;i++)
{
If(a[i]<=a[0])
{min=a[i];
Num1=i;
}
Else
{max=a[i];
num2=i;
}
}
printf(“min=%d,num1=%d\n”,min,num1);
printf(“max=%d,num2=%d\n”,max,num2);}
5.编程打印下列的辉三角形。
(设8行)
1
11
121
1331
14641
15101051
程序结果:
#include
#defineN11
voidmain()
{
inti,j,a[N][N];/*数组为11行11列,0行0列不用*/
for(i=1;i{
a[i][1]=1;/*使第1列元素的值为1*/
a[i][i]=1;/*使对角线元素的值为1*/
}
for(i=3;ifor(j=2;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=1;i{for(j=1;j<=i;j++)
printf(“%6d”,a[i][j]);
printf(“\n”);
}
printf(“\n”);
}
6.求分段函数的值
程序结果:
#include
#inclde
main()
{doublex,y;
scanf(“%lf”,&x);
if(x<0)y=log(x*x);
elseif(x==0)y=1;
elsey=1+exp(x);
printf(“Y=%lf”,y);
}
7.编程打印以下图形(要求用循环控制语句实现)
&
&&
&&&
&&&&
&&&&&
&&&&&&
程序结果#include
main()
{
inti,j;
for(i=1;i<=6;i++)
{
for(j=1;j<=6-i;j++)
printf("");
for(j=1;j<=i;j++)
printf("&");
printf("\n");
}
}:
《C语言》课程综合复习资料答案
一、单选题:
1D2D3A4A5D6B7C8B9A10B11B12C13D14A15C16C17D18B19D20D21A22B23C24A
二、读程序写出程序执行结果:
1、6
2、WELCOME
3、Sumofthedigitsin26587is28
4、81012
5、j=81
6、x=8,y=4
7、L
A
N
G
U
A
G
E
8、2109、12,1210、21
11、3212、max=10,row=1,colum=2
13、1814、5,915、716、查找数组中最大值并记录元素下标
17、x=8,y=4
18、14719、ZYXcba
25820、5,7
36921、5,12,12
22、*2*4*6*8*
三、编程题
1、#include
voidmain()
{
intx,y;
scanf(“%d”,&x);
if(x<1)
y=x*x;
else
if(x>=1&&x<=10)y=3*x-1;
elsey=x/5;
printf(“x=%d,y=%d\n”,x,y);
}
2.#include
#include
voidmain()