【C 语言经典100例 | 菜鸟教程】C 语言练习实例6

解题思路

编写一个可以将用户输入字母,转换输出成图像的函数。
使用三维数组来制定字母模板,其中一维代表字母,二维和三维按照每个字母的笔记,着色部分使用1标识,空白部分使用0表示。

另外,本实例涉及到了字符编码相关的知识,对于ASCII码,其国际标准为ISO/IEC 646:1991
该标准在国际标准化组织官网的链接地址为:《ISO/IEC 646:1991》(注意:要给钱才能下载
不要钱的看这里:《百度百科:ASCII》(自:《计算机应用基础教程》莫绍强、陈善国:中国铁道出版社,2012年)

//
// Created by crazy_pig on 2022/8/31.
// References from : https://www.runoob.com/cprogramming/c-100-examples.html
//

#include "../include/L6.h"

// ascii码表小写字母a起始位置
#define ASCII_START_POS 97
// 英文字母个数
#define ALPHA_COUNT 3
// 字符图像宽度
#define WIDTH 8
// 字符图像高度
#define HEIGHT 8
// 大写字母ASCII码表起始位置
#define UPPER_START 65
// 大写字母ASCII码表起始位置
#define UPPER_END 90
// 小写字母ASCII码表起始位置
#define LOWER_START 97
// 小写字母ASCII码表起始位置
#define LOWER_END 122
// 小写字母和大写字母在ASCII码表的位置偏移量
#define UPPER_LOWER_OFFSET 32

const int char_def[ALPHA_COUNT][WIDTH][HEIGHT] = {
        {{0, 0, 1, 1, 1, 1, 0, 0},//A
                {1, 1, 1, 1, 1, 1, 1, 1},
                {1, 1, 0, 0, 0, 0, 1, 1},
                {1, 1, 0, 0, 0, 0, 1, 1},
                {1, 1, 1, 1, 1, 1, 1, 1},
                {1, 1, 1, 1, 1, 1, 1, 1},
                {1, 1, 0, 0, 0, 0, 1, 1},
                {1, 1, 0, 0, 0, 0, 1, 1}},

        {{1, 1, 1, 1, 1, 1, 0, 0},//B
                {1, 1, 1, 1, 1, 1, 1, 1},
                {1, 1, 0, 0, 0, 0, 1, 1},
                {1, 1, 1, 1, 1, 1, 0, 0},
                {1, 1, 1, 1, 1, 1, 0, 0},
                {1, 1, 0, 0, 0, 0, 1, 1},
                {1, 1, 1, 1, 1, 1, 1, 1},
                {1, 1, 1, 1, 1, 1, 0, 0}},

        {{0, 0, 1, 1, 1, 1, 0, 0},//C
                {0, 1, 1, 1, 1, 1, 1, 0},
                {1, 1, 0, 0, 0, 0, 1, 1},
                {1, 1, 0, 0, 0, 0, 0, 0},
                {1, 1, 0, 0, 0, 0, 0, 0},
                {1, 1, 0, 0, 0, 0, 1, 1},
                {0, 1, 1, 1, 1, 1, 1, 0},
                {0, 0, 1, 1, 1, 1, 0, 0}}};

/**
 * 题目:用*号输出字母C的图案。
 * 程序分析:可先用'*'号在纸上写出字母C,再分行输出。
 */
void L6() {
    // 升级一下,编写一个可以将用户输入字母,转换输出成图像的函数
    // 思路:使用三维数组来制定字母模板,其中一维代表字母,二维和三维按照每个字母的笔记,着色部分使用1标识,空白部分使用0表示
    char c;
    printf("请输入要转换图像字母:\n");
    scanf("%s", &c);

    // 输入大写转小写,方便统一处理
    if (((int) c) >= UPPER_START && ((int) c) <= UPPER_END) {
        c += UPPER_LOWER_OFFSET;
    }

    // 校验合法性
    if (((int) c) < LOWER_START || ((int) c) > LOWER_END) {
        printf("目前只能处理26个字母,请勿输入其它字符!");
    } else {
        // 找到对应字母的字迹索引
        int char_index = (int) c - ASCII_START_POS;
        for (int w = 0; w < WIDTH; w++) {
            for (int h = 0; h < HEIGHT; h++) {
                // 根据着色定义选择打印字迹或打印空白
                printf(char_def[char_index][w][h] > 0 ? "*" : " ");
            }
            printf("\n");
        }
    }
}

Result

【C 语言经典100例 | 菜鸟教程】C 语言练习实例6_第1张图片

你可能感兴趣的:(C语言,c语言,算法,开发语言)