// 习题8.4: 有n个整数,使前面各数顺序先后移m个单位,最后m个数变成最先面的m个数(指针实现)
#include<stdio.h>
void fun(int *a, int m, int n) {
int b[100] = { 0 }, c[100] = {0}; // 初始化为{0}可以解决非常多的麻烦,要一直使用哦
int c_count = 0, b_count = 0; // 用来统计数组c和数组b有多少个数的问题
// 将n-m的部分存起来,存到数组b里面
for (int i = 0; i < n-m; i++)
{
b[i] = a[i];
b_count = i;
}
// 将后面的m部分存起来,存到数组c里面
for (int i = n-m, j=0; i < n; i++, j++)
{
c[j] = a[i];
c_count = j;
}
// 数组c复制到数组a中
for (int i = 0; i < c_count+1; i++)
{
a[i] = c[i];
}
// 数组b复制到数组a中
for (int i = 0, j=c_count+1; i < b_count+1; i++, j++)
{
a[j] = b[i];
}
}
int main() {
int a[100];
int m, n=0; // m为想要后移几个位置,n为统计一共输入了几个字符
printf("请输入您要输入多少个数: ");
scanf_s("%d", &n);
printf("请输入n个整数: ");
for (int i = 0; i < n; i++)
{
scanf_s("%d", a+i);
}
printf("\n请输入想要将各数顺序后移几个位置: ");
scanf_s("%d", &m);
fun(a, m, n);
printf("\n经过转置后的数组为: ");
for (int i = 0; i < n; i++)
{
printf("%d ", *(a+i));
}
printf("\n");
}
学到的东西:
1、通过 a[j++] = b[i] 这种形式进行更好的数组之间的操作
2、进行数组的初始化,免去那中没有数组结束符之类的问题