永发信息网

编写程序,提示用户输入一个数并显示该数,使用字符模拟七段显示器的效果

答案:2  悬赏:0  手机版
解决时间 2021-02-15 17:24
  • 提问者网友:记得曾经
  • 2021-02-14 19:31
编写程序,提示用户输入一个数并显示该数,使用字符模拟七段显示器的效果:
Enter a number: 491-9014

非数字的字符都将被忽略。在程序中用一个名为MAX_DIGITS的宏来控制数的最大位数,MAX_DIG- ITS的值为10。如果数中包含的数位大于这个数,多出来的数位将被忽略。提示:使用两个外部数组,一个是segments数组(见第8章的练习题6),用于存储表示数字和段之间对应关系的数据;另一个是digits数组,这是一个3行(因为显示出来的每个数字高度都是3个字符)、MAX_DIGITS×4列(数字的宽度是3个字符,但为了可读性需要在数字之间增加一个空格)的字符数组。编写4个函数:main、clear_digits_array、process_digit和print_digits_array。下面是后3个函数的原型:void clear_digits_array(void); void process_digit(int digit, int position); void print_digits_array(void);

clear_digits_array函数在digits数组的所有元素中存储空白字符。process_digit函数把digit的七段表示存储到digits数组的指定位置(位置从0到MAX_DIGITS 1)。print_digits_ array函数分行显示digits数组的每一行,产生出像示例图那样的输出。
最佳答案
  • 五星知识达人网友:愁杀梦里人
  • 2021-02-14 19:39
#include 
#include 
#define max_dights 10
const int segments[10][7] = {
    {1, 1, 1, 1, 1, 1, 0}, 
    {0, 1, 1, 0, 0, 0, 0}, 
    {1, 1, 0, 1, 1, 0, 1}, 
    {1, 1, 1, 1, 0, 0, 1}, 
    {0, 1, 1, 0, 0, 1, 1}, 
    {1, 0, 1, 1, 0, 1, 1}, 
    {1, 0, 1, 1, 1, 1, 1}, 
    {1, 1, 1, 0, 0, 0, 0}, 
    {1, 1, 1, 1, 1, 1, 1}, 
    {1, 1, 1, 1, 0, 1, 1}  
};
char dights[3][max_dights * 4];
void clear_dight_array(void);
void process_dights_array(int dight, int position);
void print_dights_array(void);
int main(void) {
    unsigned char numbers[max_dights];
    int ch, i = 0, j;
    clear_dight_array();
    printf("enter a number: ");
    while ((ch = getchar()) != eof && ch != '\n')
        if (i < max_dights && ch >= '0' && ch <= '9')
            process_dights_array(ch - '0', i++);
    print_dights_array();
    return 0;
}
void clear_dight_array(void) {
    memset(dights, ' ', sizeof dights);
}
void process_dights_array(int dight, int position) {
    int n = position * 4;
    if (segments[dight][0])
        dights[0][n + 1] = '_';
    if (segments[dight][1])
        dights[1][n + 2] = '|';
    if (segments[dight][2])
        dights[2][n + 2] = '|';
    if (segments[dight][3])
        dights[2][n + 1] = '_';
    if (segments[dight][4])
        dights[2][n]     = '|';
    if (segments[dight][5])
        dights[1][n]     = '|';
    if (segments[dight][6])
        dights[1][n + 1] = '_';
}
void print_dights_array(void) {
    int i, j;
    for (i = 0; i < 3; i++) {
        for (j = 0; j < max_dights * 4; j++) {
            putchar(dights[i][j]);
        }
        putchar('\n');
    }
}
全部回答
  • 1楼网友:鱼芗
  • 2021-02-14 20:33
#include<stdio.h> #include<stdbool.h> #defineMAX_DIGHTS 10 boolsegments[10][7]= {{true,true,true,false,true,true,true},                        {false,false,false,false,true,true,false},                       {true,false,true,true,true,false,true},                        {true,false,false,true,true,true,true},                       {false,true,false,true,true,true,false},                       {true,true,false,true,false,true,true},                       {true,true,true,true,false,true,true},                       {true,false,false,false,true,true,false},                       {true,true,true,true,true,true,true},                       {true,true,false,true,true,true,true}}; chardigits[3][4*MAX_DIGHTS]; voidclear_digits_array(void); intprocess_digit(int digit,int position); voidprint_digits_array(int position); intmain(int argc, char *argv[]) {     int position=0,digit;     char ch;     clear_digits_array();     printf("Enter a number:");     do{         ch=getchar();         if(ch>='0'&&ch<='9'){             digit=(int)(ch-'0');            position=process_digit(digit,position);         }     }while(ch!='\n');     print_digits_array(position);     return 0; } voidclear_digits_array(void) {     int i,j;     for(i=0; i<3; i++)         for(j=0; j<4*MAX_DIGHTS; j++)             digits[i][j]=' '; } intprocess_digit(int digit,int position) {     int j;     for(j=0; j<7; j++){         if(segments[digit][j]==true){             if(j%3==0)                 digits[j/3][1+position*4]='_';             if(j%3!=0)                digits[j%3][((j/3>0)?2:0)+position*4]='|';         }     }     return ++position; } voidprint_digits_array(int position) {     int i, j;     for (i = 0; i < 3; i++){         for (j = 0; j < position * 4; j++)             putchar(digits[i][j]);         putchar('\n');     } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