IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 明解C语言(中级篇)——第三章习题 -> 正文阅读

[C++知识库]明解C语言(中级篇)——第三章习题

练习3-1

#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 integrate(int result)
{
	switch (result) {
	case 0:	draw_no++;	printf("平局。");	break;
	case 1:	lose_no++;	printf("你输了。");	break;
	case 2:	win_no++;	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;	//判断胜负
		integrate(judge);
		retry = confirm_retry();
	} while (retry == 1);
	printf("%d胜%d负%d平。\n", win_no, lose_no, draw_no);
	return 0;
}

练习3-2

? ? ? ? 直接在书本代码的基础上改的,加入了标识符game_no和i,分别表示玩家想玩几局以及世纪玩了几局。

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

int human;		//玩家的手势
int comp;		//计算机的手势
int win_no;		//玩家获胜次数
int lose_no;	//玩家失败次数
int draw_no;	//平局次数
int game_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 i = 0;			//玩了几局
	int judge;		//胜负
	int retry;		//再来一次?

	printf("请问你打算玩几局:");
	scanf("%d", &game_no);

	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();
		i++;
	} while (i < game_no);
	printf("%d胜%d负%d平。\n", win_no, lose_no, draw_no);
	return 0;
}

练习3-3

? ? ? ? 本题使用do{}while()循环来使comp只能取0或2

#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;

	do {
		comp = rand() % 3;		//用随机数生成计算机的手势0或2
	} while (comp == 1);

	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;
}

练习3-4

#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("平局。\n");	break;
	case 1:	printf("你输了。\n");	break;
	case 2:	printf("你赢了。\n");	break;
	}
}

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

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

	return x;
}

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

	initialize();	//初始化


	comp = 0;		//设定电脑第一次出石头
	printf("\n\a石头剪刀布...");
	for (i = 0; i < 3; i++)
		printf("(%d)%s ", i, hd[i]);
	printf(":");
	scanf("%d", &human);	//读取玩家手势
	printf("你出%s,我出%s。\n", hd[human], hd[comp]);	//输出电脑手势和玩家手势
	judge = (human - comp + 3) % 3;	//判断胜负
	count_no(judge);
	disp_result(judge);
	printf("再来一次吗...(0)否(1)是");
	scanf("%d", &retry);
	if (retry == 0) {
		printf("%d胜%d负%d平。\n", win_no, lose_no, draw_no);
		return 0;			//若玩家只进行一次猜拳,则程序结束
	}
	

	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;
}

练习3-5

? ? ? ? 本题单独写了houchu(后出)程序,用于第5次、第10次、第15次...猜拳时电脑后出。

? ? ? ? 在两种游戏模式中,有限模式会使用一个for循环。

#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("平局。\n");	break;
	case 1:	printf("你输了。\n");	break;
	case 2:	printf("你赢了。\n");	break;
	}
}

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

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

	return x;
}

/*---计算机后出---*/
void houchu(void)
{
	int i;

	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);
	comp = (human + 2) % 3;
}


int main(void)
{
	int i=1;		//玩家在进行第i次猜拳
	int j;			//游戏模式
	int k;			//玩家想玩几次
	int judge;		//胜负
	int retry;		//再来一次?

	printf("请选择游戏模式...(0)无限模式(1)有限模式");
	scanf("%d", &j);

	

	if (j == 0) {
		initialize();	//初始化
		do {
			if (i % 5 == 0)			//%的优先级高于==
				houchu();			//当i是5的倍数时,电脑后出

			else 
				jyanken();			//运行猜拳游戏

			printf("你出%s,我出%s。\n", hd[human], hd[comp]);
			judge = (human - comp + 3) % 3;	//判断胜负
			count_no(judge);
			disp_result(judge);
			retry = confirm_retry();

			i++;					//每次猜拳结束后i加1
		} while (retry == 1);
	}
	else {
		printf("请问您想玩几次:");
		scanf("%d", &k);
		initialize();	//初始化
		for (i = 1; i <= k; i++)		//计算机会玩k次猜拳
		{
			if (i % 5 == 0)	当i是5的倍数时,电脑后出
				houchu();
			else
				jyanken();
			printf("你出%s,我出%s。\n", hd[human], hd[comp]);
			judge = (human - comp + 3) % 3;	//判断胜负
			count_no(judge);
			disp_result(judge);
		}
	}
	


	printf("%d胜%d负%d平。\n", win_no, lose_no, draw_no);
	return 0;
}

练习3-6

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.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("平局。\n");	break;
	case 1:	printf("你输了。\n");	break;
	case 2:	printf("你赢了。\n");	break;
	}
}

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

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

	return x;
}

