七段显示的程序,实现键盘输入一个数,显示出该数的七段显示。
InBlock.gif#include <iostream>
InBlock.gif
InBlock.gif#include <vector>
InBlock.gif
InBlock.gif#include <algorithm>
InBlock.gif
InBlock.gif#include < string>
InBlock.gif
InBlock.gif using namespace std;
InBlock.gif
InBlock.gif // 实现输入一个数字,输出这个数字的 七段显示形式
InBlock.gif
InBlock.gif // 每个数字用一个字节表示
InBlock.gif
InBlock.gif
InBlock.gif //0到9的表示
InBlock.gif char numbers[] = {0x7D, 0x28, 0x37, 0x57, 0x5A, 0x4F, 0x6F, 0x54, 0x7F, 0x5E};
InBlock.gif
InBlock.gif    
InBlock.gif
InBlock.gif void printN( const string& n);
InBlock.gif
InBlock.gif    
InBlock.gif
InBlock.gif int main()
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gif string n;
InBlock.gif
InBlock.gif while (cin >> n)
InBlock.gif
InBlock.gifprintN(n);
InBlock.gif
InBlock.gif return 0;
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gif    
InBlock.gif
InBlock.gif bool getBit( char number, char c) //七段显示的该段是否显示
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gif return static_cast< bool>(number & c);
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gif    
InBlock.gif
InBlock.gif void printN( const string& n)
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gifvector< int> v;
InBlock.gif
InBlock.gif for (size_t i = 0; i < n.length(); ++i)
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gifv.push_back(n[i]-'0');
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gif for ( i = 0; i < v.size(); ++i)
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gif if (getBit(numbers[v[i]], 4))
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gifcout << " _ ";
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gif else
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gifcout << "     ";
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gifcout << endl;
InBlock.gif
InBlock.gif for ( i = 0; i < v.size(); ++i)
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gif if (getBit(numbers[v[i]], 8))
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gifcout << "|";
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gif else
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gifcout << " ";
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gif if (getBit(numbers[v[i]], 2))
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gifcout << "_";
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gif else
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gifcout << " ";
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gif if (getBit(numbers[v[i]], 16))
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gifcout << "|";
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gif else
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gifcout << " ";
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gifcout << endl;
InBlock.gif
InBlock.gif for ( i = 0; i < v.size(); ++i)
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gif if (getBit(numbers[v[i]], 32))
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gifcout << "|";
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gif else
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gifcout << " ";
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gif if (getBit(numbers[v[i]], 1))
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gifcout << "_";
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gif else
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gifcout << " ";
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gif if (getBit(numbers[v[i]], 64))
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gifcout << "|";
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gif else
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gifcout << " ";
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gif}
InBlock.gif
InBlock.gifcout << endl;
InBlock.gif
InBlock.gif}
编程珠玑习题3.7.8  编写一个使用5个七段显示数字来显示16位正整数的程序。输出为一个5个字节的数组,当且仅当数字j中的第1段点亮时,字节j中的位i置1
2^16 = 65536个数。所以5个七段显示器肯定是够用的。
首先可以预处理一下,把 {0, 2, 3, 4, 5, 6,7,8,9}相应的8个bit置1之后的值保存到一个数组中。
InBlock.gif char rec[10]= {0x7D, 0x28, 0x37, 0x57, 0x5A, 0x4F, 0x6F, 0x54, 0x7F, 0x5E};
InBlock.gif
InBlock.gif char temp[5];
InBlock.gif
InBlock.gif char *get( int n)
InBlock.gif
InBlock.gif{
InBlock.gif
InBlock.gif         int iter = 4;
InBlock.gif
InBlock.gif         memset(temp, 0, sizeof(temp));
InBlock.gif
InBlock.gif         while (n)
InBlock.gif
InBlock.gif         {
InBlock.gif
InBlock.gif                    temp[iter--] = rec[n % 10];
InBlock.gif
InBlock.gif                    n /= 10;
InBlock.gif
InBlock.gif         }
InBlock.gif
InBlock.gif         while (iter>= 0) { temp[iter] = rec[0]; iter --;}
InBlock.gif
InBlock.gif         return temp;
InBlock.gif
InBlock.gif}
该代码中数的高位对应着数组的大的下标