标题:数组错误。
只看楼主
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
结帖率:88.89%
已结贴  问题点数:20 回复次数:29 
数组错误。
#萌新求助# 对数组A中的N(0<N<100)个互不相同的整数从小到大进行连续编号,要求不能改变数组A中元素的顺序。如A=(78,42,-34,94,25)则输出为(4,3,1,5,2)。个数N和数组中元素要求从键盘输入。  为什么输出会有奇怪的运行错误啊,看不懂,,,。
错误原因可能是:
非法的内存引用, 具体原因可能是:
1.数组越界使用;
2.指针的错误使用, 一般是对非用户区的地址空间进行读或者写操作;
3.越权操作文件指针, 程序中却未捕捉该类错误;
4.栈溢出, 一般是因为过多的递归调用或者过大的临时变量导致;5.程序使用的内存超过了题目设定的上限。

#include <stdio.h>
#include <stdlib.h>

int shengxu(int *a,int n)
{
    int x,i,j;
    for(i=1;i<n;i++)
    {
        x = a[i];
        for(j=i;j>0;j--)
        {
            if(x<a[j-1])
            {
               a[j] = a[j-1];
            }else{
                break;
            }
        }
        a[j] = x;
    }
    return a;
}

int main()
{
    int *a;
    int A[100],s[100];
    int N,num,i,j,k;
    scanf("%d",&N);
    for(i=0;i<N;i++)
    {
        scanf("%d",&num);
        char c = getchar();
        A[i] = num;
        if(c=='\n')
            break;
    }
    for(i=0;i<N;i++)
        s[i] = A[i];
    a = shengxu(A,N);
    int count = N;
    for(j=0;j<N;j++)
    {
        for(k=0;k<N;k++)
        {
            if(s[j]==a[k])
            {
                count--;
                if(count==0)
                    printf("%d",k+1);
                else
                    printf("%d,",k+1);
            }
        }
    }
    return 0;
}
搜索更多相关主题的帖子: 错误 for int 数组 num 
2020-03-24 16:21
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:3 
编译失败,
int shengxu(int *a,int n) 应该是
int* shengxu(int *a,int n) 吧

还有,你输入什么后报运行错误?你不说别人怎么知道
收到的鲜花
  • 邹峰研2020-03-24 16:43 送鲜花  1朵   附言:感谢你的回答,对我有帮助!
2020-03-24 16:31
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
得分:0 
回复 2楼 rjsp
这个是上交的作业,系统给配的数据我也不知道,,,,我在自己的电脑上代入数据可以运行,所以感到很奇怪。我先把你的方法试试看。谢谢啦!

今天再晚也是早,明天再早也是晚
2020-03-24 16:33
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
得分:0 
回复 2楼 rjsp
可以了,谢谢你!

可以问下,为什么要加上‘*’吗?

今天再晚也是早,明天再早也是晚
2020-03-24 16:36
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:3 
下次我要从题目开始看,看会代码,感觉应该是个很复杂的题目,然后看了看题目。。。。
其实还有更简单的方法的,楼主想一想呀

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-24 16:55
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
得分:0 
回复 5楼 叶纤
好的,我再想想看

今天再晚也是早,明天再早也是晚
2020-03-24 17:01
maomao12345
Rank: 2
来 自:五位神奇空间
等 级:禁止访问
威 望:2
帖 子:127
专家分:64
注 册:2020-3-23
得分:3 
我觉得用排序就行了

一个快乐的小小孩
2020-03-24 17:47
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
程序代码:
//如果想动态赋值数组就需要知道数组长度,把排序之前的地方改了就行
#include <stdio.h>
int main()
{
    int b[]={78,42,-34,94,25};//一个数组,就叫它蓝色桶桶
int z=0;
     int length=sizeof(b)/sizeof(*b);//数组长度
     int a[100];
      for(int i=0;i<length;++i)
     {
         a[i]=b[i];}//另复制一个相同的空间,黄色桶和蓝色桶装的一样的东西


     for(int i=0;i<length;++i)//拆入算法//将黄色桶里的东西排序
        {for(int j=i-1;j>=0&a[j]>a[j+1];--j)
        { int tem=a[j];
        a[j]  = a[j+1];
        a[j+1] =tem;
        }
        }
            for(int n=0;n!=length;++n)//比较蓝色桶的东西在黄色桶的哪个地方
            {
                for( z=0;z!=length;++z)
                {  if(b[n]==a[z])
                   printf("%d  ",z+1);

                }
           }
}




把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-25 12:01
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
得分:3 
sort+cmp=无敌!!!

2020-03-25 13:07
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
回复 10楼 return_0
请问sort是专门的排序函数吗
cmp是什么意思

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-25 13:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-500550-1-1.html




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

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