C语言程序改错题
程序改错
-------------------------------------
1题目:在一个一维整型数组中找出其中最大的数及其下标。
程序中共有4条错误语句,请改正错误。 -----------------*/ #define N 10
/**********FOUND**********/ float fun(int *a,int *b,int n) {
int *c,max=*a; for(c=a+1;c<a+n;c++) if(*c>max) {
max=*c;
/**********FOUND**********/ b=c-a;} return max; } main() {
int a[N],i,max,p=0;
printf("please enter 10 integers:\n"); for(i=0;i<N;i++)
/**********FOUND**********/ scanf("%d",a[i]);
/**********FOUND**********/ m=fun(a,p,N);
printf("max=%d,position=%d",max,p); }
-------------------------------------『错误答案』: 1 int fun(int *a,int *b,int n) 2 *b=c-a;}
3 scanf("%d",&a[i]); 4 max=fun(a,&p,N);
/*----------------------------------- 2【程序改错】
题目:为一维数组输入10个整数;将其中最小的数与第一个数
对换,将最大的数与最后一个数对换;输出数组元素。
程序中共有4条错误语句,请改正错误。 -------------------------------------
1
main() {
int a[10]; void input(); void output(); void max_min(); input(a,10); max_min(a,10); output(a,10); }
void input(int *arr,int n) { int *p,i; p=arr;
printf("please enter 10 integers:\n"); for(i=0;i<n;i++)
/**********FOUND**********/ sca("%d",&p++);
}
void max_min(int *arr,int n) {
int *min,*max,*p,t; min=max=arr;
for(p=arr+1;p<arr+n;p++) if(*p>*max)
/**********FOUND**********/ *max=*p;
else if(*p<*min) min=p; t=*arr;*arr=*min;*min=t; /**********FOUND**********/
if(max=arr) max=min;
t=*(arr+n-1);*(arr+n-1)=*max;*max=t; }
void output(int *arr,int n) {
int *p,i; p=arr;
printf("The changed array is:\n"); /**********FOUND**********/ while(i=0;i<n;i++); printf("%3d",*p++); printf("\n"); }
-------------------------------------『错误
C语言程序改错题
答案』:
1 scanf("%d",p++); 2 max=p;
3 if(max==arr)
4 for(i=0;i<n;i++) 或 for(i=0;n>i;i++) 或 for(p=arr;p<arr+n;) ------------------------------------- 4题目:用起泡法对10个整数从小到大排序。 程序中共有4条错误语句,请改正错误。 ------------------------------------- 3题目:在一个已按升序排列的数组中插入一个数,插入后,数
组元素仍按升序排列。
程序中共有4条错误语句,请改正错误。 #define N 11 main()
{ int
------------------------------------- /**********FOUND**********/ void sort(int x,int n) {
int i,j,k,t;
for(i=0;i<n-1;i++)
/**********FOUND**********/ for(j=0;j<n-i;j++) /**********FOUND**********/ if(x[i]>x[i+1])
{ t=x[j];x[j]=x[j+1];x[j+1]=t;} }
main()
{
int i,n,a[100];
printf("please input the length of array:\n");
scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]);
sort(a,n);
printf("output the sorted array:\n"); for(i=0;i<=n-1;i++) printf("%5d",a[i]); printf("\n"); }
------------------------------------- 『错误答案』: 1 void sort(int x[],int n) 2 for(j=0;j<n-1-i;j++) for(j=0;n-1-i>j;j++) for(j=0;j<n-(1+i);j++) for(j=0;n-(1+i)>j;j++) 3
if(x[j]>x[j+1])
if(x[j+1]<x[j])
i,j,t,number,a[N]={1,2,4,6,8,9,12,15,149,156};
printf("please enter an integer to insert in the array:\n");
/**********FOUND**********/ scanf("%f",&number)
printf("The original array:\n"); for(i=0;i<N-1;i++) printf("%5d",a[i]); printf("\n");
/**********FOUND**********/ for(i=N-1;i>=0;i--) if(number<=a[i])
/**********FOUND**********/ a[i]=a[i-1]; the else
{a[i+1]=number;
/**********FOUND**********/ exit;}
if(number<a[0]) a[0]=number; printf("The result array:\n"); for(i=0;i<N;i++) printf("%5d",a[i]); printf("\n"); }
------------------------------------- 『错误答案』:
1 scanf("%d",&number); 或 2 for(i=N-2;i>=0;i--) 或
或 for(i=N-2;0<=i;i--) 或
3 a[i+1]=a[i]; 4 break;}
或
------------------------------------ 5【程序改错】
题目:将一个字符串中第m个字符开始的全部字符
2
C语言程序改错题
复制成为另一
个字符串。
程序中共有4条错误语句,请改正错误。 ------------------------------------- #include<stdio.h>
void strcopy(char *str1,char *str2,int m) /**********FOUND**********/ {char p1,p2;
int i,j;
/**********FOUND**********/ p1=str1+m; p2=str2;
/**********FOUND**********/ if(*p1);
*p2++=*p1++; *p2='\0'; } main() {
int i,m;
char *p1,*p2,str1[80],str2[80]; p1=str1; p2=str2; gets(p1);
scanf("%d",&m);
/**********FOUND**********/ strcat(str1[0],str2[0],m); puts(p1);puts(p2); }
-------------------------------------『错误答案』:
1 { char *p1,*p2; 或 { char *p2,*p1; 2 p1=str1+m-1; 或 p1=-1+str1+m; 3 while(*p1)
4 strcopy(str1,str2,m);
------------------------------------- 6【程序改错】
题目:以下程序的功能是求如下表达式: S = 1 + 1/(1+2)+1/(1+2+3)+ 1/(1+2+3+4)…
请改正程序中的错误,使程序能得到正确的运行结果。