【C语言】学习笔记 第10章 程序结构 编程题 Myth丶恋晨 2024-03-22 10:46 46阅读 0赞 ### 【C语言】学习笔记 ### #### 文章目录 #### * * 【C语言】学习笔记 * * 第10章 程序结构 * * 编程题 #### 第10章 程序结构 #### ![在这里插入图片描述][23495e9fe86a457e8e8cd9a3b51216ca.png_pic_center] Will Rogers 也一定会说:“没有自由变量这种东西。” ##### 编程题 ##### 【1】修改 10.2节的栈示例使它存储字符而不是整数。接下来,增加 main函数,用来要求用户输入一串圆 括号或花括号,然后指出它们之间的嵌套是否正确: Enter parenteses and/or braces: ((){}{()}) Parenteses/braces are nested properly 提示:读入左圆括号或左花括号时,把它们像字符一样压入栈中。当读入右圆括号或右花括号时, 把栈顶的项弹出,并且检查弹出项是否是匹配的圆括号或花括号。(如果不是,那么圆括号或花括号 嵌套不正确。)当程序读入换行符时,检查栈是否为空。如果为空,那么圆括号或花括号匹配;如果 栈不为空(或者如果曾经调用过 stack\_underflow 函数),那么圆括号或花括号不匹配。如果调用 stack\_overflow 函数,程序显示信息 Stack overflow,并且立刻终止。 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> #define STACK_SIZE 100 /* external variables */ char contents[STACK_SIZE]; int top = 0; void make_empty(void) { top = 0; } bool is_empty(void) { return top == 0; } bool is_full(void) { return top == STACK_SIZE; } void stack_overflow(void) { printf("Stack overflow\n"); } void stack_underflow(void) { printf("Stack underflow\n"); exit(EXIT_FAILURE); } void push(char i) { if (is_full()) stack_overflow(); else contents[top++] = i; } char pop(void) { if (is_empty()) stack_underflow(); else return contents[--top]; } int main(void) { int ch; printf("Enter parenteses and/or braces: "); while ((ch = getchar()) != '\n') { if (ch == '(' || ch == '{') push(ch); else if (ch == ')') { if (!is_empty() || pop() != '(') { printf("Parenteses/braces are not nested properly\n"); break; } } else if (ch == '}') { if (!is_empty() || pop() != '{') { printf("Parenteses/braces are not nested properly\n"); break; } } } if (is_empty()) printf("Parenteses/braces are nested properly\n"); make_empty(); return 0; } 【2】修改 10.5 节的 poker.c 程序,把数组 num\_in\_rank 和数组 num\_in\_suit 移到 main 函数中。main 函 数将把这两个数组作为实际参数传递给 read\_cards 函数和 analyze\_hand 函数。 /* Classifies a poker hand */ #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #define NUM_RANKS 13 #define NUM_SUITS 4 #define NUM_CARDS 5 bool straight, flush, four, three; int pairs; /* can be 0, 1, or 2 */ /* prototypes */ void read_cards(int nr[NUM_RANKS], int ns[NUM_SUITS]); void analyze_hand(int nr[NUM_RANKS], int ns[NUM_SUITS]); void print_result(void); int main(void) { int num_in_rank[NUM_RANKS]; int num_in_suit[NUM_SUITS]; for (;;) { read_cards(num_in_rank, num_in_suit); analyze_hand(num_in_rank, num_in_suit); print_result(); } } void read_cards(int nr[NUM_RANKS], int ns[NUM_SUITS]) { bool card_exists[NUM_RANKS][NUM_SUITS]; char ch, rank_ch, suit_ch; int rank, suit; bool bad_card; int cards_read = 0; for (rank = 0; rank < NUM_RANKS; rank++) { nr[rank] = 0; for (suit = 0; suit < NUM_SUITS; suit++) card_exists[rank][suit] = false; } for (suit = 0; suit < NUM_SUITS; suit++) ns[suit] = 0; while (cards_read < NUM_CARDS) { bad_card = false; printf("Enter a card: "); rank_ch = getchar(); switch (rank_ch) { case '0': exit(EXIT_SUCCESS); case '2': rank = 0; break; case '3': rank = 1; break; case '4': rank = 2; break; case '5': rank = 3; break; case '6': rank = 4; break; case '7': rank = 5; break; case '8': rank = 6; break; case '9': rank = 7; break; case 't': case 'T': rank = 8; break; case 'j': case 'J': rank = 9; break; case 'q': case 'Q': rank = 10; break; case 'k': case 'K': rank = 11; break; case 'a': case 'A': rank = 12; break; default: bad_card = true; } suit_ch = getchar(); switch (suit_ch) { case 'c': case 'C': suit = 0; break; case 'd': case 'D': suit = 1; break; case 'h': case 'H': suit = 2; break; case 's': case 'S': suit = 3; break; default: bad_card = true; } while ((ch = getchar()) != '\n') if (ch != ' ') bad_card = true; if (bad_card) printf("Bad card; ignored.\n"); else if (card_exists[rank][suit]) printf("Duplicate card; ignored.\n"); else { nr[rank]++; ns[suit]++; card_exists[rank][suit] = true; cards_read++; } } } void analyze_hand(int nr[NUM_RANKS], int ns[NUM_SUITS]) { int num_consec = 0; int rank, suit; straight = false; flush = false; four = false; three = false; pairs = 0; /* check for flush */ for (suit = 0; suit < NUM_SUITS; suit++) if (ns[suit] == NUM_CARDS) flush = true; /* check for straight */ rank = 0; while (nr[rank] == 0) rank++; for (; rank < NUM_RANKS && nr[rank] > 0; rank++) num_consec++; if (num_consec == NUM_CARDS) { straight = true; return; } /* check for 4-of-a-kind, 3-of-a-kind, and pairs */ for (rank = 0; rank < NUM_RANKS; rank++) { if (nr[rank] == 4) four = true; if (nr[rank] == 3) three = true; if (nr[rank] == 2) pairs++; } } void print_result(void) { if (straight && flush) printf("Straight flush"); else if (four) printf("Four of a kind"); else if (three && pairs == 1) printf("Full house"); else if (flush) printf("Flush"); else if (straight) printf("Straight"); else if (three) printf("Three of a kind"); else if (pairs == 2) printf("Two pairs"); else if (pairs == 1) printf("Pair"); else printf("High card"); printf("\n\n"); } ![在这里插入图片描述][20db4feb0ab543aba53ef7e00f5f50ba.png_pic_center] 【3】把数组 num\_in\_rank、num\_in\_suit 和 card\_exists 从 10.5 节的 poker.c 程序中去掉。程序改用 5×2 的数组来存储牌。数组的每一行表示一张牌。例如,如果数组名为 hand,则 `hand[0][0]`存储第一 张牌的点数,`hand[0][1]`存储第一张牌的花色。 /* Classifies a poker hand */ #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #define NUM_RANKS 13 #define NUM_SUITS 4 #define NUM_CARDS 5 /* external variables */ bool straight, flush, four, three; int pairs; /* can be 0, 1, or 2 */ int hand[5][2]; /* prototypes */ void read_cards(void); void analyze_hand(void); void print_result(void); int main(void) { for (;;) { read_cards(); analyze_hand(); print_result(); } } void read_cards(void) { char ch, rank_ch, suit_ch; int rank, suit; bool bad_card, duplicate_card; int cards_read = 0; while (cards_read < NUM_CARDS) { bad_card = false; duplicate_card = false; printf("Enter a card: "); rank_ch = getchar(); switch (rank_ch) { case '0': exit(EXIT_SUCCESS); case '2': rank = 0; break; case '3': rank = 1; break; case '4': rank = 2; break; case '5': rank = 3; break; case '6': rank = 4; break; case '7': rank = 5; break; case '8': rank = 6; break; case '9': rank = 7; break; case 't': case 'T': rank = 8; break; case 'j': case 'J': rank = 9; break; case 'q': case 'Q': rank = 10; break; case 'k': case 'K': rank = 11; break; case 'a': case 'A': rank = 12; break; default: bad_card = true; } suit_ch = getchar(); switch (suit_ch) { case 'c': case 'C': suit = 0; break; case 'd': case 'D': suit = 1; break; case 'h': case 'H': suit = 2; break; case 's': case 'S': suit = 3; break; default: bad_card = true; } while ((ch = getchar()) != '\n') if (ch != ' ') bad_card = true; for (int i = 0; i < cards_read; i++) if (hand[i][0] == rank && hand[i][1] == suit) duplicate_card = true; if (bad_card) printf("Bad card; ignored.\n"); else if (duplicate_card) { printf("Duplicate card; ignored.\n"); } else { hand[cards_read][0] = rank; hand[cards_read][1] = suit; cards_read++; } } } void analyze_hand(void) { int num_consec = 0; int rank, suit; straight = false; flush = true; four = false; three = false; pairs = 0; /* check for flush */ for (int i = 0; i < NUM_CARDS;i++) if (hand[i][1] != hand[0][1]) flush = false; /* check for straight */ int min = hand[0][0]; bool sr[5] = { false,false,false,false,false }; for (int i = 0; i < NUM_CARDS; i++) if (min > hand[i][0]) min = hand[i][0]; for (int i = 0; i < NUM_CARDS; i++) sr[hand[i][0] - min] = true; if (sr[0] == true && sr[1] == true && sr[2] == true && sr[3] == true && sr[4] == true) { straight = true; return; } /* check for 4-of-a-kind, 3-of-a-kind, and pairs */ int rank_list[NUM_RANKS] = { 0 }; for (int i = 0; i < NUM_CARDS;i++) rank_list[hand[i][0]]++; for (rank = 0; rank < NUM_RANKS; rank++) { if (rank_list[rank] == 4) four = true; if (rank_list[rank] == 3) three = true; if (rank_list[rank] == 2) pairs++; } } void print_result(void) { if (straight && flush) printf("Straight flush"); else if (four) printf("Four of a kind"); else if (three && pairs == 1) printf("Full house"); else if (flush) printf("Flush"); else if (straight) printf("Straight"); else if (three) printf("Three of a kind"); else if (pairs == 2) printf("Two pairs"); else if (pairs == 1) printf("Pair"); else printf("High card"); printf("\n\n"); } ![在这里插入图片描述][2762903becfe445ca64b28b43493b011.png_pic_center] 【4】修改 10.5 节的 poker.c 程序,使其能识别牌的另一种类别——“同花大顺”(同花色的 A、K、Q、J 和 10)。同花大顺的级别高于其他所有的类别。 /* Classifies a poker hand */ #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #define NUM_RANKS 13 #define NUM_SUITS 4 #define NUM_CARDS 5 /* external variables */ int num_in_rank[NUM_RANKS]; int num_in_suit[NUM_SUITS]; bool royal_flush, straight, flush, four, three; int pairs; /* can be 0, 1, or 2 */ /* prototypes */ void read_cards(void); void analyze_hand(void); void print_result(void); /************************************************************ * main: Calls read_cards, analyze_hand, and print_result * * repeatedly. * ************************************************************/ int main(void) { for (;;) { read_cards(); analyze_hand(); print_result(); } } /************************************************************ * read_cards: Reads the cards into the external * * variables num_in_rank and num_in_suit; * * checks for bad cards and duplicate cards. * ************************************************************/ void read_cards(void) { bool card_exists[NUM_RANKS][NUM_SUITS]; char ch, rank_ch, suit_ch; int rank, suit; bool bad_card; int cards_read = 0; for (rank = 0; rank < NUM_RANKS; rank++) { num_in_rank[rank] = 0; for (suit = 0; suit < NUM_SUITS; suit++) card_exists[rank][suit] = false; } for (suit = 0; suit < NUM_SUITS; suit++) num_in_suit[suit] = 0; while (cards_read < NUM_CARDS) { bad_card = false; printf("Enter a card: "); rank_ch = getchar(); switch (rank_ch) { case '0': exit(EXIT_SUCCESS); case '2': rank = 0; break; case '3': rank = 1; break; case '4': rank = 2; break; case '5': rank = 3; break; case '6': rank = 4; break; case '7': rank = 5; break; case '8': rank = 6; break; case '9': rank = 7; break; case 't': case 'T': rank = 8; break; case 'j': case 'J': rank = 9; break; case 'q': case 'Q': rank = 10; break; case 'k': case 'K': rank = 11; break; case 'a': case 'A': rank = 12; break; default: bad_card = true; } suit_ch = getchar(); switch (suit_ch) { case 'c': case 'C': suit = 0; break; case 'd': case 'D': suit = 1; break; case 'h': case 'H': suit = 2; break; case 's': case 'S': suit = 3; break; default: bad_card = true; } while ((ch = getchar()) != '\n') if (ch != ' ') bad_card = true; if (bad_card) printf("Bad card; ignored.\n"); else if (card_exists[rank][suit]) printf("Duplicate card; ignored.\n"); else { num_in_rank[rank]++; num_in_suit[suit]++; card_exists[rank][suit] = true; cards_read++; } } } /************************************************************ * analyze_hand: Determines whether the hand contains a * * straight, a flush, four-of-a-kind, * * and/or three-of-a-kind; determines the * * number of pairs; stores the results into * * the external variables straight, flush, * * four, three, and pairs. * ************************************************************/ void analyze_hand(void) { int num_consec = 0; int rank, suit; royal_flush = false; straight = false; flush = false; four = false; three = false; pairs = 0; /* check for flush */ for (suit = 0; suit < NUM_SUITS; suit++) if (num_in_suit[suit] == NUM_CARDS) flush = true; /* check for straight */ rank = 0; while (num_in_rank[rank] == 0) rank++; for (; rank < NUM_RANKS && num_in_rank[rank] > 0; rank++) num_consec++; if (num_consec == NUM_CARDS) { straight = true; return; } /* check for royal_flush*/ if (straight && flush) { royal_flush = true; for (rank = 8; rank <= 12; rank++) if (num_in_rank[rank] != 1) royal_flush = false; } /* check for 4-of-a-kind, 3-of-a-kind, and pairs */ for (rank = 0; rank < NUM_RANKS; rank++) { if (num_in_rank[rank] == 4) four = true; if (num_in_rank[rank] == 3) three = true; if (num_in_rank[rank] == 2) pairs++; } } /************************************************************ * print_result: prints the classification of the hand, * * based on the values of the external * * variables straight, flush, four, three, * * and pairs. * ************************************************************/ void print_result(void) { if (royal_flush) printf("Royal flush"); else if (straight && flush) printf("Straight flush"); else if (four) printf("Four of a kind"); else if (three && pairs == 1) printf("Full house"); else if (flush) printf("Flush"); else if (straight) printf("Straight"); else if (three) printf("Three of a kind"); else if (pairs == 2) printf("Two pairs"); else if (pairs == 1) printf("Pair"); else printf("High card"); printf("\n\n"); } 【5】修改 10.5 节的 poker.c 程序,使其能识别“小 A 顺”(即 A、2、3、4 和 5)。 /* Classifies a poker hand */ #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #define NUM_RANKS 13 #define NUM_SUITS 4 #define NUM_CARDS 5 /* external variables */ int num_in_rank[NUM_RANKS]; int num_in_suit[NUM_SUITS]; bool royal_flush, small_flush, straight, flush, four, three; int pairs; /* can be 0, 1, or 2 */ /* prototypes */ void read_cards(void); void analyze_hand(void); void print_result(void); /************************************************************ * main: Calls read_cards, analyze_hand, and print_result * * repeatedly. * ************************************************************/ int main(void) { for (;;) { read_cards(); analyze_hand(); print_result(); } } /************************************************************ * read_cards: Reads the cards into the external * * variables num_in_rank and num_in_suit; * * checks for bad cards and duplicate cards. * ************************************************************/ void read_cards(void) { bool card_exists[NUM_RANKS][NUM_SUITS]; char ch, rank_ch, suit_ch; int rank, suit; bool bad_card; int cards_read = 0; for (rank = 0; rank < NUM_RANKS; rank++) { num_in_rank[rank] = 0; for (suit = 0; suit < NUM_SUITS; suit++) card_exists[rank][suit] = false; } for (suit = 0; suit < NUM_SUITS; suit++) num_in_suit[suit] = 0; while (cards_read < NUM_CARDS) { bad_card = false; printf("Enter a card: "); rank_ch = getchar(); switch (rank_ch) { case '0': exit(EXIT_SUCCESS); case '2': rank = 0; break; case '3': rank = 1; break; case '4': rank = 2; break; case '5': rank = 3; break; case '6': rank = 4; break; case '7': rank = 5; break; case '8': rank = 6; break; case '9': rank = 7; break; case 't': case 'T': rank = 8; break; case 'j': case 'J': rank = 9; break; case 'q': case 'Q': rank = 10; break; case 'k': case 'K': rank = 11; break; case 'a': case 'A': rank = 12; break; default: bad_card = true; } suit_ch = getchar(); switch (suit_ch) { case 'c': case 'C': suit = 0; break; case 'd': case 'D': suit = 1; break; case 'h': case 'H': suit = 2; break; case 's': case 'S': suit = 3; break; default: bad_card = true; } while ((ch = getchar()) != '\n') if (ch != ' ') bad_card = true; if (bad_card) printf("Bad card; ignored.\n"); else if (card_exists[rank][suit]) printf("Duplicate card; ignored.\n"); else { num_in_rank[rank]++; num_in_suit[suit]++; card_exists[rank][suit] = true; cards_read++; } } } /************************************************************ * analyze_hand: Determines whether the hand contains a * * straight, a flush, four-of-a-kind, * * and/or three-of-a-kind; determines the * * number of pairs; stores the results into * * the external variables straight, flush, * * four, three, and pairs. * ************************************************************/ void analyze_hand(void) { int num_consec = 0; int rank, suit; royal_flush = false; small_flush = false; straight = false; flush = false; four = false; three = false; pairs = 0; /* check for flush */ for (suit = 0; suit < NUM_SUITS; suit++) if (num_in_suit[suit] == NUM_CARDS) flush = true; /* check for straight */ rank = 0; while (num_in_rank[rank] == 0) rank++; for (; rank < NUM_RANKS && num_in_rank[rank] > 0; rank++) num_consec++; if (num_consec == NUM_CARDS) { straight = true; return; } /* check for royal_flush*/ if (straight && flush) { royal_flush = true; for (rank = 8; rank <= 12; rank++) if (num_in_rank[rank] != 1) royal_flush = false; } /* check for small_flush */ if (straight && flush) { small_flush = true; for (rank = 0; rank <= 3; rank++) if (num_in_rank[rank] != 1) small_flush = false; if (num_in_rank[12] != 1) small_flush = false; } /* check for 4-of-a-kind, 3-of-a-kind, and pairs */ for (rank = 0; rank < NUM_RANKS; rank++) { if (num_in_rank[rank] == 4) four = true; if (num_in_rank[rank] == 3) three = true; if (num_in_rank[rank] == 2) pairs++; } } /************************************************************ * print_result: prints the classification of the hand, * * based on the values of the external * * variables straight, flush, four, three, * * and pairs. * ************************************************************/ void print_result(void) { if (royal_flush) printf("Royal flush"); else if (small_flush) printf("Small flush"); else if (straight && flush) printf("Straight flush"); else if (four) printf("Four of a kind"); else if (three && pairs == 1) printf("Full house"); else if (flush) printf("Flush"); else if (straight) printf("Straight"); else if (three) printf("Three of a kind"); else if (pairs == 2) printf("Two pairs"); else if (pairs == 1) printf("Pair"); else printf("High card"); printf("\n\n"); } 【6】有些计算器(尤其是惠普的计算器)使用逆波兰表示法(Reverse Polish Notation,RPN)来书写数学 表达式。在这一表示法中,运算符放置在操作数的后面而不是放在操作数中间。例如,在逆波兰表 示法中 1+2 将表示为 1 2 +,而 1+2\*3 将表示为 1 2 3 \* +。逆波兰表达式可以很方便地用栈求值。算 法从左向右读取运算符和操作数,并执行下列步骤。 * (1) 当遇到操作数时,将其压入栈中。 * (2) 当遇到运算符时,从栈中弹出它的操作数,执行运算并把结果压入栈中。 编写程序对逆波兰表达式求值。操作数都是个位的整数,运算符为+、-、\*、/和=。遇到运算符= 时,将显示栈顶项,随后清空栈并提示用户计算新的表达式。这一过程持续进行,直到用户输入一 个既不是运算符也不是操作数的字符为止: Enter an RPN expression: 1 2 3 * + = Value of expression: 7 Enter an RPN expression: 5 8 * 4 9 - / = Value of expression: -8 Enter an RPN expression: q 如果栈出现上溢,程序将显示消息 Expression is too complex 并终止。如果栈出现下溢(例如遇 到表达式 1 2 + +),程序将显示消息 Not enough operands in expression 并终止。提示:把 10.2 节的栈代码整合到你的程序中。使用 `scanf(" %c", &ch)`读取运算符和操作数。 #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #define STACK_SIZE 100 int contents[STACK_SIZE]; int top = 0; void make_empty(void); bool is_empty(void); bool is_full(void); void push(int i); int pop(void); int main(void) { char ch; int result; int input, first, second; printf("Enter an RPN expression: "); scanf("%c", &ch); while (ch != '\n') { if ((ch - '0') > 0 && (ch - '9' <= 0)) { input = ch - '0'; scanf("%c", &ch); while ((ch - '0') >= 0 && (ch - '9' <= 0)) { input = input * 10 + ch - '0'; scanf("%c", &ch); } push(input); continue; } else if (ch == '+') push(pop() + pop()); else if (ch == '*') push(pop() * pop()); else if (ch == '-') { second = pop(); first = pop(); push(first - second); } else if (ch == '/') { second = pop(); first = pop(); push(first / second); } else if (ch == '=') { result = pop(); if (is_empty()) { printf("Value of expression: %d", result); break; } else { printf("Error!"); break; } } scanf("%c", &ch); } return 0; } void make_empty(void) { top = 0; } bool is_empty(void) { return top == 0; } bool is_full(void) { return top == STACK_SIZE; } void push(int i) { if (is_full()) { printf("Expression is too complex\n"); exit(0); } else contents[top++] = i; } int pop(void) { if (is_empty()) { printf("Not enough operands in expression\n"); exit(0); } else return contents[--top]; } ![在这里插入图片描述][de09836766aa4b3983c61febaf7fd838.png_pic_center] 【7】编写程序,提示用户输入一个数并显示该数,使用字符模拟七段显示器的效果: Enter a number: 491-9014 ![在这里插入图片描述][52523c7ce6344aaa83c2ebecd8a7f083.png_pic_center] 非数字的字符都将被忽略。在程序中用一个名为 MAX\_DIGITS 的宏来控制数的最大位数,MAX\_DIGITS 的值为 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 数组的每一行,产生的输出如示例图所示。 #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #define MAX_DIGITS 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 digits[3][MAX_DIGITS * 4]; void clear_digits_array(void); void process_digit(int digit, int position); void print_digits_array(void); int main(void) { char ch; int pos = 0; clear_digits_array(); printf("Enter a number: "); while ((ch = getchar()) != '\n') { if (pos >= MAX_DIGITS) break; if (ch - '0' >= 0 && ch - '9' <= 0) { process_digit(ch - '0', pos++); } } print_digits_array(); return 0; } void clear_digits_array(void) { for (int i = 0; i < 3; i++) { for (int j = 0;j < MAX_DIGITS * 4; j++) { digits[i][j] = ' '; } } } void process_digit(int digit, int position) { if (segments[digit][5] == 1) digits[0][position * 4] = '|'; else digits[0][position * 4] = ' '; if (segments[digit][4] == 1) digits[2][position * 4] = '|'; else digits[2][position * 4] = ' '; if (segments[digit][0] == 1) digits[0][position * 4 + 1] = '-'; else digits[0][position * 4 + 1] = ' '; if (segments[digit][6] == 1) digits[1][position * 4 + 1] = '-'; else digits[1][position * 4 + 1] = ' '; if (segments[digit][3] == 1) digits[2][position * 4 + 1] = '_'; else digits[2][position * 4 + 1] = ' '; if (segments[digit][1] == 1) digits[0][position * 4 + 2] = '|'; else digits[0][position * 4 + 1] = ' '; if (segments[digit][2] == 1) digits[2][position * 4 + 2] = '|'; else digits[2][position * 4 + 1] = ' '; } void print_digits_array(void) { for (int i = 0; i < 3; i++) { for (int j = 0; j < MAX_DIGITS * 4; j++) { printf("%c", digits[i][j]); } printf("\n"); } } ![在这里插入图片描述][ae81d9206f4f4b55bc980101cbf8bf0e.png_pic_center] [23495e9fe86a457e8e8cd9a3b51216ca.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/8969b57f15cf4bf585bcb43c365753a1.png [20db4feb0ab543aba53ef7e00f5f50ba.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/27d64e20ea1046ea865039a0d4c5e3cc.png [2762903becfe445ca64b28b43493b011.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/9d13745ae72f400c88a0767924512705.png [de09836766aa4b3983c61febaf7fd838.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/1532c06b01624ed2bf2c1c70751b1784.png [52523c7ce6344aaa83c2ebecd8a7f083.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/0de636c1878c4803976fdea9d572775e.png [ae81d9206f4f4b55bc980101cbf8bf0e.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/b2c61e17d1994a5e818c55f2dc31dc0d.png
相关 【C语言】学习笔记 第4章 表达式 编程题 【C语言】学习笔记 文章目录 【C语言】学习笔记 第4章 表达式 编程题 第4章 表达式 ![在 浅浅的花香味﹌/ 2024年03月23日 16:56/ 0 赞/ 57 阅读
相关 【C语言】学习笔记 第2章 C语言基本概念 编程题 【C语言】学习笔记 文章目录 【C语言】学习笔记 第2章 C语言基本概念 编程题 第2章 C语言基本 红太狼/ 2024年03月23日 16:18/ 0 赞/ 35 阅读
相关 【C语言】学习笔记 第10章 程序结构 编程题 【C语言】学习笔记 文章目录 【C语言】学习笔记 第10章 程序结构 编程题 第10章 程序结构 Myth丶恋晨/ 2024年03月22日 10:46/ 0 赞/ 47 阅读
相关 【C语言】学习笔记 第10章 程序结构 10.4 作用域 【C语言】学习笔记 文章目录 【C语言】学习笔记 第10章 程序结构 10.4 作用域 第10章 程 男娘i/ 2024年03月22日 10:45/ 0 赞/ 38 阅读
相关 【C语言】学习笔记 第10章 程序结构 10.3 程序块 【C语言】学习笔记 文章目录 【C语言】学习笔记 第10章 程序结构 10.3 程序块 第10章 程 谁借莪1个温暖的怀抱¢/ 2024年03月22日 10:45/ 0 赞/ 61 阅读
相关 【C语言】学习笔记 第10章 程序结构 10.1 局部变量 【C语言】学习笔记 文章目录 【C语言】学习笔记 第10章 程序结构 10.1 局部变量 刺骨的言语ヽ痛彻心扉/ 2024年03月22日 10:45/ 0 赞/ 67 阅读
相关 【C语言】学习笔记 第9章 函数 编程题 【C语言】学习笔记 文章目录 【C语言】学习笔记 第9章 函数 编程题 第9章 函数 ![在这里 今天药忘吃喽~/ 2024年03月22日 10:19/ 0 赞/ 7 阅读
相关 【C语言】学习笔记 第8章 数组 编程题 【C语言】学习笔记 文章目录 【C语言】学习笔记 第8章 数组 编程题 第8章 数组 ![在这里 左手的ㄟ右手/ 2024年03月22日 09:45/ 0 赞/ 44 阅读
相关 【C语言】学习笔记 第6章 循环 编程题 【C语言】学习笔记 文章目录 【C语言】学习笔记 第6章 循环 编程题 第6章 循环 ![在这里 左手的ㄟ右手/ 2024年03月22日 08:44/ 0 赞/ 54 阅读
相关 【C语言】学习笔记 第5章 选择语句 编程题 【C语言】学习笔记 文章目录 【C语言】学习笔记 第5章 选择语句 编程题 第5章 选择语句 ! 布满荆棘的人生/ 2024年03月22日 08:43/ 0 赞/ 39 阅读
还没有评论,来说两句吧...