有10个学生,每个学生的数据包括学号,姓名,3门课的成绩,从键盘输入10个学生的数据,要求打印出3门课的总平均成绩,并计算出每人的平均成绩,将原有数据和计算出平均分数存放进磁盘文件stu.txt中,使用C语言结构体,指针,编写程序
时间: 2023-12-08 10:03:35 浏览: 185
好的,以下是实现这个功能的C语言代码,使用了结构体和指针:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义学生结构体
struct Student{
int id;
char name[20];
int score[3];
float average;
};
int main(){
// 创建10个学生的数组
struct Student students[10];
int i, j;
float sum[3] = {0};
// 从键盘输入10个学生的数据
for(i=0; i<10; i++){
printf("请输入第%d个学生的数据:\n", i+1);
printf("学号:");
scanf("%d", &(students[i].id));
printf("姓名:");
scanf("%s", students[i].name);
printf("三门成绩:");
for(j=0; j<3; j++){
scanf("%d", &(students[i].score[j]));
sum[j] += students[i].score[j]; // 累加成绩
}
// 计算平均分数
students[i].average = (students[i].score[0] + students[i].score[1] + students[i].score[2]) / 3.0;
}
// 计算各科总平均成绩
float avg[3];
for(j=0; j<3; j++){
avg[j] = sum[j] / 10.0;
}
// 打印各科总平均成绩
printf("\n各科总平均成绩:\n");
printf("科目1:%f\n", avg[0]);
printf("科目2:%f\n", avg[1]);
printf("科目3:%f\n", avg[2]);
// 将数据存入文件stu.txt中
FILE *fp;
fp = fopen("stu.txt", "w");
if(fp == NULL){
printf("文件打开失败!");
exit(1);
}
fprintf(fp, "学号\t姓名\t科目1\t科目2\t科目3\t平均成绩\n");
for(i=0; i<10; i++){
fprintf(fp, "%d\t%s\t%d\t%d\t%d\t%.2f\n",
students[i].id, students[i].name, students[i].score[0],
students[i].score[1], students[i].score[2], students[i].average);
}
fprintf(fp, "科目1总平均成绩:%f\n", avg[0]);
fprintf(fp, "科目2总平均成绩:%f\n", avg[1]);
fprintf(fp, "科目3总平均成绩:%f\n", avg[2]);
fclose(fp);
return 0;
}
```
在这个程序中,我们首先定义了一个`Student`结构体来存储每个学生的数据,包括学号、姓名、3门课的成绩和平均成绩。然后,我们使用一个循环从键盘输入10个学生的数据,并且计算出每个学生的平均成绩和3门课的总平均成绩。最后,我们将所有学生的数据和计算出的总平均成绩存入一个名为`stu.txt`的文件中。
在这个程序中,我们使用了指针来从键盘输入数据和计算各科总平均成绩。对于结构体中的成员变量,我们可以使用`&`运算符来获取它们的地址,然后使用`scanf()`函数和`fprintf()`函数的`%d`和`%f`格式化字符串来读取和写入数据。
注意,我们使用`fopen()`函数打开文件,然后使用`fprintf()`函数将数据写入文件中,最后再使用`fclose()`函数关闭文件。如果文件打开失败,我们将使用`exit()`函数退出程序。
阅读全文