标题:【求助】高手帮忙看看。
只看楼主
phoye
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-12-7
 问题点数:0 回复次数:9 
【求助】高手帮忙看看。

最近课程设计,这个程序,编出来就是有问题
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define size 7
#define null 0
int score ;

typedef struct student
{ int number ;
char name [10];
int math;
int english;
int computer;
int average;
}stu;

stu stud[size];
typedef struct std_list
{
stu data;
struct std_list *next;
}list;


/*完成将数据写到磁盘文件input*/

void save()
{
FILE *fp;
int i;
if ( (fp=fopen ("input.dat","wb"))==null)
{ printf("can't open file!\n");
return ;
}
for (i=0;i<size; i++)

if (fwrite(&stud[i],sizeof( struct student),1, fp)!=1)
printf ("file write error!\n");
fclose (fp);

}

/* 键盘数据输入*/

void data_in( )
{ int i;
for (i=0;i<size;i++)
scanf( "%d%s%d%d%d",&stud[i].number,stud[i].name,&stud[i].math,&stud[i].english,&stud[i].computer);
printf("完成键盘输入学生成绩!\n ");
}


/*数据显示输出*/

void data_out ()
{ int i;
FILE *fp;
fp=fopen("input.dat","rb");
for(i=0;i<size;i++)
{fread(&stud[i],sizeof(struct student),1,fp);
printf("%4d %-4s %4d %4d %4d %4d\n",stud[i].number,stud[i].name,stud[i].math,stud[i].english,stud[i].computer);
}
printf ("input.dat 文件数据显示!\n");
}


list *func()
{
FILE *fp;

list *head=null,*p=null,*r=null;

int i;
if((fp=fopen("input.dat","rb"))==null)
{printf ("can't open input.dat !\n");
return 0;
}
while (1)
{
if (fread(&stud[i],sizeof(stud),1,fp)==-1) /*将文件记录读到数组中*/
break;
i++;
}
fclose(fp);
score=i;
return 0;
}

sort_math(int recds_num)
{int i,j;
stu temp;
for (i=1;i<recds_num;i++) /*插入排序*/
{
temp.number=stud[i].number;
strcpy(temp.name,stud[i].name);
temp.math=stud[i].math;
temp.english=stud[i].english;
temp.computer=stud[i].computer;
for (j=i-1;j>=0&&temp.math>stud[j].math;j--)
stud[j+1] =stud [j];
stud[j+1]=temp;
}
printf("按数学成绩排序的文件- math.dat\n");
save (); // 生成数学的排序成绩的文件

}
sort_engl(int recds_num)
{int i,j;
stu temp;
for (i=1;i<recds_num;i++) /*插入排序*/
{
temp.number=stud[i].number;
strcpy(temp.name,stud[i].name);
temp.math=stud[i].math;
temp.english=stud[i].english;
temp.computer=stud[i].computer;
for(j=i-1;j>=0 && temp.english > stud[j].english; j--)
stud[j+1] =stud [j];
stud[j+1]=temp;
}
printf("按英语成绩排序的文件- English.dat\n");
save(); // 生成英语的排序成绩的文件

}
sort_comp( int recds_num)
{int i,j;
stu temp;
for (i=1;i<recds_num;i++) /*插入排序*/
{
temp.number=stud[i].number;
strcpy(temp.name,stud[i].name);
temp.math=stud[i].math;
temp.english=stud[i].english;
temp.computer=stud[i].computer;
for(j=i-1;j>=0&&temp.computer>stud[j].computer; j--)
stud[j+1]=stud[j];
stud[j+1]=temp;
}
printf("按计算机成绩排序的文件- Computer.dat\n");
save(); // 生成计算机的排序成绩的文件

}


aver_sort( int recds_num) /* 按平均成绩排序*/
{int t,i,j;
int sum=0;
stu temp;

for (t=1;t<recds_num;t++) /*求平均*/
{
sum=stud[t].math+stud[t].english+stud[t].computer;
sum=sum/3;
stud[t].average=sum;
}
for (i=1;i<recds_num;i++) /*插入排序*/
{
temp =stud[i];
for (j=i-1;j>=0&&temp.average > stud[j].average;j--)
stud[j+1] =stud [j];
stud[j+1]=temp;
}
}

//各门课程求平均

aver_math(int recds_num) /*按数学成绩求平均,最大值,最小值*/
{ int i,max,min;

int sum=0,cout1=0,cout2=0,cout3=0,cout4=0,cout5=0;
for (i=1;i<recds_num;i++)
sum=sum+stud[i].math;
sum=sum/recds_num;
max=stud[1].math;
min=stud[1].math;
for (i=1; i<recds_num ; i++)
{ if( max< stud[i].math)
max= stud[i].math;
if (min > stud[i].math)
min = stud[i].math;
if (stud[i].math<60)
cout1++;
if (stud[i].math>60&&stud[i].math<=69)
cout2++;
if (stud[i].math>70&&stud[i].math<=79)
cout3++;
if (stud[i].math>80&&stud[i].math<=89)
cout4++;
if (stud[i].math>90)
cout5++;
}
printf("数学成绩统计情况:");
printf("平均成绩: %d", sum);
printf("最高分:%d",max);
printf("最低分:%d",min);
printf("不及格人数: %d", cout1);
printf("60~69分人数:%d", cout2);
printf("70~79分人数: %d", cout3);
printf("80~89分人数:%d",cout4);
printf("90分以上人数: %d", cout5);
}

