明解C语言中级篇—第三章书本代码

List3—1

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

int main(void)
{
	int human;
	int comp;
	int retry;
	int judge;

	srand(time(NULL));

	printf("猜拳游戏开始!!!\n");
	do {
		comp = rand() % 3;		//生成0~2之间的随机数,其中0对应石头,1对应剪刀,2对应布

		do {
			printf("\n\a石头剪刀布...(0)石头(1)剪刀(2)布:");
			scanf("%d", &human);	//读取玩家手势
		} while (human < 0 || human>2);

		printf("我出");				//显示计算机手势
		switch (comp) {
		case 0:printf("石头");	break;
		case 1:printf("剪刀");	break;
		case 2:printf("布");	break;
		}
		printf("\n");

		judge = (human - comp + 3) % 3;

		switch (judge) {
		case 0:printf("平局。");	break;
		case 1:printf("你输了。");	break;
		case 2:printf("你赢了。");	break;
		}

		do {
			printf("再来一次吗...(0)否(1)是");
			scanf("%d", &retry);
		} while (retry < 0 || retry>1);
	} while (retry == 1);

	return 0;
}

List3—2

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

int main(void)
{
	int human;
	int comp;
	int retry;
	int judge;

	srand(time(NULL));

	printf("猜拳游戏开始!!!\n");
	do {
		comp = rand() % 3;		//生成0~2之间的随机数,其中0对应石头,1对应剪刀,2对应布

		do {
			printf("\n\a石头剪刀布...(0)石头(1)剪刀(2)布:");
			scanf("%d", &human);	//读取玩家手势
		} while (human < 0 || human>2);

		printf("我出");				//显示计算机手势
		switch (comp) {
		case 0:printf("石头,");	break;
		case 1:printf("剪刀,");	break;
		case 2:printf("布,");	break;
		}

		printf("你出");				//显示计算机手势
		switch (human) {
		case 0:printf("石头。");	break;
		case 1:printf("剪刀。");	break;
		case 2:printf("布。");	break;
		}

		printf("\n");

		judge = (human - comp + 3) % 3;

		switch (judge) {
		case 0:printf("平局。");	break;
		case 1:printf("你输了。");	break;
		case 2:printf("你赢了。");	break;
		}

		do {
			printf("再来一次吗...(0)否(1)是");
			scanf("%d", &retry);
		} while (retry < 0 || retry>1);
	} while (retry == 1);

	return 0;
}

List3-7

        在List3-2的程序中,表示玩家和计算机的手势的部分是分别用switch语句实现的,程序将近有10行。而改良版的程序只有1行,非常简洁。

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

int main(void)
{
	int i;
	int human;
	int comp;
	int judge;
	int retry;
	char *hd[] = { "石头","剪刀","布" };			//手势

	srand(time(NULL));				//设定随机数种子

	printf("猜拳游戏开始!!!\n");

	do {
		comp = rand() % 3;			//用随机数生成(0~2)之间的随机数
		do {
			printf("\n\a石头剪刀布...");
			for (i = 0; i < 3; i++)
				printf(" (%d)%s", i, hd[i]);
			printf(":");
			scanf("%d", &human);	//读取玩家手势
		} while (human < 0 || human>2);
		printf("我出%s,你出%s。\n", hd[comp], hd[human]);

		judge = (human - comp + 3) % 3;
		switch (judge) {
		case 0:printf("平局。");	break;
		case 1:printf("你输了。");	break;
		case 2:printf("你赢了。");	break;
		}

		printf("再来一次吗...(0)否(1)是:");
		scanf("%d", &retry);
	} while (retry == 1);

	return 0;
}

    

List3-8

