| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 783 人关注过本帖
标题:循环移动(指针专题)malloc函数不会用,求教。
只看楼主 加入收藏
doudou74321
Rank: 2
等 级:论坛游民
帖 子:70
专家分:72
注 册:2014-11-5
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:6 
循环移动(指针专题)malloc函数不会用,求教。
Description

有n个整数,使前面各数顺序向后移动k个位置,移出的数再从开头移入。输出移动后的数组元素。
题目没有告诉你n的范围,希望你读入n之后用malloc()函数动态申请内存空间,不要提前定义数组的大小。不要偷懒哦。
另外要求定义并使用函数ringShift()
void ringShift(int *a, int n, int k)
{
//循环移动后的数值仍然存入数组a中
}

Input

输入分3行,第一行是一个整数n,第二行是n个整数,用空格隔开。第三行是一个整数k。

Output

输出n个整数,由空格隔开。输出占一行。

Sample Input

6
1 2 3 4 5 6
2
Sample Output

5 6 1 2 3 4

#include<stdio.h>
int main()
{
    void ringShift(int *a, int n, int k);
    int a[1000],k,i,n;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",a+i);
        
    }
    scanf("%d",&k);
    ringShift(a,n,k);
    for(i=0;i<n;i++)
    printf("%d ",a[i]);
}

void ringShift(int *a, int n, int k)
{
    int i;
        for(i=n;i>0;i--)
    {
        a[i]=a[i-k];
    }
}

不会用malloc,无法解决a0  a1  .看了百度百科,还是不懂- -。还是大神来个代码让我醒悟一下吧

[ 本帖最后由 doudou74321 于 2014-12-22 10:40 编辑 ]
搜索更多相关主题的帖子: 动态 空间 元素 
2014-12-22 10:35
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:20 
没怎么仔细考虑 貌似能输出结果

程序代码:
#include <stdio.h>
#include <malloc.h>

void ringshift(int *a, int n, int k) 
{
    int* b=a;
    a+=k;
    n-=k;
    while(n>0)
    {
        printf("%4d",*a++);
        n--;
    }
    while(k>0)
    {
        printf("%4d",*b++);
        k--;
    }
}

int main()
{
    int n=6;
    int* a=(int*)malloc(sizeof(int)*n);
    int* b=a;
    int n0=n;
    while(n0>0)
    {
        scanf("%d",a);
        n0--;
        a++;
    }
    ringshift(b,n,n-3);
    free(a);
    return 0;
}

DO IT YOURSELF !
2014-12-22 11:08
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
好像写错了  是左循环移动  不是右循环移动  不过自己简单的改改就好了

[ 本帖最后由 wp231957 于 2014-12-22 11:25 编辑 ]

DO IT YOURSELF !
2014-12-22 11:12
doudou74321
Rank: 2
等 级:论坛游民
帖 子:70
专家分:72
注 册:2014-11-5
收藏
得分:0 
回复 2楼 wp231957
就是爱你的这份自信,谢谢啦
2014-12-22 11:22
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 4楼 doudou74321
请参考3楼

DO IT YOURSELF !
2014-12-22 11:26
doudou74321
Rank: 2
等 级:论坛游民
帖 子:70
专家分:72
注 册:2014-11-5
收藏
得分:0 
回复 5楼 wp231957
嗯,已经搞定了,谢谢啦
2014-12-22 11:58
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

void ringShift(int *a, int n, int k) {
    int i, newlen = n + k, *t = NULL;

    if(t = (int*)malloc(newlen * sizeof(int)), !t) {
        printf("NEW MALLOC ERROR!");
        exit(1);

    } else {
        for(i = k; i < newlen; i++) {
            t[i] = a[i - k];
        }
    }

    for(i = 0; i < k; i++) {
        a[i] = t[n + i];
    }

    for(i = k; i < n; i++) {
        a[i] = t[i];
    }

    free(t);
}

int main(void) {
    int i = 0, len, *pnum = NULL, step;
    printf("输入数组长: ");
    scanf("%d", &len);
    fflush(stdin);
    printf("输入数组元素值: ");

    if(pnum = (int*)malloc(len * sizeof(int)), !pnum) {
        printf("MALLOC ERROR!");
        exit(1);
    }

    while(i < len) scanf("%d", pnum + i++);

    for(i = 0; i < len; i++) {
        printf("%d ", *(pnum + i));
    }

    printf("\n");
    fflush(stdin);
    printf("输入向右位移的步长: ");
    scanf("%d", &step);
    fflush(stdin);

    if(step <= len) {
        ringShift(pnum, len, step);

    } else {
        ringShift(pnum, len, step % len);
    }

    for(i = 0; i < len; i++) {
        printf("%d ", *(pnum + i));
    }

    printf("\n");
    free(pnum);
    return 0;
}


[ 本帖最后由 longwu9t 于 2014-12-22 15:11 编辑 ]

Only the Code Tells the Truth             K.I.S.S
2014-12-22 12:23
快速回复:循环移动(指针专题)malloc函数不会用,求教。
数据加载中...
 
   



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

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