标题:输出的第一个数为什么乱码?
只看楼主
邻家小孩
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2013-2-4
结帖率:50%
已结贴  问题点数:6 回复次数:5 
输出的第一个数为什么乱码?
各位大神,题目是这样的:
数据输入:
第一行为要输入的正整数个数m。
 第二行为要处理的m个正整数,中间用一个空格间隔;
 第三行为要删除的数据位置,可能为多次循环后之值

数据输出:
输出删除后的数据排列,中间用空格间隔

Sample Input

3
1 2 3
5
 
Sample Output

1 3
搜索更多相关主题的帖子: 间隔 正整数 
2013-02-08 00:07
邻家小孩
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2013-2-4
得分:0 
我的代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int *a,*b,m,n,x,i,k,z;
    scanf("%d",&m);
    b=(int*)malloc(m*sizeof(int));
    a=(int*)malloc(m*sizeof(int));
    for(i=0;i<m;i++)
    {
        scanf("%d ",&a[i]);
    }
    scanf("%d",&n);
    x=n%m;
   
    if(x!=0)
    {    for(int j=x-1;j<m-1;j++)
    {
        a[j]=a[j+1];
    }
    for( i=0;i<m-1;i++)
        for(k=0;k<m-i-1;k++)
            if(a[k]>a[k+1])
            {n=a[k];a[k]=a[k+1];a[k+1]=n;}
for(z=0;z<m-1;z++)
{
    printf("%d",a[z]);
    if(z<m-2)
    {
        printf(" ");
    }
}
    }
    else

    {
        for(i=0;i<m-1;i++)
        {    b[i]=a[i];}
        for(i=0;i<m-1;i++)
            for(k=0;k<m-i-1;k++)
                if(b[k]>b[k+1])
                {n=b[k];b[k]=b[k+1];b[k+1]=n;}
            for(z=0;z<m-1;z++)
    printf("%d ",b[z]);}
    printf("\n");
    free(a);
    free(b);
    return 0;
}当你输入的是 6
2 1 3 5 6 4
12
输出的第一个是-843872159之类的,而正确的要是1 2 3 5 6,问题出在最后一个else的冒泡,但我改不了了,求助

现实很无奈
2013-02-08 00:09
邻家小孩
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2013-2-4
得分:0 
回复 2楼 邻家小孩
比如说
6
1 3 2 4 6 5
-8421505452 1 2 3 4
Press any key to continue
为毛啊

现实很无奈
2013-02-08 00:47
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:3 
-8421505452  这样数据的出现 通常是变量未初始化 或者溢出

DO IT YOURSELF !
2013-02-08 07:30
逆风而前
Rank: 7Rank: 7Rank: 7
来 自:福建
等 级:黑侠
威 望:7
帖 子:193
专家分:567
注 册:2013-2-14
得分:3 
    for(i=0;i<m-1;i++)
        {   
            b[i]=a[i];
        }
       for(i=0;i<m-2;i++)
            for(k=0;k<m-i-2;k++)
                if(b[k]>b[k+1])
                {
                    n=b[k];
                    b[k]=b[k+1];
                    b[k+1]=n;
                }
因为原来只有六个数的数组,数组的下标最大为5,只能到a[5]
在你删除了一位后只剩下5位,数组的下标最大为4,只能到a[4]
你原来的代码只是溢出。
for(i=0;i<m-1;i++)
for(k=0;k<m-i-1;k++)
需改成
for(i=0;i<m-2;i++)  
for(k=0;k<m-i-2;k++)

2013-02-14 14:28
逆风而前
Rank: 7Rank: 7Rank: 7
来 自:福建
等 级:黑侠
威 望:7
帖 子:193
专家分:567
注 册:2013-2-14
得分:0 
    for(i=0;i<m-1;i++)
        {   
            b[i]=a[i];
        }
       for(i=0;i<m-2;i++)
            for(k=0;k<m-i-2;k++)
                if(b[k]>b[k+1])
                {
                    n=b[k];
                    b[k]=b[k+1];
                    b[k+1]=n;
                }
因为原来只有六个数的数组,数组的下标最大为5,只能到a[5]
在你删除了一位后只剩下5位,数组的下标最大为4,只能到a[4]
你原来的代码只是溢出。
for(i=0;i<m-1;i++)
for(k=0;k<m-i-1;k++)
需改成
for(i=0;i<m-2;i++)  
for(k=0;k<m-i-2;k++)

2013-02-14 15:16



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




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

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