c语言课程设计总结

运用所学的知识编写较复杂的程序,提高分析问题和解决问题的能力。通过对设计过程的总结,完整叙述对问题的分析、设计、编码、调试和运行过程,给出程序结果,小结设计过程的经验与教训,指出程序改进的思路,最后提交设计报告。实验内容:编写程序并上机调试运行。1、 输入一批人员的数据(包括姓名、人员号、身高),并存放在磁盘文件中。要求完成下列功能:可根据需要增加、修改数据、查看整体数据。2、 背包问题。从n件不同价值,不同重量的物品中选取一部分,在不 超过规定重量的原则下,该部分价值最大。 C语言编程环境

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-24
2.背包问题:#include "stdio.h"
#define N 3 /*物品的最大件数*/
#define M 20 /*背包的载重*/
/*
此函数为贪心算法,参数x表示解向量,参数n表示物品的件数,参数w表示物品的
重量构成的数组,参数m表示背包的载重,参数b表示单位重量收益按非增次数排列
时的下标变化情况。
*/
void GreedyKnapsack(float *x,int n,float *w,float m,int *b)
{
int i;
float u=m;
for(i=0;i<n;i++)x[i]=0;/*对解向量x初始化*/
/*-------------------------------------------------------------*/
/*按最优量度标准选择解的分量*/
for(i=0;i<n;i++)
{
if(w[b[i]]>u)break;
x[b[i]]=1.0;
u=u-w[b[i]];
}
if(i<n)x[b[i]]=u/w[b[i]];
}//主函数
void main()
{
float t;
int a[N];/*存储单位重量收益按非增次数排列时的下标变化情况,例如,N=3时,若p[2]/w[2]>p[0]/w[0]>p[1]/w[1],则a[N]={2,0,1}*/
float x[N];/*解向量*/
int i,j,m,r;
float w[]={18,15,10};/*依次存储n个物品重量的数组*/
float p[]={25,24,15};/*依次存储n个物品收益的数组*/
float pw[N];/*依次存储单位重量收益p[i]/w[i]的数组*/

/*输出各物品重量*/
printf("\n各物品的重量:\n");
for(i=0;i<N;i++)
{
printf("w[%d]=%f\n",i,w[i]);
}

/*输出各物品收益*/
printf("\n各物品装入背包的收益:\n");
for(i=0;i<N;i++)
{
printf("p[%d]=%f\n",i,p[i]);
}

/*计算各物品的单位重量收益*/
for(i=0;i<N;i++)
{
pw[i]=p[i]/w[i];
}

/*输出各物品的单位重量收益*/
printf("\n各物品的单位重量收益如下:\n");
for(i=0;i<N;i++)
{
printf("pw[%d]=%f\n",i,pw[i]);
}

/*以顺序初始化数组a*/
for(i=0;i<N;i++)
{
a[i]=i;
}

/*对单位重量收益数组按非增次序进行排序,并将单位重量收益按非增次数排列时的下标变化情况存放在数组a中*/
for(i=0;i<N;i++)
{
m=i;
t=pw[i];
for(j=i+1;j<N;j++)
{
if(pw[j]>t)
{
m=j;
t=pw[j];
}
}
if(m!=i)
{
t=pw[i];
pw[i]=pw[m];
pw[m]=t;
r=a[i];
a[i]=a[m];
a[m]=r;
}
}

/*输出单位重量收益按非增次数排列时的下标变化情况*/
printf("\n单位重量收益按非增次数排列时的下标变化情况:\n");
for(i=0;i<N;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}

GreedyKnapsack(x,N,w,M,a); /*用贪心算法求解背包问题*/

/*输出解向量*/
printf("\n解向量:\n");
for(i=0;i<N;i++)
{
printf("x[%d]=%f\n",i,x[i]);
}
}本回答被网友采纳
第2个回答  2013-07-24
余超群啊 我居然看见你的疑问了 我也在找思路 要不明天写出来了贴给你??
第3个回答  2013-07-24
不知道怎么搞 帮个忙啊
相似回答