一个已经排好序的数组,输入一个数,要求按照原来的规则排序。C语言。

#include<stdio.h>
int main()
{
int a[6] = {1,3,5,7,9};
int i, j, k,m;
for (i = 0; i < 5; i++)
printf("%d",a[i]);
printf("请输入一个数=\n");
scanf_s("%d\n",&m);
a[5] = m;
for (i = 0; i < 6; i++)
for (j = 0; j < 6 - i;j++)
if (a[i]>a[j])
{
k = a[j];
a[j] = a[i];
a[i] = k;
}
printf("此时的数组为:\n");
for (i = 0; i < 6; i++)
printf("%d",a[i]);
return 0;
}

大神们。。错哪了?

首先修改一下风格吧……

这样写scanf_s在G++是无法通过编译的,也许你的编译器不太一样吧,通过编译了。实际上对于你现在来说用scanf就足够了。

另外输入里的\n不建议写上,无论是跑工程还是跑题都容易出问题。

然后就是代码问题。

你输入20这个数据,逐步输出试试。解释是不容易解释的,但是这样的做法是错误的,体会一下。

一般来说排序用sort就行了。

头文件增加#include<algorithm>

添加using namespace std;(这个语句以后正式的程序其实并不推荐使用,不过现在用起来无伤大雅)

然后sort(a,a+6)可以替代升序排列。

正式程序如下:

#include<cstdio>
#include<algorithm>
using namespace std;
int a[10]={1,3,5,7,9};
int main(){
    printf("现在的数字顺序是:%d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4]);
    printf("请输入一个数字:");
    scanf("%d",&a[5]);
    sort(a,a+6);
    for(int n=0;n<5;++n)printf("%d ",a[n]);
    printf("%d\n",a[5]);
    return 0;
}

实测可以通过,有问题再问。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-16
把for (j = 0; j < 6-i;j++)改成for (j = i+1; j < 6;j++)。不过即是这样改了,也不完全合乎题意:若原来是降序的呢?按升序符合要求吗?本回答被网友采纳
相似回答