| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 608 人关注过本帖
标题:调试无错 但无法执行 请各位帮小弟看看那错了
取消只看楼主 加入收藏
johnsy1
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-9-17
收藏
 问题点数:0 回复次数:0 
调试无错 但无法执行 请各位帮小弟看看那错了
/*头文件*/
#include "stdio.h"    /*I/O函数*/
#include "stdlib.h"   /*其它说明*/
#include "string.h"   /*字符串函数*/
#include "conio.h"   /*屏幕操作函数*/
#include "memory.h"   /*内存操作函数*/
#include "ctype.h"   /*字符操作函数*/
#include "iostream.h"
#define N 5     /*定义常数*/
typedef struct z1   /*定义数据结构*/
{  char class_0[20];
   int num;
   char name[8];
   int score[N];
   float ave;
   int order;
   float sum;
   struct z1 *next;
 }STUDENT;
/*以下是函数原型*/
STUDENT  *init();      /*初始化函数*/
STUDENT *create();   /*创建链表*/
STUDENT *del(STUDENT *h);   /*删除记录*/
void print(STUDENT *h);   /* 显示所有记录*/
void search(STUDENT *h);    /*查找*/
void save(STUDENT *h);     /*保存*/
STUDENT *load();        /*读入记录*/
void calculate(STUDENT *h);  /*计算总分和均分*/
STUDENT *insert(STUDENT *h);   /*插入记录*/
STUDENT *sort(STUDENT *h);    /*排序*/
void inputs(char *prompt, char *s, unsigned count);

int main_menu()
{
    char c;
    do{
   system("cls"); /*运行前清屏*/
   printf("*********************************学生成绩管理系统*******************************\n");  /*定义菜单字符串数组*/
   printf("  1. 录入 \n");  
   printf("  2. 输出 \n");      
   printf("  3. 删除 \n");  
   printf("  4. 查询 \n");   
   printf("  5. 保存 \n");         
   printf("  6. 读取 \n");        
   printf("  7. 统计 \n");   
   printf("  8. 插入 \n");   
   printf("  9. 排序 \n");  
   printf("  0. 退出 \n");              
   printf(" 请你选择所需的功能键(0~9):");   
   c=getchar();  /*读入选择*/
    }while(c<'0'||c>'9');
   return (int)(c-'0');;
}

/*主函数*/
void main()
{
   STUDENT *head;      /*链表定义头指针*/
   head=init();        /*初始化链表*/
         
   system("CLS");      /*清屏*/   
   for(;;)             /*无限循环*/
   {
   
     switch(main_menu())     /*调用主菜单函数,返回值整数作开关语句的条件*/
      {                     /*值不同,执行的函数不同,break 不能省略*/
     case 1:head=create();break; /*创建链表*/
     case 2:print(head);break;   /*显示全部记录*/
     case 3:del(head);break; /*删除记录*/    
     case 4:search(head);break;  /*查找记录*/
     case 5:save(head);break;  /*保存文件*/
     case 6:head=load(); break;  /*读文件*/
     case 7:calculate(head);break;  /*统计总分和均分*/
     case 8:head=insert(head);  break; /*插入记录*/
     case 9:head=sort(head);break;  /*排序*/
     case 0:exit(0);       /*如菜单返回值为14程序结束*/

      }
   }
}
/*菜单函数,返回值为整数*/

STUDENT *init()
{
   return NULL;
}
/*创建链表*/
STUDENT *create()
{
   int i; int s;
   int d;
   STUDENT *h=NULL,*info;  /* STUDENT指向结构体的指针*/

   do{
     info=(STUDENT *)malloc(sizeof(STUDENT));  /*申请空间*/
      if(!info)   /*如果指针info为空*/
      {
     printf("\n内存溢出");   /*输出内存溢出*/
     return NULL;           /*返回空指针*/
      }
      printf("请输入学号:");
      scanf("%d",info->num);
      inputs("输入姓名:",info->name,8); /*输入姓名,并进行校验*/
      printf("请输入 %d 个科目的成绩(科目1为高等数学,科目2为C程序设计,科目3为大学英语,科目4为马克思主义政治经济学,科目5为大学体育): \n",N);  /*提示开始输入成绩*/
      s=0;         /*计算每个学生的总分,初值为0*/
      for(i=0;i<N;i++)    /*N门课程循环N次*/
      {
      do{
        printf("科目%d的成绩:",i+1);    /*提示输入第几门课程*/
        scanf("%d",&info->score[i]);    /*输入成绩*/
        if(info->score[i]>100||info->score[i]<0) /*确保成绩在0~100之间*/
        printf("对不起,输入有错,请重新输入\n");  /*出错提示信息*/
      }while(info->score[i]>100||info->score[i]<0);
      s=s+(info->score[i]);   /*累加各门课程成绩*/
      }
      info->sum=s;    /*将总分保存*/
      info->ave=(float)s/N;  /*求出平均值*/
      info->order=1;    /*未排序前此值为0*/
      info->next=h;   /*将头结点做为新输入结点的后继结点*/
      h=info;    /*新输入结点为新的头结点*/
      printf("返回上级菜单请按0,继续输入请按1:\n");
      scanf("%d",&d);
   }while(d);
 
   return(h);   /*返回头指针*/
}
/*输入字符串,并进行长度验证*/
void inputs(char *prompt, char *s, unsigned count)
{
   char p[255];
   do{
      printf(prompt);  /*显示提示信息*/
      scanf("%s",p);  /*输入字符串*/
      if(strlen(p)>count)printf("\n 长度过长! \n"); /*进行长度校验,超过count值重输入*/
   }while(strlen(p)>count);
   strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/
}

