C語言中的查詢表



C語言中的查詢表(通常用縮寫LUT表示)是填充了一些預先計算好的值的陣列。查詢表有助於避免在程式中執行大量計算。與冗長的巢狀if-else語句或switch語句相比,可以使用查詢表來提高C程式的效率。

示例1

讓我們看看查詢表的一個簡單應用。在下面的程式碼中,我們計算給定整數的平方。

#include <stdio.h>

int square(int x){
   return x*x;
}

int main(){

   int num[5] = {1, 2, 3, 4, 5};

   for (int i = 0; i <= 4; i++){
      printf("No: %d \tSquare(%d): %d\n", i+1, i+1, square(i+1));
   }
   
   return 0;
}

輸出

執行此程式碼時,將產生以下輸出:

No: 1 	Square(1): 1
No: 2 	Square(2): 4
No: 3 	Square(3): 9
No: 4 	Square(4): 16
No: 5 	Square(5): 25

示例2

雖然上面的程式執行良好,但它涉及對每個陣列索引值頻繁呼叫square()函式。

相反,我們可以宣告一個數組來儲存數字的平方,並直接從索引訪問計算出的平方。

#include <stdio.h>

int main(){

   int squares[5] = {1, 4, 9, 16, 25};
   for (int i = 0; i <= 4; i++){
      printf("No: %d \tSquare(%d): %d\n", i+1, i+1, squares[i]);
   }

   return 0;
}

輸出

執行程式碼並檢查其輸出:

No: 1 	Square(1): 1
No: 2 	Square(2): 4
No: 3 	Square(3): 9
No: 4 	Square(4): 16
No: 5 	Square(5): 25

示例3

在下面的示例中,我們獲取對應於原子序數的元素名稱。

# include <stdio.h>

int main(){

   int num = 3;

   switch (num){
      case 1: puts("Hydrogen"); break;
      case 2: puts("Helium"); break;
      case 3: puts("Lithium"); break;
      case 4: puts("Beryllium"); break;
      case 5: puts("Boron"); break;
      default: puts("error: unknown element!");
   }
   
   return 0;
}

輸出

它將產生以下輸出:

Lithium

示例4

我們使用查詢表(一個填充了所有元素名稱的陣列)來簡化程式,而不是使用每個元素都有一個case的冗長的switch語句:

#include <stdio.h>

static const char *table[] = {
   "Hydrogen", "Helium", "Lithium", "Beryllium", "Boron"
};

int main(){

   int num = 3;

   if (num >= 1 && num <= 5){
      printf("Name of the element with atomic number %d is %s", num, table[num-1]);
   } else {
      puts("error: Atomic number not in the lookup table!");
   }
   
   return 0;
}

輸出

執行程式碼並檢查其輸出:

Name of the element with atomic number 3 is Lithium

7段LED顯示器中的查詢表

查詢表廣泛用於嵌入式系統的設計中,因為它們可以提高應用程式的效能。

在許多裝置中,7段LED顯示器用於顯示視覺輸出。根據一系列二進位制數字,該單元的八個段被點亮。我們使用查詢表將0到9之間的數字轉換為7段訊號來驅動顯示器。

示例

數字的7段二進位制程式碼儲存為陣列元素。然後將十六進位制程式碼轉換為二進位制程式碼,該程式碼將驅動7段顯示器。

#include <stdio.h>

int main(){

   // Array to represent numbers 0-9 in 7-segment display binary encoding
   int const nums[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};

   static int bin[8];

   int i = 0, num = 7,  rem;

   printf("The binary equivalent of 7 is: ");

   for (i = 7; i >= 0; i--){
      rem = num % 2;
      bin[i] = rem;
      num /= 2;
   }

   for (i = 0; i <= 7; i++){
      printf("%d", bin[i]);
      if (i == 3) printf(" ");
   }

   return 0;
}

輸出

執行程式碼並檢查其輸出:

The binary equivalent of 7 is: 0000 0111

最低有效位表示段“a”、“b”、“c”和“d”。最高有效位是“e”、“f”、“g”和“h”。段“a”、“b”和“c”點亮以顯示7,其他段保持關閉。

廣告

© . All rights reserved.