| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 305 人关注过本帖
标题:新人报到!各位大侠帮忙看看错哪了?
只看楼主 加入收藏
bcypxl
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-8-18
结帖率:25%
收藏
已结贴  问题点数:20 回复次数:2 
新人报到!各位大侠帮忙看看错哪了?
有n个整数,将前面各数顺序向后移动m个位置,最后m个数变成最前面m个数。写一函数实现以上功能,在主函数中输入n各数和输出调整后的n个数。
#include"stdio.h"
void main()
{
    int *move_m(int *p,int m,int n);
    int i,m,n;
    int a[10],b[10];
    int *p,*p2;
    p=a;
    p2=b;
    printf("输入要要移动的位数和整数的个数:");
    scanf("%d %d",&m,&n);
    for(i=0;i<n;i++)
        scanf("%d",p+i);
    p2=move_m(p,m,n);
    for(i=0;i<n;i++)
        printf("%d ",*(p2+i));
    printf("\n");
}

int *move_m(int *p,int m,int n)
{
    int i,t;
    int b[10];
    int *p1;
    p1=b;
    for(i=0;i<m;i++)
        *(p1+i)=*(p+(n-m+i));
    for(i=m;i<n;i++)
        *(p1+i)=*(p+(i-m));
    return p1;
}
改程序编译通过了,但就是运行不出来正确的结果。很是郁闷啊!
        
搜索更多相关主题的帖子: 移动 include 
2011-08-18 18:11
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:10 
因为 move_m() 在执行过程中把前面的 m 个元素用最后 m 个元素的值覆盖掉了,而且 p2=move_m(p,m,n); 并不会改变 b 的元素。
可以这样写
程序代码:
#include <stdio.h>
#include <malloc.h>

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

int main(void)
{
    int m = 0, n = 0, i = 0, j = 0, * a = NULL, * b = NULL;
    printf("Tell me about m & n (seperate them with space):\n");
    scanf("%d %d", &m, &n);
    a = (int *) malloc(sizeof(int) * n);
    b = (int *) malloc(sizeof(int) * n);
    printf("Give me %d integers (seperate them with space):\n", n);
    for (i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    for (i = m + 1, j = 0; i < n; i++, j++) {
        b[j] = a[i];
    }
    for (i = 0; i <= m; i++, j++) {
        b[j] = a[i];
    }
    show_array(a, n);
    show_array(b, n);
    return 0;
}


[ 本帖最后由 voidx 于 2011-8-18 18:51 编辑 ]
2011-08-18 18:49
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:10 
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int * move(unsigned, unsigned, int *);

int main(void) {
    unsigned m, n, i;
    int * pArray;
   
    scanf("%u%u", &m, &n);
    pArray = (int *)calloc(n, sizeof(int));
    for(i = 0; i < n; i++)
        scanf("%d", pArray + i);
    move(n, m, pArray);
    for(i = 0; i < n; i++)
        printf("%d ", pArray[i]);
    printf("\n");
    system("pause");
    free(pArray);
    return 0;
}

int * move(unsigned n, unsigned m, int * pArray) {
    int * pTemp1 = (int *)calloc(m, sizeof(int));
    int * pTemp2 = (int *)calloc(n - m, sizeof(int));
   
    memcpy(pTemp1, pArray + n - m, m * sizeof(int));
    memcpy(pTemp2, pArray, (n - m) * sizeof(int));
    memcpy(pArray, pTemp1, m * sizeof(int));
    memcpy(pArray + m, pTemp2, (n - m) * sizeof(int));

    free(pTemp1);
    free(pTemp2);
    return pArray;
}

My life is brilliant
2011-08-18 21:49
快速回复:新人报到!各位大侠帮忙看看错哪了?
数据加载中...
 
   



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

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