解题思路:可以用数组,特别注意指针的运用

注意事项:不要在指针层面对赋值

参考代码:

1】:

#include <stdio.h>

#include <malloc.h>


void change(int* array,int m, int len);


int main()

{

int n = 0, m = 0 ,i = 0;

scanf("%d", &n);

int *a = (int*)malloc(n * sizeof(int));

do

{

scanf("%d", &a[i]);

i++;

} while (i < n);

scanf("%d", &m);

change(a,m,n);

for ( i = 0; i < n; i++)

{

printf("%d ", a[i]);

}

}

void change(int* array,int m,int len)

{

int i = 0;

int* b = (int*)malloc(len * sizeof(int));

for (i = 0; i < len; b[i] = array[i], i++);

i = 0;

while(i<len-m)

{

array[i + m] = b[i];

i++;

}

for (i = 0; i < m; array[i] = b[len - m + i], i++);

}

2】:

#include

void change(int a[101],int n,int m);


int main()

{

    int a[101],n = 0,m = 0,i = 1;

    scanf("%d", &n);

    for (; i <= n; i++)

    {

        scanf("%d", &a[i]);

    }

    scanf("%d", &m);

    change(a,n,m); 

    i = 1;

    do

    {

        printf("%d", a[i]);

        i++;

    } while (i < n + 1);

}

void change(int a[101],int n,int m)

{

    int b[101], i = 1;

    while (i<=n-m)

    {

        b[i + m] = a[i];

        i++;

    }

    for (i = 1; i <= m; i++)

    {

        b[i] = a[n-m+i];          

    }

    i = 1;

{

    while (i < n + 1) //之前一直错误,并没有这三句话,而是只有(a = b);

    {

        a[i] = b[i];      //在查看数值变化时发现数组传参时进入自定义函数后a的地址并没有变化

        i++;               //但在将b赋a给时发现a的在自定义函数地址变过了(因此,应在元素层面操作)

    }                         //事实上在进行a = b时只是简单地将a(此时应看作一个指针变量)被b的地址赋值???

}                             //而a的地址又是存在的,即之前a的地址在main函数中还是没变(一般而言,地址是很底层的,是不变的)

}

点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论