C 语言中的查找表
C 语言中的查找表(通常缩写为 LUT)是填充了某些预先计算好的值的数组。查找表有助于避免在程序中执行大量计算。使用查找表可以提高 C 程序的效率,而无需使用冗长的嵌套 if-else 语句或 switch 语句。
示例 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 Square(%d): %d ", 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 Square(%d): %d ", 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
我们使用查找表(一个填充了所有元素名称的数组)来简化程序,而不是使用冗长的 switch 语句来为每个元素分配一个 case -
#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 显示屏中的查找表
查找表广泛应用于嵌入式系统设计,因为它可以提升应用程序的性能。
许多设备都使用七段 LED 显示屏来显示视觉输出。该显示屏的八个段根据二进制数字序列点亮。我们使用查找表将 0 到 9 之间的数字转换为七段信号来驱动显示屏。
示例
数字的 7 段二进制代码存储为数组元素。然后将十六进制代码转换为驱动 7 段显示屏的二进制代码。
#include <stdio.h> int main(){ // 以 7 段显示二进制编码表示数字 0-9 的数组 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",其他段熄灭。