黄金分割点(第五周 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;
}

}
}

}

写的时候出现好多问题,传值不匹配,逻辑错误等等。写最后一个对成绩进行排序的子函数时,我的想法是这样的:先将分数存到一个数组里,再对分数进行冒泡排序,最后用排好序的数组对存原分数的数组进行排序,但是结果一直是错误的,如下图:

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

时间: 2024-10-27 19:46:20

黄金分割点(第五周 c语言版)的相关文章

[JAVA]翁恺老师零基础学java语言第五周素数例题中continue的困惑

第五周求前50个素数的例子中,continue跳出当次循环后的疑问 例题中的这段: ======================================== MAIN_LOOP: for(int x = 3; cnt<50 ;x++) { for (int i=0 ;i<cnt ; i++) { if ( x%primes[i] == 0) { continue MAIN_LOOP; } } } =============================================

20169217 2016-2017-2 《网络攻防实践》第五周学习总结

教材内容总结及扩展 Web体系结构 Web体系结构,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统.缓存系统.分布式存储系统等密不可分. 大型动态应用系统平台主要是针对于大流量.高并发网站建立的底层系统架构.大型网站的运行需要一个可靠.安全.可扩展.易维护的应用系统平台做为支撑,以保证网站应用的平稳运行. 大型动态应用系统又可分为几个子系统: 1)Web前

[JAVA_开课吧资源]第五周 I/O操作、多线程、网络编程技术

主题一 I/O操作 » 流的概念 在面向对象语言中, 数据的输入和输出都是通过数据流来实现的.数据流是一组有顺序.有起点和终点的字符集合.就好比是两个不同的池子,一个池子中存满了水,而另一个池子中则没有任何的东西,在这两个水池中安放一个管子,水就可以从一个池子流向另一个池子了.在从一个池子向另一个池子输送水的过程中,水扮演的角色就是数据流. [请点击查看更多内容 转自文章] » Stream stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源.在Java的IO中,所有

20172330 2017-2018-1 《Java程序设计》第五周学习总结

20172330 2017-2018-1 <Java程序设计>第五周学习总结 教材学习内容总结 第五章 首先是对各种各种运算符的了解:刚开始以为相等就是=,还有其他一些符号都挺简单的,然后在进一步学习知道了"=="与"!="都是相等型运算符,而"!","&&","||"则分别代表非,与,或. 教材学习中的问题和解决过程 其次是if语句: 1.if语句由保留字if.紧随其后的布尔表

20145307《信息安全系统设计基础》第五周学习总结PT2

20145307<信息安全系统设计基础>第五周学习总结PT2: 教材学习内容总结 之前有第一部分学习总结: http://www.cnblogs.com/Jclemo/p/5962219.html 以下为第二部分 执行汇编命令:gcc –s xxx.c –o xxx.s反汇编命令:objdump –d xxx 64位处理器得到32代码的命令:gcc –m32 –s xxx.c Ltme: 1.三种操作数: 立即数:常数值.表示为$c标准表示的整数. 寄存器:表示某个寄存器的内容. 存储器:根据

20145326蔡馨熠《信息安全系统设计》第五周学习总结

教材学习内容总结 书上有的内容我就不重复赘述了,只需要将部分重要的知识点归纳总结一下. 1.使用GDB的堆栈跟踪功能(GDB中有很多针对调用堆栈的命令,都需要一个目标栈帧,例如打印局部变量值的命令) 在栈帧之间切换 frame args 将当前栈帧设置为args(编号或Address)指定的栈帧,并打印该栈帧的简要信息. up n 向上回退n个栈帧(更外层),n默认为1. down n 向下前进n个栈帧(更内层),n默认为1. 打印栈帧信息(不移动栈帧) frame 打印当前栈帧的简要信息. i

第五周学习进度

  第五周 所花时间(包括上课) 19h 代码量(行) 400+ 博客量 3 了解到的知识 1.对最大子数组进行了改进和设计 2.将四则运算发布为网页版,但是没有成功

《机电传动控制》第五周作业

机电传动控制第五周作业 一.传动电机或控制电机在工业或生活中的应用: 1.电气伺服传动领域 在要求速度控制和位置控制(伺服)的场合,特种电机的应用越来越广泛.开关磁阻电动机.永磁无刷直流电动机.步进电动机.永磁交流伺服电动机.永磁直流电动机等都已在数控机床.工业电气自动化.自动生产线.工业机器人以及各种军.民用装备等领域获得了广泛应用.如交流伺服电机驱动系统应用在凹版印刷机中,以其高控制精度实现了极高的同步协调性,使这种印刷设备具有自动化程度高.套准精度高.承印范围大.生产成本低.节约能源.维修

信息安全设计基础第五周学习总结

信息安全系统设计基础第五周学习总结 [学习时间:10小时] [学习内容:第三章:程序的机器表示] 一.教材内容 1.X86 寻址方式的变化: 1 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全: 2 8086的分段模式: 3 IA32的带保护模式的平坦模式 2.机器编程的两种抽象: 1)指令集体系结构(Instruction set architecture,ISA)——定义指令格式以及每条指令执行之后对状态的影响.大多数ISA将程序行为描述成按顺序执行的: 2)虚拟地址 3.一些处理