中南大学C语言程序设计历年试题.docx
《中南大学C语言程序设计历年试题.docx》由会员分享,可在线阅读,更多相关《中南大学C语言程序设计历年试题.docx(44页珍藏版)》请在冰豆网上搜索。
中南大学C语言程序设计历年试题
中南大学2010-2011学年C语言
时间110分钟
一、填空题(每空2分,共30分)
1、若intx=2,y=7,z=6;则表达式:
x==(y=z);执行完后,
x的值是;y的值是。
2、若inta,b=9,d=8;表达式:
a=(――b==d++)?
d++:
――b;则a的结果是;
表达式执行完后d的值为。
3、已有宏定义#defineP(x)x*x-2
设intx=1,y=3;且a=P(2+x);b=P(y);
则a的值为;b的值为。
4、若intx=4,y=6,z=0;有循环while(x=y){z++;y--;}
则循环语句执行完后,z值为。
5、若有定义:
charstr1[]={‘C’,‘h’,‘i’,‘n’,‘a’};charstr2[]=“China”;
则数组str1的长度为;数组str2的长度为。
6、已知有定义:
inta=1,b=2,c=3,d=4,m=1,n=1,k;
则语句:
k=(m=a>b)&&(n=c>d);运行完毕后,
m的值为;n的值为;k的值为。
7、已有定义:
char*p[]={“Chinese”,“France”,“America”,“Russia”};则语句printf(“%s”,p[1]);printf(“%c”,p[1][2]);printf(“%c”,*(p[3]+1));
的输出结果分别为:
、、。
二、判断题(每小题1分,共10分)
1、标准C中,并不区分英文字符的大小写。
2、标准C中,变量可以先使用再定义。
3、若定义函数时,其返回类型为void,则调用函数时,不能将其作为一个值赋给某个变量。
4、表达式“3.6%2”符合C语言语法。
5、全局变量的作用域是整个源程序文件。
6、数组名可以作为参数进行传递。
、
7、表达式“ELSE”是合法的C语言标识符。
8、一个函数中只允许有一条return语句。
9、C语言中用到的任何一个变量都要规定其类型。
10、使用continue语句,可以使得C程序的执行直接从循环中跳出。
三、下列各程序中每个程序各有2个错误,指出错误语句,写出对应正确语句(每小题4分,共16分)
1、输入一个数,计算其平方根
main()
{
floata,b;
printf(“pleaseinputanumber\n”);scanf(“%f”,a);
if(a>=0)
{
b=sqrt(a);
printf(“b=%f\n”,b);
}
elseprintf(“dataiserror!
\n”);
}
2、已知矩阵a=
,求该矩阵对角线元素之和。
main()
{
intisum;
inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};
for(i=1;i<=3;i++)
sum=sum+a[i][i];
printf(“sum=%d”,sum);
}
3、用递归语句编函数计算6!
longf(intm)
{longa;
if(m<0)printf(“dataerror!
”);
elsea=f(m-1)*m;
}
main()
{intn=6;
printf(“%d!
=%ld”,n,f(n));
}
4、若有一维数组x[6]={1,4,5,7,0,3}编程求出其中最大的元素
main()
{
intx[6]={1,4,5,7,0,3};
inti,max=x[1];
for(i=1;i<6;i++)
if(x[i]printf(“最大的元素为%d\n”,max);
}
四、程序填空题:
下列程序中缺少若干条语句,在对应的下划线上填上合适的语句,每一个下划线只填一条语句(每小题4分,共16分)
1、若一自然数全部正整数因子(该因子不包括其本身)之和仍为该自然数,则该自然数称为完全数。
如:
6=1+2+3,则6是完全数。
求[2,1000]以内的所有完全数。
main()
{
intx,n,m;
for(n=2;n<=1000;n++)
{
for(m=1;m{if(n%m==0)x=x+m;}
printf(“%d\n”,n);
}
}
2、将某同学的五门课程成绩放在一数组中,求其总分,要求通过函数调用实现。
floatsum(floatarr[]){
intx;
for(x=0;x<5;x++)
he=he+arr[x];
return(he);
}
main()
{
floatscore[5],summay;
inta;
printf(“输入五门课程成绩\n”);for()
scanf(“%f”,&score[a]);summay=sum(score);
printf(“总分为:
%f\n”,summay);
}
3、用选择法给整数排序的相关函数
sort(intx[],n)
{
inti,j,k,t;
for(i=0;i{
_________________
for(j=i+1;jif(x[j]>x[k])____________
if(k!
=i)
{
t=x[i];x[i]=x[k];x[k]=t;
}
}
}
4、输入一个字符,若是小写字母就输出对应的大写字母,若是大写字母就输出对应的小写字母,如果其它字符,则输出错误提示。
main()
{
charx;
printf("Input:
");
if(x>='A'&&x<='Z')
printf("\n%c",x+32);
elseif(_______________________)
printf("\n%c",x-32);
else
printf("InputError");
}
五、阅读下列程序,写出运行结果(每小题6分,共12分)
1、
#include
inti=0;main()
{
intk=1;i++;
k++;printf(“goodi=%d,k=%d\n”,i,k);sub();
sub();
}
staticinty=0;
sub()
{
intk=0;staticintx=1;
y++;
k++;
x++;
printf(“badi=%d,k=%d,x=%d,y=%d\n”,i,k,x,y);
}
2、
#include
p(intx,intn)
{
if(n==1)
return(x);
else
{
printf("%d\n",n-1);
return(x*(1-p(x,n-1)));
}
}
main()
{
inty,x=2,n=4;
y=p(x,n);
printf(“%d”,y);
}
六、编程题(第1题6分,第2题10分,共16分)
a)编程求
。
b)编写程序求10个实数的最大值、最小值及平均值,要求:
1最大值、最小值、平均值的求取分别通过三个函数实现,函数以数组名或指针为参数;
2主函数中通过键盘输入10个实数。
3求出结果后,要求将其在主函数中输出。
2010--2011学年学期《C语言程序设计基础》试题参考答案
1填空题(每空2分,共30分)
1、26
2、910
3、37
4、6
5、56
6、010
7、FranceAu
2判断题(每小题1分,共10分)
×
×
√
×
×
√
√
×
√
×
3改错误,指出错误语句,写出对应正确语句(每小题4分,共16分)
1、在main()前加#include
将语句scanf(“%f”,a);改为scanf(“%f”,&a);
2、定义变量sum应给其赋初值sum=0;
for(i=1;i<=3;i++)改为for(i=0;i<3;i++)
3、在子函数f中:
加语句if(m==0)a=1;和语句return(a);
4、max=x[1];改为max=x[0];或者i=1;i<6;i++改为i=0;i<6;i++
将表达式x[i]max
4程序填空题:
(每小题4分,共16分)
1、x=0;if(x==n)
2、floathe=arr[0];a=0;a<5;a++
3、k=i;k=j;
4、scanf("%c",&x);x>='a'&&x<='z'
5阅读下列程序,写出运行结果(每小题6分,共12分)
1、goodi=1,k=2
badi=1,k=1,x=2,y=1
badi=1,k=1,x=3,y=2
2、321-10
6编程题(16分)
(1)
main()
{floatsum=0;intk;
for(k=1;k<=50;k++)sum+=k*k;
for(k=1;k<=100;k++)sum+=k;
for(k=1;k<=10;k++)sum+=1.0/k;
printf(“sumis%f”,sum);}
(2)
floatmin(floata[])
{inti;floatmin=a[0];
for(i=0;i<10;i++)
if(a[i]return(min);}
floatmax(floata[])
{inti;floatmax=a[0];
for(i=0;i<10;i++)
if(a[i]>max)max=a[i];
return(max);}
floataverage(floata[])
{inti;floataverage=a[0];
for(i=0;i<10;i++)average+=a[i];
return(average/10);}
main()
{floatb[10];intj;
printf("pleaseinputfivenumber\n");
for(j=0;j<10;j++)scanf("%f",&b[j]);
printf("maxis%f,minis%f,averageis%f\n",max(b),min(b),average(b));}
中南大学2010年C语言
时间110分钟
一、选择题(每小题1.5分,共计30分)
1.C语言中变量定义与使用的关系是。
A)必须先定义,后使用 B)可以先使用,后定义
C)可以边使用,边定义 D)不须定义,随时使用
2.已知:
inta,b;用语句scanf(“%d%d”,&a,&b);输入a、b的值时,不能作为输入数据分隔符的是。
A)逗号B)空格C)回车D)Tab键
3.不是C语言中合法的标识符。
A)sum B)ClassC)li_lingD)3D64
4.在C语言中,下列运算符的操作数必须是int型的运算是。
A)%B)/C)!
=D)++
5.下面不正确的赋初值语句是。
A)inta=2.0; B)charc=“a”;
C)inta[]={0}; D)chars[]=“boy”;
6.在函数调用过程中,形式参数与实际参数的数据传递关系是。
A)实参传递给形参 B)形参传递给实参
C)实参与形参双向传递 D)由用户指定传递方式
7.在C语言中,字符串的结束标志为。
A)‘\n’B)‘\t’C)‘\0’C)‘\b’
8.在循环结构中,提前结束循环的语句是。
A)breakB)continueC)switchD)return
9.下列运算符中优先级最高的是 。
A)
=C)&&D)+
10.以下叙述正确的是 。
A)在C程序中,main函数必须位于程序的最前面
B)C程序的每行中只能写一条语句
C)C语言的输入输出是用函数实现的。
D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误
11.设有程序段
intk=0;
while
(1)
{k=k+1;
if(k=10)break;}
则下面描述中正确的是 。
A)while循环执行10次B)循环是无限循环
C)循环体语句一次也不执行D)循环体语句执行一次
12.以下说法不正确的是 。
A)定义函数时,函数中可有多个return语句。
B)return后边的值可以为表达式。
C)如果函数值的类型与返回值类型不一致,以返回值类型为准。
D)对用户自定义函数,其位置在调用它的函数后面,应该声明。
13.设有程序段:
intx=12,y;
if(x<1)y=x;
elseif(1<=x&&x<10)y=2*x-1;
else
y=3*x-1;
则程序执行后,y的值为 。
A)12B)23C)35D)程序无法执行,有编译错误
14.以下不正确的叙述是 。
A)在C程序中,逗号运算符的优先级最低
B)在C程序中,APH和aph是两个不同的变量
C)若a和b类型相同,在执行了赋值表达式a=b后b中的值将放人a中,而b中的值不变。
D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值。
15.下述对C语言字符数组的描述中错误的是 。
A)字符数组可以存放字符串
B)字符数组的字符串可以整体输入、输出
C)可以在赋值语句中通过赋值运算符"="对字符数组整体赋值
D)不可以用关系运算符对字符数组中的字符串进行比较
16.设有定义:
intk=0;chars[30];
若准备将句子“youareastudent.”赋给字符数组s,错误的输入语句为:
A)scanf(“%s”,s);
B)for(k=0;k<18;k++)s[k]=getchar();
C)while((c=getchar())!
=‘\n’)s[k++]=c;
D)gets(s);
17.设有定义:
charc[6]=“china”;
下面不能正确输出数组c的是 。
A)puts(c);B)printf(“%s”,c);
C)for(i=0;i<6;i++)printf(“%c”,c[i]);D)printf(“%s”,c[6]);
18.设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为 。
A)intB)floatC)doubleD)不确定
19.已知各变量的类型说明如下:
inti=8,k,a,b;
doublex=1.42,y=5.2;
则以下符合C语言语法的表达式是 。
A)a+=a-=(b=4)*(a=3)B)a=a*3=2
C)x%(-3)D)y=f1oat(i)
20.已知函数abc的定义为:
voidabc()
{…….}
则函数中void的含义是:
A)执行函数abc后,函数没有返回值。
B)执行函数abc后,函数不返回
C)执行函数abc后,可以返回任意类型D) 以上三个答案全是错误的
二、计算表达式(每小题1.5分,共计15分):
设inta=15,b=-10;floatx=102.4,y=30.5;(注意:
各式结果不影响后续的题目!
)
1.(++a)-(b--)()
2.a+=a*=3()
3.a
(2*a+b):
(a-2*b)()
4.(a+b)/2+(int)(x+y)%(-b)()
5.(float)a/2+(float)(b+12)()
6.(a>b)&&(x>12&&y<=35)()
7.(int)x%(int)y&&(!
a)||(!
b)()
8.计算(a>5)||(++b)后b的值为:
()
9.printf(“%d”,’\112’);结果为()
10.已知’A’的ASCII码为65,则:
printf(“%c”,’\x44’);结果为()
三、写出下列程序的的执行结果(每小题5分,共计20分,注意输出格式)
1.#include
intmain()
{inta=23,b=12;floatx=45.22212,y=43.221;
staticcharc='B',c2[]="IAMSTUDENT";
printf("%5d%5d\n",a,b);
printf("%10.2f,%-10.2f\n",x,y);
printf("%o,%x,%u\n",b,b,b);
printf("%d,%c\n",c,c);
printf("%s,%5.3s\n",c2,c2);
return0;
}
2.#include
intmain()
{inta[6][6],i,j;
for(i=1;i<6;i++)
for(j=1;j<6;j++)
a[i][j]=(i/j)*(j/i);
for(i=1;i<6;i++)
{for(j=1;j<6;j++)
printf("%3d",a[i][j]);
printf("\n");}
return0;
}
3.#include
intmain()
{intm,n,k=0;
for(n=100,m=1;m<11;n++)
{if(n%2==0)
continue;
printf("%6d",n);
k++;m++;
if(k%2==0)printf("\n");
}
return0;
}
4.#include
voidmain()
{inti,j,k;
charspace='';/*space变量的值为一个空格*/
for(i=0;i<5;i++)
{for(j=1;j<=i;j++)
printf("%c",space);
for(k=0;k<5;k++)
printf("%c",'*');
printf("\n");
}
}
四、程序填空(每空1.5分,共计15分)
1.下面程序的功能是:
求100~200之间的全部素数。
#include
#include
intmain()
{ intm,k,i,n=0;
for(m=101;m<200;m+=2)
{ if(n%10==0) printf("\n");
k=sqrt(m);
for(i= ;i<=k;i++)
if(m%i==0) ;
if(i== k+1 )
{ printf("%5d",);n++;}
}
return0;
}
2.下面程序的功能是:
最多从键盘上输入80个字符,遇到’\n’后退出,遇到空格则换成字符’*’,对其它字符依次原样送入字符数组str中。
#include
intmain()
{inti;
charc,str[80];
for(i=0;i<80;)
{if((c=getchar())==‘\n’)
break;
if(c==‘’)
;
else
str[i]=c;
}
str[i]=‘\0’;
puts();
return0;
}
3.下面程序的功能是:
将一个数组中的值按逆序存放。
#defineN7
#include
intmain()