分享

C语言数组应用之图形数字的输出

 昵称11595335 2013-02-08

C语言数组应用之图形数字的输出

今天做《C语言程序设计——现代方法》的习题,发现数组这块有一道有意思的图形数字的题目。特此记载。

程序效果如下:


首先,程序使用一个MAX_DIGITS的宏来控制最多输出的数字。若数字输出个数多于该宏,将被忽略。除数字外的其他字符将被忽略。

使用segments函数存储图形数字的相应信息。数字被分为7个部分,编号如下:


所以segments数组为二维数组,107列,分别保存0~910个数字的对应位置的图形。其中,横线使用1表示,竖线使用2表示,空白使用0表示。

digits数组则是一个3MAX_DIGITS*4列的数组(乘以4是因为要在两个数字之间插入空格,所以是4而不是3)。用以存储用户输入的字母信息。

clear_digits_array(void)函数用以初始化digits数组。process_digit(int digit, int position)函数用以将数字digit存入相应的位置。print_didgits_array(void)函数用以打印digits数组。

源程序如下:

  1. /************************************************** 
  2.  * DigitsNumber.c                                          * 
  3.  * Input numbers and print them in digit type* 
  4.  * by Eric Brown                                            * 
  5.  **************************************************/  
  6.   
  7. #include<stdio.h>  
  8. #include<stdlib.h>  
  9.   
  10. #define MAX_DIGITS 10  
  11.   
  12. void clear_digits_array(void);  
  13. void process_digit(int digit, int position);  
  14. void print_digits_array(void);  
  15.   
  16. 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},  
  17.                        {2,0,1,2,0,1,2},{0,1,1,2,0,1,0},{2,1,0,2,0,1,2},  
  18.                        {2,1,0,2,1,1,2},{2,0,1,0,0,1,0},{2,1,1,2,1,1,2},  
  19.                        {2,1,1,2,0,1,2}};  
  20. int digits[3][MAX_DIGITS * 4];  
  21.   
  22. int main()  
  23. {  
  24.     int i;  
  25.     char num;  
  26.     printf("Enter a number: ");  
  27.   
  28.     clear_digits_array();  
  29.     for(i = 0; i < MAX_DIGITS;)  
  30.     {  
  31.         num = getchar();  
  32.         switch(num)  
  33.         {  
  34.             case '0': process_digit(0, i); i++; break;  
  35.             case '1': process_digit(1, i); i++; break;  
  36.             case '2': process_digit(2, i); i++; break;  
  37.             case '3': process_digit(3, i); i++; break;  
  38.             case '4': process_digit(4, i); i++; break;  
  39.             case '5': process_digit(5, i); i++; break;  
  40.             case '6': process_digit(6, i); i++; break;  
  41.             case '7': process_digit(7, i); i++; break;  
  42.             case '8': process_digit(8, i); i++; break;  
  43.             case '9': process_digit(9, i); i++; break;  
  44.             case '\n': i = MAX_DIGITS; break;  
  45.         }  
  46.     }  
  47.     print_digits_array();  
  48.   
  49.     system("pause");  
  50.     return 0;  
  51. }  
  52.   
  53. /************************************************** 
  54.  *clear_digits_array:initialize the digits          * 
  55.  *                             array.                              * 
  56.  **************************************************/  
  57.   
  58. void clear_digits_array(void)  
  59. {  
  60.     int i, j;  
  61.     for(i = 0; i < 3; i++)  
  62.         for(j = 0; j < MAX_DIGITS * 4; j++)  
  63.         {  
  64.             digits[i][j] = 0;  
  65.         }  
  66. }  
  67.   
  68. /************************************************** 
  69.  *process_digit:process the number's segment in   * 
  70.  *              digit array in proper position.        * 
  71.  **************************************************/  
  72.   
  73. void process_digit(int digit, int position)  
  74. {  
  75.     int i = position * 4;  
  76.     digits[0][i + 1] = segments[digit][0];  
  77.     digits[1][i]     = segments[digit][1];  
  78.     digits[1][i + 2] = segments[digit][2];  
  79.     digits[1][i + 1] = segments[digit][3];  
  80.     digits[2][i]     = segments[digit][4];  
  81.     digits[2][i + 2] = segments[digit][5];  
  82.     digits[2][i + 1] = segments[digit][6];  
  83. }  
  84.   
  85. /************************************************** 
  86.  * print_digits_array: to print the numbers in * 
  87.  *                     digit way.                                * 
  88.  **************************************************/  
  89.   
  90. void print_digits_array(void)  
  91. {  
  92.     int i, j;  
  93.     for(i = 0; i < 3; i++)  
  94.     {  
  95.         for(j = 0; j < MAX_DIGITS * 4; j++)  
  96.         {  
  97.             if(digits[i][j] == 0)  
  98.                 printf(" ");  
  99.             else if(digits[i][j] == 1)  
  100.                 printf("|");  
  101.             else if(digits[i][j] == 2)  
  102.                 printf("_");  
  103.         }  
  104.         printf("\n");  
  105.     }  
  106. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多