#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct student
{
long num;
char name[10];
int eng;
int math;
int comp;
char addr[20];
};
int main()
{
FILE*fp;
fp=fopen("D:\\CCC\\file.txt","a+");
if((fp=fopen("file.txt","a+"))==NULL)
{
printf("cannot open this file\n");
exit(0);
}
struct student jf(struct student stu[10]);
struct student studentaver(struct student stu[10]);
struct student courseaver_max(struct student stu[10]);
struct student stu[10],*p=stu;
jf(p);
stuaver(p);
courseaver_max(p);
fclose(fp);
return 0;
}
struct student jf(struct student stu[10])
{
int s[10],i;
printf("家访同学信息如下:\n");
for(i=0;i<10;i++)
{
fscanf(fp,"%ld%s%d%d%d%s",&stu[i].num,stu[i].name,&stu[i].eng,&stu[i].math,&stu[i].comp,stu[i].addr);
s[i]=stu[i].eng+stu[i].math+stu[i].comp;
if(s[i]<180)
{
printf("学号 姓名 英语 数学 计算机 住址\n");
printf("%ld%s%d%d%d%s\n",stu[i].num,stu[i].name,stu[i].eng,stu[i].math,stu[i].comp,stu[i].addr);
}
}
struct student studentaver(struct student stu[10])
{
float stuaver[10];
int i;
printf("学号 姓名 平均分\n");
for(i=0;i<10;i++)
{
stuaver[i]=(stu[i].eng+stu[i].math+stu[i].comp)/3.0;
fprintf(fp,"%d%s%f\n",stu[i].num,stu[i].name,stuaver[i]);
}
}
struct student courseaver_max(struct student stu[10])
{
int max[3]={0},i;
float courseaver[3]={0.0};
printf("课程 平均分 最高分\n");
for(i=0;i<10;i++)
{
fscanf(fp,"%d%d%d%f",&stu[i].eng,&stu[i].math,&stu[i].comp,&stuaver[i]);
}
for(i=0;i<10;i++)
{
max[1]=max[1]>stu[i].eng?max[1]:stu[i].eng;
max[2]=max[2]>stu[i].math?max[2]:stu[i].math;
max[3]=max[3]>stu[i].comp?max[3]:stu[i].comp;
}
for(i=0;i<10;i++)
{
courseaver[1]+=stu[i].eng;
courseaver[2]+=stu[i].math;
courseaver[3]+=stu[i].comp;
}
fprinf(fp,"英语\t%f\t%d\n",courseaver[1],max[1]);
fprinf(fp,"数学\t%f\t%d\n",courseaver[2],max[2]);
fprinf(fp,"计算机\t%f\t%d\n",courseaver[3],max[3]);
}
程序设计语言C综合练习:
某班有10名学生,每个学生信息包括学号、姓名、三门课(英语、高数、计算机)的成绩、住址,该班级同学的信息已通过记事本存入file1.txt文件中,该文件存于D:\CCC文件夹下。
请编程实现:
(1) 把总成绩低于180分的同学姓名、总成绩、地址,每个同学占一行显示在屏幕上,以便于家访;
(2) 计算每个同学的平均分,每个同学占一行,按下述形式把结果存入file2.txt中;
学号 姓名 平均分
95001 zhaos 87
….
(3) 计算每门课程的平均分和最高分,每门课程占一行,按下述形式把结果存入file2.txt中,注意:(2)产生的结果要保留,即该内容接续(2)的结果继续存入文件file2.txt中;
课程名 平均分 最高分
英语 87 92
高数 66 88
计算机 90 98
要求及建议:
(1) 要用多个函数实现,合理划分函数功能,不要只写一个main函数;
(2) 建立如下菜单,按菜单执行相应功能;
*************************************************
1 显示总成绩低于180分的同学信息
2 计算每个同学的平均分---存入文件
3 计算每门课程的平均分和最高分---存入文件
4 退出系统
*************************************************
(3) 学生信息采用结构体数组形式,可参考:
Struct student { long num; char name[10]; int eng; int math; int comp; char addr[20]; } stu[10];
|
Struct student { long num; char name[10]; struct { int eng; int math; int comp; } score; char addr[20]; } stu[10];
|
或 |
(4)注意file1.txt为文本文件,且第一行是标题行不是数据。
mum name eng math comp addr
95001 奥巴马 88 97 98 room201
95002 卡扎菲 67 55 62 room201
95003 sunh 87 87 86 room203
95004 zhaoht 55 66 45 room203
95005 zhangy 91 78 98 room203
95006 凤姐 77 90 91 room212
95007 芙蓉姐姐 94 92 90 room212
95008 liuq 89 92 93 room316
95009 songh 35 66 57 room317
95010 李刚 88 99 92 room319
第一个错
fp=fopen("D:\\CCC\\file.txt","a+");
if((fp=fopen("file.txt","a+"))==NULL)
为什么要fopen()两次
struct student jf(struct student stu[10]);
把函数类型声明写在main()里面很傻
那个10更傻
此外缺一个参数
应该
struct student jf(struct student [], int);
int main(void)
{
}
@garbageMan:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct student
{
long num;
char name[10];
int eng;
int math;
int comp;
char addr[20];
};
struct student stu[10],*p=stu;
int main()
{
FILE*fp;
fp=fopen("D:\\CCC\\file.txt","a+");
if((fp=fopen("file.txt","a+"))==NULL)
{
printf("cannot open this file\n");
exit(0);
}
struct student jf(struct student [],int);
struct student studentaver(struct student stu[],int);
struct student courseaver_max(struct student stu[],int);
jf(p,10);
studentaver(p,10);
courseaver_max(p,10);
fclose(fp);
return 0;
}
struct student jf(struct student [],int);
int main(void)
{
int s[10],i;
printf("家访同学信息如下:\n");
for(i=0;i<10;i++)
{
fscanf(fp,"%ld%s%d%d%d%s",&stu[i].num,stu[i].name,&stu[i].eng,&stu[i].math,&stu[i].comp,stu[i].addr);
s[i]=stu[i].eng+stu[i].math+stu[i].comp;
if(s[i]<180)
{
printf("学号 姓名 英语 数学 计算机 住址\n");
printf("%ld%s%d%d%d%s\n",stu[i].num,stu[i].name,stu[i].eng,stu[i].math,stu[i].comp,stu[i].addr);
}
}}
struct student studentaver(struct student stu[],int);
int main(void)
{
int stuaver[10];
int i;
printf("学号 姓名 平均分\n");
for(i=0;i<10;i++)
{
stuaver[i]=int((stu[i].eng+stu[i].math+stu[i].comp)/3+0.5);
fprintf(fp,"%d%s%f\n",stu[i].num,stu[i].name,stuaver[i]);
}
}
struct student courseaver_max(struct student stu[],int);
int main(void)
{
int max[3]={0},i;
float courseaver[3]={0.0};
printf("课程 平均分 最高分\n");
for(i=0;i<10;i++)
{
fscanf(fp,"%d%d%d%f",&stu[i].eng,&stu[i].math,&stu[i].comp,&stuaver[i]);
}
for(i=0;i<10;i++)
{
max[1]=max[1]>stu[i].eng?max[1]:stu[i].eng;
max[2]=max[2]>stu[i].math?max[2]:stu[i].math;
max[3]=max[3]>stu[i].comp?max[3]:stu[i].comp;
}
for(i=0;i<10;i++)
{
courseaver[1]+=stu[i].eng;
courseaver[2]+=stu[i].math;
courseaver[3]+=stu[i].comp;
}
fprintf(fp,"英语\t%f\t%d\n",courseaver[1],max[1]);
fprintf(fp,"数学\t%f\t%d\n",courseaver[2],max[2]);
fprintf(fp,"计算机\t%f\t%d\n",courseaver[3],max[3]);
}
谢了,改后还有几个错误,求指导!!!
C:\Documents and Settings\dmt\2131.cpp(36) : error C2084: function 'int __cdecl main(void)' already has a body
C:\Documents and Settings\dmt\2131.cpp(41) : error C2065: 'fp' : undeclared identifier
C:\Documents and Settings\dmt\2131.cpp(69) : error C2065: 'stuaver' : undeclared identifier
C:\Documents and Settings\dmt\2131.cpp(69) : error C2109: subscript requires array or pointer type
C:\Documents and Settings\dmt\2131.cpp(69) : error C2102: '&' requires l-value
执行 cl.exe 时出错.
@zhengzhiqiang:
怎么有两个main()?