搜索
查看: 905|回复: 3
打印 上一主题 下一主题

急救!求大神指导为什么运行不了?(c语言程序)

[复制链接]
跳转到指定楼层
楼主
发表于 2015-1-9 17:34:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
//C::::::::::::::::::教学计划编制问题.Cpp  
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include "SeqStack.h"//为什么有错误???????
#include "ALGraph.h"//为什么有错误???????
#define N 12
// A:::::::::SeqStack.h   
#define StackofNUM 20        //存储空间初始分配量
#define StackforMore 5     // 存储空间分配增量
typedef struct SqStack
{  int  *a;     
int  *top;        
int  size;          //分配的存储空间
}SqStack;  
int InitStack(SqStack &S)   /*栈的初始化*/
{  S.a= (int  *)malloc(StackofNUM * sizeof(int));
if (!S.a)exit(-1);
S.top =S.a;
S.size =StackofNUM;
return 1;
}
int StackEmpty(SqStack S)          /*判断栈是否为空*/
{  if (S.top == S.a)return 1;
  else  return 0; }
int Push(SqStack &S, int x)/*入栈*/  
{  if (S.top - S.a >= S.size)
{S.a = (int *) realloc ( S.a, (S.size + StackforMore) * sizeof(int));
  if ( !S.a ) exit(-1);
   S.top =S.a +S.size;
   S.size +=StackforMore;   }
*S.top++ = x;
  return 1;  }  
int Pop(SqStack &S, int &x)     /*出栈*/
{    if (S.top == S.a)return 0;
x = *--S.top;
      return 1; }
//B:::::::::ALGraph.h
#define MAXOfNAME 3           //最多字符个数
#define MAX_VER 100  //最大顶点数
typedef struct ArcNode
{   int AdjOfV;                        // 该弧所指向的顶点的位置
struct ArcNode *next;           //指向下一条弧的指针
}ArcNode;
typedef char VertexType[MAXOfNAME];  
typedef struct                         //链接表
{   VertexType data;                   //顶点信息
  int grades;                        //存储学分信息
ArcNode *first;                 //指向第一条依附该顶点的弧的指针
}VNode, AdjList[MAX_VER];       // 头结点
typedef struct
{   AdjList ver;                  //vertices 存储课程名
int vexnum, arcnum;                // 图的当前顶点数和弧数
}ALGraph;
int TotalOfTerms                        //学期总数
int MaxScores;                         //学分上限  
int LocateVex(ALGraph G, VertexType u)/* 查找图中某个顶点位置 */   
{       int i;
for (i = 0;i < G.vexnum;++i)
   if (strcmp(u,G.ver.data)==0)return i;
     return -1;  }
int CreateGraph(ALGraph &G)    /*采用邻接表存储结构*/
{   int i, j, h;
VertexType va;
    ArcNode *p;
   printf("请输入教学计划的课程数: " );
   scanf("%d",&G.vexnum);
   getchar();
        printf( "请输入各个课程的先修课程的总和(弧总数): ");
   scanf("%d",&G.arcnum);
   getchar();
printf( "请输入%d个课程的课程号(最多%d个字符,字母+数字如C10):", G.vexnum,MAXOfNAME);
for (i = 0;i < G.vexnum;++i)
{    scanf("%s",&G.ver.data);
    getchar();
G.ver.first = NULL;     }
printf("请输入%d个课程的学分值:",G.vexnum);
   for (i = 0;i < G.vexnum;++i)
  {     scanf("%d",&G.ver.grades);getchar();      }
printf("请输入下列课程的先修课程(无先修课程输入0 结束后也输入0)\n");
for (h=0;h<G.vexnum;++h)        // 构造表结点链表,利用前插法
{   printf("%s的先修课程:",G.ver[h].data);
scanf("%s",va);getchar();
while (va[0]!='0')
{   i = LocateVex(G, va);          //弧头
j = h;                         //弧尾
p = (ArcNode*)malloc(sizeof(ArcNode));
p->AdjOfV = j;
p->next = G.ver.first; // 插在表头
G.ver.first = p;
scanf("%s",va); getchar();   }
}
  return 1;  }
