黄金分割点(第五周 c语言版)
在上一周,学习其他课程的同时,用C语言编写了黄金分割点小游戏。因为要做界面需要mfc,当时学的时候还做了个简单的计算器。目前c++的知识忘的差不多了,所以就先用C语言来实现算法。打算接下来的一周复习c++,做界面。以下是代码:
#include<stdio.h>
#include<math.h>
#include"windows.h"
double getG(int* a,int n);
void getdif(double* a,double * b,int n);
void end(double* b,int* compare,int n);
void rank(int* score,int* c,int* d,int n);
void main()
{
int i,n,m,j;
double a[20],b[20]; //a保存数字,b保存差值,c保存b数组的值,d为排好序的下标
int score[20],d[20],c[20];
int compare[2]={0,0};
for(i=0;i<20;i++)
{
a[i]=0;
score[i]=0;
b[i]=0;
c[i]=0;
d[i]=0;
}
printf("请输入共进行几轮:");
scanf("%d",&m);
printf("请输入玩家人数:");
scanf("%d",&n);
for(j=0;j<m;j++)
{
printf("开始第%d轮游戏\n",j+1);
for(i=0;i<n;i++)
{
printf("请输入第%d个玩家的数字:\n",i+1);
scanf("%lf",&a[i]);
}
for(i=0;i<n;i++)//计算分数
{
getdif(a,b,n);
end(b,compare,n);
if(b[i]==b[compare[0]])
score[i]=score[i]+n;
else if(b[i]==b[compare[1]])//注意用else if
score[i]=score[i]-2;
printf("%d号玩家分数为:%d\n",i+1,score[i]);
}
system("pause");
system("cls");
}
printf("-----------成绩总排名-----------\n");
rank(score,c,d,n);
for(i=0;i<n;i++)
{
printf("第%d名:%d号玩家%d\n",i+1,d[i],score[i]);
}
}
double getG(double* a,int n) //求G值
{
int i;
double sum=0,ave,G;
for(i=0;i<n;i++)
{
sum=sum+a[i];
}
ave=sum/n;
G=ave*0.618;
return G;
}
void getdif(double* a,double * b,int n) //将差值存在数组b中,defference,val:差值;
{
int i;
double difference,val;
double c = getG(a,n);
for(i=0;i<n;i++)
{
difference=a[i]-c;
val=fabs(difference);
b[i]=val;
}
}
void end(double* b,int* compare,int n) //通过比较差值的大小,选出最小和最大的。保存最小值和最大值的下标
{
int i;
double max,min;
max=b[0];
min=b[0];
for(i=0;i<n;i++)
{
if(min>b[i])
{
min=b[i];
compare[0]=i;//小
}
if(max<b[i])
{
max=b[i];
compare[1]=i;//大
}
}
}
void rank(int* score,int* c,int* d,int n)
{
int i,q,temp=0;
for(i=0;i<n;i++)
{
c[i]=score[i];
}
for(i=1;i<n;i++)
for(q=0;q<n-i;q++) //冒泡排序
if(score[q]<score[q+1])
{
temp=score[q];
score[q]=score[q+1];
score[q+1]=temp;
}
for(i=0;i<n;i++)
{ //数组排序并输出原位置
for(q=0;q<n;q++)
{
if(score[i]==c[q])
{
d[i]=q+1;
c[q]=-100;
break;
}
}
}
}
写的时候出现好多问题,传值不匹配,逻辑错误等等。写最后一个对成绩进行排序的子函数时,我的想法是这样的:先将分数存到一个数组里,再对分数进行冒泡排序,最后用排好序的数组对存原分数的数组进行排序,但是结果一直是错误的,如下图:

想了好久到底是哪里出了问题。。原来我忽略了出现相同分数的问题。于是再改,只需把遍历后的值赋一个大一点的跟正常分数区分开即可。这种方法比较麻烦,但是比较好理解,还可用快速排序。改好的子程序结果如下图:

黄金分割点(第五周 c语言版)的更多相关文章
- C语言程序设计I—第五周教学
第五周教学总结(29/9-7/10) 本周为国庆节放假,周六周日提前补课,计算机专业已补,软件专业未补,由于国庆放假冲课不补,因此,软件专业在整体进度上落后计算机一次课,估计我要特别抽时间才能将进度拉 ...
- 程序设计入门-C语言基础知识-翁恺-第五周:函数-详细笔记(五)
目录 第五周:函数 5.1 函数 5-2 使用函数 5.3 课后习题 第五周:函数 5.1 函数 什么是函数? 函数是一块代码,接受零个或多个参数,做一件事情,并返回零个或一个值. 函数声明语法 返回 ...
- C语言程序设计II—第五周教学
第五周教学总结(25/3-31/3) 教学内容 本周的教学内容为:第七章 数组 7.3 字符串. 课前准备 在博客园发布作业:2019春第五周作业 第四周作业讲解视频:A Programing Vid ...
- 20145213《Java程序设计》第五周学习总结
20145213<Java程序设计>第五周学习总结 教材学习内容总结 "素衣莫起风尘叹,犹及清明可到家."每每念此,不得不心疼自己.古人清明长假都进城耍了,还担心自己清 ...
- 20145218 《Java程序设计》第五周学习总结
20145218 <Java程序设计>第五周学习总结 教材学习内容总结 异常 程序中总有些意想不到的状况所引发的错误,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失 ...
- 20155304 2016-2017-2 《Java程序设计》第五周学习总结
20155304 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 try catch JVM会先尝试执行try区块中的内容,若发生错误且与catch后 ...
- 20162327WJH第五周作业
学号 20162327 <程序设计与数据结构>第5周学习总结 教材学习内容总结 1.java是一种面向对象的语言.面向对象是一种编程方法.更是一种思维方式. 2.面向对象编程的终极目标是消 ...
- 2019春第五周作业Compile Summarize
这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 在这里 我在这个课程的目标是 能够精通关于数组内部运作原理 这个作业在哪个具体方面帮助我实现目标 如何输出一行的连续字符 参考文献与网址 ...
- 20155313 2016-2017-2 《Java程序设计》第五周学习总结
20155313 2016-2017-2 <Java程序设计>第五周学习总结 教材内容学习 第八章 异常处理 程序中总有些意想不到的状况所引发的错误,Java中的错误也以对象方式呈现为ja ...
随机推荐
- Python基础5
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...
- 微信jsapi退款操作
引自网络“ 前期准备:当然是搞定了微信支付,不然怎么退款,这次还是使用官方的demo.当然网上可能也有很多大神自己重写和封装了demo,或许更加好用简洁,但是我还是不提倡用,原因如下:(1)可能功能不 ...
- oracle 批量更新merge语句
merge into (SELECT * FROM QUERY_DB1.test_MPOS ) T1 using (SELECT FLAG FLAG1,IN_MNO FROM QUERY_DB1.t ...
- WorldWind源码剖析系列:绘制参数类DrawArgs
绘制参数类DrawArgs主要对绘制时需要的对象如:设备对象Microsoft.DirectX.Direct3D.Device.Microsoft.DirectX.Direct3D.Font字体对象. ...
- Grunt-jsdoc生成JS API文档
Grunt-jsdoc生成JS API文档 具体的请看官网 https://github.com/krampstudio/grunt-jsdoc 一:首先确保本机电脑上是否已经安装了nodejs和np ...
- 【转】VISUAL STUDIO 2008代码指标为您节省资金
转自:https://www.geekzone.co.nz/vs2008/4773 Visual Studio 2008 Team Developer和Team Suite版本中提供的许多新功能之一是 ...
- 第13章 GPIO—位带操作
第13章 GPIO—位带操作 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...
- 学习ASP.NET Core,你必须了解无处不在的“依赖注入”(转载)
ASP.NET Core的核心是通过一个Server和若干注册的Middleware构成的管道,不论是管道自身的构建,还是Server和Middleware自身的实现,以及构建在这个管道的应用,都需要 ...
- spring boot项目配置RestTemplate超时时长
配置类: @Configuration public class FeignConfiguration { @Bean(name="remoteRestTemplate") pub ...
- centos安装redis并设置开机启动
1.通过yum安装: yum install redis 2.设置redis.conf中daemonize为yes.设置密码: requirepass 3.安装完后的启动脚本是完善的,/etc/ini ...