C语言程序设计第二版 现代方法 第十章

第三至五题

#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>

#define CARDS 5
int card[CARDS][2];

void read_card();
void agazly_card();
void print_result();
void print_cards();

bool straight, flush, four, three, big, small;
int pair, card_count;

int main()
{
	for (;;)
	{
		read_card();
		agazly_card();
		print_result();
//		print_cards();
	}
	system("pause");
	return 0;
}
void read_card()
{
	card_count = 0;
	int i;
	int rank, suit;
	char card_rank, card_suit, ch;
	while (card_count<CARDS)
	{
		bool badcard = false;
		bool repeatcard = false;
		printf("Enter a card:");
		card_rank = getchar();
		switch (card_rank)
		{
		case '0':           exit(EXIT_SUCCESS);
		case '2':           rank = 2; break;
		case '3':           rank = 3; break;
		case '4':           rank = 4; break;
		case '5':           rank = 5; break;
		case '6':           rank = 6; break;
		case '7':           rank = 7; break;
		case '8':           rank = 8; break;
		case '9':           rank = 9; break;
		case 't':case 'T':  rank = 10; break;
		case 'j':case 'J':  rank = 11; break;
		case 'q':case 'Q':  rank = 12; break;
		case 'k':case 'K':  rank = 13; break;
		case 'a':case 'A':  rank = 14; break;
		default:            badcard = true; break;
		}
		card_suit = getchar();
		switch (card_suit)
		{
		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:            badcard = true; break;
		}
		while ((ch = getchar()) != '\n')
		{
			if (ch != ' ')badcard = true;
		}
		if (badcard)
		{
			printf("Bad card:ignored.\n");
			continue;
		}
		for (i = 0; i<card_count; i++)
		{
			if ((card[i][0] == rank) && (card[i][1] == suit))
			{
				repeatcard = true;
			}
		}
		if (repeatcard)
		{
			printf("Duplicate card:igonred.\n");
			continue;
		}
		card[card_count][0] = rank;
		card[card_count][1] = suit;
		card_count++;
	}
}
void agazly_card()
{
	int i, j, tmp_rank, tmp_suit;
	pair = 0;
	straight = true;
	flush = true;
	four = false;
	three = false;
	big = true;
	small = true;
	for (i = 0; i<CARDS; i++)
	{
		for (j = i; j<CARDS; j++)
		{
			if (card[i][0]>card[j][0])
			{
				tmp_rank = card[i][0];
				card[i][0] = card[j][0];
				card[j][0] = tmp_rank;
				tmp_suit = card[i][1];
				card[i][1] = card[j][1];
				card[j][1] = tmp_suit;
			}
		}
	}
	for (i = 0; i<CARDS - 1; i++)
	{
		if (card[i][1] != card[i + 1][1])
			straight = false;
		if ((card[i][0] + 1) != (card[i + 1][0]))
			flush = false;
	}
	for (i = 0; i<CARDS; i++)//同花大顺及小顺;
	{
		if (card[i][0] != (i + 10))
			big = false;
		if ((card[i][0] != (i + 2)) && card[i][0] != 14)
			small = false;
	}
	card_count = 0;
	while (card_count<CARDS)
	{
		int run = 0;
		int rank = card[card_count][0];
		do
		{
			run++;
			card_count++;
		} while (card_count<CARDS && rank == card[card_count][0]);
		switch (run)
		{
		case 4:four = true; break;
		case 3:three = true; break;
		case 2:pair++; break;
		}
	}
}
void print_result()
{
	if (straight&&flush&&big)printf("Big Straight Flush.\n");//同花大顺;
	else if (straight&&flush)printf("straight Flush.\n");
	else if (four)printf("Four of kind.\n");
	else if (three && pair == 1)printf("Full house.\n");
	else if (straight)printf("Straight.\n");
	else if (flush)printf("Flush.\n");
	else if (small)printf("Small Flush.\n");//小顺;
	else if (three)printf("Three of kind.\n");
	else if (pair == 2)printf("Two pairs.\n");
	else if (pair == 1)printf("Pairs.\n");
	else printf("High Card.\n");
}
void print_cards()//检验输入是否成功;
{
	int i, j;
	for (i = 0; i<CARDS; i++)
	{
		for (j = 0; j<2; j++)
		{
			printf("%2d ", card[i][j]);
		}
		puts("");
	}
}

