本系列资料由"韬略宏智" 授权发布,任何网站不得转载,否则追究法律责任。
1.填空题
下列给定程序中,函数fun()的功能是:求k!(求k的阶乘,且k小于13),所有阶乘的值作为函数值返回。例如:若k=10,则应输出3628800。
【答案】
【1】long 【2】k>0 【3】return 1
2.改错题
假定整数数列中的数不重复,并存放在数组中。下列给定程序中,函数fun的功能是:删除数列中值为x的元素,同时将其他元素前移。n中存放的是数列中元素的个数。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
#define N 20
fun(int *a,int n,int x)
{ int p=0,i;
a[n]=x;
while(x!=a[p])
{
p=p+1;
}
if(p==n)
return -1;
else
{
/********found********/
for(i=p;i<n;i++)
a[i+1]=a[i];
return n-1;
}
}
main()
{
int w[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i;
n=10;
printf("The original data:\n");
for(i=0;i<n;i++) printf("%5d",w[i]);
printf("\nInput x(to delete):");
scanf("%d",&x);
printf("Delete:%d\n",x);
n=fun(w,n,x);
if(n==-1)
printf("***Not be found!***\n\n");
else
{
printf("The data after delete:\n");
for(i=0;i<n;i++)
printf("%5d",w[i]);
printf("\n\n");
}
}
【答案】
第1处:a[i+1]=a[i];应改为a[i]=a[i+1];
【考点】数组下标操作,查找算法,在原数组上更新数组元素。
【解析】
本题中的fun函数的功能是删除一个给定的值,首先从给定数组的第一个元素开始顺序查找,直到最后一个元素。如果没有查找到给定的数字,则返回-1;如果查找成功,则将其后面的数组元素依次向前移动一位(a[i]=a[i+1]),实现对该数组元素的删除操作,且元素的总个数n减1。所以应该将a[i+1]=a[i];改为a[i]=a[i+1];
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |