c语言编程改错题
【程序功能】对N行N列二维数组的每一行排序,偶数行(0当作偶数)由小到大排序,奇数行由大到小排序。
【含有错误的源程序】
#include
#define N 4
void swap( int *p1, int *p2)
{ int p;
p=p1; p1=p2; p2=p;
}
void sort(int a[N][N])
{ int i, j, k;
for(i=0;i
for(j=0;j
for(k=j+1;k
if(i%2==0?a[i][j]a[i][k])
swap(a[i]+j, a[i]+k);
}
void main()
{ int a[N][N]={{3,4,2,1},{8,7,5,6},{12,10,11,9},{15,14,16,13}};
int i,j;
sort(a[N][N]);
for(i=0;i
{ for(j=0;j
printf("%3d",a[i][j]);
printf("\n");
}
}
【测试数据与运行结果】
输入数据:
4 2 1
7 5 6
12 10 11 9
16 14 16 13
输出结果:
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
【程序功能】判断一个英文句子是否是回文。回文原指一个正读和反读都完全一样的单词。例如level是一个回文。若忽略标点符号、空格及字母大小的差异,回文的概念可以扩展到一个英文句子。例如,Madam, I’m Adam就是一个回文句子。下列程序中,函数palin的功能是判断一个英文句子是否是回文,如果是返回1,否则返回0。
【含有错误的源程序】
#include
#include
#include
void palin(char *s)
{ int i, j, k, ok;
char *sp, ch;
k=strlen(s);
sp=(char *)malloc(k+1);
if(sp==NULL)
{ printf("error!\n");
exit(0);
}
k=0;
while(*s)
{ ch=*s;
if(!('A'<=ch && ch<='Z'))
sp[k++]=ch-'A'+'a';
else if('a'<=ch && ch<='z')
sp[k++]=ch;
s++;
}
sp[k]= '\0';
ok=1;
for(i=0, j=k-1;i>j; i++,j--)
if(sp[i]!=sp[j]) { ok=0; break;}
free(sp);
return ok;
}
void main()
{ char s[80]={ "Madam, I'm Adam. ","Not a palindrome. "};
int i,ok;
for(i=0; i<2; i++)
{ ok=palin(s[i]); printf(ok?"%s: Yes.\n":"%s: No.\n",s[i]); }
}
【测试数据与运行结果】测试数据:“Madam, I'm Adam.”,“Not a palindrome.”
运行结果: Madam, I’m Adam.:Yes.
Not a palindrome.:No.
【程序功能】重新排列一维数组元素的顺序,使得左边的所有元素均为偶数并按由大到小的次序存放,右边的所有元素均为奇数并按由小到大的次序存放。
【含有错误的源程序】
#include
#include
void sort(int a[], int start, int end, int flag)
{ int i, j, k, temp;
for(i=start; i
for(j=start; j
if(flag? a[j]a[j+1])
{ temp