void Display(ALGraph G)                  /* 输出图G的信息*/
{    int i;
ArcNode *p;
printf("有向图\n");
printf("%d个顶点", G.vexnum);
for (i = 0;i < G.vexnum;++i)printf("%4s", G.ver.data);
printf(" \n%d条弧边:\n",G.arcnum);
for (i = 0;i < G.vexnum;i++)
   {    p = G.ver.first;
  while (p)
  {    printf("%s---->%s\n",G.ver.data,G.ver[p->AdjOfV].data);  
p = p->next;   }
   }
}
void FindInDegree(ALGraph G, int indegree[])        /*求顶点的入度*/
{    int i;
   ArcNode *p;
for (i = 0;i < G.vexnum;i++) indegree = 0;
  for (i = 0;i < G.vexnum;i++)
   {   p = G.ver.first;
while (p)
    {    indegree[p->AdjOfV]++;
p = p->next;  }
}  }
struct Name
{    char c[20];  }name;
void CmpOfStr(VertexType str,struct Name name[],int n) /*C1~C12分别与12门课程对应起来*/
{  if(strcmp(str,name[0].c)==0)printf(" 程序设计基础");
if(strcmp(str,name[1].c)==0) printf(" 离散数学");  
if(strcmp(str,name[2].c)==0) printf(" 数据结构");
   if(strcmp(str,name[3].c)==0)printf(" 汇编语言 ");
if(strcmp(str,name[4].c)==0) printf(" 语言的设计和分析 ");
if(strcmp(str,name[5].c)==0)printf(" 计算机原理");
if(strcmp(str,name[6].c)==0)printf(" 编译原理");
if(strcmp(str,name[7].c)==0)printf(" 操作系统 ");
if(strcmp(str,name[8].c)==0)printf(" 高等数学");
if(strcmp(str,name[9].c)==0)printf(" 线性代数");
if(strcmp(str,name[10].c)==0)printf(" 普通物理");
if(strcmp(str,name[11].c)==0)printf(" 数值分析");
  //C::::::::::::::::::教学计划编制问题.Cpp  
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include "SeqStack.h"
#include "ALGraph.h"
#define N 12
int TopologicalOrder(ALGraph G,AdjList R,struct Name name[])  
{  int i, k, j = 0, count, indegree[MAX_VER];   SqStack S;  ArcNode *p;
FindInDegree(G, indegree);     // 对各顶点求入度  
InitStack(S);                  // 初始化栈
for (i = 0;i < G.vexnum;++i)   //建零入度顶点栈S  
if (!indegree) Push(S, i);  // 入度为0者进栈  
count = 0;                     // 对输出顶点计数   
while (!StackEmpty(S))   
{     Pop(S, i);   
printf("%s(%d学分),",G.ver.data,G.ver.grades);   
R[j++] = G.ver;  //将当前的拓扑序列保存起来   
++count;                // 输出i号顶点并计数   
for (p =G.ver.first; p; p=p->next)// i号顶点的每个邻接点的入度减1   
{      k = p->AdjOfV;     
if (!(--indegree[k])) // 若入度减为0,则入栈      
Push(S, k);    }  
}  
if (count < G.vexnum)  
{printf("此有向图有回路无法完成拓扑排序");   
return 0;   }  
else printf( "   为一个拓扑序列");  
printf("\n");     
int q=1,Z=0;   
while (q <= TotalOfTerms)   
{    int C = R[Z].grades   ;
printf("\n%d个学期应学课程:",q);   
while (C <= MaxScores)   
{  C = C + R[Z+1].grades;   
if (Z < G.vexnum)   
{  CmpOfStr(R[Z].data,name,N);/*C1~C12分别与12门课程对应起来*/   
++Z;     }  
  }
   printf("\n");  
  if (q == TotalOfTerms) printf( "\nOK Over!");  
  q++;   }   
  return 1;}
void main()
{     ALGraph G;     AdjList R;   
struct Name name[N]={{"C1"},{"C2"},{"C3"},{"C4"},{"C5"},{"C6"},{"C7"},{"C8"},{"C9"},{"C10"},{"C11"},{"C12"}};
printf("               ***************教学计划编制问题**************\n" );
printf( "请以课件9-2上课程先序图为例输入学期总数:");      
  scanf("%d",&TotalOfTerms);   
getchar();
       printf("请输入学期的学分上限(89:");      
scanf("%d",&MaxScores);   
getchar();
CreateGraph(G);      
Display(G);
TopologicalOrder(G,R,name); }

沙发
发表于 2015-1-9 19:03:18 | 只看该作者
那两个头文件不是标准库里面的,你有没有把那两个文件放在include路径下面?
还有这是c++不是c
板凳
发表于 2015-2-1 15:41:30 | 只看该作者
1.这是C++!2.而且我用VC的C++编译环境中也没有'SeqStack.h'这个标准库。
地板
发表于 2015-2-1 15:42:05 | 只看该作者
总之,程序的标准库有错误!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表