本系列資料由"韜略宏智" 授權(quán)發(fā)布,任何網(wǎng)站不得轉(zhuǎn)載,否則追究法律責(zé)任。
1.填空題
下列給定程序中,函數(shù)fun()的功能是:求k!(求k的階乘,且k小于13),所有階乘的值作為函數(shù)值返回。例如:若k=10,則應(yīng)輸出3628800。
【答案】
【1】long 【2】k>0 【3】return 1
2.改錯(cuò)題
假定整數(shù)數(shù)列中的數(shù)不重復(fù),并存放在數(shù)組中。下列給定程序中,函數(shù)fun的功能是:刪除數(shù)列中值為x的元素,同時(shí)將其他元素前移。n中存放的是數(shù)列中元素的個(gè)數(shù)。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#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];應(yīng)改為a[i]=a[i+1];
【考點(diǎn)】數(shù)組下標(biāo)操作,查找算法,在原數(shù)組上更新數(shù)組元素。
【解析】
本題中的fun函數(shù)的功能是刪除一個(gè)給定的值,首先從給定數(shù)組的第一個(gè)元素開始順序查找,直到最后一個(gè)元素。如果沒有查找到給定的數(shù)字,則返回-1;如果查找成功,則將其后面的數(shù)組元素依次向前移動(dòng)一位(a[i]=a[i+1]),實(shí)現(xiàn)對(duì)該數(shù)組元素的刪除操作,且元素的總個(gè)數(shù)n減1。所以應(yīng)該將a[i+1]=a[i];改為a[i]=a[i+1];
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |