海南大学C语言考试大题试题库Word文件下载.docx
《海南大学C语言考试大题试题库Word文件下载.docx》由会员分享,可在线阅读,更多相关《海南大学C语言考试大题试题库Word文件下载.docx(26页珍藏版)》请在冰豆网上搜索。
printf("
%d”,x[i]);
}
intdel(inta[10],intn,intx){intp=0,i;
while(x>
=a[p]&
&
p<
n)
【?
】
for(i=p-1;
i<
n;
i++)
return(n-1);
下面程序的功能是输入10个数,找出最大值和最小值所在的位置,
并把两者对调,然后输出调整后的10个数。
请填(4)空使程序完整。
voidmain()
{inta[10],max,min,i,j,k;
k=O;
j=O;
for(i=0;
10;
seanf("
%d"
&
a[i]);
】=a[0];
a[j]=max;
【?
%d”,a[i]);
以下程序的功能是计算函数f=x/y+y/z,请填⑶空使程序完整。
#inelude<
main()
{【?
/*函数原型声明*/
floatx,y,z,f;
scanf("
%f,%f,%f"
&
x,&
y,&
z);
f=fun(【?
f+=fun(【?
printf("
f=%f'
f);
floatfun(floata,floatb)
return(a/b);
以下程序是将字符串b的内容连接字符数组a的内容后面,形成新
字符串a,请填
(2)空使程序完整。
voidmain()
{chara[40]="
Great"
b[]="
Wall"
inti=0,j=0;
while(a[i]!
)i++;
while(【?
】){
a[i]=b[j];
i++;
j++;
%s\n"
a);
下面程序用”插入法"
对数组a进行由小到大的排序,请填(3)空使
程序完整。
经典算法提示:
简单插入排序算法的基本思想使将数组处理n-1次,第k次处理是
将第k个元素插入到目前的位置。
第k次的元素是这样插入的:
在
第k次处理时,前面的元素a[0],a[1],…,a[k-1]必定已排成了升
序,将a[k]与a[k-1],a[k-2],…a[0]逐个比较(由后向前),若
有a[j]<
a[k],则a[k]插入到a[j]之后,否则a[k]维持原位不变。
{inta[10]={191,3,6,4,11,7,25,13,89,10};
inti,j,k;
for(i=1;
i++){
k=a[i];
*********SPACE*********
while(j>
=0&
k<
a[j]){
j--;
】=k;
i++)printf("
%d"
a[i]);
已知程序的功能是输出数组a中的最大值,及该元素所在的行号
和列号,请填(3)空使程序完整。
voidmain(){inti,j,row=0,col=0,max;
max=a[O][O];
for(【?
for(j=0;
j<
3;
j++)
if(【?
row=i;
col=j;
%d,%d,%d\n"
max,row,col);
F面程序接受键盘上的输入,直到按/键为止,这些字符被原样
/*
j=【?
a[j]){
{inti,j,row=0,col=0,max;
inta[4][3]={{4,5,6},{10,1,23},{2,-8,9},{9,7,18}};
max=a[0][0];
习题一
F面程序可求出矩阵a的主对角线上的元素之和,请填
(2)空使程序完整。
main()
Inta[3][3]={1,3,5,7,9,11,13,15,17}sum=0,i,j;
for(j=0;
if(i==j)
sum=sum+a[i][j];
sum=%d"
sum);
{inta[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;
for(i=0;
3;
for(j=0;
j<
j++)
if(【1】)
sum=sum+【2】;
printf(“sum=%d”,sum);
base转换成n进制,请填⑶空使程序完整。
下面程序将十进制整数
{inti=O,base,n,j,num[20]={0};
scanf(“%d”,&
n);
scanf(“%d”,&
base);
do{
i++;
num[i]=
【1]
inti=0,base,n,j,num[20]={0};
scanf("
do{
num[i]=base%n;
base=base/n;
}while(base!
=0);
for(j=i;
j>
=1;
j--)
num[j]);
base=【2】
for(【3])
printf(“%d”,num[j]);
下面程序的功能是输入10个数,找出最大值和最小值所在的
位置,并把两者对调,然后输出调整后的10个数,请填(3)
scanf(“%d”,&
max=min=a[0];
【1】;
【2】;
if(a[i]<
min){min=a[i];
if(a[i]>
max){max=a[i];
【3】;
printf(“%d”,a[i]);
F面程序用“插入法”对数组a进行由小到大的排序,请填(3)空使程序完整。
经典算法提示:
简单插入排序算法的基本思想使将数组处理n-1次,第k次处理是将第k个元素插入
到目前的位置。
第k次的元素是这样插入的:
在第k次处理时,前面的元素a[0],a[1],…,a[k-1]必定已排成了升序,将a[k]与a[k-1],a[k-2],…a[0]逐个比较(由后向
前),若有a[j]<
j=i-1;
while(j>
a[j])
a[j+1]=a[j];
a[j+1]=k;
〃a[3]=a[5]最小的放后面
j--;
【3】=k;
i++)printf(“%d”,a[i]);
下面程序用"
两路合并法”把两个已按升序(由小到大)组,请填(3)空使程序完整。
inta[3]={5,9,10};
intb[5]={12,24,26,37,48};
intc[10],i=0,j=0,k=0;
排列的数组合并成一个新的升序数
while(i<
3&
5)
if(a[i]>
b[j])
{c[k]=b[j];
k++;
else
{c[k]=a[i];
}while(i<
j>
=5)
{c[k]=a[i];
}while(i>
=3&
{c[k]=b[j];
}
k;
i++)printf("
c[i]);
while(i<
if(【1】){
c[k]=b[j];
}else{
c[k]=a[i];
while(【2]){
while(【3]){
i++)printf(“%d”,c[i]);
F面程序的功能是将二维数组
a中每个元素向右移
一列,最右一列换到最左一列,移后的结果保存到
b数组中,并按矩阵形式输出序完整。
a和b,请填⑶空使程
{inta[2][3]{{4,5,6},{1,2,3}},b[2][3],i,j;
2;
j++){
printf(“%5d”,a[i][j]);
inta[2][3]={{4,5,6},{1,2,3}},for(i=0;
j++)
%5d"
a[i][j]);
b[i][j+1]=a[i][j];
\n"
);
2;
i++)b[i][0]=a[i][2];
b[i][j]);
b[2][3]={0},i,j;
\n”);
printf(“\n”);
for(【2])b[i][0]=a[i][2];
j++){
printf(“%5d”,b[i][j]);
【3];
printf(“\n”);
下面程序的功能是在一个字符串中查找一个指定的字符,若字符串中包含该字符则输出该字
string.h>
{charc='
a'
;
/*需要查找的字符*/
chart[50];
符在字符串中第一次出现的位置(下标值),否则输出一1,请填
(2)空使程序完整。
{charc='
a'
/*需要查找的
字符*/
inti,j,k;
gets(t);
i=strlen(t);
for(k=0;
i;
k++)
if(t[k]==c)
{j=k;
break;
elsej=-1;
i=【1】;
if(【2】)
printf(“%d”,j);
F面程序用“顺序查找法”查找数组a中是否存在某一关键字,请填
(2)空使程序完整。
int
a[10]={25,57,48,371,123,291,18,22,44};
inti=0,x;
scanf("
,&
x);
=x&
i
i++;
if(i<
10)printf("
found=%d\in"
i);
can'
tfound!
{inta[10]={25,57,48,371,123,291,18,22,44};
scanf(“%d”,&
x);
=x&
【1】)i++;
if(【2】)printf(“found=%d\n”,i);
elseprintf(“can'
tfound!
\n”);
习题二
以下程序是求矩阵a,b的乘积,结果存放在矩阵
阵形式输出,请填(3)空使程序完整。
{inta[2][2]={-1,-2,-3,-4},b[2][3]={2,10,9,4,5,119};
inti,j,k,s,c[2][3];
k++)s+=【2】
c[i][j]=s;
{for(j=0;
printf(“%6d”,c[i][j]);
inti=0,j=0;
='
\0'
)i++;
while(【1】){
printf(“%s\n”,a);
下面函数用“折半查找法”从有10个数的a数组中对关键字m查找,若找到,返回其下
标值,否则返回—1,请填
(2)空使程序完整。
折半查找法的思路是先确定待查元素的范围,将其分成两半,然后比较位于中间点元素的值。
之亦反。
intsearch(inta[10],intm)
{intx1=0,x2=9,mid;
while(x1<
=x2){
mid=(x1+x2)/2;
if(m<
a[mid])【1】
elseif(m>
a[mid])【2]
elsereturn(mid);
return(-1);
=x2)
a[mid])x2=mid;
〃则是X仁MID
a[mid])x1=mid;
〃是降序则是X2=MID
这是升序,若果是降序
这是升序,若果
del函数的作用是删除有序数组a中的指定元素x,n为数组a的元素个数,函数返回删除
后的数组a元素个数,请填
(2)空使程序完整。
intdel(inta[10],intn,intx)
{intp=0,i;
=a[p]&
n)【1】
i++)【2];
intp=0,i;
n)p++;
i++)a[i]=a[i+1];
return(n-1);
}//只能删除升序序列
{floatx,y,z,f;
scanf(“%f,%f,%f”,&
y,&
f=fun(【2】);
f+=fun(【3】);
printf(“f=%d”,f);
}//要改%f输出
{return(a/b);
avg函数的作用是计算数组array的平均值返回,请填(3)空使程序完整。
floatavg(floatarray[10]){
inti;
floatavgr,sum=0;
i++)sum+=array[i];
avgr=sum/10;
return(avgr);
floatavg(floatarray[10])
{inti;
floatavgr,sum=0;
【1】;
sum+=【2】
avgr=sum/10;
F列程序的输出结果是16.00,请填
(1)空使程序完整。
{inta=9,b=2;
floatx=【1】,y=1.1,乙
z=a/2+b*x/y+1/2;
printf(“%5.2f\n”,z);
inta=9,b=2;
floatx=6.6,y=1.1,乙z=a/2+b*x/y+1/2;
printf(“%5.2f\n”,z);
以下程序输出x,y,z三个数中的最小值,请填(使程序完整。
{intx=4,y=5,z=8;
intu,v;
u=x<
y
【1】
v=u<
z
【2】
printf(“%d”,v);
下述程序用“碾转相除法”计算两个整数m和n的最大公约数。
该方法的基本思想是计算
m和n相除的余数,如果余数为0则结束,此时的被除数就是最大公约数。
否则,将除数作为新的被除数,余数作为新的除数,继续计算m和n相除的余数,判断是否为0,等等,请填(3)空使程序完整。
{intm,n,w;
下面程序的功能是输出1至1