这个显示Runtime Error:Segmentation fault;不知道是因为什么
以下是原题
题目描述
输入多个数,用冒泡排序,按从大到小的顺序输出。
特殊要求
无
输入
第一行输入个数n,范围在1-20之间
随后输入n个整数。
输出
第一行输出冒泡前的n个整数:先输出:"before:\t",然后是n个数,用\t间隔,注意最后没有\t
第二行输出冒泡后的n个整数:先输出:"after:\t",然后是n个数,用\t间隔,注意最后没有\t
如果输入的数据超界,输出:"input error"
样例输入
9
1 2 3 4 5 6 7 8 9
样例输出
before: 1 2 3 4 5 6 7 8 9
after: 9 8 7 6 5 4 3 2 1
14行输入需要加取地址符号&
scanf("%d",&n);
27行,for循环中是j++,不是i++
14行n前面少了&
scanf("%d",&n);
27行,for循环是 for(j=0; j<n-1; j++) ,不是j<i-1;i++
28行,for循环是中k=n-1; ,不是k=i-1;
36行,;也是 q<n 不是q<i
你题目的解答代码如下:(如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮)
#include<stdio.h>
void swap(int a[],int x, int y)
{
int t=a[x];
a[x]=a[y];
a[y]=t;
}
int main()
{
int s[30];
int n;
int i,p,q,j,k;
scanf("%d",&n);
if(n>=1 && n<=20) {
for(i=0;i<n;i++)
scanf("%d",&s[i]);
printf("before:");
for(p=0;p<n;p++)
printf("\t%d",s[p]);
printf("\n");
for (j=0; j<n-1; j++)
for (k=n-1; k>j; k--)
if(s[j]<s[k])
swap(s,j,k);
printf("after:");
for(q=0;q<n;q++)
printf("\t%d",s[q]);
}
else
printf("input error");
return 0;
}
27行,最后i++改为j++试试