首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言陣列循環左移一位:程式碼邏輯分析與輸出預測

     編輯:程式設計綜合問答

題目程式碼

#include <stdio.h>
void main() {
    float b[6] = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6}, t;
    int i;
    t = b[0];
    for (i = 0; i < 5; i++)
        b[i] = b[i+1];
    b[5] = t;
    for (i = 0; i < 6; i++)
        printf("%6.2f", b[i]);
}

邏輯逐步拆解

  1. 備份首元素:t = b[0] → t = 1.1。
  2. 前移賦值:迴圈 i=0..4 執行 b[i] = b[i+1]:
    • i=0: b[0]=b[1]=2.2
    • i=1: b[1]=b[2]=3.3
    • i=2: b[2]=b[3]=4.4
    • i=3: b[3]=b[4]=5.5
    • i=4: b[4]=b[5]=6.6
    此時陣列前五位變為 {2.2, 3.3, 4.4, 5.5, 6.6, 6.6}(最後一位暫時未變)。
  3. 尾部填入備份值:b[5] = t → b[5] = 1.1。
  4. 最終陣列:{2.2, 3.3, 4.4, 5.5, 6.6, 1.1}。

輸出結果

  2.20  3.30  4.40  5.50  6.60  1.10

%6.2f 佔 6 字元寬度,保留 2 位小數,右對齊。

核心知識點:陣列循環左移通用模式

// 循環左移 k 位 (k < n)
void rotate_left(float arr[], int n, int k) {
    k %= n;
    if (k == 0) return;
    float temp[k];
    memcpy(temp, arr, k * sizeof(float));       // 備份前 k 個
    memmove(arr, arr + k, (n - k) * sizeof(float)); // 後段前移
    memcpy(arr + n - k, temp, k * sizeof(float));   // 備份值接到尾部
}

常見變體面試題

  • 不使用額外空間實現循環移位(三次反轉法)。
  • 循環右移邏輯對比。
  • 泛型實現(void* + 元素大小)。

總結: 本題考察陣列元素搬移邏輯與暫存變數使用,是基礎陣列操作的經典必考點。掌握「備份→搬移→恢復」三步曲,即可靈活應對各類循環移位變體。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved