| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7134 人关注过本帖
标题:将任意个数按大小顺序输出
只看楼主 加入收藏
c语言求助
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-9-24
结帖率:66.67%
收藏
已结贴  问题点数:6 回复次数:5 
将任意个数按大小顺序输出
程序代码:
#include<stdio.h>
int main()
{//主函数开始
int a[20];
int i,t,m,j,n,p;
printf("please input the length of array(<=20):\n");
scanf("%d",&t);
printf("please input %d datas:\n",t);
scanf("%d",&a[0]);//单独输入a[0],作为用于比较的最基础的数。(为a[1]提供比较)
   
for(j=1;j<t;j++)
   {//A循环开始
   scanf("%d",&a[0]);

     for(i=0;i<j;i++)//注意:这里应为i<j,不是i<t!
     {//B循环开始
         if(a[j]>a[i])break;//逐个比较,找到新数据的正确位置a[i],跳出B循环
     }//B循环结束
    
     m=j;
      p=j+1;
     do
             {//C循环开始(a[i]及其之后的数据,包括a[j],每个数据都往后挪一位(a[x+1]=a[x]))
                 n=m+1;
                 a[n]=a[m];//从后面开始,把数据后挪
                 m=m-1;
             }while(m>=i);//C循环结束
    a[p]=a[i];//把新数据放入正确的位置a[i](由于往后挪一位,新数据由a[j]移至a[j+1]即a[p])
   
   }//A环结束

for(j=0;j<t;j++)
printf("%d\n",a[j]);//数据输入时已经排好大小放入对应的a[]中,按a[0]、a[1]、a[2]...顺序输出即可

return 0;
}//主函数结束

为什么运行的结果会乱码,输出的数都变成一些很奇怪、很大的数?求教!谢谢!
2016-10-05 20:18
cazhxi
Rank: 2
等 级:论坛游民
威 望:1
帖 子:18
专家分:96
注 册:2014-10-12
收藏
得分:1 
回复 楼主 c语言求助
首先不好意思啊,你的神逻辑我还真没看懂。我写了个冒泡排序,看看有没有你需要的地方

#include<stdio.h>
int main()
{//主函数开始
    int a[20] = {};
    int t=0,temp=0;

    //获取数组的长度
    printf("please input the length of array(<=20):\n");
    scanf("%d", &t);

    //获取用户输入
    printf("please input %d datas:\n", t);
    for (int i = 0;i < t;i++)
    {
        scanf("%d", &a[i]);
    }

    //冒泡排序
    for (int i = 0;i < t;i++)
    {
        for (int j = 0;j <t;j++)
        {
            if (a[j] < a[j+1])
            {
                temp=a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
    printf("\n输出排序后的结果\n");
    for (int i = 0;i < t;i++)
    {
        printf("%d\n", a[i]);
    }
    system("pause");
    return 0;
}//主函数结束
2016-10-07 09:12
Peter_zhao
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:12
专家分:9
注 册:2016-9-8
收藏
得分:1 
#include<stdio.h>
main()
{
    int i,j;
    int a[20];
    int t,temp=0;
    printf("please input the length of array(<=20):\n");
     scanf("%d",&t);
    printf("please input %d datas:\n",t);
    for (i=0;i<t;i++)
     scanf("%d",&a[i]);
      for(i=1;i<t;i++)
       for(j=0;j<t-i;j++)
            if(a[j]>a[j+1])
            {
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
    printf("输出排序后的结果\n");
    for(i=0;i<t;i++)
    printf("%d",a[i]);
}
已运行,能出结果。排序问题一般用书上的冒泡法和选择法,自己写很容易思维混乱(个人见解)
2016-10-07 16:12
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:4 

程序代码:
for(j=1;j<t;j++)
   {//A循环开始
   scanf("%d",&a[0]);   //题主看这里,,你这个a[0]放到了for循环的里面,读了t-1回,直接导致整个程序的流程乱掉了。你算算你读了多少个a[0],后面做排序的a[i]又是什么?

     for(i=0;i<j;i++)//注意:这里应为i<j,不是i<t!

你这个算法思路应该是每读入一个数字对数组从前往后执行遍历寻找到合适的位置,将其后的所有元素后移一位,将数字插入。这个插入的做法与冒泡排序蛮一致的不过人家冒泡排序是等所有数字都读完了才这么做。

φ(゜▽゜*)♪
2016-10-07 23:48
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
测试了3组数据,应该没漏洞了吧。
程序代码:
#include<stdio.h>
int main() {
    //主函数开始
    int a[20];
    int i,t,m,j,n,p;
    printf("please input the length of array(<=20):\n");
    scanf("%d",&t);
    printf("please input %d datas:\n",t);
    scanf("%d",&a[0]);//

    for(j=1; j<t; j++) {
        scanf("%d",&a[j]);
        for(i=0; i<j; i++)if(a[j]<a[i])break;//遇到第一个比a[j]大的元素就跳出

        if(i<j) { //当i!=j即新来的元素不能直接插在队尾的时候           
            for(m=j+1; m>i; m--)a[m]=a[m-1]; //从队尾开始吧所有元素后移一位。 新来的元素暂时放到a[j+1]
            a[i]=a[j+1];//然后把这个新来的元素移动到a[i].
        }

    }

    for(j=0; j<t; j++)
        printf("%d\n",a[j]);//

    return 0;
}//





φ(゜▽゜*)♪
2016-10-08 15:42
feiyue323
Rank: 2
等 级:论坛游民
威 望:1
帖 子:35
专家分:18
注 册:2016-9-16
收藏
得分:0 
一楼有错误  语法错误
对于数组的初始化
我写了一段用qsort来排序的方法
#include<stdio.h>
#include<stdlib.h>
//排序函数
//升序排列
int comp1(const void*a,const void*b)
{
    return *(int*)a-*(int*)b;
}
//降序排列
int comp2(const void*a,const void*b)
{
    return *(int*)b-*(int*)a;
}
//主函数
int main()
{
    //定义变量
    int a[20]={0};
    int t=0;
    int i=0;   
    //输入需要排序的函数
    //获取数组的长度
    printf("please input the length of array(<=20):\n");
    scanf("%d", &t);

    //获取用户输入
    printf("please input %d datas:\n", t);
    for(i=0;i<t;i++)
    {
        scanf("%d", &a[i]);
    }
    //排序
    printf("递增排序的结果:\n");
    qsort(a,t,sizeof(a[0]),comp1);
    //排序输出
    for(i=0;i<t;i++)
    {
        printf("%d",a[i]);
    }
}//降序的你自己弄
2016-10-08 21:04
快速回复:将任意个数按大小顺序输出
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047532 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved