| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3231 人关注过本帖
标题:输入十个数给数组,然后排序,再输入一个数查找数组中是否有该数,可是输入 ...
只看楼主 加入收藏
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
结帖率:90.63%
收藏
已结贴  问题点数:20 回复次数:13 
输入十个数给数组,然后排序,再输入一个数查找数组中是否有该数,可是输入 9 8 7 6 5 4 3 2 1 0可以,10 11 12 13 14 15 16 1
#include<stdio.h>
#include<stdbool.h>

#define SIZE 10
int j,k,i,m;
int number[SIZE];

void input(int n);
void sort(int n);
void find(int n);
void output(int n);

int main()
{
    printf("input ten number:\n");
    input(SIZE);
    sort(SIZE);
    printf("请输入你需要找的数:\n");
    find(SIZE);
    output(SIZE);

    return 0;

}

void input(int n)
{
    for(i=0;i < SIZE;i++)
    {
        scanf("%d",&number[i]);

    }

}

void sort(int n)
{
    m = SIZE;

    for(j=1;j<SIZE;j++)
    {
        m -= m;
        for(i = 0;i < SIZE;i++)
        {
            if(number[i]>number[i+1])
            {
            k = number[i];
            number[i] = number[i+1];
            number[i+1] = k;
            }

        }
    }
}

void find(int n)
{
    int x;
    bool inumber;

    scanf("%d",&x);
    for(i=0,inumber = true;i < SIZE;i++)
    {
        if(x == number[i])
        {
            printf("该数在第数组中的第%d位\n",i+1);
            inumber = false;
        }
    }
     if(inumber)
        printf("不存在该数\n");
}

void output(int n)
{
    for(i=0;i < SIZE;i++)
    {
         printf("%5d",number[i]);
    }
    printf("\n");
}

搜索更多相关主题的帖子: number include return 
2016-04-28 17:05
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
收藏
得分:0 
输入后面19 18 17 16 15 14 13 12 11 10那些就不可以了,输入11位数也不行,请问怎么改?
2016-04-28 17:07
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:5 
程序代码:
void sort(int n)
{
    m = SIZE;

    for (j = 0; j<SIZE-1; j++)
    {
        m -= m;
        for (i = 0; i < SIZE-1; i++)//这里会导致下面的数组越界
        {
            if (number[i]>number[i + 1])
            {
                k = number[i];
                number[i] = number[i + 1];
                number[i + 1] = k;
            }

        }
    }
}
2016-04-28 17:31
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:3 
m没用,难道你没用发现最后输出的数组和你输入的数组有差异吗。。
  for(j=0;j<SIZE;j++)
    {
        m -= m;
        for(i = j+1;i < SIZE;i++)
        {
            if(number[i]>number[j])
            {
            k = number[i];
            number[i] = number[j];
            number[j] = k;
            }
        }
    }
2016-04-28 17:37
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:12 
#include<stdio.h>
#include<stdbool.h>

#define SIZE 10
int j,k,i,m;
int number[SIZE];

void input(int n);
void sort(int n);
void find(int n);
void output(int n);

int main()
{
    printf("input ten number:\n");
    input(SIZE);
    sort(SIZE);
    printf("请输入你需要找的数:\n");
    find(SIZE);
    output(SIZE);

    return 0;

}

void input(int n)
{
    for(i=0;i < SIZE;i++)
    {
        scanf("%d",&number[i]);

    }

}

void sort(int n)//-->你的函数传递进来的n,貌似也没用嘛////
{
    m = SIZE;

    for(j=1;j<SIZE;j++)
    {
        m -= m;//-->这个m-=m以后不就等0,然后还是等0,不晓得有什么作用。我猜本意是要用在for循环里面作为一个不断缩小的变量。
        for(i = 0;i < SIZE;i++)
        {
            if(number[i]>number[i+1])//外层的j和内层貌似也完全没有关联,我就没看明白这里是怎么实现排序的。
            {
            k = number[i];
            number[i] = number[i+1];
            number[i+1] = k;
            }

        }
    }
}

void find(int n)
{
    int x;
    bool inumber;

    scanf("%d",&x);
    for(i=0,inumber = true;i < SIZE;i++)
    {
        if(x == number[i])
        {
            printf("该数在第数组中的第%d位\n",i+1);
            inumber = false;
        }
    }
     if(inumber)
        printf("不存在该数\n");
}

void output(int n)
{
    for(i=0;i < SIZE;i++)
    {
         printf("%5d",number[i]);
    }
    printf("\n");
}

--------------------------------------------------------
总的来说,这个程序我看得很不明白,用到了宏定义,全局变量,可是却怎么看都是没必要的。
#include<stdio.h>
#include<stdbool.h>

#define SIZE 10
int j,k,i,m;
int number[SIZE];

void input(int n);
void sort(int n);
void find(int n);
void output(int n);

int main()
{
   
    printf("input ten number:\n");
    input(SIZE);
    sort(SIZE);
    printf("请输入你需要找的数:\n");
    find(SIZE);
    output(SIZE);

    return 0;

}

void input(int n)
{
    for(i=0;i <n;i++)
    {
        scanf("%d",&number[i]);
    }

}
void sort(int n){
    m=n;
    for( i=0;i<n;i++){//这个排序方法比较原始,比选择排序还要差一点 ,我也不知道该叫什么
        for(j=i+1;j<n;j++){
            if(number[j]>number[i]){//呃,我这是从大到小排序,你也可以把符号改一下,从小到大
                int k=number[j];
                number[j]=number[i];
                number[i]=k;
               
            }
        }
    }
}
void find(int n)
{
    int x;
    bool inumber;

    scanf("%d",&x);
    for(i=0,inumber = true;i <n;i++)
    {
        if(x == number[i])
        {
            printf("该数在第数组中的第%d位\n",i+1);
            inumber = false;
        }
    }
     if(inumber)
        printf("不存在该数\n");
}

void output(int n)
{
    for(i=0;i <n;i++)
    {
         printf("%5d",number[i]);
    }
    printf("\n");
}
-------------------
反正你的程序就是错在那个排序的那一段了。哪里面的m,没有起到应有的作用。排序,你貌似也不是很懂原理。你的排序是只针对相邻两个元素进行比较。
另外如果你想让你的程序可以容纳的元素多于十个,可以把程序开头处的#define SIZE 10修改一下,比如十一个数字的话就是#define SIZE 11  依此类推。
如果你想让你的程序看起来更有好一点,那就可以把SIZE 做得尽可能大一点,再把int main()函数修改如下:

int mian(){
int n;
printf("请输入数据规模(<=%d)",SIZE):
scanf("%d",&n);
input(n);
sort(n);
 printf("请输入你需要找的数:\n");
    find(n);
    output(n);
    return 0;
}

φ(゜▽゜*)♪
2016-04-28 17:59
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
收藏
得分:0 
m那个地方是我看百度用冒泡法排序的
2016-04-28 18:04
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
收藏
得分:0 
回复 5楼 书生牛犊
如果数组不用宏定义,全局变量,那么我的数组在自定义函数能好像调用不到,请问大神怎么解决?
2016-04-28 18:20
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 6楼 _Strike
冒泡法,是指遍历数组找到最大的元素,把他记录下来,送到数组的最后一个位置上,然后待排序数组大小减一,继续遍历,,,
m大约是用来放那个最大的元素用的吧。。
--------------------------------


φ(゜▽゜*)♪
2016-04-28 18:26
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
收藏
得分:0 
回复 8楼 书生牛犊
麻烦你解决一下7楼的问题,我会给你加分的,谢谢了
2016-04-28 18:31
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 7楼 _Strike
不用全局变量的话,可以通过函数参数传递进去

比如:
#include<stdio.h>
#include<stdbool.h>

void fun(int [],int n);

int main()
{
   
    int a[10],n=6;
    for(int i=0;i<n;i++){
        a[i]=i;
    }
    fun(a,n);

    return 0;

}

void fun(int a[],int n){
    for(int i=0;i<n;i++){
        printf("%d  ",a[i]);
    }
}

φ(゜▽゜*)♪
2016-04-28 18:31
快速回复:输入十个数给数组,然后排序,再输入一个数查找数组中是否有该数,可是 ...
数据加载中...
 
   



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

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