解题思路:可以用数组,特别注意指针的运用
注意事项:不要在指针层面对赋值
参考代码:
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 人评分