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",其他段熄灭。

