C语言数组应用之图形数字的输出
今天做《C语言程序设计——现代方法》的习题,发现数组这块有一道有意思的图形数字的题目。特此记载。
程序效果如下:
首先,程序使用一个MAX_DIGITS的宏来控制最多输出的数字。若数字输出个数多于该宏,将被忽略。除数字外的其他字符将被忽略。
使用segments函数存储图形数字的相应信息。数字被分为7个部分,编号如下:
所以segments数组为二维数组,10行7列,分别保存0~9这10个数字的对应位置的图形。其中,横线使用1表示,竖线使用2表示,空白使用0表示。
digits数组则是一个3行MAX_DIGITS*4列的数组(乘以4是因为要在两个数字之间插入空格,所以是4而不是3)。用以存储用户输入的字母信息。
clear_digits_array(void)函数用以初始化digits数组。process_digit(intdigit,intposition)函数用以将数字digit存入相应的位置。print_didgits_array(void)函数用以打印digits数组。
源程序如下:
/**************************************************
* DigitsNumber.c *
* Input numbers and print them in digit type. *
* by Eric Brown *
**************************************************/
#include
#include
#define MAX_DIGITS 10
void clear_digits_array(void);
void process_digit(int digit, int position);
void print_digits_array(void);
int segments[10][7] = {{2,1,1,0,1,1,2},{0,0,1,0,0,1,0},{2,0,1,2,1,0,2},
{2,0,1,2,0,1,2},{0,1,1,2,0,1,0},{2,1,0,2,0,1,2},
{2,1,0,2,1,1,2},{2,0,1,0,0,1,0},{2,1,1,2,1,1,2},
{2,1,1,2,0,1,2}};
int digits[3][MAX_DIGITS * 4];
int main()
{
int i;
char num;
printf("Enter a number: ");
clear_digits_array();
for(i = 0; i < MAX_DIGITS;)
{
num = getchar();
switch(num)
{
case '0': process_digit(0, i); i++; break;
case '1': process_digit(1, i); i++; break;
case '2': process_digit(2, i); i++; break;
case '3': process_digit(3, i); i++; break;
case '4': process_digit(4, i); i++; break;
case '5': process_digit(5, i); i++; break;
case '6': process_digit(6, i); i++; break;
case '7': process_digit(7, i); i++; break;
case '8': process_digit(8, i); i++; break;
case '9': process_digit(9, i); i++; break;
case '\n': i = MAX_DIGITS; break;
}
}
print_digits_array();
system("pause");
return 0;
}
/**************************************************
*clear_digits_array:initialize the digits *
* array. *
**************************************************/
void clear_digits_array(void)
{
int i, j;
for(i = 0; i < 3; i++)
for(j = 0; j < MAX_DIGITS * 4; j++)
{
digits[i][j] = 0;
}
}
/**************************************************
*process_digit:process the number's segment in *
* digit array in proper position. *
**************************************************/
void process_digit(int digit, int position)
{
int i = position * 4;
digits[0][i + 1] = segments[digit][0];
digits[1][i] = segments[digit][1];
digits[1][i + 2] = segments[digit][2];
digits[1][i + 1] = segments[digit][3];
digits[2][i] = segments[digit][4];
digits[2][i + 2] = segments[digit][5];
digits[2][i + 1] = segments[digit][6];
}
/**************************************************
* print_digits_array: to print the numbers in *
* digit way. *
**************************************************/
void print_digits_array(void)
{
int i, j;
for(i = 0; i < 3; i++)
{
for(j = 0; j < MAX_DIGITS * 4; j++)
{
if(digits[i][j] == 0)
printf(" ");
else if(digits[i][j] == 1)
printf("|");
else if(digits[i][j] == 2)
printf("_");
}
printf("\n");
}
}