aver_english( int recds_num) /* 按英语成绩求平均*/
{ int i,max,min;
int sum=0,cout1=0,cout2=0,cout3=0,cout4=0,cout5=0;
for (i=1; i<recds_num;i++)
sum=sum+stud[i].english;
sum=sum/ recds_num;
max=stud[1].english;
min=stud[1].english;
for (i=1; i<recds_num;i++)
{ if( max< stud[i].english)
max= stud[i].english;
if (min > stud[i].english)
min = stud[i].english;
if (stud[i].english<60)
cout1++;
if (stud[i].english>60&&stud[i].english<=69)
cout2++;
if (stud[i].english>70&&stud[i].english<=79)
cout3++;
if (stud[i].english>80&&stud[i].english<=89)
cout4++;
if (stud[i].english>90)
cout5++;
}
printf("英语成绩统计情况:");
printf("平均成绩: %d", sum);
printf("最高分:%d",max);
printf("最低分:%d",min);
printf("不及格人数: %d", cout1);
printf("60~69分人数:%d", cout2);
printf("70~79分人数: %d", cout3);
printf("80~89分人数:%d",cout4);
printf("90分以上人数: %d", cout5);

}
aver_computer( int recds_num) /* 按计算机成绩求平均*/
{ int i,max,min;
int sum=0,cout1=0,cout2=0,cout3=0,cout4=0,cout5=0;
for (i=1; i<recds_num ; i++ )
sum=sum+stud[i].computer;
sum=sum/recds_num;
max=stud[1].computer;
min=stud[1].computer;
for (i=1; i<recds_num;i++ )
{ if( max< stud[i].computer)
max= stud[i].computer;
if (min > stud[i].computer)
min = stud[i].computer;
if (stud[i].computer<60)
cout1++;
if (stud[i].computer>60&&stud[i].computer<=69)
cout2++;
if (stud[i].computer>70&&stud[i].computer<=79)
cout3++;
if (stud[i].computer>80&&stud[i].computer<=89)
cout4++;
if (stud[i].computer>90 )
cout5++;
}
printf("计算机成绩统计情况:");
printf("平均成绩: %d", sum);
printf("最高分:%d",max);
printf("最低分:%d",min);
printf("不及格人数: %d", cout1);
printf("60~69分人数:%d", cout2);
printf("70~79分人数: %d", cout3);
printf("80~89分人数:%d",cout4);
printf("90分以上人数: %d",cout5);

}

search(int num,char *name1,int recds_num ) /*按姓名或学号查询*/
{ int i;
for(i=1;i<recds_num;i++)
{
if ((num==stud[i].number)||(name1==stud[i].name))

printf("学号: %d 数学:%d 英语:%d 计算机:%d\n", stud[i].number,stud[i].math,stud[i].english,stud[i].computer);

else printf("无此人!");
}
}
main ()
{ int a;
char str[100];
char c;
data_in();

save();
data_out(7);
func();
printf("各门课程成绩排序!\n");
sort_math(7);
sort_engl(7);
sort_comp(7);
printf("求出每个学生的平均成绩,并排序输出如下:\n");
aver_sort(7);
data_out(7);
printf (" 显示各门课程成绩统计:\n");

aver_math(7);
aver_english(7);
aver_computer(7) ;

printf("请输入学号或姓名:\n");

while (1)
{
scanf("%d%s",&a, &str);
search (a,str,7);
printf("是否继续查询?(Y/N)\n");
scanf("%s\n",&c);
if(c=='y'|| c=='Y')
continue;
else
if( c=='n'||c=='N')
break;
}
}

谢谢了,明天交报告了。



搜索更多相关主题的帖子: 课程 include number null 
2007-01-18 17:26
海蓝啸
Rank: 5Rank: 5
来 自:安徽
等 级:贵宾
威 望:17
帖 子:1611
专家分:0
注 册:2006-4-3
得分:0 
太長了。。不想看

这个社会太复杂。。。
2007-01-18 19:18
phoye
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-12-7
得分:0 

长是有点长,拆开看就容易了,这个是几个反复的排序题,帮帮忙啊。


水至清则无鱼,人至贱则无敌!
2007-01-18 20:20
横眉冷对
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2005-3-3
得分:0 
你那几个函数应该是void的型吧
而且data_out在声明的时候没有参数
而调用的时候却有参数
所以我估计是这样void data_out (int i)


MSN:jyycom@ 爱好:军事,体育,Rock。
2007-01-18 23:38
神秘失恋
Rank: 1
等 级:新手上路
帖 子:663
专家分:0
注 册:2007-1-6
得分:0 
哪一段有问题?

上帝之手.........
2007-01-19 00:22
兰宇
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-1-19
得分:0 

不是我不看,是我看不太懂,唉,

2007-01-19 06:37
jianchinuli
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-1-19
得分:0 
{fread(&stud[i],sizeof(struct student),1,fp);
printf("%4d %-4s %4d %4d %4d %4d\n",stud[i].number,stud[i].name,stud[i].math,stud[i].english,stud[i].computer);
}

最后多了一个%4d!
2007-01-19 15:39
jianchinuli
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-1-19
得分:0 

if (fread(&stud[i],sizeof(stud),1,fp)==-1) /*将文件记录读到数组中*/
sizeof(stud)改为sizeof(stu)或者是sizeof(struct student)

2007-01-19 15:47
jianchinuli
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-1-19
得分:0 

while (1)
{
if (fread(&stud[i],sizeof(struct student),1,fp)==-1) /*将文件记录读到数组中*/
break;
i++;
}
fclose(fp);
score=i;

这一段i的处理有问题

2007-01-19 15:53
jianchinuli
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-1-19
得分:0 
不看了

2007-01-19 15:54



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




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

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