如何用c语言实现从文件 d:\st.txt 中读数据并计算每个学生三门功课的平均分,按平均分排 列名次,若平均分相同则名次并列;结果写入文件 d:\st.txt 并按格式输出; 统计全班每门课程的平均分,并计算各分数段(60 以下,60~69,70~79, 80~89,90 以上)的学生人数;结果写入 d:\average.txt 文件,并按格式打印。
时间: 2023-06-09 13:05:25 浏览: 129
您好,这里是ChitGPT,我理解你需要一个程序实现以下功能:
1. 从文件 d:\st.txt 中读数据并计算每个学生三门功课的平均分,按平均分排列名次,若平均分相同则名次并列;将结果写入文件 d:\st.txt 并按格式输出;
2. 统计全班每门课程的平均分,并计算各分数段(60 以下,60~69,70~79,80~89,90 以上)的学生人数;将结果写入 d:\average.txt 文件,并按格式打印。
以下是一个用C语言实现的程序,您可以参考一下:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STUDENT 100 // 最大学生数
#define MAX_NAMELEN 20 // 姓名最大长度
struct student
{
char name[MAX_NAMELEN]; // 学生姓名
int scores[3]; // 三门科目成绩
int rank; // 排名
double average; // 平均分
};
int main()
{
// 读取学生数据
FILE *fp = fopen("d:\\st.txt", "r");
if (fp == NULL)
{
perror("Failed to open input file");
exit(1);
}
struct student students[MAX_STUDENT];
int num_students = 0;
while (fscanf(fp, "%s %d %d %d", students[num_students].name,
&students[num_students].scores[0], &students[num_students].scores[1],
&students[num_students].scores[2]) == 4)
{
// 计算平均分
students[num_students].average = (students[num_students].scores[0] +
students[num_students].scores[1] +
students[num_students].scores[2]) / 3.0;
students[num_students].rank = 1; // 初始排名为1
num_students++;
}
fclose(fp);
// 计算排名
for (int i = 0; i < num_students; i++)
{
for (int j = 0; j < num_students; j++)
{
if (students[i].average < students[j].average)
students[i].rank++;
else if (students[i].average == students[j].average && i != j)
students[i].rank += 0.5;
}
}
// 按名次排序
for (int i = 0; i < num_students; i++)
{
for (int j = i + 1; j < num_students; j++)
{
if (students[i].rank > students[j].rank)
{
struct student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
// 输出学生数据
fp = fopen("d:\\st.txt", "w");
if (fp == NULL)
{
perror("Failed to open output file");
exit(1);
}
fprintf(fp, "姓名\t科目1\t科目2\t科目3\t平均分\t名次\n");
for (int i = 0; i < num_students; i++)
{
fprintf(fp, "%s\t%d\t%d\t%d\t%.2lf\t%.1lf\n", students[i].name,
students[i].scores[0], students[i].scores[1], students[i].scores[2],
students[i].average, students[i].rank);
}
fclose(fp);
// 统计每门科目平均分和分数段人数
double avg_scores[3] = {0};
int num_pass[5] = {0}; // 分数段人数
for (int i = 0; i < num_students; i++)
{
avg_scores[0] += students[i].scores[0];
avg_scores[1] += students[i].scores[1];
avg_scores[2] += students[i].scores[2];
if (students[i].average < 60)
num_pass[0]++;
else if (students[i].average < 70)
num_pass[1]++;
else if (students[i].average < 80)
num_pass[2]++;
else if (students[i].average < 90)
num_pass[3]++;
else
num_pass[4]++;
}
avg_scores[0] /= num_students;
avg_scores[1] /= num_students;
avg_scores[2] /= num_students;
// 输出科目平均分和分数段人数
fp = fopen("d:\\average.txt", "w");
if (fp == NULL)
{
perror("Failed to open output file");
exit(1);
}
fprintf(fp, "科目\t平均分\t60以下\t60~69\t70~79\t80~89\t90以上\n");
fprintf(fp, "科目1\t%.2lf\t%d\t%d\t%d\t%d\t%d\n", avg_scores[0], num_pass[0],
num_pass[1], num_pass[2], num_pass[3], num_pass[4]);
fprintf(fp, "科目2\t%.2lf\t%d\t%d\t%d\t%d\t%d\n", avg_scores[1], num_pass[0],
num_pass[1], num_pass[2], num_pass[3], num_pass[4]);
fprintf(fp, "科目3\t%.2lf\t%d\t%d\t%d\t%d\t%d\n", avg_scores[2], num_pass[0],
num_pass[1], num_pass[2], num_pass[3], num_pass[4]);
fclose(fp);
return 0;
}
```
这个程序实现了你需要的两个功能,你可以将代码保存为 st.c 并使用以下命令编译:
```
gcc -o st st.c
```
然后运行 st.exe 即可。另外,请确保 d:\st.txt 和 d:\average.txt 文件已经存在,否则会出现无法打开文件的错误。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)