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

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

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

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

大概的思路流程如下:

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

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

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

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

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

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

5.循环输出结果。


以下是具体的代码实现:

#include 
#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	


顺利实现。

你可能感兴趣的:(C)