| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1924 人关注过本帖
标题:调用函数排序数字问题,形参用指针,求大神指点
只看楼主 加入收藏
pxf
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-4-13
结帖率:80%
收藏
已结贴  问题点数:15 回复次数:3 
调用函数排序数字问题,形参用指针,求大神指点
作业:
    从键盘上输入任意10个数,将其按从小到大顺序排列;再输入一个数,将该数插入到数列中,不改变数列的排序规律。 分析与设计: 用一维数组保存输入的数据,调用排序函数(函数参数用指针)进行排序;调用插入新数函数(函数参数用指针),找到该数在数列中的位置,把从该位置到最后的元素,依次后移一位,再将该数插入数列中。



#include <stdio.h>
int main()
{
    void sort_1(int * x,int m);
    void sort_2(int * x,int m);
    int i,k,t,n,a[11], * p ;
    p=a;
    printf("Please input 10 numbers:\n");
    for (i=0;i<10;i++)
        scanf("%d",p++);
    p=a;
    sort_1(p,10);
    printf("\n");
    printf("The sorted numbers :\n");
    for(i=0;i<10;i++)
    {
        printf("%4d",*p);
        p++;
    }
    printf("\n\n");
    printf("请再输入一个值: \n");
    scanf("%d",&n);
    p=a;
    sort_2(p,11);
    for(i=0;i<11;i++)
        printf("%4d",a[i]);
    printf("\n");
    return 0;
}

// 输入10个数的从小到大排列的函数
void sort_1(int * x,int m)
{
    int i,j,t;
    for(j=0;j<m-1;j++)
    {
        for(i=0;i<m-j-1;i++)
        if(*(x+i)>*(x+i+1))
            {
                t=*(x+i);
                *(x+i)=*(x+i+1);
                *(x+i+1)=t;
            }
    }

}

// 增加一个数后,11个数从小到大排列的函数
void sort_2(int * x,int m)
{
    int i,k,n;
    for(i=0;i<m-1;i++)
    {
        if(n<*(x+i))
        break;
    }
    for(k=m;i<k;k--)
    {
        *(x+k)=*(x+k-1);
    }
    *(x+i)=n;
}

为什么运行结果是这样的:

Please input 10 numbers:
87 23 54 6 5 89 12 10 23 8

The sorted numbers :
   5   6   8  10  12  23  23  54  87  89

请再输入一个值:
55
   5   6   8  10  12  23  23  54  87  894206653

Process returned 0 (0x0)   execution time : 41.086 s
Press any key to continue.

搜索更多相关主题的帖子: include numbers 键盘 元素 
2016-05-26 17:40
a892502843
Rank: 1
等 级:新手上路
帖 子:17
专家分:4
注 册:2016-5-24
收藏
得分:0 
你的第11个数字没有传到函数里啊,n直接是个随即数字
收到的鲜花
  • pxf2016-05-27 20:04 送鲜花  1朵   附言:我很赞同
2016-05-26 22:55
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:15 
void sort_1(int * x,int m)
{
    int i,j,t;
    for(i=0;i<m;i++)
    {
        for(j=i+1;j<m;j++)
            if(*(x+i)>*(x+j))
            {
                t=*(x+i);
                *(x+i)=*(x+j);
                *(x+j)=t;
            }
    }

}

void sort_2(int * x,int m, int n)
{
    int i,j;
    for(i=0;i<m;i++)
    {
        if(*(x+i)>n)
            break;
    }
    for(j=m;j>i;j--)
    {
        *(x+j)=*(x+j-1);
    }
    *(x+i)=n;
}
收到的鲜花
  • pxf2016-05-27 20:03 送鲜花  3朵   附言:我很赞同
2016-05-27 08:47
pxf
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-4-13
收藏
得分:0 
回复 3楼 吹水佬
谢谢大神
2016-05-27 20:03
快速回复:调用函数排序数字问题,形参用指针,求大神指点
数据加载中...
 
   



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

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