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(int digit, int position)函数用以将数字digit存入相应的位置。print_didgits_array(void)函数用以打印digits数组。
源程序如下:
-
-
-
-
-
-
- #include<stdio.h>
- #include<stdlib.h>
-
- #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;
- }
-
-
-
-
-
-
- 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;
- }
- }
-
-
-
-
-
-
- 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];
- }
-
-
-
-
-
-
- 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");
- }
- }
|