解题思路:可以用数组,特别注意指针的运用
注意事项:不要在指针层面对赋值
参考代码:
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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复