/*---计算机后出---*/
void houchu(void)
{
	int i;

	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);
	comp = (human + 2) % 3;
}


int main(void)
{
	int i;
	int j;			//游戏模式
	int k;			//玩家想玩几次
	int judge;		//胜负
	int retry;		//再来一次?
	int record_hd[128];	//记录下每次的手势
	int record_judge[128];	//记录下每次的输赢,judge=0平局;judge=1,玩家失败;judge=2玩家获胜

	printf("请选择游戏模式...(0)无限模式(1)有限模式");
	scanf("%d", &j);

	

	if (j == 0) {
		initialize();	//初始化
		i = 1;
		do { 		
			if (i % 5 == 0)			//%的优先级高于==
				houchu();			//当i是5的倍数时,电脑后出

			else 
				jyanken();			//运行猜拳游戏

			printf("你出%s,我出%s。\n", hd[human], hd[comp]);
			judge = (human - comp + 3) % 3;	//判断胜负
			count_no(judge);
			disp_result(judge);
			record_hd[i-1] = human;
			record_judge[i-1] = judge;
			retry = confirm_retry();
			i++;					//在第n次结束时,i=n+1;但是两个数组都只进行了i-1次记录
		} while (retry == 1);
	}
	else {
		printf("请问您想玩几次:");
		scanf("%d", &k);
		initialize();	//初始化
		for (i = 1; i <= k; i++)		//计算机会玩k次猜拳
		{
			if (i % 5 == 0)	当i是5的倍数时,电脑后出
				houchu();
			else
				jyanken();
			printf("你出%s,我出%s。\n", hd[human], hd[comp]);
			judge = (human - comp + 3) % 3;	//判断胜负
			count_no(judge);
			disp_result(judge);
			record_hd[i - 1] = human;
			record_judge[i - 1] = judge;
		}								//完成最后一次猜拳,i=k;但是两个数组都只进行了i-1次记录
	}
	
	for (j = 0; j< i-1; j++) {				//模式1与模式2中,玩家都进行i-1次猜拳游戏
		printf("第%d次玩家手势:", j + 1);
		switch (record_hd[j]) {
		case 0:printf("石头");	break;
		case 1:printf("剪刀");	break;
		case 2:printf("布  ");	break;
		}
		printf(",");

		switch (record_judge[j]) {
		case 0:	printf("平局。\n");	break;
		case 1: printf("玩家失败。\n"); break;
		case 2: printf("玩家获胜。\n"); break;
		}
	}

	printf("%d胜%d负%d平。\n", win_no, lose_no, draw_no);
	return 0;
}

练习3-7

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

int main(void)
{
	int i;
	int human;			//玩家手势
	int comp1, comp2;	//计算机1的手势、计算机2的手势
	int judge1, judge2, judge3;	//judge1代表玩家与计算机1的胜负,judge2代表玩家与计算机2的输赢,judge3代表计算机1与计算机2的输赢
	int retry;
	char *hd[] = { "石头","剪刀","布" };

	srand(time(NULL));

	printf("猜拳游戏开始!!!\n");
	do {
		comp1 = rand() % 3;
		comp2 = rand() % 3;

		do {
			for (i = 0; i < 3; i++)
				printf("(%d)%s", i, hd[i]);
			printf(":");
			scanf("%d", &human);
		} while (human < 0 || human>2);
		judge1 = (human - comp1 + 3) % 3;
		judge2 = (human - comp2 + 3) % 3;
		judge3 = (comp1 - comp2 + 3) % 3;

		printf("玩家与1号电脑:");
		printf("我出%s,你出%s。\n", hd[comp1], hd[human]);
		switch (judge1) {
		case 0:printf("平局。\n");		break;
		case 1:printf("玩家失败。\n");	break;
		case 2:printf("玩家获胜。\n");	break;
		}

		printf("玩家与2号电脑:");
		printf("他出%s,你出%s。\n", hd[comp2], hd[human]);
		switch (judge2) {
		case 0:printf("平局。\n");		break;
		case 1:printf("玩家失败。\n");	break;
		case 2:printf("玩家获胜。\n");	break;
		}

		printf("1号电脑与2号电脑:");
		printf("他出%s,我出%s。\n", hd[comp2], hd[comp1]);
		switch (judge3) {
		case 0:printf("平局。\n");		break;
		case 1:printf("1号电脑失败。\n");	break;
		case 2:printf("1号电脑获胜。\n");	break;
		}

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

练习3-8

四人对战猜拳游戏,规则如下:

(1)四人出拳相同:平局;

(2)四人共计出拳两种:有赢家有输家;

(3)四人共计出拳三种,即石头剪刀布:本局无效。

没什么思路。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-08 13:34:10  更:2021-08-08 13:34:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 17:11:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码