标题:编的程序里有问题大家帮忙看看吧~~!
只看楼主
B07060332
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-6-15
 问题点数:0 回复次数:7 
编的程序里有问题大家帮忙看看吧~~!
题目是

有30个学生,每个学生的数据包括学号、姓名及3门课成绩,从键盘输入每个学生的数据,并完成如下功能:

1、计算并输出每个学生平均成绩;

2、计算并输出每门课程的平均分;

3、按学生平均分从低到高排序,并将排序结果存入文件中;

4、从排序结果中,查找满足某一平均分的学生信息,并输出;

提示:定义结构体类型存放30个同学的成绩,排序方法可以采用冒泡法或其它方法,在函数中实现输入、求平均、排序、查找等功能,在主函数中调用函数。


#include "stdafx.h"
#include "conio.h"
#include "stdlib.h"
#include"stdio.h"
#include"string.h"
#include "iostream.h"
#define F sizeof(student)
#define NULL 0
#define M 30
typedef struct scores
{ int english;
 int math;
 int c_language;
 int all;
}TP;
typedef struct students
{ char sid[15];
 char name[15];
 TP score;
 struct students *next;
}student;
student *input()
{ student *head,*p1,*p2;
 int n=0;  char ch;
 //clrscr();
 system("cls");
 head=(student *)malloc(F);head->next=NULL;
 do
 {   n++;
     printf("\n\nPlease input %d student message:   \n\n",n);
     printf("\t%d student sid:   ",n);
     p1=(student *)malloc(F);p1->next=NULL;
     scanf("%s",p1->sid);
     printf("\n\t%d student name:   ",n);
     scanf("%s",p1->name);  
     printf("\n\t%d student scores(englesh,math,c_language):   ",n);
     scanf("%d,%d,%d",&p1->score.english,&p1->score.math,&p1->score.c_language);
     p1->score.all=p1->score.english+p1->score.math+p1->score.c_language;
     if(n==1)
     { head->next=p1;p2=p1; }
     else
     { p2->next=p1;
  p2=p1;
     }
     printf("\n\n\t\t\tContinue or back (press y/n):   ");
     ch=getchar();
        }while(ch=='y'||ch=='Y');
 return head;
}
void average1(student *head)
{ student *p;  int j;
 //clrscr();

system("cls");
 p=head->next;
           while(p)
    { j=p->score.all/3;
  printf("\n\nname:   %s\taverage:  %d",p->name,j);
  p=p->next;
    }
 printf("\n\n\nPress eny key return.");
 getchar();
}

void average2(student *head)
{
 student *p;int n=0,temp1=0,temp2=0,temp3=0;
 p=head->next;
 while(p)
 { temp1+=p->score.english;
  temp2+=p->score.math;
  temp3+=p->score.c_language;
  p=p->next;n++;
 }
 printf("\n\naverage english is : %d\naverage math is : %d\naverage c_language is : %d\t",temp1/n,temp2/n,temp3/n);
}
student *sort(student *head)
{ student *head1,*p,*q,*r;  int temp1=0,temp2=0,temp3=0,temp4;  char s[15],n[15];
 head1=head;
 for(p=head1->next;p->next!=NULL;p=p->next)
 { r=p;
  for(q=p->next;q;q=q->next)
  if(q->score.all>r->score.all)
     r=q;
  if(r!=p)
  { strcpy(s,p->sid);strcpy(n,p->name);
   temp1=p->score.english;
   temp2=p->score.math;
   temp3=p->score.c_language;
   temp4=p->score.all;
   strcpy(p->sid,r->sid);strcpy(p->name,r->name);
   p->score.english=r->score.english;
   p->score.math=r->score.math;
   p->score.c_language=r->score.c_language;
   p->score.all=r->score.all;
   strcpy(r->sid,s);strcpy(r->name,n);
   r->score.english=temp1;
   r->score.math=temp2;
   r->score.c_language=temp3;
   r->score.all=temp4;
  }
 }
 return head1;
}
void output(student *head)
{ student *head2,*p;int i=1;
 //clrscr();
system("cls");
 head2=sort(head);
 for(p=head2->next;p!=NULL;p=p->next)
        printf("\n\nname: %s\tsid: %s\tenglish: %d\tmath: %d\tc_language: %d\taverage: %d\tmingci: %d",p->name,p->sid,p->score.english,p->score.math,p->score.c_language,p->score.all/3,i++);
 average2(head);
  printf("\n\n\n\t\tPress eny key back.");
 getchar();
}
void main()
{ student *head,*p1,*p2;
 int i=0,j=1;
 head=input();
 do
 {       //clrscr();
     //system("cls");
  printf("\n\n(1):  average1.\n\n(2):  average2.\n\n(3): sort.\n\n(4): output.\n\n\n      Please choose:   ");
  scanf("%d",&i);
  switch(i)
  { case 1: average1(head);  break;
   case 2: //clrscr();
             system("cls");
    average2(head);  printf("\n\n\nPress eny key retuen.");getchar(); break;
   case 3: //clrscr();
             system("cls");
    p1=sort(head); for(p2=p1->next;p2!=NULL;p2=p2->next) printf("\n\t\tname: %s\tmingci:%d",p2->name,j++);printf("\n\n\nPress eny key back.");getchar(); break;
   case 4: output(head);  break;
   default: printf("\nYour choose is not right.");break;
  }
 }while(i!=-1);
}
程序有点缺陷~~就是输入完一个学生的成绩后没办法输入下一个学生成绩,大家帮帮忙改改~~
搜索更多相关主题的帖子: include int 平均分 学生 
2008-07-02 14:58
Rand
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2008-7-2
得分:0 
while这句错了
while(ch=='y'||ch=='Y');
可能是你输入的最后结果被作为ch的值了,分数显然不等与y
你试试改成while(ch!=e)中间加上提示printf(“按‘e’结束”),输入完后按e就跳出了
2008-07-02 15:24
B07060332
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-6-15
得分:0 
不行啊~~error C2065: 'e' : undeclared identifier
2008-07-02 16:46
B07060332
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-6-15
得分:0 
有人帮忙吗?
2008-07-02 17:55
Rand
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2008-7-2
得分:0 
while(ch!='e'),应该可以吧~
还有错的话你就自己找找吧~不过看那个提示,这么说是没申明e?
2008-07-02 18:02
B07060332
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-6-15
得分:0 
对啊~~这代码不是我写的~~想问下在哪声明
2008-07-02 18:20
Rand
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2008-7-2
得分:0 
你看你语法错没。
2008-07-02 18:42
B07060332
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-6-15
得分:0 
谁能帮忙弄个~~查找功能~~缺个那功能~
2008-07-03 10:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-222272-1-1.html




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

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