1
0
SongZihuan 3 жил өмнө
commit
4b1bc9769e
4 өөрчлөгдсөн 173 нэмэгдсэн , 0 устгасан
  1. 2 0
      .gitignore
  2. 6 0
      CMakeLists.txt
  3. 14 0
      README.md
  4. 151 0
      main.c

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+cmake-build-*
+.idea

+ 6 - 0
CMakeLists.txt

@@ -0,0 +1,6 @@
+cmake_minimum_required(VERSION 3.20)
+project(ShowNumber C)
+
+set(CMAKE_C_STANDARD 11)
+
+add_executable(ShowNumber main.c)

+ 14 - 0
README.md

@@ -0,0 +1,14 @@
+# 显示数字小程序
+## 介绍
+给定该程序一个字符串作为参数,将显示该字符串中所有的数字。
+例如:
+```shell
+$ ShowNumber.exe 1234567
+        *   * * * * *   * * * * *   *       *   * * * * *   * * * * *   * * * * *
+        *           *           *   *       *   *           *                   *
+        *           *           *   *       *   *           *                   *
+        *   * * * * *   * * * * *   * * * * *   * * * * *   * * * * *           *
+        *   *                   *           *           *   *       *           *
+        *   *                   *           *           *   *       *           *
+        *   * * * * *   * * * * *           *   * * * * *   * * * * *           *
+```

+ 151 - 0
main.c

@@ -0,0 +1,151 @@
+#include <stdio.h>
+#include "stdbool.h"
+
+struct Number {
+    int num;
+    bool show[7];
+};
+
+struct Number number_list[] = {
+        {0, {1, 1, 1, 0, 1, 1, 1}},
+        {1, {0, 1, 0, 0, 0, 1, 0}},
+        {2, {1, 1, 0, 1, 1, 0, 1}},
+        {3, {1, 1, 0, 1, 0, 1, 1}},
+        {4, {0, 1, 1, 1, 0, 1, 0}},
+        {5, {1, 0, 1, 1, 0, 1, 1}},
+        {6, {1, 0, 1, 1, 1, 1, 1}},
+        {7, {1, 1, 0, 0, 0, 1, 0}},
+        {8, {1, 1, 1, 1, 1, 1, 1}},
+        {9, {1, 1, 1, 1, 0, 1, 1}},
+};
+
+void writeLine_1(struct Number *number);
+void writeLine_2_3(struct Number *number);
+void writeLine_4(struct Number *number);
+void writeLine_5_6(struct Number *number);
+void writeLine_7(struct Number *number);
+void writeLine(int line, struct Number *number);
+int chatToNumber(char n);
+void writeMoreNumber(char *number);
+
+int main(int argc, char **argv){
+    if (argc != 2)
+        printf("Please Enter one number.");
+    writeMoreNumber(argv[1]);
+    return 0;
+}
+
+void writeMoreNumber(char *number) {
+    for (int i = 1; i <= 7; i++) {
+        for (char *ch = number; *ch != 0; ch++) {
+            int n = chatToNumber(*ch);
+            if (n == -1)
+                continue;
+            struct Number *num = number_list + n;
+            writeLine(i, num);
+            printf("   ");
+        }
+        printf("\n");
+    }
+}
+
+int chatToNumber(char n) {
+    switch (n) {
+        case '1': return 1;
+        case '2': return 2;
+        case '3': return 3;
+        case '4': return 4;
+        case '5': return 5;
+        case '6': return 6;
+        case '7': return 7;
+        case '8': return 8;
+        case '9': return 9;
+        case '0': return 0;
+        default: return -1;
+    }
+}
+
+void writeLine(int line, struct Number *number) {
+    switch (line) {
+        case 1:
+            writeLine_1(number);
+            break;
+        case 2:
+        case 3:
+            writeLine_2_3(number);
+            break;
+        case 4:
+            writeLine_4(number);
+            break;
+        case 5:
+        case 6:
+            writeLine_5_6(number);
+            break;
+        case 7:
+            writeLine_7(number);
+            break;
+        default:
+            break;
+    }
+}
+
+void writeLine_1(struct Number *number) {
+    if (number->show[0])
+        printf("* * * * *");
+    else if (number->show[1] && number->show[2])
+        printf("*       *");
+    else if (number->show[1])
+        printf("        *");
+    else if (number->show[2])
+        printf("*        ");
+    else
+        printf("         ");
+}
+
+void writeLine_2_3(struct Number *number) {
+    if (number->show[1] && number->show[2])
+        printf("*       *");
+    else if (number->show[1])
+        printf("        *");
+    else if (number->show[2])
+        printf("*        ");
+    else
+        printf("         ");
+}
+
+void writeLine_4(struct Number *number) {
+    if (number->show[3])
+        printf("* * * * *");
+    else if (number->show[1] && number->show[2] || number->show[4] && number->show[5])
+        printf("*       *");
+    else if (number->show[1] || number->show[5])
+        printf("        *");
+    else if (number->show[2] || number->show[4])
+        printf("*        ");
+    else
+        printf("         ");
+}
+
+void writeLine_5_6(struct Number *number) {
+    if (number->show[4] && number->show[5])
+        printf("*       *");
+    else if (number->show[5])
+        printf("        *");
+    else if (number->show[4])
+        printf("*        ");
+    else
+        printf("         ");
+}
+
+void writeLine_7(struct Number *number) {
+    if (number->show[6])
+        printf("* * * * *");
+    else if (number->show[4] && number->show[5])
+        printf("*       *");
+    else if (number->show[5])
+        printf("        *");
+    else if (number->show[4])
+        printf("*        ");
+    else
+        printf("         ");
+}