C語言數(shù)組應(yīng)用之圖形數(shù)字的輸出
今天做《C語言程序設(shè)計(jì)——現(xiàn)代方法》的習(xí)題,發(fā)現(xiàn)數(shù)組這塊有一道有意思的圖形數(shù)字的題目。特此記載。
程序效果如下:
首先,程序使用一個(gè)MAX_DIGITS的宏來控制最多輸出的數(shù)字。若數(shù)字輸出個(gè)數(shù)多于該宏,將被忽略。除數(shù)字外的其他字符將被忽略。
使用segments函數(shù)存儲(chǔ)圖形數(shù)字的相應(yīng)信息。數(shù)字被分為7個(gè)部分,編號(hào)如下:
所以segments數(shù)組為二維數(shù)組,10行7列,分別保存0~9這10個(gè)數(shù)字的對(duì)應(yīng)位置的圖形。其中,橫線使用1表示,豎線使用2表示,空白使用0表示。
digits數(shù)組則是一個(gè)3行MAX_DIGITS*4列的數(shù)組(乘以4是因?yàn)橐趦蓚€(gè)數(shù)字之間插入空格,所以是4而不是3)。用以存儲(chǔ)用戶輸入的字母信息。
clear_digits_array(void)函數(shù)用以初始化digits數(shù)組。process_digit(int digit, int position)函數(shù)用以將數(shù)字digit存入相應(yīng)的位置。print_didgits_array(void)函數(shù)用以打印digits數(shù)組。
源程序如下:
-
-
-
-
-
-
- #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");
- }
- }
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。