#include <stdio.h>
int main(void)
{
	int i;
	int human;	//玩家的手势
	int comp;	//计算机的手势
	int judge;	//胜负
	int retry;	//再来一次?
	char *hd[] = { "石头","剪刀","布" };

	printf("猜拳游戏开始!!!");
	do {
		do {
			printf("\n\a石头剪刀布...");
			for (i = 0; i < 3; i++)
				printf("(%d)%s", i, hd[i]);
			putchar(':');
			scanf("%d", &human);
		} while (human < 0 || human>2);
		comp = (human + 2) % 3;		//计算机后出

		printf("你出%s,我出%s。\n", hd[human], hd[comp]);

		judge = (human - comp + 3) % 3;

		switch (judge) {
		case 0:printf("平局。"); break;
		case 1:printf("你输了。"); break;
		case 2:printf("你赢了。"); break;
		}

		printf("再来一次吗...(0否)(1)是:");
		scanf("%d", &retry);
	} while (retry == 1);
	return 0;
}

List3-9

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

int human;		//玩家的手势
int comp;		//计算机的手势
int win_no;		//玩家获胜次数
int lose_no;	//玩家失败次数
int draw_no;	//平局次数

char *hd[] = { "石头","剪刀","布" };	//手势

/*---初始处理---*/
void initialize(void)
{
	win_no = 0;		//玩家获胜次数
	lose_no = 0;	//玩家失败次数
	draw_no = 0;	//平局次数

	srand(time(NULL));	//设定随机数钟子

	printf("猜拳游戏开始!!!\n");
}

/*---运行猜拳游戏(读取、生成手势)---*/
void jyanken(void)
{
	int i;

	comp = rand() % 3;		//用随机数生成计算机的手势0~2

	do {
		printf("\n\a石头剪刀布...");
		for (i = 0; i < 3; i++)
			printf("(%d)%s ", i, hd[i]);
		printf(":");
		scanf("%d", &human);	//读取玩家手势
	} while (human < 0 || human>2);
}

/*---更新胜利、失败、平局次数---*/
void count_no(int result)
{
	switch (result) {
	case 0:	draw_no++;	break;
	case 1:	lose_no++;	break;
	case 2:	win_no++;	break;
	}
}

/*---显示结果---*/
void disp_result(int result)
{
	switch (result) {
	case 0:	printf("平局。");	break;
	case 1:	printf("你输了。");	break;
	case 2:	printf("你赢了。");	break;
	}
}

/*---确认是否再次挑战---*/
int confirm_retry(void)
{
	int x;

	printf("再来一次吗...(0)否(1)是");
	scanf("%d", &x);

	return x;
}

int main(void)
{
	int judge;		//胜负
	int retry;		//再来一次?

	initialize();	//初始化

	do {
		jyanken();	//运行猜拳游戏
		/*显示计算机和玩家的手势*/
		printf("你出%s,我出%s。\n", hd[human], hd[comp]);

		judge = (human - comp + 3) % 3;	//判断胜负
		count_no(judge);
		disp_result(judge);
		retry = confirm_retry();
	} while (retry == 1);
	printf("%d胜%d负%d平。\n", win_no, lose_no, draw_no);
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN是一个知名的IT技术社区平台,提供了大量的编程技术文章和教程。《明解C语言中级》是在CSDN上发布的一关于C语言中级知识的解析文章。 在这文章中,作者通过详细解释C语言中级的知识点,帮助读者深入理解C语言的高级特性和用法。文章内容通常包括数据类型、数组、指针、结构体、动态内存分配等重要的知识点。 首先,作者会从数据类型开始介绍,包括整型、浮点型、字符型等基本数据类型的特点和使用方法。然后,会介绍数组的定义和使用,包括一维数组和多维数组的创建、访问及操作等。接着,作者会详细讲解指针的概念和用法,包括指针的定义、指针运算、指针与数组的关系等。同时,还会介绍结构体的定义和使用,以及结构体数组和指向结构体的指针等相关内容。 此外,文章还会涉及一些进阶的内容,如动态内存分配和内存管理等。作者会通过实例代码和详细的解释来说明这些概念和技术的使用方法和注意事项。 通过阅读《明解C语言中级》这文章,读者可以系统地学习和掌握C语言中级知识,了解C语言的高级特性和用法,并能够运用这些知识解决实际问题。 总之,CSDN上的《明解C语言中级》是一详细解析C语言中级知识的文章,适合想要提升自己C语言编程水平的读者阅读和学习。通过这文章,读者可以加深对C语言的理解,提高编程技巧和解决问题的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值