1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > C语言程序设计现代方法第二版 第10章课后编程习题

C语言程序设计现代方法第二版 第10章课后编程习题

时间:2019-06-08 18:05:16

相关推荐

C语言程序设计现代方法第二版 第10章课后编程习题

第一题

这题10.2中的pop函数没有用,在我的电脑里(vs)当把pop赋值给字符串时总是报错,尝试了各种办法都不行,提示是:char(*)()和char类型不兼容。求大神帮呀

#include <stdio.h>#include<string>#define STACK_SIZE 100int top = 0;char contents[STACK_SIZE];void make_empty(void){top = 0;}bool is_empty(void){return top == 0;}bool is_full(void){return top == STACK_SIZE;}void push(char i){if (!is_full())contents[top++] = i;}char pop(void){if (!is_empty())return contents[top--];}int main(void){char ch,temp;int n = 0;printf("Enter parenteses and/or brance:");while ((ch = getchar()) != '\n'){if (ch == '[' || ch == '{')push(ch);else if (ch == ']' || ch == '}'){temp = contents[--top];if (ch == ']'&& temp != '['){n = 1;printf("ch:%c temp:%c\n", ch, temp);}else if (ch == '}'&& temp != '{')n = 1;}}if (n == 1)printf("错误\n");elseprintf("正确\n");system("pause");return 0;}

第二题

/********************************************************** From C PROGRAMMING: A MODERN APPROACH, Second Edition ** By K. N. King ** Copyright (c) , 1996 W. W. Norton & Company, Inc. ** All rights reserved. ** This program may be freely distributed for class use, ** provided that this copyright notice is retained.**********************************************************//* poker.c (Chapter 10, page 233) *//* Classifies a poker hand */#include <stdbool.h> /* C99 only */#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 *//* prototypes */void read_cards(int a[NUM_RANKS], int b[NUM_SUITS]);void analyze_hand(int a[NUM_RANKS], int b[NUM_SUITS]);void print_result(void);/*********************************************************** main: Calls read_cards, analyze_hand, and print_result ** repeatedly. ***********************************************************/int main(void){int rank, suit;int num_in_rank[NUM_RANKS];int num_in_suit[NUM_SUITS];for (rank = 0; rank < NUM_RANKS; rank++) num_in_rank[rank] = 0;for (suit = 0; suit < NUM_SUITS; suit++)num_in_suit[suit] = 0;for (;;) {read_cards(num_in_rank, num_in_suit);analyze_hand(num_in_rank, num_in_suit);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(int a[NUM_RANKS],int b[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++) {for (suit = 0; suit < NUM_SUITS; suit++)card_exists[rank][suit] = false;}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 {a[rank]++;b[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(int a[NUM_RANKS], int b[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 (b[suit] == NUM_CARDS)flush = true;/* check for straight */rank = 0;while (a[rank] == 0) rank++;for (; rank < NUM_RANKS && a[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 (a[rank] == 4) four = true;if (a[rank] == 3) three = true;if (a[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 (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");}

第三题

/********************************************************** From C PROGRAMMING: A MODERN APPROACH, Second Edition ** By K. N. King ** Copyright (c) , 1996 W. W. Norton & Company, Inc. ** All rights reserved. ** This program may be freely distributed for class use, ** provided that this copyright notice is retained.**********************************************************//* poker.c (Chapter 10, page 233) *//* Classifies a poker hand */#include <stdbool.h> /* C99 only */#include <stdio.h>#include <stdlib.h>#define NUM_RANKS 13#define NUM_SUITS 4#define NUM_CARDS 5/* external variables */int hand[NUM_RANKS][NUM_SUITS];bool 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++) {for (suit = 0; suit < NUM_SUITS; suit++)hand[rank][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 (hand[rank][suit] != 0)printf("Duplicate card; ignored.\n");else {hand[rank][suit]++;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;straight = false;flush = false;four = false;three = false;pairs = 0;/* check for flush */for (suit = 0; suit < NUM_SUITS; suit++)if (hand[suit][1] == NUM_CARDS)flush = true;/* check for straight */rank = 0;while (hand[rank][0] == 0) rank++;for (; rank < NUM_RANKS && hand[rank][0] > 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 (hand[rank][0] == 4) four = true;if (hand[rank][0] == 3) three = true;if (hand[rank][0] == 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 (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");}

第四题第五题做到一起了

/********************************************************** From C PROGRAMMING: A MODERN APPROACH, Second Edition ** By K. N. King ** Copyright (c) , 1996 W. W. Norton & Company, Inc. ** All rights reserved. ** This program may be freely distributed for class use, ** provided that this copyright notice is retained.**********************************************************//* poker.c (Chapter 10, page 233) *//* Classifies a poker hand */#include <stdbool.h> /* C99 only */#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 straight, flush, four, three, big_straight, small_straight;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;straight = false;flush = false;four = false;three = false;pairs = 0;big_straight = false;small_straight = false;/* 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 ){if (num_in_rank[8] == 1 && num_in_rank[12] == 1){big_straight = true;return;}else if (num_in_rank[0] == 1 && num_in_rank[12] == 1){small_straight = true;return;}else{straight = true;return;}}/* 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 (straight && flush) printf("Straight flush");if (big_straight && flush) printf("Big straight flush");if (small_straight && flush) printf("small 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");}

第六题

在这里插入代码片

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。