主题:那个好心的高手帮忙做一下这几条简单的程序设计题?
Gillian
[专家分:0] 发布于 2005-02-17 03:37:00
[em2][em3] 给些相关资料的网站连接给小女子都可以~感激不尽
死人变态老师竟然要我们做这样的题目~就要开学了~我还没做完555555[em10]
1、 运动会分数统计
任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)
功能要求:1).可以输入各个项目的前三名或前五名的成绩;
2).能统计各学校总分,
3).可以按学校编号、学校总分、男女团体总分排序输出;
4).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)
输出形式:有中文提示,各学校分数为整形
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;
2、 一元多项式计算
任务:能够按照指数降序排列建立并输出多项式;
能够完成两个多项式的相加、相减,并将结果输入;
在上交资料中请写明:存储结构、多项式相加的基本过程的算法(可以使用程序流程图) 、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;
3、 猴子选大王
任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
要求:
输入数据:输入m,n m,n 为整数,n<m
输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号 ,建立一个函数来实现此功能
4、最小生成树问题**
问题描述:若要在n个城市之间建设通信网络,只需要架设n-1条线路即可。
如何以最低的经济建设这个通信网,是一个网的最小生成树
基本要求:
(1)利用克鲁斯卡尔算法求网的最小生成树。
(2)以文本形式输出生成树中各条边以及他们的权值
5、图的建立及输出
任务:建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网,学生可以任选两种类型),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵。
6、拓扑排序
任务:编写函数实现图的拓扑排序。
请尽量写出每一步的算法说明~~~
回复列表 (共25个回复)
21 楼
中国台湾 [专家分:2140] 发布于 2006-06-25 01:01:00
你参考一下
#include<stdio.h>
#include<stdlib.h>
#define MAX_VERTEX_NUM 10
#define ERROR 0
typedef char VertexType;
typedef int VPType;
typedef int Graphkind;
typedef int status;
typedef enum {FALSE, TRUE} boolean;
boolean visit[MAX_VERTEX_NUM];
typedef struct Arcell
{
VPType adj;
}Arcell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct
{
VertexType vex[MAX_VERTEX_NUM];//顶点标志 或者叫代号
int vexnum, arcnum;//点的个数和边的条数
AdjMatrix arcs;
Graphkind kind;//图的类型
}MGraph;
status CreatGraph(MGraph *G) //建立图
{
int i, j, select;
printf("1:建立有向图!\n");
printf("2:建立无向图!\n");
printf("3:请选者种类!\n");
scanf("%d",&select);
if (select == 1)
{
G->kind = 0;
}
else if (select == 2)
{
G->kind = 1;
}
else
{
return ERROR;
}
printf("\n请输入顶点的个数:");
scanf("%d",&G->vexnum);
getchar();// 吃掉内存中的残留数据
printf("\n 请输入顶点的信息(代号)");
for ( i = 0; i < G->vexnum; i++)
{
scanf("%c",&G->vex[i]);//注意一下
}
getchar();
printf("\n 请输入2个顶点之间的相互关系(0表示相邻 1表示不相邻):\n");
for ( i = 0 ; i < G->vexnum; i++)
for ( j = 0; j < G->vexnum; j++)
{
scanf("%d",&G->arcs[i][j].adj);
}
printf("建立成功\n");
return 0;
}
22 楼
中国台湾 [专家分:2140] 发布于 2006-06-25 01:02:00
status qiudu(const MGraph *G)//求度操作
{
int sum1 , sum2 = 0;
int i, j;
if (G->kind == 1)
{
for ( i = 0; i < G->vexnum; i++)
{
sum1=0;
for ( j = 0; j < G->vexnum; j++)
{
if ( G->arcs[i][j].adj == 1)
{
sum1++;
}
}
printf("编号为%c的第%d的点的度为%d\n",G->vex[i], i+1, sum1);
}
}
else
{
for ( i = 0 ; i < G->vexnum; i++)
{
sum1=0, sum2=0;
for ( j = 0 ; j < G->vexnum; j++)
{
if ( G->arcs[i][j].adj == 1)
{
sum1++;
}
if ( G->arcs[j][i].adj == 1)
{
sum2++;
}
}
printf("编号为%d的第%d的点的出度为%d入度为%d\n",G->vex[i], i+1, sum1,sum2);
}
}
return 0;
}
void DFS(MGraph G) //深搜索 这里出现问题
{
int i, j;
void DFS1( MGraph G, int i);//函数声明
for (i = 0 ; i < G.vexnum; i++)
{
visit[i] = FALSE;
}
for (j = 0; j <G.vexnum; j++)
{
if (!visit[j])
DFS1(G,j);//不要用&G 因为G已经是地址了
}
// return 0;
}
void DFS1(MGraph G, int i)
{
int j;
visit[i]=TRUE;
printf("%c",G.vex[i]);
for (j = 0; j < G.vexnum; j++)
{
if ((i != j) && (G.arcs[i][j].adj == 1) && !visit[j])
{
DFS1(G,j);
}
}
// return 0;
}
status BFS( const MGraph *G,int k)//广度搜索
{
int s = 0, g = 0;
int i, j;
char a[MAX_VERTEX_NUM];
for (i = 0; i < G->vexnum; i++)
{
visit[i] = FALSE;
}
printf("%c ",G->vex[k]);
visit[k]=TRUE;
for ( j = 0; j < G->vexnum; j++)
{
a[j] = -1;
}
a[s] = k;
while(a[s]!=-1)
{
int j;
i = a[g];
g++;
for ( j = 0; j < G->vexnum; j++)
{
if (G->arcs[i][j].adj == 1 && !visit[j])
{
printf("%c ",G->vex[j]);
visit[j] = TRUE;
s++;
a[s] = j;
}
}
if ( s == G->vexnum-1)
{
break;
}
}
return 0;
}
int main(void)
{
MGraph G;
int flag, select;
int flag1 = 0;
int k;
while(1)
{
do
{
printf("1:构建图\n");
printf("2:求度\n");
printf("3:深度搜索\n");
printf("4:广度搜索\n");
printf("5:退出\n");
printf("6:请选择\n");
scanf("%d",&select);
if (select == 5)
{
flag = 0;
}
else
{
flag = 1; //这里出错
}
}while(select < 1 || select > 6);
if (flag == 0)
{
break;
}
switch(select)
{
case 1:
flag1 = 1;
CreatGraph(&G);
break;
case 2:
if(flag1 == 1)
{
qiudu(&G);
}
else
{
printf(" 请先建立图\n");
}
break;
case 3:
if(flag1 == 1)
{
printf("进行深度搜索:\n");
DFS(G);
printf("进行深度搜索:\n");
printf("\n");
}
else
{
printf(" 请先建立图\n");
}
break;
case 4:
if(flag1 == 1)
{
printf("请哪个点开始搜索");
scanf("%d",&k);
getchar();
printf("进行广度搜索\n");
BFS(&G,k);
printf("\n");
}
else
{
printf(" 请先建立图\n");
}
break;
default: continue;
}
}
}
23 楼
47656748 [专家分:0] 发布于 2006-06-27 19:09:00
谢谢"中国台湾",不过没法输出图的邻接矩阵,还有吗?
谢谢!
24 楼
冰中淹死的鱼 [专家分:20] 发布于 2006-07-03 20:48:00
我家里的电脑上有的,你再找我吧,到时我给你,我的QQ是82585638
25 楼
justforfun626 [专家分:18460] 发布于 2006-07-04 03:15:00
你让别人为你做作业,你已经放弃学习电脑语言了!
为了中国软件工业的未来,有爱心的朋友请不要帮忙代做作业,或者至少是收费服务!谢谢大家!!!
1) 努力,自己做。
2) 放弃, 改行, 学别的。
3) 挂科,重修,不放弃,下学期努力。
4) 花大钱,雇别人做,欺骗老师,不过下学期你大概要努力一点了。
5) 不努力,不花钱,欺骗老师,下学期故技重演。
你选择!!!
But, the last two need help of other victims or volunteers.
Good Luck!
我来回复