【2】;
j--;
}
【3】=k;
}
for(i=0;i<10;i++)printf(“%d”,a[i]);
}
下面程序用"两路合并法”把两个已按升序(由小到大)组,请填(3)空使程序完整。
main()
{
inta[3]={5,9,10};
intb[5]={12,24,26,37,48};
intc[10],i=0,j=0,k=0;
排列的数组合并成一个新的升序数
main()
{
inta[3]={5,9,10};
intb[5]={12,24,26,37,48};
intc[10],i=0,j=0,k=0;while(i<3&&j<5)
if(a[i]>b[j])
{c[k]=b[j];k++;j++;}
else
{c[k]=a[i];k++;i++;}while(i<3&&j>=5)
{c[k]=a[i];i++;k++;}while(i>=3&&j<5)
{c[k]=b[j];j++;k++;}
for(i=0;iwhile(i<3&&j<5)
if(【1】){
c[k]=b[j];k++;j++;
}else{
c[k]=a[i];k++;i++;
}
while(【2]){
{c[k]=a[i];i++;k++;}
while(【3]){
{c[k]=b[j];j++;k++;}
for(i=0;i
F面程序的功能是将二维数组
a中每个元素向右移
一列,最右一列换到最左一列,移后的结果保存到
b数组中,并按矩阵形式输出序完整。
main()
a和b,请填⑶空使程
{inta[2][3]{{4,5,6},{1,2,3}},b[2][3],i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++){
printf(“%5d”,a[i][j]);
【1】;
main()
{
inta[2][3]={{4,5,6},{1,2,3}},for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("%5d",a[i][j]);b[i][j+1]=a[i][j];
}
printf("\n");
}
for(i=0;i<2;i++)b[i][0]=a[i][2];
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("%5d",b[i][j]);
b[2][3]={0},i,j;
}
printf("\n”);
}
printf(“\n”);
}
for(【2])b[i][0]=a[i][2];
for(i=0;i<2;i++){
for(j=0;j<3;j++){
printf(“%5d”,b[i][j]);
【3];
}
printf(“\n”);
}
}
下面程序的功能是在一个字符串中查找一个指定的字符,若字符串中包含该字符则输出该字
#inelude
main()
{charc='a';/*需要查找的字符*/
chart[50];
符在字符串中第一次出现的位置(下标值),否则输出一1,请填
(2)空使程序完整。
main()
{charc='a';/*需要查找的
字符*/
chart[50];
inti,j,k;
gets(t);
i=strlen(t);
for(k=0;k
if(t[k]==c)
{j=k;break;}
elsej=-1;
inti,j,k;
gets(t);
i=【1】;
for(k=0;k
if(【2】)
{j=k;break;}
elsej=-1;
printf(“%d”,j);
F面程序用“顺序查找法”查找数组a中是否存在某一关键字,请填
(2)空使程序完整。
main()
main()
{
int
a[10]={25,57,48,371,123,291,18,22,44};
inti=0,x;
scanf("%d",&x);
while(a[i]!
=x&&i
i++;
if(i<10)printf("found=%d\in",
i);
else
printf("can'tfound!
\n");
{inta[10]={25,57,48,371,123,291,18,22,44};
inti=0,x;
scanf(“%d”,&x);
while(a[i]!
=x&&【1】)i++;
if(【2】)printf(“found=%d\n”,i);
elseprintf(“can'tfound!
\n”);
}
习题二
以下程序是求矩阵a,b的乘积,结果存放在矩阵
阵形式输出,请填(3)空使程序完整。
main()
{inta[2][2]={-1,-2,-3,-4},b[2][3]={2,10,9,4,5,119};
inti,j,k,s,c[2][3];
for(i=0;i<2;i++)
}
for(j=0;j<3;j++){
for(k=0;k<2;k++)s+=【2】
c[i][j]=s;
}
for(i=0;i<3;i++)
{for(j=0;j<2;j++)
printf(“%6d”,c[i][j]);
【3】;
}
}
inti=0,j=0;
while(a[i]!
='\0')i++;
while(【1】){
a[i]=b[j];i++;j++;
}
【2】;
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(melseif(m>a[mid])【2]
elsereturn(mid);
}
return(-1);
intsearch(inta[10],intm)
{intx1=0,x2=9,mid;
while(x1<=x2)
{
mid=(x1+x2)/2;
if(melseif(m>a[mid])x1=mid;〃是降序则是X2=MID
elsereturn(mid);
}
return(-1);
}
这是升序,若果是降序
这是升序,若果
del函数的作用是删除有序数组a中的指定元素x,n为数组a的元素个数,函数返回删除
后的数组a元素个数,请填
(2)空使程序完整。
intdel(inta[10],intn,intx)
{intp=0,i;
while(x>=a[p]&&pfor(i=p-1;ireturn(n-1);
intdel(inta[10],intn,intx)
{
intp=0,i;
while(x>=a[p]&&pfor(i=p-1;i}//只能删除升序序列
#inelude
【1】;
main()
{floatx,y,z,f;
scanf(“%f,%f,%f”,&x,&y,&z);
f=fun(【2】);
f+=fun(【3】);
printf(“f=%d”,f);
}//要改%f输出
floatfun(floata,floatb)
{return(a/b);
}
avg函数的作用是计算数组array的平均值返回,请填(3)空使程序完整。
floatavg(floatarray[10]){
inti;
floatavgr,sum=0;
for(i=0;i<10;i++)sum+=array[i];avgr=sum/10;
return(avgr);
}
floatavg(floatarray[10])
{inti;
floatavgr,sum=0;
for(i=0;【1】;i++)
sum+=【2】
avgr=sum/10;
【3】;
习题二
F列程序的输出结果是16.00,请填
(1)空使程序完整。
main()
{inta=9,b=2;
floatx=【1】,y=1.1,乙
z=a/2+b*x/y+1/2;
printf(“%5.2f\n”,z);
main()
{
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三个数中的最小值,请填(使程序完整。
main()
{intx=4,y=5,z=8;
intu,v;
u=x【1】
v=u【2】
printf(“%d”,v);
下述程序用“碾转相除法”计算两个整数m和n的最大公约数。
该方法的基本思想是计算
m和n相除的余数,如果余数为0则结束,此时的被除数就是最大公约数。
否则,将除数作为新的被除数,余数作为新的除数,继续计算m和n相除的余数,判断是否为0,等等,请填(3)空使程序完整。
main()
{intm,n,w;
下面程序的功能是输出1至1