第六题

#include <stdio.h>
#include <stdlib.h>

#define N 20
float stack[N];
float num,tmp;
int top;

void read_num();
void push_num();
void print_num();
void out_num_add();
void out_num_sub();
void out_num_mul();
void out_num_div();
int main()
{
    top=0;
	printf("Enter an RPN expression:");
    read_num();
    print_num();
    return 0;
}
void read_num()
{
    char ch;
    while((ch=getchar())!='\n')
    {
        if(ch>=48 && ch<=57)
        {
            switch(ch)
            {
                case '0':num=0;break;
                case '1':num=1;break;
                case '2':num=2;break;
                case '3':num=3;break;
                case '4':num=4;break;
                case '5':num=5;break;
                case '6':num=6;break;
                case '7':num=7;break;
                case '8':num=8;break;
                case '9':num=9;break;
                default:break;
            }
           push_num();
        }
        switch(ch)
        {
            case '+':out_num_add();break;
            case '-':out_num_sub();break;
            case '*':out_num_mul();break;
            case '/':out_num_div();break;
            default:break;
        }
    }
}
void push_num()
{
	top++;
    stack[top]=num;
}
void out_num_add()
{
    tmp=stack[top];
    top--;
    stack[top]=tmp+stack[top];
}
void out_num_sub()
{
    tmp=stack[top];
    top--;
    stack[top]=stack[top]-tmp;
}
void out_num_mul()
{
    tmp=stack[top];
    top--;
    stack[top]=stack[top]*tmp;
}
void out_num_div()
{
    tmp=stack[top];
    top--;
    stack[top]=stack[top]/tmp;
}
void print_num()
{
	if(top == 1)
	{
		printf("Value of expression:%.2f\n",stack[top]);
	}
	else if(top>=N)
	{
		printf("Expression is too complex.\n");
	}
	else if (top == 0)
	{
		printf("Expression is pop.\n");
	}
	else 
	{
		printf("Expression is lack.\n");
	}
}

第七题

#include<stdio.h>
#include<stdlib.h>
#define MAX_DIGITS 10
int max_digits,i;
char ch;

char digits[MAX_DIGITS];
void clear_digits();
void first_line_digits();
void second_line_digits();
void third_line_digits();
int main()
{	
	clear_digits();
	first_line_digits();
	second_line_digits();
	third_line_digits();	
	return 0;
}

void clear_digits()
{
	max_digits=0;
	char ch;
	while((ch=getchar())!='\n')
	{
		if(ch>=48 && ch<=57)
		{
			digits[max_digits]=ch;
			max_digits++;
		}
	}
}
void first_line_digits()
{	
	for(i=0;i<=max_digits;i++)
	{
		ch=digits[i];
		switch(ch)
		{
		case '0':printf(" _ ");break;
		case '1':printf("   ");break;
		case '2':printf(" _ ");break;
		case '3':printf(" _ ");break;
		case '4':printf("   ");break;
		case '5':printf(" _ ");break;
		case '6':printf(" _ ");break;
		case '7':printf(" _ ");break;
		case '8':printf(" _ ");break;
		case '9':printf(" _ ");break;
		}
		printf(" ");
	}
	puts("");
}
void second_line_digits()
{
	for(i=0;i<=max_digits;i++)
	{
		ch=digits[i];
		switch(ch)
		{
		case '0':printf("| |");break;
		case '1':printf("  |");break;
		case '2':printf(" _|");break;
		case '3':printf(" _|");break;
		case '4':printf("|_|");break;
		case '5':printf("|_ ");break;
		case '6':printf("|_ ");break;
		case '7':printf("  |");break;
		case '8':printf("|_|");break;
		case '9':printf("|_|");break;
		}
		printf(" ");
	}
	puts("");
}
void third_line_digits()
{
	for(i=0;i<=max_digits;i++)
	{
		ch=digits[i];
		switch(ch)
		{
		case '0':printf("|_|");break;
		case '1':printf("  |");break;
		case '2':printf("|_ ");break;
		case '3':printf(" _|");break;
		case '4':printf("  |");break;
		case '5':printf(" _|");break;
		case '6':printf("|_|");break;
		case '7':printf("  |");break;
		case '8':printf("|_|");break;
		case '9':printf(" _|");break;
		}
		printf(" ");
	}
	puts("");
}
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值