程序改错题
1. 给定程序MODI1.C中:用递归算法计算斐波拉契数列中第n项的值。从第1项起,斐波拉契数列为:1、1、2、3、5、8、13、21、……。例如:若给n输入7,该项的斐波拉契数值为13。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。long fun(int g)
{/**********found**********/
switch(g); //去掉;
{ case 0: return 0;
/**********found**********/
case 1 ;case 2 : return 1 ;} //case 1:
return( fun(g-1)+fun(g-2) );}
main(){ long fib; int n;
printf("Input n: "); scanf("%d",&n); printf("n = %d\n",n);
fib=fun(n);
printf("fib = %d\n\n",fib);}
2. 给定程序MODI1.C中函数fun的功能是:将p所指字符串中的所有字符复制到b中,要求复制三个字符之后插入一个空格。
void fun(char *p, char *b)
{ int i, k=0;
while(*p){ i=1;
while( i<=3 && *p ) {
/**********found**********/
b[k]=p; //b[k]=*p
k++; p++; i++; }
if(*p) {
/**********found**********/
b[k++]=" "; } //b[k++]=’’;
}b[k]='\0';}
main(){ char a[80],b[80];
printf("Enter a string: "); gets(a);
printf("The original string: "); puts(a);
fun(a,b);
printf("\nThe string after insert space: "); puts(b); printf("\n\n");}
3. .给定程序MODI1.C中函数fun的功能是:找出一个大于形参m且紧随m的素数,并作为函数值返回。
int fun(int m)
{ int i, k ;
for (i = m + 1 ; ; i++) {
for (k = 2 ; k < i ; k++)
/**************found**************/
if (i % k != 0) //if(i%k==0)
break ;
/**************found**************/
if (k
return(i); }}
main(){int m; m=fun(40);printf("%d",m);}
4..给定程序MODI1.C中函数fun的功能是:删除p 所指字符串中的所空白字符(包括Tab字符、回车符及换行符)。输入字符串用?#?结束输入
fun ( char *p) { int i,t; char c[80];
/************found************/
For (i = 0,t = 0; p[i] ; i++) //for
if(!isspace(*(p+i))) c[t++]=p[i];
/************found************/
c[t]="\0"; //c[t]=’\0’;
strcpy(p,c);}
main( ){ char c,s[80]; int i=0;
printf("Input a string:");
c=getchar();
while(c!='#')
{ s[i]=c;i++;c=getchar(); }
s[i]='\0'; fun(s); puts(s);}
5. .给定程序MODI1.C中函数fun的功能是:比较两个字符串,将长的那个字符串的首地址作为函数值返回.
/**********found**********/
char fun(char *s, char *t)
/*改为char *fun(char *s,char *t) */
{ int sl=0,tl=0; char *ss, *tt;
ss=s; tt=t;
while(*ss)
{ sl++;
/**********found**********/
(*ss)++; //ss++
} while(*tt) { tl++;
/**********found**********/
(*tt)++; } //tt++
if(tl>sl) return t;
else return s;}
main()
{ char a[80],b[80],*p,*q; int i;
printf("\nEnter a string : "); gets(a);
printf("\nEnter a string again : "); gets(b);
printf("The longer
is :\n\"%s\"\n",fun(a,b));}
6. .给定程序MOID1.C中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。
typedef struct aa
{ int data; struct aa *next;
} NODE;
NODE *Creatlink(int n, int m)
{ NODE *h=NULL, *p, *s;
int i;
/**********found***********/
p=(NODE )malloc(sizeof(NODE)); //(NODE *)h=p;
p->next=NULL;
for(i=1; i<=n; i++)
{ s=(NODE *)malloc(sizeof(NODE));
s->data=rand()%m; s->next=p->next;
p->next=s; p=p->next; }
/**********found***********/
return p; } //return h
outlink(NODE *h)
{ NODE *p; p=h->next;
printf("\n\nTHE LIST :\n\n HEAD ");
while(p)
{ printf("->%d ",p->data);