文档库 最新最全的文档下载
当前位置:文档库 › c语言上机题库改错题

c语言上机题库改错题

1-10题目
1
题目:
下列给定程序的功能是:读入一个整数k(2<=k<=10000),打印它的所有质因子(即所有为素数的因子)。例如,若输入整数2310,则应输出:2、3、5、7、11。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include "conio.h"
#include "stdio.h"
/********found********/
IsPrime ( int n ) ;
{
int i, m;
m=1;
/********found********/
for(i=2;iif !(n%i)
{
m=0;
break;
}
return(m);
}

main()
{
int j, k;
clrscr();
printf("\nplease enter an integer number between 2 and 10000:");
scanf("%d",&k);
printf("\n\nThe prime factor(s) of %d is(are):",k);
for(j=2;jif((!(k%j))&&(IsPrime(j)))
printf("%4d,",j);
printf("\n");
}
程序第一处改错处将IsPrime ( int n );修改为IsPrime ( int n )的原因是按照C语言的语法,在函数头不能以分号结尾。所以必须将IsPrime ( int n );中的分号去掉。
程序第二处改错处将if !(n%i)修改为if (!(n%i))的原因是按照C语言的语法,if语句中的条件表达式必须使用大括号括起来,例如if (条件表达式)。否则将出现语法错误。

2
题目:
下列给定程序中,函数fun的功能是:逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或等于的字符依次存放到c数组中,形成一个新的字符串。例如,若a中的字符串为aBCDeFgH,b中的字符串为:ABcd,则c中的字符串应为:aBcdeFgH。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
#include
void fun(char *p,char *q,char *c)
{
/********found********/
int k=1;
/********found********/
while(*p != *q)
{
if(*p<*q)
c[k]=*q;
else
c[k]=*p;
if(*p)
p++;
if(*q)
q++;
k++;
}
}
main()
{
char a[10]="aBCDeFgH",b[10]="ABcd",c[80]={'\0'};
fun(a,b,c);
printf("The string a:");
puts(a);
printf("The string b:");
puts(b);
printf("The result:");
puts(c);
}
程序第一处改错处将int k=1;修改为int k=0;的原因是k变量指示字符放入c字符串数组的下标位置,而数组下标从0开始,所以初始化为0。
程序第二处改错处将while(*p != *q)修改为while(*p || *q)
3
题目:
下列给定程序中,函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。
请改正modi.c程序中的错误,使程序能得出正确的结

果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
#include
void fun(char *s)
{
int i,j;
/********found********/
for(i=0,j=0;s[i]!='\0';i++)
if(s[i]>='0' && s[i]<='9')
s[j]=s[i];
/********found********/
s[j]="\0";
}
main()
{
char item[80];
clrscr();
printf("\nEnter a string :");
gets(item);
printf("\n\nThe string is : \%s\n",item);
fun(item);
printf("\n\nThe string of changing is : \%s\n",item);
}
第一处:s[j]=s[i];j++;
合并为
s[j++]=s[i];
第二处:
s[j]="\0";
应该修改成
s[j]= '\0';

4题目:
下列给定程序中,函数fun的功能是:分别统计字符串中大写字母和小写字母的个数。例如,给字符串s输入:AaaaBBb123CCccccd,则应输出结果:upper=5,lower=9。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
#include
/********found********/
void fun(char *s,int a,int b)
{
while(*s)
{
/********found********/
if (*s>='A'&&*s<='Z')
a++;
/********found********/
if(*s>='a'&&*s<='z')
b++;
s++;
}
}
main()
{
char s[100];
int upper=0, lower=0;
clrscr();
printf("\nPlease a string : ");
gets(s);
fun(s, &upper, &lower);
printf("\n upper=%d lower=%d\n", upper,lower);
}
第一处改错处应该将以下语句
void fun(char *s,int a,int b)
修改为
void fun(char *s,int *a,int *b)
第二处:
a++;应该修改为*a)++;
b++;修改成(*b)++;
5题目:
假定整数数列中的数不重复,并存放在数组中。下列给定程序中,函数fun的功能是:删除数列中值为x的元素,同时将其他元素前移。n中存放的是数列中元素的个数。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
#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;ia[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;iprintf("\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

printf("%5d",w[i]);
printf("\n\n");
}
}
此题唯一的改错误处for(i=p;ia[i+1]=a[i];
应该修改为
for(i=p;ia[i]=a[i+1];

6
题目:
下列给定程序中,函数fun的功能是:根据整型形参m的值,计算如下公式的值。
t = 1 - 1/(2*2) - 1/(3*3) - …… - 1/(m*m)
例如,若m中的值为5,则应输出:0.536389。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
#include
double fun(int m)
{
double y=1.0;
int i;
/********found********/
for(i=2;i/********found********/
y-=1/(i*i);
return(y);
}
main()
{
int n=5;
clrscr();
printf("\nThe result is %1f\n",fun(n));
}

程序第一处改错将for(i=2;i程序第二处改错将y-=1/(i*i);修改为y-=1.0/(i*i);
7题目:
下列给定程序中函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
#define N 20
void fun(int a[],int n)
{
int i,j,t,p;
for(j=0;j{
/********found********/
p=j
for(i=j;i{
if(a[i]{
/********found********/
p=i;
t=a[p];
a[p]=a[i];
a[i]=t;
}
}
}
}
main()
{
int a[N]={9,6,8,3,-1},i,m=5;
for(i=0;iprintf("%d ",a[i]);
printf("\n");
fun(a,m);
for(i=0;iprintf("%d ",a[i]);
printf("\n");
}
程序中第一处改错处p=j语句缺少了语句结束需要的分号。
程序中第二处改错处p=i;改为p=j;
8
题目:
下列给定程序中,函数fun的功能是:在字符串str中找出ASCII码值最大的字符,将其放在第一个位置上;并将该字符前的原字符向后顺序移动。例如,调用fun函数之前给字符串输入:ABCDeFGH,调用后字符串中的内容为eABCDFGH。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
/********found********/
fun(char *p)
{
char max,*q; int i=0;
max=p[i];
while(p[i]!=0)
{
if(max{
/********found********/
max=p[i];
p=q+i;
}
i++;
}
while(q>p)
{
*q=*(q-1);
q--;
}
p[0]=max;
}
main()

{
char str[80];
printf("Enter a string: ");
gets(str);
printf("\nThe original string: ");
puts(str);
fun(str);
printf("\nThe string after moving: ");
puts(str);
printf("\n\n");
}
程序中的第一个改错处将fun(char *p)修改为void fun(char *p)
第二处改错处将p=q+i;修改为q=p+i;
9
题目:
下列给定程序中,函数fun的功能是:从n个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如,若输入8名学生的成绩:
80.5 60 72 90.5 98 51.5 88 64
则低于平均分的学生人数为4(平均分为:75.5625)。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
#include
#define N 20
int fun(float *s,int n,float *aver)
{
float ave,t=0.0;
int count=0,k,i;
/********found********/
for(k=0;kt=s[k];
ave=t/n;
for(i=0;iif(s[i]count++;
/********found********/
*aver=&ave;
return count;
}
main()
{
float s[30],aver;
int m,i;
clrscr();
printf("\nPlease enter m: ");
scanf("%d", &m);
printf("\nPlease enter %d mark :\n ", m);
for(i=0;iscanf("%f",s+i);
printf("\nThe number of students : %d\n",fun(s,m,&aver));
printf("Ave=%f\n",aver);
}
程序中第一个改错处t=s[k];修改为t+=s[k];
程序中第二处改错处*aver=&ave;修改为*aver=ave;
10
题目:
下列给定程序中,函数fun的功能是:将s所指字符串中出现的t1所指子串全部替换成t2所指子字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。例如,当s所指字符串中的内容为abcdabfab,t1所指子串中的内容为ab,t2所指子串中的内容为99时,结果,在w所指的数组中内容应为99cd99f99。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
#include
#include
/********found********/
int fun(char *s,char *t1,char *t2,char *w)
{
int i;
char *p,*r,*a;
strcpy(w,s);
while(*w)
{
p=w; r=t1;
/********found********/
while(r)
if(*r==*p)
{
r++;p++;
}
else
break;
if(*r=='\0')
{
a=w;
r=t2;
while(*r)
{
*a=*r;
a++;
r++;
}
w+=strlen(t2);
}
else

w++;
}
}
main()
{
char s[100],t1[100],t2[100],w[100];
clrscr();
printf("\nPlease enter string s:");
scanf("%s",s);
printf("\nPlease enter substring t1:");
scanf("%s",t1);
printf("\nPlease enter substring t2:");
scanf("%s",t2);
if(strlen(t1)==strlen(t2))
{
fun(s,t1,t2,w);
printf("\nThe result is :%s\n",w);
}
else
printf("Error :strlen(t1)!=strlen(t2)\n");
}
程序中的第一处改错处int fun(char *s,char *t1,char *t2,char *w)修改为void fun(char *s,char *t1,char *t2,char *w)
程序中的第二处改错处while(r)修改为while(*r)
11-20题目
11
题目:
下列给定程序中,函数fun的功能是:将一个由八进制数字字符组成的字符串转换为与其面值相等的十进制整数。规定输入的字符串最多只能包含5位8进制数字。例如,若输入77777,则输出将是32767。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
int fun(char *p)
{
int n;
/********found********/
n=*p-'o';
p++;
/********found********/
while(*p!=0)
{
n=n*7+*p-'o';
p++;
}
return n;
}
main()
{
char s[6];
int i;
int n;
printf("Enter a string (0catal digits): ");
gets(s);
if(strlen(s)>5)
{
printf("Error:string too longer !\n\n");
exit(0);
}
for(i=0;s[i];i++)
if(s[i]<'0'||s[i]>'7')
{
printf("Error: %c not is ocatal digits!\n\n",s[i]);
exit(0);
}
printf("The original string: ");
puts(s);
n=fun(s);
printf("\n%s is convered to intege number: %d\n\n",s,n);
}
程序第一处改错处将n=*p-'o';修改为n=*p-'0';
程序第二处改错处将n=n*7+*p-'o';修改为n=n*8+*p-'0';
12
题目:
下列给定程序中函数fun的功能是:求出在字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。
例如,当字符串中的内容为abcdabfabcdx,t中的内容为ab时,输出结果应是:abcdx。当字符串中的内容为abcdabfabcdx,t中的内容为abd时,则程序输出未找到信息:not found!。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
#include
#include
char *fun(char *s,char *t)
{
char *p,*r,*a;
/********found********/
a=NuLL;
while(*s)
{
p=s;r=t;
while(*r)
/********found********/
if(r==p)
{
r++;
p++;
}
else
break;
if

(*r=='\0')
a=s;
s++;
}
return a;
}
main()
{
char s[100],t[100],*p;
clrscr();
printf("\nplease enter string s:");
scanf("%s",s);
printf("\nplease enter substring t:");
scanf("%s",t);
p=fun(s,t);
if(p)
printf("\nthe result is:%s\n",p);
else
printf("\nnot found!\n");
}
程序中第一处改错处将a=NuLL;修改为a=NULL;
程序中第二处改错处将if(r==p)修改为if(*r==*p)
13
题目:
下列程序中,fun函数的功能是:根据形参m,计算如下公式的值。
t=1+ 1/2 + 1/3 + 1/4 + … + 1/m
例如,若输入5,则应输出2.283333。
请改正modi.c程序中的错误或在横线处填上适当的内容并把横线删除,使它能计算出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
#include
double fun(int m)
{
double t=1.0;
int i;
/********found********/
for(i=2;i<=m;i++)
t+=1.0/k;
/********found********/
_________
}
main()
{
int m;
clrscr();
printf("\nplease enter 1 integer numbers:\n");
scanf("%d",&m);
printf("\n\nthe result is %lf\n",fun(m));
}
第一处改错处将t+=1.0/k; 修改为t+=1.0/i;
第二处改错处填写return t;
14
题目:
下列程序中,fun和funx函数的功能是:用二分法求方程2*x*x*x-4*x*x+3*x-6=0的一个根,并要求绝对误差不超过0.001。例如,若给m输入-100,给n输入90,则函数求得的一个根为2.000。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include "stdio.h"
#include "math.h"
double funx(double x)
{
return (2*x*x*x-4*x*x+3*x-6);
}
double fun(double m,double n)
{
/********found********/
int r;
r=(m+n)/2;
/********found********/
while(fabs(n-m)<0.001)
{
if(funx(r)*funx(n)<0)
m=r;
else
n=r;
r=(m+n)/2;
}
return r;
}
main()
{
double m,n,root;
printf("Enter m n : \n");
scanf("%lf%lf",&m,&n);
root=fun(m,n);
printf("root=%6.3f\n",root);
}
程序第一处改错处将int r;修改为double r;
程序第二处改错处将while(fabs(n-m)<0.001)修改为while(fabs(n-m)>0.001)
15

题目:
下列给定程序中,函数fun的功能是:判断字符ch是否与str所指串中的某个字符相同;若相同,则什么也不做,若不同,则将其插在串的最后。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
#include
#include
/********found********/
void fun(char str,char ch)
{
while ( *str && *str !=ch )
str++;
/*******

*found********/
if(*str==ch)
{
str[0] = ch;
/********found********/
str[1]='0';
}
}
main()
{
char s[81], c ;
clrscr();
printf( "\nPlease enter a string:\n" );
gets ( s );
printf ("\n Please enter the character to search : " );
c = getchar();
fun(s,c);
printf( "\nThe result is %s\n", s);
}
程序中第一个改错处void fun(char str,char ch)修改为void fun(char *str,char ch)
程序中的第二个改错处if(*str==ch)修改为if(*str=='\0')
程序中的第三个改错处将str[1]='0';修改为str[1]='\0';
16
题目:
下列给定程序中的函数Creatlink的功能是:创建带头结点的单项链表,并为各结点数据域赋0到m-1的值。
请改正modi.c程序中函数Creatlink的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
#include
#include
typedef struct aa
{
int data;
struct aa *next;
} NODE;
NODE *Creatlink(int n, int m)
{
NODE *h=NULL, *p, *s;
int i;
s=(NODE *)malloc(sizeof(NODE));
h=s;
/********found********/
p->next=NULL;
for(i=1;i{
s=(NODE *)malloc(sizeof(NODE));
/********found********/
s->data=rand()%m;
s->next=p->next;
p->next=s;
p=p->next;
}
s->next=NULL;
/********found********/
return p;
}
outlink(NODE *h)
{
NODE *p;;
p=h->next;
printf("\n\nTHE LIST :\n\n HEAD");
while(p)
{
printf("->%d ",p->data);
p=p->next;
}
printf("\n");
}
main()
{
NODE *head;
clrscr();
head=Creatlink(8,22);
outlink(head);
}
程序第一处改错处将p->next=NULL;修改为p=s;
程序第二处改错处将s->data=rand()%m;修改为s->data=rand()%(m-1);
程序第三处改错处将return p;修改为return h;
17
题目:
下列给定程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。
请改正modi.c程序中的错误或在横线处填上适当的内容并把横线删除,使程序能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
int fun(int k)
{
int m=0, mc=0, j;
while((k>=2)&&(mc<10))
{
/********found********/
if((k%13=0)||(k%17=0))
{
m=m+k;
mc++;
}
k--;
}
return m;
/********found********/
__________

main()
{
clrscr();
printf("%d\n", fun(500));
}
程序第一处改错

处将if((k%13=0)||(k%17=0))修改为if((k%13==0)||(k%17==0))
第二处是填空,检查整个fun函数,可以发现缺少一个}
18

题目:
下列给定程序中,函数fun的功能是:实现两个整数的交换。例如给a和b分别输入60和65,输出为:a=65 b=60。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
/********found********/
void fun(int a,int b)
{
int t;
/********found********/
t=b;
b=a;
a=t;
}

main()
{
int a,b;
clrscr();
printf("Enter a,b: ");
scanf("%d%d",&a,&b);
fun(&a,&b);
printf("a=%d b=%d\n",a,b);
}
第一处改错处void fun(int a,int b) 修改为void fun(int *a,int *b)
第二处改错处将t=b;修改为t=*b;
第三处改错处将b=a;修改为*b=*a;
19
题目:
下列给定程序中的函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。例如,当s中的数为7654321时,t中的数为642。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
/********found********/
void fun(long s,long t)
{
long s1=10;
s/=10;
*t=s%10;
/********found********/
while(s<0)
{
s=s/100;
*t=s%10*s1+*t;
s1=s1*10;
}
}

main()
{
long s,t;
clrscr();
printf("\nPlease enter s:");
scanf("%ld",&s);
fun(s,&t);
printf("The result is:%ld\n",t);
}
程序第一处改错处void fun(long s,long t) 修改为void fun(long s,long *t)
程序第二处改错处while(s<0)修改为while(s>0)
20
题目:
N个有序整数数列已放在一堆数组中,下列给定程序中,函数fun的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,则返回其下标值;反之,则返回-1。
折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(lowhigh,查找结束。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#define N 10
/********found********/
void fun(int a[],int m)
{
int low=0,high=N-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(m

high=mid-1;
/********found********/
else
if(m>=a[mid])
low=mid+1;
else
return(mid);
}
return (-1);
}

main()
{
int i,a[N]={-3,4,7,9,13,45,67,89,100,180},k,m;
printf("The data of array is:");
for(i=0;iprintf("%d ",a[i]);
printf("Enter m:");
scanf("%d",&m);
k=fun(a,m);
if(k>=0)
printf("m=%d,index=%d\n",m,k);
else
printf("Not be found!\n");
}
程序第一处改错处void fun(int a[],int m) 修改为int fun(int a[],int m)
程序第二处改错处if(m>=a[mid])修改为if(m>a[mid])
21-30题目
21
题目:
下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#include
typedef struct aa
{
int data;
struct aa *next;
} NODE;
/********found********/
fun(NODE *h)
{
int max=-1;
NODE *p;
p=h->next;
while(p)
{
if(p->data>max)
max=p->data;
/********found********/
p=h->next;
}
return max;
}
outresult(int s,FILE *pf)
{
fprintf(pf,"\nThe max in link : %d\n",s);
}
NODE *creatlink(int n,int m)
{
NODE *h, *p, *s, *q;
int i, x;
h=p=(NODE *)malloc(sizeof(NODE));
h->data=9999;
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;
}
p->next=NULL;
return h;
}
outlink(NODE *h,FILE *pf)
{
NODE *p;
p=h->next;
fprintf(pf,"\nTHE LIST:\n\n HEAD");
while(p)
{
fprintf(pf,"->%d ",p->data);
p=p->next;
}
fprintf(pf,"\n");
}

main()
{
NODE *head; int m;
clrscr();
head=creatlink(12,100);
outlink(head,stdout);
m=fun(head);
printf("\nTHE RESULT :\n");
outresult(m,stdout);
}
程序第一处改错处fun(NODE *h)修改为int fun(NODE *h)
程序第二处改错处p=h->next;修改为p=p->next;
22
题目:
下列给定程序中,函数fun的功能是:根据整型形参m,计算如下公式的值。
y=1 + 1/(2*2) + 1/(3*3) + 1/(4*4) + …… + 1/(m*m)
例如,若m中的值为5,则应输出:1.463611。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

#include
#include

double fun(int m)
{
double y=1.0;
int i;
/********found********/
for(i=2;i/********found********/
y+=1/(i*i);
return(y);
}

main()
{
int n=5;
clrscr();
printf("\nThe result is %1f\n",fun(n));
}
程序中第一处改错处for(i=2;i程序中的第二处改错处y+=1/(i*i);修改为y+=1.0/(i*i);
23
题目:
下列给定程序中,函数fun的功能是:按以下递归公式求函数值。
fun(n)= 10 (n=1)
fun(n)= fun(n-1)+2 (n>1)
例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
/********found********/

fun(n)
{
int c;
/********found********/
if(n=1)
c=10;
else
c=fun(n-1)+2;
return(c);
}

main()
{
int n;
printf("Enter n: ");
scanf("%d",&n);
printf("The result:%d\n\n",fun(n));
}
程序第一处改错处将fun(n)修改为int fun(int n)
程序第二处改错处将if(n=1)修改为if(n==1)
24
题目:
下列给定程序中,函数fun的功能是:从s所指字符串中,找出t所指子串的个数作为函数值返回。例如,当s所指字符串中的内容为abcdabfab,t所指字符串的内容为ab,则函数返回整数3。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#include

int fun(char *s,char *t)
{
int n;
char *p,*r;
n=0;
while(*s)
{
p=s;
r=t;
while(*r)
/********found********/
if(r==p)
{
r++;
p++;
}
else
break;
/********found********/
if(r=='\0')
n++;
s++;
}
return n;
}

main()
{
char s[100],t[100];
int m;
clrscr();
printf("\nPlease enter string s:");
scanf("%s",s);
printf("\nPlease enter substring t:");
scanf("%s",t);
m=fun(s,t);
printf("\nThe result is: m=%d\n",m);
}
程序第一处改错处if(r==p)修改为if(*r==*p)
程序第二处改错处if(r=='\0') 修改为if(*r=='\0')
25
题目:
下列给定程序中函数fun的功能是:计算n!。例如,给n输入5,则输出120.000000。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构


#include
#include

double fun(int n)
{
double result=1.0;
/********found********/
if n==0
return 1.0;
while(n>1&&n<170)
/********found********/
result =n--;
return result;
}

main()
{
int n;
printf("Input N:");
scanf("%d",&n);
printf("\n\n%d!=%1f\n\n",n,fun(n));
}
第一处改错处将if n==0修改为if (n==0)
第二处改错处将result =n--;修改为result *=n--;
26
题目:
下列给定程序中,函数fun的功能是:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线元素之和。
请修改函数fun中的错误或在横线处填上适当的内容并把横线删除,使程序能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include

int fun()
{
int a[3][3],sum;
int i,j;
/********found********/
_____;
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
/********found********/
scanf("%d,", a[i][j]);
}
for (i=0;i<3;i++)
sum=sum+a[i][i];
printf("sum=%d\n",sum);
}

main()
{
fun();
}
第一处填空处添加语句sum = 0;
第二个改错处scanf("%d,", a[i][j]);修改为scanf("%d,", &a[i][j]);
27
题目:
下列给定程序中,函数fun的功能是:根据以下公式求Pi值,并作为函数值返回。
Pi/2 = 1+ 1/3 + (1/3)*(2/5) + (1/3)*(2/5)*(3/7) + (1/3)*(2/5)*(3/7)*(4/9)+……
例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.140578。
请改正modi.c程序中的错误,使程序能得出正确的结果
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#include
double fun(double eps)
{
double s,t;
int n=1;
s=0.0;
/********found********/
t=0;
/********found********/
while(t>eps)
{
s+=t;
t=(t*n)/(2*n+1);
n++;
}
return(s*2);
}

main()
{
double x;
printf("\nPlease enter a precision: ");
scanf("%lf",&x);
printf("\neps=%lf, Pi=%lf\n\n",x,fun(x));
}
程序第一处改错处将t=0;修改为t=1.0;
程序第二处改错处将while(t>eps)修改为while(t>=eps)
28
题目:
下列给定程序中,函数fun的功能是:在字符串的最前端加入n个*号,形成新串。注意:字符串的长度最长允许为79。
请改正modi.c程序中的错误,使程序能得出正确的结果
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#include
/********found********/
void fun(char s[], int n)
{
char a[80], *p;
int i

;
/********found********/
s=p;
for(i=0;ia[i]='*';
do
{
a[i]=*p;
/********found********/
i++;
} while(*p);
/********found********/
a[i]=0;
strcpy(s,a);
}

main()
{
int n;
char s[80];
clrscr();
printf("\nEnter a string :");
gets(s);
printf("\nThe string \%s\n",s);
printf("\nEnter n(number of *): ");
scanf("%d",&n);
fun(s,n);
printf("\nThe string after inster: \%s\n",s);
}

程序第一处改错处将void fun(char s[], int n)修改为void fun(char *s, int n)
程序第二处改错处将s=p;修改为p=s;
程序第三处改错处将i++;修改为i++; p++;
29
题目:
下列给定程序中,函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。例如,若给num1和num2分别输入49和21,则输出的最大公约数为7;若给num1和num2分别输入27和81,则输出的最大公约数为27。
请改正modi.c程序中的错误,使程序能得出正确的结果
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
int fun(int a,int b)
{
int r,t;
/********found********/
if(a{
t=a;
b=a;
b=t;
}
r=a%b;
while(r!=0)
{
a=b;
b=r;
r=a%b;
}
/********found********/
return(a);
}

main()
{
int num1,num2,a;
printf("Input num1 num2 : ");
scanf("%d%d",&num1,&num2);
printf("num1=%d num2=%d\n\n",num1,num2);
a=fun(num1,num2);
printf("The maximun common divisor is %d\n\n",a);
}
程序第一处改错处将b=a;修改为a=b;
程序第二处改错处将return(a);修改为return(b);
30
题目:
下列给定程序中函数fun的功能是:计算正整数num的各位上的数字之积。例如,若输入252,则输出应该是20。若输入202,则输出应该是0。
请改正modi.c程序中的错误,使程序能得出正确的结果
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
long fun(long num)
{
/********found********/
long k;
do
{
k*=num%10;
/********found********/
num\=10;
} while(num);
return(k);
}

main()
{
long n;
clrscr();
printf("\please enter a number:");
scanf("%ld",&n);
printf("\n%ld\n",fun(n));
}
程序中的第一处改错处将long k;修改为long k=1;
程序中的第二处改错处将num\=10;修改为num/=10;
31-40题目
31
题目:
下列给定程序中函数fun的功能是:将字符串tt中的小写字母都改成对应的大写字母,其他字符不变。例如,若输入"Ab,cD",

则输出"AB,CD"。
请改正modi.c程序中的错误,使程序能得出正确的结果
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#include
char *fun(char tt[])
{
int i;
/********found********/
for(i=0;tt[i];i++)
if(('a'<=tt[i])||(tt[i]<='z'))
/********found********/
tt[i]+=32;
return(tt);
}

main()
{
int i;
char tt[81];
clrscr();
printf("\nPlease enter a string:");
gets(tt);
printf("\nThe result string is :%s\n",fun(tt));
}
程序第一个改错处
if(('a'<=tt[i])||(tt[i]<='z'))
修改为
if((tt[i] >= 'a')&&(tt[i]<='z'))
程序第二个改错处t[i]+=32;修改为tt[i]-=32;
32
题目:
下列给定程序中,函数fun的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。
请改正modi.c程序中的错误,使程序能得出正确的结果
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#define SIZE 20

int fun(double *s,double *w)
{
int k,i;
double sum;
for(k=2,i=0;i{
s[i]=k;
k+=2;
}
sum=0.0;
for(k=0,i=0;i{
sum+=s[i];
/********found********/
if(i+1%5==0)
{
w[k]=sum/5;
sum=0;
k++;
}
}
return k;
}

main()
{
double a[SIZE],b[SIZE/5];
int i,k;
k=fun(a,b);
printf("The original data:\n");
for(i=0;i{
if(i%5==0)
printf("\n");
printf("%4.0f",a[i]);
}
printf("\n\nThe result :\n");
for(i=0;iprintf("%6.2f ",b[i]);
printf("\n\n");
}
程序唯一一处改错处将if(i+1%5==0)修改为if((i+1)%5==0)
33
题目:
下列给定程序中,函数fun的功能是:将s所指字符串中的字母转换为按字母序列的后继字母(但Z转换A,z转换为a),其他字符不变。
请改正modi.c程序中的错误,使程序能得出正确的结果
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#include
void fun(char *s)
{
/********found********/
while(*s!='@')
{
if(*s>='A'&&*s<='Z' || *s>='a'&&*s<='z')
{
if(*s=='Z')
*s='A';
else
if(*s=='z')

*s='a';
else
*s+=1;
}
/********found********/
(*s)++;
}
}

main()
{
char s[80];
clrscr();
printf("\n Enter a string with length<80. :\n\n ");
gets(s);
printf("\n The string: \n\n ");
puts(s);
fun(s);
printf("\n\n The Cords:\n\n ");
puts(s);
}
第一处改错处将while(*s!='@')修改为while(*s)或者while(*s!='\0')
第二处改错处将(*s)++;修改为s++;
34
题目:
下列给定程序中函数fun的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为87653142时,t中的数为7531。
请改正modi.c程序中的错误,使程序能得出正确的结果
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
void fun(long s,long *t)
{
int d;
long s1=1;
/********found********/
t = 0;
while ( s>0)
{
d = s%10;
/********found********/
if(d%2==0)
{
*t = d * s1 + *t;
s1*=10;
}
s/=10;
}
}

main()
{
long s, t;
clrscr();
printf("\nPlease enter s: ");
scanf("%ld", &s);
fun(s, &t);
printf("The result is: %ld\n", t);
}
程序第一处改错处将t = 0;修改为*t= 0;
程序第二处改错处将if(d%2==0)修改为if(d%2!=0)
35
题目:
下列给定程序中,函数fun的功能是:将p所指字符串中每个单词的最后一个字母改成大写(这里的"单词"是指由空格隔开的字符串)。例如,若输入:
I am a student to take the examination.
则应输出:I aM A student tO takE thE examination.
请改正modi.c程序中的错误,使程序能得出正确的结果
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#include
void fun ( char *p )
{
int k = 0;
for( ; *p; p++ )
/********found********/
if( k )
{
if(p==' ')
{
k = 0;
/********found********/
* p = toupper ( * (p-1) );
}
}
else
k = 1;
}

main()
{
char chrstr[64];
int d;
clrscr();
printf("\nPlease enter an english sentence within 63 letters: ");
gets(chrstr);
d=strlen(chrstr) ;
printf("\n\nBefor changing: %s", chrstr);
fun(chrstr);
printf("\nAfter changing: %s\n", chrstr);
}
程序第一处改错处将if(p==' ')修改为if(*p==' ')
程序第二处改错处将*p=toupper(*(p-1));修改为*(p-1) = toupper(* (p-1));

36
题目:
下列给定程序中,函数fun的功能

是:求三个数的最小公倍数。例如,给变量x1、x2、x3分别输入15 11 2,则输出结果应当是330。
请改正modi.c程序中的错误,使程序能得出正确的结果
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
int fun(int x,int y,int z)
{
int j,t,n,m;
/********found********/
j=1;
t=m=n=1;
/********found********/
while(t!=0&&m!=0&&n!=0)
{
j = j+1;
t=j%x;
m=j%y;
n=j%z;
}
return j;
}

main()
{
int x1,x2,x3,j ;
printf("Input x1 x2 x3: ");
scanf("%d%d%d",&x1,&x2,&x3);
printf("x1=%d, x2=%d, x3=%d \n",x1,x2,x3);
j=fun(x1,x2,x3);
printf("The minimal common multiple is : %d\n",j);
}
程序第一处改错处将j=1;修改为j=0;
程序第二处改错处将while(t!=0&&m!=0&&n!=0)修改为while(t!=0||m!=0||n!=0)
37
题目:
下列给定程序中,函数fun的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。
请改正modi.c程序中函数fun的错误之处或者在横线处填上适当的内容并把横线删除,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#include
#define N 80
int fun(char *s, char *t)
{
int n;
char *p, *r;
n=0;
/********found********/
p=&s[0];
*r=t;
while(*p)
{
if(*r==*p)
{
r++;
if(*r=='\0')
{
n++;
/********found********/
________
}
}
p++;
}
return n;
}

main()
{
char a[N],b[N];
int m;
clrscr();
printf("\nPlease enter string a :");
gets(a);
printf("\nPlease enter substring b :");
gets(b);
m=fun(a,b);
printf("\nThe result is:m=%d\n",m);
}
程序中的改错处将*r=t;修改为r=t;
程序中的填空处填写r=t;
38
题目:
下列给定程序中,函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量a中的值原为8,b中的值原为3,程序运行后a中的值为3,b中的值为8。
请改正modi.c程序中的错误之处或者在横线处填上适当的内容并把横线删除,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include

int fun(int *x,int y)
{
int t;
/********found********/
t = x ;
x = y ;
/********found********/
return(y) ;
}

main()
{
int a = 3, b = 8 ;
clrscr() ;
printf("%d %d\n", a, b) ;
b = fun(&a,

b) ;
printf("%d %d\n", a, b) ;
}
程序第一处改错处将t = x;修改为t = *x;
程序第二处改错处将x = y;修改为*x = y;
程序第三处改错处将return(y);修改为return(t);
39
题目:
下列给定程序中,函数fun的功能是:将s所指字符串的正序和反序进行连接,形成一个新串放在t所指的数组中。例如,当s所指字符串为ABCD时,则t所指字符串中的内容应该为ABCDDCBA。
请改正modi.c程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#include

/********found********/
void fun(char s, char t)
{
int i, d;
d = strlen(s);
for (i = 0; it[i] = s[i];
for (i = 0; it[d+i] = s[d-1-i];
/********found********/
t[2*d-1] = '\0';
}

main()
{
char s[100], t[100];
clrscr() ;
printf("\nPlease enter string S:");
scanf("%s", s);
fun(s,t);
printf("\nThe result is : %s\n", t);
}
程序第一处改错处将void fun(char s, char t)修改为void fun(char *s, char *t)
程序第二处改错处将t[2*d-1] = '\0';修改为t[d+i] = '\0';
40
题目:
下列给定程序中,函数fun的功能是:将n个无序整数从小到大排序。
请改正modi.c程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#include

fun ( int n, int *a )
{
int i, j, p, t;
for ( j = 0; j{
p=j;
/********found********/
for ( i=j+1; iif ( a[p]>a[i] )
/********found********/
t=i;
if ( p!=j )
{
t = a[j];
a[j] = a[p];
a[p] = t;
}
}
}

putarr( int n, int *z )
{
int i;
for ( i = 1; i <= n; i++, z++ )
{
printf("%4d", *z );
if ( !(i%10 ) )
printf( "\n" );
}
printf("\n");
}

main()
{
int aa[20]={9,3,0,4,1,2,5,6,8,10,7}, n=11;
clrscr() ;
printf("\n\nBefore sorting %d numbers:\n", n );
putarr( n, aa );
fun( n, aa );
printf( "\nAfter sorting %d numbers:\n", n );
putarr( n, aa );
}
程序第一处改错处将for ( i=j+1; i程序第二处改错处将t=i;修改为p=i;
41-50题目
41
题目:
下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。
请改正modi.c程序中的错误,使

它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#include

typedef struct aa
{
int data;
struct aa *next;
} NODE;

int fun(NODE *h)
{
int sum=0;
NODE *p;
p=h->next;
/********found********/
while(p->next)
{
if(p->data%2==0)
sum+=p->data;
/********found********/
p=h->next;
}
return sum;
}

NODE *creatlink(int n)
{
NODE *h, *p, *s, *q;
int i, x;
h=p=(NODE *)malloc(sizeof(NODE));
for(i=0;i{
s=(NODE *)malloc(sizeof(NODE));
s->data=rand()%16;
s->next=p->next;
p->next=s;
p=p->next;
}
p->next=NULL;
return h;
}
outlink(NODE *h)
{
NODE *p;;
p=h->next;
printf("\n\nTHE LIST :\n\n HEAD");
while(p)
{
printf("->%d ",p->data);
p=p->next;
}
printf("\n");
}
main()
{
NODE *head; int sum;
clrscr();
head=creatlink(10);
outlink(head);
sum=fun(head);
printf("\nSUM=%d\n",sum);
}
程序第一处改错处将while(p->next)修改为while(p)或者while(p!=NULL)
程序第二处改错处将p=h->next;修改为p=p->next;
42
题目:
下列给定程序中,函数fun的功能是:将字符串s中位于奇数位置的字符或ASCII码为偶数的字符依次放入字符串t中。例如,字符串中的数据为AABBCCDDEEFF,则输出应当是ABBCDDEFF。
请改正modi.c程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#include
#define N 80

void fun(char *s, char t[])
{
int i, j=0;
/********found********/
for(i=0; iif(i%2 && s[i]%2==0)
t[j++]=s[i];
/********found********/
t[i]='\0';
}

main()
{
char s[N], t[N];
clrscr();
printf("\nPlease enther string s:");
gets(s);
fun(s, t);
printf("\nThe result is : %s\n",t);
}
程序第一处改错处将if(i%2 && s[i]%2==0)修改为if(i%2|| s[i]%2==0)
程序第二处改错处将t[i]='\0';修改为t[j]='\0';
43
题目:
下列给定程序中,函数fun的功能是:找出100至n(不大于1000)之间三个位上的数字都相等的所有整数,把这些整数放在s所指数组中,个数作为函数值返回。
请改正modi.c程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#define N 100
int fun(int *s,int n)
{
int i,j,k,a,b,c;
j=0;
for(i=100; i{
/********fo

und********/
k=n;
a=k%10;
k/=10;
/********found********/
b=k/10;
c=k/10;
if(a==b && a==c) s[j++]=i;
}
return j;
}

main()
{
int a[N], n, num=0, i;
do
{
printf("\nEnter n(<=1000): ");
scanf("%d",&n);
}
while(n >1000);
num=fun(a,n);
printf("\n\nThe result :\n");
for(i=0; iprintf("%5d",a[i]);
printf("\n\n");
}
程序第一处改错处将k=n;修改为k=i;
程序第二处改错处将b=k/10;修改为b=k%10;
44
题目:
下列给定程序中,函数fun的功能是:根据形参m的值(2<=m<=9),在m行m列的二维数组中存放如下所示的数据,由main函数输出。
例如,若输入2,则输出
1 2
2 4
若输入4,则输出:
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
请改正modi.c程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#define M 10
int a[M][M] = {0} ;

/********found********/
fun(int **a, int m)
{
int j,k ;
for ( j = 0 ; j < m ; j++ )
for (k = 0 ; k < m ; k++ )
/********found********/
a[j][k] = k*j ;
}

main()
{
int i, j, n ;
clrscr( ) ;
printf ( " Enter n:" ) ;
scanf ("%d", &n );
fun ( a, n );
for ( i = 0 ; i < n ; i++)
{
for (j = 0 ; j < n ; j++)
printf ( "%4d", a[i][j] );
printf ( "\n" ) ;
}
printf("\n");
}
程序中第一处改错处将fun(int **a, int m)修改为void fun(int (*a)[M],int m)
程序中第二处改错处将a[j][k] = k*j;修改为a[j][k] = (k+1)*(j+1);
45
题目:
下列给定程序中,函数fun的功能是:将s所指字符串中最后一次出现的t1所指子串替换成t2所指子串,所形成的新串放在w所指的数据中。在此处,要求t1和t2所指字符串的长度相同。例如,当s所指字符串中的内容为abcdabfabc,t1所指子串中的内容为ab,t2所指子串中的内容为99时,结果,在w所指的数组中的内容为abcdabf99c。
请改正modi.c程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#include

/********found********/
int fun(char *s, char *t1, char *t2, char *w)
{
int i;
char *p, *r, *a;
strcpy( w, s );
/********found********/
while ( w )
{
p = w;
r = t1;
while ( *r )
if ( *r == *p )
{
r++;
p++;
}
else
break;
if ( *r == '\0' )

a=w;
w++;
}
r = t2;
while ( *r )
{
*a = *r;
a++;
r++;
}
}

main()
{
char s[100], t1[100], t2[100], w[100];
clrscr( ) ;
printf("\nPlease enter string S:");
scanf("%s", s);
printf("\nPlease enter substring t1:");
scanf("%s", t1);
printf("\nPlease enter substring t2:");
scanf("%s", t2);
if ( strlen(t1)==strlen(t2) )
{
fun( s, t1, t2, w);
printf("\nThe result is : %s\n", w);
}
else
printf("\nError : strlen(t1) != strlen(t2)\n");
}
程序第一处改错处将int fun(char *s, char *t1, char *t2, char *w) 修改为void fun(char *s,char *t1,char *t2,char *w)
程序第二处改错处将while(w)修改为 while(*w)
46
题目:
已知一个数列从第0项开始的前三项分别为0、0、1,以后的各项都是其相邻的前三项之和。下列给定程序中,函数fun的功能是:计算并输出该数列前n项的平方根之和sum。n的值通过形参传入。例如,当n=10时,程序输出结果应为23.197745。
请改正modi.c程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#include

/********found********/
fun(int n)
{
double sum, s0, s1, s2, s;
int k;
sum=1.0;
if (n <= 2)
sum = 0.0;
s0 = 0.0;
s1 = 0.0;
s2 = 1.0;
for (k = 4; k <= n; k++)
{
s = s0 + s1 + s2;
sum += sqrt(s);
s0 = s1;
s1 = s2;
s2 = s;
}
/********found********/
return sum
}

main()
{
int n;
clrscr( ) ;
printf("Input N=");
scanf("%d",&n);
printf("%f\n",fun(n));
}
程序第一处改错处将fun(int n)修改为double fun(int n)
程序第二处改错处将return sum修改为return sum;
47
题目:
下列给定程序中,函数fun的功能是:求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和a[1]中的数对调。
请改正modi.c程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#define N 20

/********found********/
int fun ( int *a, int n )
{
int i, m, t, k ;
for(i=0;i<2;i++)
{
/********found********/
m=0;
for(k=i;kif(a[k]>a[m])
m=k;
t=a[i];
a[i]=a[m];
a[m]=t;
}
}

main()
{
int x, b[N]={11,5,12,0,3,6,9,7,10,8}, n=10, i;
clrscr( ) ;
for ( i=0; iprintf("%d ", b[i]);
printf("\n");
fun ( b, n );
for ( i=0; i

printf("%d ", b[i]);
printf("\n");
}
程序第一处改错处将int fun ( int *a, int n )修改为void fun ( int *a, int n )
程序第二处改错处将m=0;修改为m=i;
48
题目:
下列给定程序中,函数fun的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。各字符串在主函数中输入,并放入一个字符串数组中。
请改正modi.c程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#define N 5
#define M 81

/********found********/
fun(char (*sq)[N])
{
int i;
char *sp;
sp=sq[0];
for(i=0;iif(strlen(sp)sp=sq[i] ;
/********found********/
return sq;
}

main()
{
char str[N][M],*longest;
int i;
printf("Enter %d lines:\n",N);
for(i=0; igets(str[i]);
printf("\nThe N string :\n",N);
for(i=0; iputs(str[i]);
longest=fun(str);
printf("\nThe longest string :\n");
puts(longest);
}
程序第一处改错处将fun(char (*sq)[N])修改为char * fun(char (*sq)[M]
程序第二处改错处将return sq;修改为return sp;
49
题目:
下列给定程序中,函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m<=10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。
请改正modi.c程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#include
#include
#define N 10

typedef struct ss
{
char num[10];
int s;
} STU;

STU *fun(STU a[], int m)
{
STU b[N], *t;
int i,j,k;
/********found********/
*t=malloc(sizeof(STU));
for(i=0; ib[i]=a[i];
for(k=0; k{
for(i=j=0; iif(b[i].s > b[j].s)
j=i;
/********found********/
t[k].num=b[j].num;
t[k].s=b[j].s;
b[j].s=0;
}
return t;
}

outresult(STU a[], FILE *pf)
{
int i;
for(i=0; ifprintf(pf,"No=%s Mark=%d\n",a[i].num,a[i].s);
fprintf(pf,"\n\n");;
}

main()
{
STU a[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},
{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}};
STU *pOrder;
int i, m;
clrscr();
printf("***** The Original data *****\n");
outresult(a, stdout);
printf("\nGive the number of the students who have better score: ");
scanf("%d",&m);

相关文档