文件-应要求给你们整出来了(泪目)
文件我是真不太会
对文件中存储的学生成绩进行统计
【问题描述】每个学生有包括学号、班级、姓名、成绩,从文件1.txt输入以上数据。
计算每个班级的平均成绩,以及所有学生的总平均成绩,计算90分以上,89-80分,79-70分,69-60分,60分以下的人数。将这些信息写入文件"2.txt"中。
【输入形式】从文件1.txt中读入学生信息
【输出形式】把统计好的成绩信息输出的2.txt文件中。
【样例输入】文件1.txt中内容,每位同学信息占一行,行内信息以单个空格分隔。
110 class1 li 90
120 class1 wang 60
130 class2 chen 75
140 class1 ma 80
150 class2 wei 65
【样例输出】文件2.txt中内容无空格,所有值取整数。第一行总平均成绩,以下各行为每个班的平均成绩,然后是全部学生中,90分以上人数,89-80人数,79-70人数,69-60人数,60分以下人数。
all ave 74
class1 ave 76
class2 ave 70
90 Above:1
89-80:1
79-70:1
69-60:2
60 Under:0
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student {
int studentNumber; // 学号
char className[20]; // 班级名称
char name[20]; // 姓名
int score; // 成绩
};
void calculateStatistics(struct Student* students, int numStudents, const char* outputFileName) {
int totalScore = 0; // 总成绩
int totalStudents = 0; // 总学生人数
int num90Above = 0; // 90分以上的人数
int num89to80 = 0; // 89-80分的人数
int num79to70 = 0; // 79-70分的人数
int num69to60 = 0; // 69-60分的人数
int num60Under = 0; // 60分以下的人数
int class1TotalScore = 0; // class1的总成绩
int class1Students = 0; // class1的学生人数
int class2TotalScore = 0; // class2的总成绩
int class2Students = 0; // class2的学生人数
int class3TotalScore = 0; // class3的总成绩
int class3Students = 0; // class3的学生人数
int class4TotalScore = 0; // class4的总成绩
int class4Students = 0; // class4的学生人数
int class5TotalScore = 0; // class5的总成绩
int class5Students = 0; // class5的学生人数
for (int i = 0; i < numStudents; i++) {
totalScore += students[i].score;
totalStudents++;
if (students[i].score >= 90) {
num90Above++;
}
else if (students[i].score >= 80) {
num89to80++;
}
else if (students[i].score >= 70) {
num79to70++;
}
else if (students[i].score >= 60) {
num69to60++;
}
else {
num60Under++;
}
if (strcmp(students[i].className, "class1") == 0) {
class1TotalScore += students[i].score;
class1Students++;
}
else if (strcmp(students[i].className, "class2") == 0) {
class2TotalScore += students[i].score;
class2Students++;
}
else if (strcmp(students[i].className, "class3") == 0) {
class3TotalScore += students[i].score;
class3Students++;
}
else if (strcmp(students[i].className, "class4") == 0) {
class4TotalScore += students[i].score;
class4Students++;
}
else if (strcmp(students[i].className, "class5") == 0) {
class5TotalScore += students[i].score;
class5Students++;
}
}
FILE* outputFile = fopen(outputFileName, "w");
if (outputFile == NULL) {
printf("Failed to open file\n");
return;
}
// 输出总平均成绩
if (totalStudents == 0) {
fprintf(outputFile, "all ave 0\n");
} else {
fprintf(outputFile, "all ave %d\n", totalScore / totalStudents);
}
// 输出各个班级的平均成绩,并判断学生人数是否为零
if (class1Students != 0) {
fprintf(outputFile, "class1 ave %d\n", class1TotalScore / class1Students);
}
if (class2Students != 0) {
fprintf(outputFile, "class2 ave %d\n", class2TotalScore / class2Students);
}
if (class3Students != 0) {
fprintf(outputFile, "class3 ave %d\n", class3TotalScore / class3Students);
}
if (class4Students != 0) {
fprintf(outputFile, "class4 ave %d\n", class4TotalScore / class4Students);
}
if (class5Students != 0) {
fprintf(outputFile, "class5 ave %d\n", class5TotalScore / class5Students);
}
fprintf(outputFile, "90 Above:%d\n", num90Above);
fprintf(outputFile, "89-80:%d\n", num89to80);
fprintf(outputFile, "79-70:%d\n", num79to70);
fprintf(outputFile, "69-60:%d\n", num69to60);
fprintf(outputFile, "60 Under:%d\n", num60Under);
fclose(outputFile);
}
int main() {
FILE* inputFile = fopen("1.txt", "r");
if (inputFile == NULL) {
printf("Failed to open file\n");
return 0;
}
struct Student students[100];
int numStudents = 0;
int studentNumber, score;
char className[20], name[20];
while (fscanf(inputFile, "%d %s %s %d", &studentNumber, className, name, &score) == 4) {
students[numStudents].studentNumber = studentNumber;
strcpy(students[numStudents].className, className);
strcpy(students[numStudents].name, name);
students[numStudents].score = score;
numStudents++;
}
fclose(inputFile);
calculateStatistics(students, numStudents, "2.txt");
return 0;
}
按要求对两个文件合并
【问题描述】编一个程序,合并两个已按递增排序的整数文件成一个按递增排序文件。
【输入形式】输入两个文件,文件名分别为1.txt和2.txt,在两个文件中分别输入已经排好序的整数,整数之间用单个空格隔开
【输出形式】输出按递增排好序的文件3.txt,输出文件中的整数用单个空格分隔
【样例输入】1.txt中内容为:1 3 4 5;2.txt中内容为:6 7 8
【样例输出】3.txt中内容为:1 3 4 5 6 7 8
【样例输入】1.txt中内容为:1 3 5;2.txt中内容为:2 4 6
【样例输出】3.txt中内容为:1 2 3 4 5 6
#include<stdio.h>
#include<stdlib.h>
// 将两个有序文件合并成一个有序文件
void mergeFiles(const char* fileName1, const char* fileName2, const char* outputFileName) {
FILE* file1 = fopen(fileName1, "r");
FILE* file2 = fopen(fileName2, "r");
FILE* outputFile = fopen(outputFileName, "w");
if (file1 == NULL || file2 == NULL || outputFile == NULL) {
printf("Failed to open files\n");
return;
}
int num1, num2;
int readFromFile1 = fscanf(file1, "%d", &num1);
int readFromFile2 = fscanf(file2, "%d", &num2);
// 逐个比较并写入较小的数
while (readFromFile1 == 1 && readFromFile2 == 1) {
if (num1 <= num2) {
fprintf(outputFile, "%d ", num1);
readFromFile1 = fscanf(file1, "%d", &num1);
}
else {
fprintf(outputFile, "%d ", num2);
readFromFile2 = fscanf(file2, "%d", &num2);
}
}
// 将剩余的数写入文件
while (readFromFile1 == 1) {
fprintf(outputFile, "%d ", num1);
readFromFile1 = fscanf(file1, "%d", &num1);
}
while (readFromFile2 == 1) {
fprintf(outputFile, "%d ", num2);
readFromFile2 = fscanf(file2, "%d", &num2);
}
fclose(file1);
fclose(file2);
fclose(outputFile);
}
int main()
{
mergeFiles("1.txt", "2.txt", "3.txt");
return 0;
}
今天的内容就分享这么多
求三连!!!
求关注!!!