week4c:个人博客作业
6.具体程序:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void Udecide_n();
int  Decide_n();
void Delete_n(int n);           //申请空间的释放
void Delete_u();                //申请空间的释放
typedef struct Pnode            //一个人的信息:输入的数,获得的分数
{
	float number;              //输入的数
	float absoluten_n;         //与黄金点差的绝对值
	int grade;				   //获得的分数
}Pnode;
typedef struct PNode
{
	float number;              //输入的数
	float absoluten_n;         //与黄金点差的绝对值
	int grade;				   //获得的分数
	struct PNode * next;
};
typedef struct Decide_Node     //决定进行游戏轮数的结构体
{
	float average;               //黄金点的值
	Pnode *node;               //
}Decide_Node;
typedef struct U_decide_Node   //未决定进行游戏轮数的结构体
{
	float average;             //黄金点的值
	PNode *node;               //每轮数据的成员
    struct U_decide_Node  *next;
}U_decide_Node;
Decide_Node   *Dhead;         //决定游戏使用的是结构数组,结构数组的头部
U_decide_Node *udhead, *udnext, *udtail;  //未决定的游戏轮数的,游戏每一局由一个结构体来表示,使用结构的3个指针
PNode *phead, *pnext, *ptail;  //每一轮游戏下的,参加的游戏的人是不确定得是,使用结构来表示,这里是表示人结构的3个指针
void main()
{
	int i;
	int n;                   //知道游戏轮数的   游戏轮数
	printf("\t\t\t\t┌───────┐\n");
	printf("\t\t\t\t│              │\n");
	printf("\t\t\t\t│  黄金点游戏  │\n");
	printf("\t\t\t\t│              │\n");
	printf("\t\t\t\t└───────┘\n");;
	printf("游戏规则如下:\n");
	printf("N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100)");
	printf("交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数)," );
	printf("得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。\n");
	printf("1.没有决定游戏进行几轮,先来一次\n2.决定游戏进行几轮\n3.退出\n"); //每一轮的次数是N次
next2:printf("请选择选项:");
	scanf("%d",&i);
	switch (i)
	{
	case 1: Udecide_n(); break;
	case 2:
	{
			  n = Decide_n();
break;
	}
	case 3:; break;
	default:
	{
			   printf("请重新输入\n");
			   goto next2;
	}
	}
	printf("谢谢惠顾\n");
	Delete_n(n);                             //释放空间
	Delete_u();                              //释放空间
}
void Delete_n(int n)
{
	int i;
	for (i = 0; i < n;i++0)
	{
		free(Dhead[i].node);
	}
	free(Dhead);
}
int Decide_n()
{
	int n;           //玩游戏的总轮数
	int i;           //记录游戏玩到第几轮
	int m;           //玩一轮游戏,参加游戏的人数
	int j;           //在一轮游戏中,玩游戏的人
	float sum;         //一轮游戏中全部输入的数字和,同时也是黄金点的值
	float abmax;       //输入的数与黄金点相差的绝对值最大值
	float abmin;       //输入的数与黄金点相差的绝对值最小值
	int x;           //是否输出每一轮的输入的信息
	printf("请输入要进行的轮数:");
	scanf("%d", &n);
	Dhead = (Decide_Node*)malloc(n*sizeof(Decide_Node));
	if (Dhead == NULL)
	{
		printf("Decide_Node空间申请失败\n");
		exit(1);
	}
	for (i = 0; i < n; i++)
	{
printf("请输入有几个人进行游戏:");
		scanf("%d", &m);
		Dhead[i].node = (Pnode *)malloc(m*sizeof(Pnode));
		if (Dhead[i].node == NULL)
		{
			printf("Dhead[%d].node申请空间失败\n", i);
			exit(1);
		}
		sum = 0;
		for (j = 0; j < m; j++)
		{
			printf("请第%d个人输入数字:", j + 1);
			scanf("%f", &Dhead[i].node[j].number);
			sum = sum + Dhead[i].node[j].number;
		}
		sum = sum / j*0.618;
		Dhead[i].average = sum;
		abmax = 0;
		abmin = 100;
		for (j = 0; j < m; j++)                               //计算每一个输入的数字与黄金的绝对值,并且找出最大绝对值和最小绝对值
		{
			Dhead[i].node[j].absoluten_n = abs(Dhead[i].node[j].number - sum);
			if (abmax < Dhead[i].node[j].absoluten_n)
			{
				abmax = Dhead[i].node[j].absoluten_n;
			}
			if (abmin>Dhead[i].node[j].absoluten_n)
			{
				abmin = Dhead[i].node[j].absoluten_n;
			}
		}
		for (j = 0; j < m; j++)                                 //给每一个参加游戏的人打分
		{
			if (Dhead[i].node[j].absoluten_n == abmax)
			{
				Dhead[i].node[j].grade = -2;
			}
			else if (Dhead[i].node[j].absoluten_n == abmin)
			{
				Dhead[i].node[j].grade = m;
			}
			else
			{
				Dhead[i].node[j].grade = 0;
			}
		}
		printf("黄金点值:%.2f\n",Dhead[i].average);
		printf("输出各自的得分情况\n");
		for (j = 0; j < m; j++)
		{
			printf("第%d个人得分是;%d\n",j+1,Dhead[i].node[j].grade);
		}
next1:	printf("是否要输出所有人数的数字\n");
		printf("1,是\t\t2,否\n");
		printf("请输入选项:");
		scanf("%d", &x);
		switch (x)
		{
		case 1:
		{
				  for (j = 0; j < m; j++)
				  {
					  printf("第%d个人输入的数是:%d\n", j + 1,(int)Dhead[i].node[j].number);
				  }
				  break;
		}
		case 2:break;
		default:
		{
				   printf("输入无效,请重新输入\n");
				   goto next1;
		}
		}
	}
	return n;
}
void Delete_u()
{
	udnext = udhead->next;
	while (udnext)
	{
		phead = udnext->node;
		pnext = phead->next;
		while (pnext)
		{
			phead->next = pnext->next;
			free(pnext);
			pnext = phead->next;
		}
		free(phead);
		udhead->next = udnext->next;
		free(udnext);
		udnext = udhead->next;
	}
	free(udhead);
}
void Udecide_n()
{
	int i;             //是否还有下一个人参与游戏在一轮中中的标志
	int j;             //是否进行下一轮游戏的标志
	int n;             //每轮游戏参与游戏的人
	float sum;         //一轮游戏中全部输入的数字和,同时也是黄金点的值
	float abmax;       //输入的数与黄金点相差的绝对值最大值
	float abmin;       //输入的数与黄金点相差的绝对值最小值
	int x;             //是否输出每一轮的输入的信息
	udhead = (U_decide_Node *)malloc(sizeof(U_decide_Node));
	if (!udhead)
	{
		printf("udhead空间申请失败\n");
		exit(1);
	}
	udtail = udhead;
	while (1)
	{
		udnext = (U_decide_Node *)malloc(sizeof(U_decide_Node));
		if (!udnext)
		{
			printf("udnext空间申请失败\n");
			exit(1);
		}
		udnext->next = NULL;
		udtail->next = udnext;
		udtail = udnext;
		phead = (PNode *)malloc(sizeof(PNode));
		if (!phead)
		{
			printf("phead空间申请失败\n");
			exit(1);
		}
		phead->next = NULL;
		udnext->node = phead;
		ptail = phead;
		sum = 0;
		n = 0;
		printf("请至少输入3个数\n");
		while (1)                                 //构建每一轮游戏的链表
		{
			pnext = (PNode *)malloc(sizeof(PNode));
			if(!pnext)
			{
				printf("pnext空间申请失败\n");
				exit(1);
			}
			pnext->next = NULL;
			ptail->next = pnext;
			ptail = pnext;
			printf("请第%d个人输入:",n+1);
			scanf("%f",&pnext->number);
			n++;
			sum = sum + pnext->number;
			if (n >=3)
			{
	next3:		printf("是否要再输入:\n");
				printf("1.是\t\t2.不是\n");
				printf("请选择选项:");
				scanf("%d", &i);
				if (i == 2)
				{
					break;
				}
				else if (i != 1)
				{
					printf("输入无效请重新输入\n");
					goto next3;
				}
			}
		}
		sum = sum / n*0.618;
		udnext->average=sum;
		abmin = 100;
		abmax = 0;
		pnext = phead->next;
		while (pnext)                                //计算每一个输入的数字与黄金的绝对值,并且找出最大绝对值和最小绝对值
		{
			pnext->absoluten_n = abs(pnext->number - sum);
			if (abmax < pnext->absoluten_n)
			{
				abmax =pnext->absoluten_n;
			}
			if (abmin>pnext->absoluten_n)
			{
				abmin = pnext->absoluten_n;
			}
			pnext = pnext->next;                  
		}
		pnext = phead->next;
		while (pnext)                                // 给每一个参加游戏的人打分
		{
			if (pnext->absoluten_n == abmax)
			{
				pnext->grade = -2;
			}
			else if (pnext->absoluten_n == abmin)
			{
				pnext->grade = n;
			}
			else
			{
				pnext->grade = 0;
			}
			pnext=pnext->next;
		}
		printf("黄金点值:%.2f\n", udnext->average);
		printf("输出各自的得分情况:\n");
		pnext = phead->next;
		n = 0;
		while(pnext)
		{
			printf("第%d个人得分是;%d\n", n+1, pnext->grade);
			n++;
			pnext = pnext->next;
		}
next4:	printf("是否要输出所有人数的数字:\n");
		printf("1,是\t\t2,否\n");
		printf("请输入选项:");
		scanf("%d", &x);
		switch (x)
		{
		case 1:
		{
				  for (n = 0,pnext=phead->next; pnext; n++, pnext = pnext->next)
				  {
					  printf("第%d个人输入的数是:%d\n", n + 1, (int)pnext->number);
				  }
				  break;
		}
		case 2:break;
		default:
		{
				   printf("输入无效,请重新输入\n");
				   goto next4;
		}
		}
next5:	printf("是否要再进行一轮游戏:\n");
		printf("1.是\t\t2.不是\n");
		printf("请选择选项:");
		scanf("%d", &j);
		if (j == 2)
		{
			break;
		}
		else if (j != 1)
		{
			printf("输入无效请重新输入\n");
			goto next5;
		}
}	
}
week4c:个人博客作业的更多相关文章
- 个人博客作业Week1
		个人博客作业Week1 一.问题 通读<构建之法>我有一下几个问题 PM没有参与代码编如何进行管理. 软件工程师的职业资格考试对我们来说很有必要吗. 当我们为用户开发软件时我们需要了解用户 ... 
- Java课程设计——博客作业教学数据分析系统(201521123084 林正晟)
		#课程设计--博客作业教学数据分析系统(201521123084 林正晟) 1.团队课程设计博客链接 博客作业教学数据分析系统 2.个人负责模块或任务说明 学生登陆界面的前端实现和与数据库的连接 学生 ... 
- Java课程设计——博客作业教学数据分析系统(201521123091 李嘉廉)
		#课程设计--博客作业教学数据分析系统(201521123084 李嘉廉) 1.团队课程设计博客链接 博客作业教学数据分析系统 2.个人负责模块或任务说明 數據分析 Kmeans聚類算法實現 多元綫性 ... 
- java课程设计——博客作业教学数据分析系统(201521123083 戴志斌)
		目录 一.团队课程设计博客链接 二.个人负责模块或任务说明 三.自己的代码提交记录截图 四.自己负责模块或任务详细说明 五.课程设计感想 (题外话,终于可以用markdown建目录) 一.团队课程设计 ... 
- Java课程设计——博客作业教学数据分析系统(201521123082 黄华林)
		Java课程设计--博客作业教学数据分析系统(201521123082 黄华林) 一.团队课程设计博客链接 博客作业教学数据分析系统(From:网络五条狗) 二.个人负责模块或任务说明 1.网络爬虫 ... 
- Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)
		#Java语言课程设计--博客作业教学数据分析系统(个人博客) 1.团队课程设计博客链接 [博客作业教学数据分析系统(From:网络五条狗)](http://www.cnblogs.com/fanta ... 
- 团队作业1——团队展示&博客作业查重系统
		团队展示: 1.队名:六个核桃 2.队员学号: 王婧(201421123065).柯怡芳(201421123067组长).陈艺菡(201421123068). 钱惠(201421123071).尼玛( ... 
- C语言第七次博客作业--一二维数组
		一.PTA实验作业 题目1:找鞍点 1. 本题PTA提交列表 2. 设计思路 定义n,i,j,ii,jj,a[7][7],flag,max 输入n for i=0 to i=n for j=0 to ... 
- 2018上C语言程序设计(高级)博客作业样例
		要求一(20分) 完成PTA中题目集名为<usth-C语言高级-第1次作业>中的所有题目. 要求二 PTA作业的总结(20分+30分) 将PTA第1次作业作业中以下2道题的解题思路按照规定 ... 
- C语言最后一次博客作业
		1.当初你是如何做出选择计算机专业的决定的? 一开始选专业的时候,说实话我很纠结也很迷茫,对我来说,中学时代,似乎就只要考好试,做好题就可以了,对于未来想要做啥并没有那么多的规划和想法,偶尔跟基友畅聊 ... 
随机推荐
- 高德地图API(流程法)整理分析
			[高德地图API(流程法)分析]: 前言:公司现在的网约车项目,使用的是高德地图,因为地图导航这一块的功能占比量比较大,为了方便大家对高德地图API的了解和学习使用,使用流程图把高德API分析整理了下 ... 
- 日志工具——log4j
			资料参考自:http://www.codeceo.com/article/log4j-usage.html 关于日志的基本概念以及从入门到实战,请参见:http://www.cnblogs.com/L ... 
- linux-RPM 打包原理 SPEC 编写规范
			一.编写spec脚本 由前面的日志了解到,生成rpm除了源码外,最重要的就是懂得编写.spec脚本.rpm建包的原理其实并不复杂,可以理解为按照标准的格式整理一些信息,包括:软件基础信息,以及安装.卸 ... 
- mfc 带参数的构造函数
			知识点 默认的构造函数 带参数的构造函数 重载构造函数 一.默认的构造函数 二.带参数的构造函数 三.重载构造函数 class Tdate { public: int year;//年 int mon ... 
- c++ 有序二叉树的应用
			实作:以有序二叉树记录学生签到时间及名字,然后以名字升序输出学生签到信息 stricmp,strcmpi 原型:extern int stricmp(char *s1,char * s2); 用法:# ... 
- [WC2011]最大XOR和路径 线性基
			[WC2011]最大XOR和路径 LG传送门 需要充分发掘经过路径的性质:首先注意不一定是简单路径,但由于统计的是异或值,重复走是不会被统计到的,考虑对于任意一条从\(1\)到\(n\)的路径的有效部 ... 
- [NOIp2016]天天爱跑步 线段树合并
			[NOIp2016]天天爱跑步 LG传送门 作为一道被毒瘤出题人们玩坏了的NOIp经典题,我们先不看毒瘤的"动态爱跑步"和"天天爱仙人掌",回归一下本来的味道. ... 
- Codeforces 862D. Mahmoud and Ehab and the binary string (二分)
			题目链接:Mahmoud and Ehab and the binary string 题意: 一道交互题,首先给出一个字符串的长度l.现在让你进行提问(最多15次),每次提问提出一个字符串,会返回这 ... 
- Storm 第三章 Storm编程案例及Stream Grouping详解
			1 功能说明 设计一个topology,来实现对文档里面的单词出现的频率进行统计.整个topology分为三个部分: SentenceSpout:数据源,在已知的英文句子中,随机发送一条句子出去. S ... 
- jQuery中attr()函数 VS prop()函数
			http://www.365mini.com/page/jquery-attr-vs-prop.htm 在jQuery中,attr()函数和prop()函数都用于设置或获取指定的属性,它们的参数和用法 ... 
