急求一份带注释 流程图和模块的C语言程序设计 答辩用的 谢谢啦 求写出下面c语言流程图,带注释,如图二 谢谢

100\u5206\uff0c\u6c42\u7b54\u6848\u6709\u6d41\u7a0b\u56fe\u6709\u6ce8\u91ca\u3002C\u8bed\u8a00\u7a0b\u5e8f\u8bbe\u8ba1\uff0c\u6c42\u5927\u795e\u89e3\u7b54\uff0c\u7b54\u6848\u6b63\u786e\u7acb\u9a6c\u91c7\u7eb3\u4e0d\u5e9f\u8bdd\u3002

//#include "stdafx.h"//vc++6.0\u52a0\u4e0a\u8fd9\u4e00\u884c.#include "stdio.h"#include "string.h"int main(void){ char a[10][20],b[20],i,j,k; printf("Enter 10 students' name...\n"); for(i=0;i0) k=j; if(k!=i){ strcpy(b,a[k]); strcpy(a[k],a[i]); strcpy(a[i],b); } } printf("\n"); for(i=0;i<10;printf("%s\n",a[i++])); return 0;}

#include void main(){int year=2000;while(!(year>2500)){if(year%4) printf("%d\u5e74\u4e0d\u662f\u95f0\u5e74\n",year);else{if(year%100) printf("%d\u5e74\u662f\u95f0\u5e74\n",year);else{if(year%400) printf("%d\u5e74\u4e0d\u662f\u95f0\u5e74\n",year);else printf("%d\u5e74\u662f\u95f0\u5e74\n",year);}}year=year+1;}}\u4ee5\u4e0a\u4e3a\u76f4\u63a5\u6309\u6d41\u7a0b\u56fe\u5199\u51fa\u7684\u7a0b\u5e8f\uff0c\u6bd4\u8f83\u7e41\u7410\u3002\u4e00\u822c\u91c7\u7528\u4e0b\u9762\u7684\u7a0b\u5e8f\u6765\u5b9e\u73b0\uff1a
#include void main(){int year;for(year=2000;year<=2500;year++)(year%4==0&&year%100||year%400==0)?printf("%d\u5e74\u662f\u95f0\u5e74\n",year):printf("%d\u5e74\u4e0d\u662f\u95f0\u5e74\n",year);}

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;

int n = 0;
int a[100][100];

int menu()
{
int m;
printf(" 求最小生成树\n");
printf(" ________________________________\n\n");
printf(" 1 输入城市之间的信息\n");
printf(" 2 判断是否能构成一个最小生成树\n");
printf(" 3 查询信息\n");
printf(" 4 退出\n");
printf(" ________________________________\n\n");
printf(" 请输入所选功能1--4\n");
scanf("%d",&m);
return m;
}

void xin_input()
{
printf("1 遍历所有城市的最小生成树\n");
printf("2 查询两个城市之间的距离\n");
printf("3 退出\n");
//printf("________________________________\n\n");
}
//以下为克鲁斯卡尔算法

typedef struct node //构造一个结构体,两个城市可以看成起点和终点,之间的路道可以看成一个边
{
int st; //起点
int ed; //终点
int dis;//距离
}node;

node p[1000];
int pre[1000],rank[1000];

bool cmp(node p1,node p2)
{
return p1.dis < p2.dis;
}
//下面三个函数是并查集,其作用是检验当一条边添加进去,是否会产生回路
void set(int x)
{
pre[x] = x;//初始化
rank[x] = 0;
}

int find(int x)//找到这个点的祖先
{
if(x != pre[x])
pre[x] = find(pre[x]);
return pre[x];
}

void Union(int x,int y)//将这两个添加到一个集合里去
{
x = find(x);
y = find(y);
if(rank[x] >= rank[y])
{
pre[y] = x;
rank[x] ++;
}
else
pre[y] = x;
}

void Kruskal() //
{
int ans = 0,i,j,k = 0;
for(i = 1;i <= n;i ++)
set(i);
for(i = 1;i <= n;i ++)
for(j = i + 1;j <= n;j ++)
{
p[++k].st = i;
p[k].ed = j;
p[k].dis = a[i][j]; //先把所有城市之间的路段看成一个边
}
sort(p + 1,p + k + 1,cmp);//把所有的边按从小到大进行排序
int count = 0;
for(i = 1;i <= k;i ++)
{
if(find(p[i].st) != find(p[i].ed))//如果这两点连接在一起不构成一个回路,则执行下面操作
{
printf("第%d条路段为:%d--%d,权值为%d\n",++ count,p[i].st,p[i].ed,p[i].dis);//将这条边的起点、终点打印出来
ans += p[i].dis; //说明这条路段要用
Union(p[i].st,p[i].ed);
}
}
printf("遍历所有城市的最短路程为: %d\n",ans);//最短遍历的路程
//printf("________________________________\n");
}

//普里姆算法

int prim()
{
int close[100],low[100],i,j,ans = 0;//close[j]表示离j最近的顶点,low[j]表示离j最短的距离
bool use[100];
use[1] = 1;
for(i = 2;i <= n;i ++)
{
low[i] = a[1][i]; //初始化
close[i] = 1;
use[i] = 0;
}
for(i = 1;i < n;i ++)
{
int min = 100000000,k = 0;
for(j = 2;j <= n;j ++)
{
if(use[j] == 0 && min > low[j])//找到最小的low[]值,并记录
{
min = low[j];
k = j;
}
}
//printf("%d %d\n",close[k],k);
for(j = 2;j <= n;j ++)
{
if(use[j] == 0 && low[j] > a[k][j])
{
low[j] = a[k][j]; //修改low[]值和close[]值
close[j] = k;
}
}
ans += a[close[k]][k];
}
return ans;
}

//求最短路径-单源点到其余点的最短路径(Dijkstra算法)

void ShortestPath_DIJ(int x,int y) //X指单源点,y指目标点
{
int i,d[100],j;
bool use[100];
for(i = 1;i <= n;i ++)
{
use[i] = 0; //初始化
d[i] = a[x][i];
}
use[x] = 1;//这个点肯定用过
d[x] = 0;
for(i = 1;i < n;i ++)//执行n-1次操作
{
int min = 100000000,v;
for(j = 1;j <= n;j ++)
{
if(use[j] == 0 && min > d[j])//找出最短距离的
{
min = d[j];
v = j;
}
}
use[v] = 1;
for(j = 1;j <= n;j ++)
{
if(use[j] == 0 && d[j] > min + a[v][j])//修改d[]的值
{
d[j] = min + a[v][j];
}
}
}
printf("%d城市到城市%d的最短距离为: %d\n",x,y,d[y]);
}

//求每一对顶点之间的最短路径(Floyd算法)

int b[100][100];
void ShortestPath_FLOYD() //这个算法耗时多(n^3),不过容易理解
{
int i,j,k;
for(i = 1;i <= n;i ++)
for(j = 1;j <= n;j ++)
b[i][j] = a[i][j]; //先b[][]进行保存,避免a[][]的值发生变化
for(k = 1;k <= n;k ++)
for(i = 1;i <= n;i ++)
for(j = 1;j <= n;j ++)
if(b[i][j] > b[i][k] + b[k][j])
b[i][j] = b[i][k] + b[k][j];
while(1)
{
int st,ed;
printf("请输入两个城市的编号:\n");//对此进行多次操作
scanf("%d%d",&st,&ed);
printf("%d 城市到 %d 城市的最短距离为: %d\n",st,ed,b[st][ed]);
//printf("________________________________\n");
char str[100];
printf("是否要继续? yes or no\n");
scanf("%s",str);
if(strcmp(str,"no") == 0)
{
//printf("________________________________\n");
break;
}
}
}

void shuru()//输入城市信息
{
int i,j;
if(n != 0)
{
char str[100];
printf("是否要确定输入新的城市之间的信息? yes or no ?\n");
scanf("%s",str);
if(strcmp(str,"no") == 0)
{
return ;
}
}
printf("请输入城市的个数:\n");
scanf("%d",&n);
printf("输入%d个城市的邻接矩阵:\n",n);
for(i = 1;i <= n;i ++)
{
for(j = 1;j <= n;j ++)
scanf("%d",&a[i][j]);
}
//printf("________________________________\n");
}
void chaxun() //一个查徇两个城市最短径的操作
{
while(1)
{
int t1,t2;
printf("输入第一个城市的编号:\n");
scanf("%d",&t1);
printf("输入第二个城市的编号:\n");
scanf("%d",&t2);
ShortestPath_DIJ(t1,t2);//调用
char str[100];
printf("是否要继续? yes or no\n");
scanf("%s",str);
if(strcmp(str,"no") == 0)
{
//printf("________________________________\n");
break;
}
}
}

void chaxun_func()
{
if(n == 0)
{
printf("这里没有城市之间的信息\n");
return;
}
xin_input();
printf("请选择以上功能:1-3\n");
int m1;
scanf("%d",&m1);
printf("\n");
if(m1 == 1)
Kruskal();
else if(m1 == 2)
{
chaxun();
}
//else
// break;
}

void judge()
{
int ans;
ans = prim();
if(ans >= 100000000)
printf("不能构成最小生成树\n");
else
printf("能构成最小生成树\n");
}

int main()
{
while(1)
{
switch(menu())
{
case 1:shuru();break;
case 2:judge();break;
case 3: chaxun_func();break;
case 4:goto loop;
}
}
loop:;
return 0;
}

极度同情您!

扩展阅读:扫一扫题目出答案 ... 怎么学会看图纸 ... 过程流程图 ... 医院120接线员工作流程 ... 如何看图纸基本知识 ... 基因组注释流程 ... 救护车送到医院后流程 ... 基因注释的方法及流程 ... 基因功能注释流程 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网