/*输出链表中结点信息*/
void print(STUDENT *h)
{
   int i=0;     /* 统计记录条数*/
   STUDENT *p;  /*移动指针*/
   system("CLS");/*清屏*/
   p=h;      /*初值为头指针*/
   printf("\n\n\n******************************学生信息***********************************\n");
   printf("|记录|   学号   |      姓名     |高等数学|C程序设计|大学英语| 马克思主义政治经济学| 大学体育|  总分  |平均成绩|排名|\n");
   printf("|----|----------|---------------|--------|---------|--------|---------------------|---------|--------|--------|----|\n");
   while(p!=NULL)
   {
       i++;
   printf("|%4d|%-10s|%-15s|%8d|%8d|%8d|%21d|%8d|%7d|  %5.2f | %3d|\n", i, p->num,p->name,p->score[0],p->score[1],
       p->score[2],p->score[3],p->score[4],p->sum,p->ave,p->order);
       p=p->next;
   }
   printf("*************************************************************************\n");
   system("pause");
}
/* 从文件读数据*/
STUDENT *load()
{
   STUDENT *p,*q,*h=NULL;    /*定义记录指针变量*/
   FILE *fp;            /* 定义指向文件的指针*/
   char infile[10];       /*保存文件名*/
   printf("读出文件的路径(如 c:\\data.txt):\n");   scanf("%s",infile);           /*输入文件名*/
   if((fp=fopen(infile,"rb"))==NULL)   /*打开一个二进制文件,为读方式*/
   {
      printf("打不开文件\n");    /*如不能打开,则结束程序*/
      exit(1);
   }
   printf("\n-----读出文件!-----\n");
   p=(STUDENT *)malloc(sizeof(STUDENT));   /*申请空间*/
   if(!p)
   {
      printf("内存溢出!\n");    /*如没有申请到,则内存溢出*/
      return h;       /*返回空头指针*/
   }
   h=p;         /*申请到空间,将其作为头指针*/
   while(!feof(fp))  /*循环读数据直到文件尾结束*/
   {
      if(1!=fread(p,sizeof(STUDENT),1,fp))
     break;  /*如果没读到数据,跳出循环*/
      p->next=(STUDENT *)malloc(sizeof(STUDENT));  /*为下一个结点申请空间*/
      if(!p->next)
      {
     printf("内存溢出!\n");  /*如没有申请到,则内存溢出*/
     return h;
      }
      q=p;   /*保存当前结点的指针,作为下一结点的前驱*/
      p=p->next;   /*指针后移,新读入数据链到当前表尾*/
   }
   q->next=NULL;   /*最后一个结点的后继指针为空*/
   fclose(fp);       /*关闭文件*/
   printf("---已成功读出文件!!!---\n");
   system("pause");
   return h;   /*返回头指针*/
}

/*排序*/
STUDENT *sort(STUDENT *h)
{
    int i=0;
   {
STUDENT *p,*q,*r,*s;
r=new STUDENT;
r->next=h;

for(s=h;s->next;s=s->next)
{
   p=s; q=p->next;
   while(q)
   {
    if(p->sum<q->sum)
    {
     if(p==h)
     {
      p->next=q->next;
      q->next=p;
      h=q;
      q=p->next;
     }
     else
     {
      r->next=q;
      p->next=q->next;
      q->next=p;
      r=q;
      q=p->next;
     }
    }
       else
    {
     r=r->next;
     p=p->next;
     q=q->next;
    }  
      
   }
   r=s;
}
 p=h;
 while(p!=NULL)  /*当p不为空时,进行下列操作*/
   {
      i++;       /*结点序号*/
      p->order=i;   /*将名次赋值*/
      p=p->next;   /*指针后移*/
   }
return (h);
}
}
/*统计总分和均值*/
void calculate(STUDENT *h)
{
   STUDENT *p;   /*定义移动指针*/
   int i=0;  /*保存记录条数初值为0*/
   int s=0;   /*总分初值为0*/
   float average=0;  /*均分初值为0*/
   p=h;        /*从头指针开始*/
   while(p!=NULL)    /*当p不为空时处理*/
   {
      s+=p->sum;    /*累加总分*/
      i++;         /*统计记录条数*/
      p=p->next;   /*指针后移*/
   }
   average=(float)s/i;/* 求均分,均分为浮点数,总分为整数,所以做类型转换*/
   printf("\n所有学生的总成绩为:%ld  平均成绩为 %5.2f\n",s,average);
   system("pause");
}
搜索更多相关主题的帖子: 调试 
2008-10-05 10:50
快速回复:调试无错 但无法执行 请各位帮小弟看看那错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021467 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved