黑马程序员——C语言基础——指针编程练习题

时间:2021-12-09 11:43:58
------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

今天复习了一下指针的相关知识,并且在网上搜了一道小的编程练习题,大概题意如下:

n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。

大概的思路流程如下:

1.首先定义一个数组和M、N两个任意整数变量。

2.声明一个函数,本题使用指针解决问题,所以参数为两个指针变量,无返回值。

3.循环为数组初始化序号。

4.对数组进行交换操作,分为两步。

1)将数组末尾三项交换至数组最前三项。

2)将交换后位于末尾的三项(原数组最前三项),提前至第M项之后。

5.循环输出结果。


以下是具体的代码实现:

#include <stdio.h>
#define N 10
#define M 3

void swap(int *x, int *y){
int *temp;
temp = *x;
*x = *y;
*y = temp;

}

int main(int argc, const char * argv[]) {
//定义数组
int array[N];
printf("未改变数组为:\t");
//循环为数组赋值
for (int i = 0; i < N; i++) {
array[i] = i + 1;
printf("%d\t",array[i]);
}
//循环M次,对数组进行操作
for (int i = 0; i < M; i++) {
//首先将数组最后三个数组项放到数组前三位。
swap(&array[N - i - 1], &array[M - i - 1]);
//然后将变更后的数组的最后三位,放在仅此于前M个项之后
swap(&array[N - i - 1], &array[(M - i + M - 1)]);
}
//最后输出操作之后的数组
printf("\n改变后的数组为:");
for (int i = 0; i < N; i++) {
printf("%d\t",array[i]);
}
}

打印结果为:

未改变数组为:	1	2	3	4	5	6	7	8	9	10	
改变后的数组为: 8 9 10 1 2 3 7 4 5 6


顺利实现。