c - 将数组中的元素右移 1

标签 c

我无法弄清楚如何正确地将数组中的元素向右移动 1。该数组被初始化为 [1 ,2, 3, 4, 5]。因此,当我移动时,结果应该是 [2, 3, 4, 5, 1],但结果是 [2, 3, 4, 5, 0] ,我不知道为什么。这是我到目前为止所拥有的 -

   for(k = 0; k <= n - 1; k++){
   array[k] = array[k+1];
   }

   printf("Array is now:\n");
   k = 0;
   while(k < n) {
       printf("x[%d] = %f\n", k, array[k]);
       k++;
   }

结果垂直打印。

最佳答案

我知道这是一个老问题,但我认为为将数组元素向右移动 1 的任务提供完整的代码很有用。 一种想法是从末尾开始,将每个元素替换为其左邻居。由于一开始我们覆盖了结束元素,因此我们将保存它并将其放在循环后第一个槽的最终位置。

enter image description here

代码:

#include <stdio.h>

void rotate_right(int* a, const int n) {
    if (n < 1) return;
    const int temp = a[n - 1];
    for (int i = n - 1; i > 0; i--) {
        a[i] = a[i - 1];
    }
    a[0] = temp;
}

int main() {
    int a[] = { 1 , 2, 3, 4, 5 };
    const int n = sizeof(a) / sizeof(a[0]);

    rotate_right(a, n);

    for (int i = 0; i < n; ++i) {
        printf("%d ", a[i]);
    }
}

关于c - 将数组中的元素右移 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43271755/

相关文章:

c - 在替换从文本文件中读取的单词的程序中,如何解释不同的单词长度?

c - Lua 将句柄传递给使用 newlib 创建的函数

C 程序——在编译时检查两个枚举是否同步

c - 与 C 中的浮点值略有混淆。 (cs50 pset1 gredy.c)

c - 我的程序在代码的一部分中自行停止。如何修复它?

c - C中函数 "remove()"不删除选中的文件

c - 用 C 编写自己的 shell - 如何制作两个以上的管道?

有人可以解释我程序中 fgets 的行为吗?

c - C 中的字符串比较密码

C:指数相加