在上一周,学习其他课程的同时,用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语言版)的更多相关文章

  1. C语言程序设计I—第五周教学

    第五周教学总结(29/9-7/10) 本周为国庆节放假,周六周日提前补课,计算机专业已补,软件专业未补,由于国庆放假冲课不补,因此,软件专业在整体进度上落后计算机一次课,估计我要特别抽时间才能将进度拉 ...

  2. 程序设计入门-C语言基础知识-翁恺-第五周:函数-详细笔记(五)

    目录 第五周:函数 5.1 函数 5-2 使用函数 5.3 课后习题 第五周:函数 5.1 函数 什么是函数? 函数是一块代码,接受零个或多个参数,做一件事情,并返回零个或一个值. 函数声明语法 返回 ...

  3. C语言程序设计II—第五周教学

    第五周教学总结(25/3-31/3) 教学内容 本周的教学内容为:第七章 数组 7.3 字符串. 课前准备 在博客园发布作业:2019春第五周作业 第四周作业讲解视频:A Programing Vid ...

  4. 20145213《Java程序设计》第五周学习总结

    20145213<Java程序设计>第五周学习总结 教材学习内容总结 "素衣莫起风尘叹,犹及清明可到家."每每念此,不得不心疼自己.古人清明长假都进城耍了,还担心自己清 ...

  5. 20145218 《Java程序设计》第五周学习总结

    20145218 <Java程序设计>第五周学习总结 教材学习内容总结 异常 程序中总有些意想不到的状况所引发的错误,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失 ...

  6. 20155304 2016-2017-2 《Java程序设计》第五周学习总结

    20155304 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 try catch JVM会先尝试执行try区块中的内容,若发生错误且与catch后 ...

  7. 20162327WJH第五周作业

    学号 20162327 <程序设计与数据结构>第5周学习总结 教材学习内容总结 1.java是一种面向对象的语言.面向对象是一种编程方法.更是一种思维方式. 2.面向对象编程的终极目标是消 ...

  8. 2019春第五周作业Compile Summarize

    这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 在这里 我在这个课程的目标是 能够精通关于数组内部运作原理 这个作业在哪个具体方面帮助我实现目标 如何输出一行的连续字符 参考文献与网址 ...

  9. 20155313 2016-2017-2 《Java程序设计》第五周学习总结

    20155313 2016-2017-2 <Java程序设计>第五周学习总结 教材内容学习 第八章 异常处理 程序中总有些意想不到的状况所引发的错误,Java中的错误也以对象方式呈现为ja ...

随机推荐

  1. python第三十八课——面向对象(一)

    1.面向对象:(思想) 面向:看.关注.瞅 对象:个体.实体.实例.结果单词:object在python中一些皆对象 面向过程:(思想) 面向:看.关注.瞅 过程:经过.经历.从头到尾 使用一些生活中 ...

  2. DJI Mobile SDK 新教程

    DJI Mobile SDK 新教程发布! http://bbs.dji.com/thread-20282-1-1.html Android 如何创建一个航拍相机App: 你将学到如何配置DJI Mo ...

  3. 2.2.3 TableLayout(表格布局)

    3.如何确定行数与列数 ①如果我们直接往TableLayout中添加组件的话,那么这个组件将占满一行!!! ②如果我们想一行上有多个组件的话,就要添加一个TableRow的容器,把组件都丢到里面! ③ ...

  4. Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP

    <?php class Car { var $color = "add"; function Car($color="green") { $this-&g ...

  5. scrapy的request的meta参数是什么意思?

    作者:乌尔班链接:https://www.zhihu.com/question/54773510/answer/146971644来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  6. 爬虫header和cookie

    def on_start(self): self.crawl('http://bbs.byr.cn/board/Python', headers={'X-Requested-With': 'XMLHt ...

  7. QQ 的一些URI 协议命令

    //System.Diagnostics.Process.Start(@"C:\Program Files\Tencent\TIM\Bin\Timwp.exe", "te ...

  8. go语言之行--结构体(struct)详解、链表

    一.struct简介 go语言中没有像类的概念,但是可以通过结构体struct实现oop(面向对象编程).struct的成员(也叫属性或字段)可以是任何类型,如普通类型.复合类型.函数.map.int ...

  9. # RocEDU.课程设计2018 第三周进展 博客补交

    RocEDU.课程设计2018 第三周进展 博客补交 本周计划完成的任务 (1).本周计划完成在平板电脑上实现程序的功能,跟第二周计划完成任务基本相似. 本周实际完成情况 (1).实际完成情况还差最后 ...

  10. 【HNOI2016】网络

    题面 题解 考虑整体二分. 定义整体二分函数solve(l, r, ql, qr)表示操作权值在\([l, r]\)中,对\([ql, qr]\)的询问进行二分. 这样的话check就会很简单,先按照 ...