| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 492 人关注过本帖
标题:程序有问题,大家帮忙看下
只看楼主 加入收藏
黑色幽痕
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2009-7-28
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:8 
程序有问题,大家帮忙看下
题目是:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数

#include"stdio.h"
int move(int *q,int m,int n)
{
    int *p,end;
    end=*(q+n-1);
    for(p=q+n-1;p>q;p--)
        *p=*(p-1);
    *q=end;
    m--;
    if(m>0)
        move(q,m,n);
}
main()
{
    int n,m,a[21],i;
    printf("the number total n:");
    scanf("%d",&n);
    printf("m:");
    scanf("%d",&m);
    printf("the number is:\n");
    for(i=0;i<20;i++)
        scanf("%d",&a[i]);
    move(a,m,n);
    printf("the sort number is:\n");
    for(i=0;i<20;i++)
        printf("%d",a[i]);
}
最后输出全是乱码
2009-08-07 10:19
谁是王者
Rank: 2
等 级:论坛游民
帖 子:211
专家分:92
注 册:2009-3-3
收藏
得分:0 
有个简单的算法
不用这么麻烦
以字符串的形式输进去
若需要后面的m个数变成前面的m个数
那先从后面的倒数m个数输出,在输出前面的数字
例如123456把56提前
先用strlen测试一下长度n
for(i=n-m;i<=n-1;i++)
printf("%c",str[i]);
for(i=0;i<n-m;i++)
printf("%c",str[i]);
最后显示的结果就是561234

2009-08-07 13:32
黑色幽痕
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2009-7-28
收藏
得分:0 
回复 2楼 谁是王者

恩,这个方法确实好,谢谢啊
能不能帮我看看我的程序问题出现在哪里啊

诚信是根,宽容是本
2009-08-07 14:32
谁是王者
Rank: 2
等 级:论坛游民
帖 子:211
专家分:92
注 册:2009-3-3
收藏
得分:0 
鄙人指针没学好
就不能帮你找错了。。。。
2009-08-07 15:13
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:0 
for(i=0;i<20;i++) 
        scanf("%d",&a[i]); 

 
for(i=0;i<20;i++) 
        printf("%d",a[i]);  

中的i<20都要改为:i<n
2009-08-07 15:44
xdzhangtao
Rank: 2
等 级:论坛游民
帖 子:6
专家分:34
注 册:2008-7-31
收藏
得分:0 
经本人测试,楼主的程序没问题
只是你这句for(i=0;i<20;i++)
        scanf("%d",&a[i]);
就把输入的个数固定了,可以改为
for(i=0;i<n;i++)
        scanf("%d",&a[i]);
2009-08-07 15:51
xiaogu149162
Rank: 2
等 级:论坛游民
帖 子:47
专家分:97
注 册:2009-7-16
收藏
得分:0 
#include"stdio.h"
int move(int *q,int m,int n)
{
    int *p,end;
    end=*(q+n-1);
    for(p=q+n-1;p>q;p--)
        *p=*(p-1);
    *q=end;
    m--;
    if(m>0)
        move(q,m,n);
}
main()
{
    int n,m,a[21],i;
    printf("the number total n:");
    scanf("%d",&n);
    printf("m:");
    scanf("%d",&m);
    printf("the number is:\n");
    for(i=0;i<20;i++)
        scanf("%d",&a[i]);
    move(a,m,n);
    printf("the sort number is:\n");
    for(i=0;i<20;i++)
        printf("%d",a[i]);
}
本运行过是OK的啊
只是要注意M,N以及输入的数字
2009-08-07 16:19
CCVC果冻爽
Rank: 4
等 级:业余侠客
帖 子:116
专家分:209
注 册:2009-7-31
收藏
得分:10 
你i<20就已经决定了一共有20个数,这样不行的,要<n这样才有意义,数组可以适当放大点。
2009-08-07 16:34
zqsf
Rank: 2
等 级:论坛游民
帖 子:26
专家分:90
注 册:2009-8-7
收藏
得分:0 
#include"stdio.h"
void move(int *q,int m,int n)
{
    int *p,end;
    end=*(q+n-1);
    for(p=q+n-1;p>q;p--)
        *p=*(p-1);
    *q=end;
    m--;
    if(m>0)
        move(q,m,n);
}
int main()
{
    int n,m,a[21],i;
    printf("the number total n:");
    scanf("%d",&n);
    printf("m:");
    scanf("%d",&m);
    printf("the number is:\n");
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    move(a,m,n);
    printf("the sort number is:\n");
    for(i=0;i<n;i++)
        printf("%d",a[i]);
    return 0;
}
好了
2009-08-07 18:23
快速回复:程序有问题,大家帮忙看下
数据加载中...
 
   



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

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