最近刚刚接触C语言用的是vs,然后遇到这样一个问题,希望大佬帮帮忙!
先看原题:
已知有结构体类型student包含3个成员:name(姓名)、score(3科成绩数组)、ave平均成绩。编写程序,要求主函数从外部文件in.txt中读出3行数据,分别赋值给结构体数组变量s的s[0]到s[2]中;调用fun函数求出每个人3个成绩的平均值,并赋值给该变量的ave成员;最后由主函数输出3个人的姓名、3科成绩及平均成绩(保留2位小数)。
结构体定义如下:
struct student
{
char name[20]; //姓名
int score[3]; //成绩
float ave; //平均值
}s[3];
外部文件in.txt内容如下:
Li 91 82 75
Wang 73 67 62
Zhang 83 95 97
这个平均值要怎么算才能按照题目的要求输出呢?就是这一段程序在vs里面要怎么写,谢谢各位大佬!
vs2022完美运行,注意要将in.txt文件放在所在项目目录下。
计算平均值时使用结构体数组名作函数参数,n表示人数,分别对每位同学的三门成绩求和,然后再除以3得到平均值,再将平均值保存到结构体成员ave中。
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
struct student
{
char name[20]; //姓名
int score[3]; //成绩
float ave; //平均值
}s[3];
void fun(struct student s[], int n)
{
float sum;
for (int i = 0; i < n; i++)
{
sum = 0;
for (int j = 0;j < 3;j++)
sum = sum + s[i].score[j];
s[i].ave = sum / 3.0;
}
}
int main()
{
FILE* fp = fopen("in.txt", "r");
if (fp == NULL) {
printf("Open failed!\n");
return -1;
}
for (int i = 0; i < 3; i++) {
fscanf(fp, "%s %d %d %d\n", s[i].name, &s[i].score[0], &s[i].score[1], &s[i].score[2]);
}
fclose(fp);
fun(s, 3);
printf("姓名\t语文\t数学\t英语\t平均分\n");
for (int i = 0; i < 3; i++) {
printf("%s\t%.d\t%.d\t%.d\t%.2f\n", s[i].name, s[i].score[0], s[i].score[1], s[i].score[2], s[i].ave);
}
return 0;
}
#include <stdio.h>
struct student
{
char name[20]; //姓名
int score[3]; //成绩
float ave; //平均值
};
void fun(struct student stu[], int n)
{
for(int i=0; i<n; i++) {
stu[i].ave = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0;
}
}
int main()
{
struct student stu[3];
FILE *fp = fopen("in.txt", "r");
if(fp == NULL) {
printf("文件打开失败!\n");
return -1;
}
for(int i=0; i<3; i++) {
fscanf(fp, "%s %d %d %d\n", stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
}
fclose(fp);
fun(stu, 3);
printf("姓名\t语文\t数学\t英语\t平均分\n");
for(int i=0; i<3; i++) {
printf("%s\t%d\t%d\t%d\t%.2f\n", stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].ave);
}
return 0;
}