问题如下:有五个学生,每个学生有3门课的成绩,从键盘输入相关数据(包括:学号,姓名和三门课程的成绩),计算出平均成绩,并将原有的数据和计算出的平均分数存放在磁盘文件"stud.txt"中
代码
#include"stdio.h"
#include
#define N 5
struct student
{
int num;
char name[5];
int c1;
int c2;
int c3;
int all;
};
void main()
{
struct student st[N];
int i,j,m;
float ar[5];
printf("请分别输入这五个学生的学号、姓名以及三门课的成绩:\n");
float ar1=0,ar2=0,ar3=0,ar4=0,ar5=0;
for(i=0;iscanf("%d",&st[i].num);
scanf("%s",st[i].name);
scanf("%d",&st[i].c1);
scanf("%d",&st[i].c2);
scanf("%d",&st[i].c3);
st[i].all = st[i].c1 + st[i].c2 + st[i].c3;
}
for(j=0;j<5;j++)
{
ar[i]=st[0].all/3;
}
FILE *fp;
fp=fopen("stud.txt","w");
fprintf(fp,"学号 姓名 成绩 平均分\n ");
for(m=0;m<5;m++)
fprintf(fp," %d %s %5d %5d %5d %.2f\n",st[m].num,st[m].name,st[m].c1,st[m].c2,st[m].c3,ar[m]);
fclose(fp);
}
运行结果有点问题,估计是后半部分的原因,但不知道怎么改
你的代码修改过后的:
#include"stdio.h"
#include<stdio.h>
#define N 5
struct student
{
int num;
char name[5];
int c1;
int c2;
int c3;
float avg;
};
void main()
{
struct student st[N];
int i,j,m;
printf("请分别输入这五个学生的学号、姓名以及三门课的成绩:\n");
float ar1=0,ar2=0,ar3=0,ar4=0,ar5=0;
FILE *fp;
for(i=0;i<N;i++)
{
scanf("%d",&st[i].num);
scanf("%s",st[i].name);
scanf("%d",&st[i].c1);
scanf("%d",&st[i].c2);
scanf("%d",&st[i].c3);
st[i].avg = (st[i].c1 + st[i].c2 + st[i].c3)/3.0;
}
fp=fopen("stud.txt","w");
fprintf(fp,"学号 姓名 成绩 平均分\n ");
for(m=0;m<5;m++)
{
fprintf(fp,"%d %s %d %d %d %f\n",st[m].num,st[m].name,st[m].c1,st[m].c2,st[m].c3,st[m].avg);
}
fclose(fp);
}
我按照题目写的全部代码:
运行结果示例:
写入文件内容示例:
#include<stdio.h>
#define N 5
typedef struct Student{
long long int id;
char name[20];
float chinese;
float math;
float english;
float avg;
}Student;
Student student[N];
Student student1[N];
/**控制台录入信息*/
void insert(Student student[N])
{
int i;
for(i=0;i<N;i++)
{
printf("请输入第%d位学生的信息:\n",i+1);
scanf("%lld %s %f %f %f",&student[i].id,student[i].name,&student[i].chinese,&student[i].math,&student[i].english);
student[i].avg=(student[i].chinese+student[i].math+student[i].english)/(3*1.0);
}
}
/**信息存储到stud.txt文件*/
void ctrl_s(Student student[N])
{
FILE*f;
int i;
f=fopen("stud.txt","w");
for(i=0;i<N;i++)
{
fprintf(f,"%lld\t%s\t%f\t%f\t%f\t%f\n",
student[i].id,student[i].name,student[i].chinese,student[i].math,student[i].english,student[i].avg);
}
fclose(f);
}
void print(Student student1[N])
{
FILE*f;
int i;
f=fopen("stud.txt","r");
if(f==NULL){printf("文件打开失败!\n");}
else
{
for(i=0;i<N;i++)
{
fscanf(f,"%lld\t%s\t%f\t%f\t%f\t%f\n",
&student1[i].id,student1[i].name,&student1[i].chinese,&student1[i].math,&student1[i].english,&student1[i].avg);
}
for(i=0;i<N;i++)
{
printf("学号:%lld 姓名:%s 语文:%.2f 数学:%.2f 英语:%.2f 平均分:%.2f\n",
student1[i].id,student1[i].name,student1[i].chinese,student1[i].math,student1[i].english,student1[i].avg);
}
}
fclose(f);
}
int main()
{
insert(student);
ctrl_s(student);
printf("学生信息如下:\n");
print(student1);
return 0;
}
students = [] # 存储所有学生的列表
for i in range(5):
print("请输入第{}个学生的信息:".format(i+1))
student = {} # 存储单个学生信息的字典
student['id'] = input("学号:")
student['name'] = input("姓名:")
student['grades'] = [] # 存储单个学生的3门成绩的列表
for j in range(3):
student['grades'].append(float(input("第{}门成绩:".format(j+1))))
students.append(student)
计算平均成绩
for student in students:
total_grade = 0 # 存储单个学生总成绩
for grade in student['grades']:
total_grade += grade
student['average'] = total_grade / len(student['grades'])
将信息写入文件
with open("stud.txt", "w") as f:
for student in students:
f.write("{},{},{},{}\n".format(student['id'], student['name'], student['grades'], student['average']))
有几个错误需要修正:
1、使用了两个不同的头文件 "stdio.h" 和 <stdio.h>。这是冗余的,只需要使用一个即可。
2、在计算每个学生的总成绩时,代码应该是这样的:
st[i].all = st[i].c1 + st[i].c2 + st[i].c3;
3、在计算每个学生的平均分时,应该使用以下代码:
ar[i] = st[i].all / 3.0;
这样就可以获得每个学生的实际平均分,而不是固定值。
4、在将数据写入文件时,应该将平均分作为最后一列写入,而不是第五列。代码应该是这样的:
fprintf(fp, " %d %s %5d %5d %5d %.2f\n", st[m].num, st[m].name, st[m].c1, st[m].c2, st[m].c3, ar[m]);
修正这些问题后,代码应该能够正常工作。
/3.0
ar[i]是错的st[0]错了
主要是i错了
加上fflush(stdin);去除缓存
#include<stdio.h>
#define N 5
struct student
{
int num;
char name[5];
int c1;
int c2;
int c3;
int all;
};
int main()
{
struct student st[N];
int i,j,m;
float ar[5];
printf("请分别输入这五个学生的学号、姓名以及三门课的成绩:\n");
float ar1=0,ar2=0,ar3=0,ar4=0,ar5=0;
for(i=0;i<N;i++)
{
scanf("%d",&st[i].num);
fflush(stdin);
scanf("%s",st[i].name);
scanf("%d",&st[i].c1);
scanf("%d",&st[i].c2);
scanf("%d",&st[i].c3);
st[i].all = st[i].c1 + st[i].c2 + st[i].c3;
}
for(j=0;j<5;j++)
{
ar[i]=st[0].all/3.0;
}
FILE *fp;
fp=fopen("stud.txt","w");
fprintf(fp,"学号 姓名 成绩 平均分\n ");
for(m=0;m<5;m++)
fprintf(fp," %d %s %5d %5d %5d %.2f\n",st[m].num,st[m].name,st[m].c1,st[m].c2,st[m].c3,ar[m]);
fclose(fp);
}