一、C语言综合训练程序设计要求
已知在磁盘上有一个文本文件(stuin.txt),此文件存放了一组学生的成绩信息,按照如下格式存放:
1001 stuname1 89
1002 stuname2 78
1003 stuname3 60
......
1100 stuname100 87
请按照如下要求编写程序:
a. 定义一个结构体类型数组,结构体类型含有学号、姓名和成绩三个域;
b. 将文本文件的内容读入到结构体数组中;
c. 显示成绩最高的人的学号、姓名和成绩(如果有相同的人要全部显示);
d. 显示平均成绩、高于、低于和等于平均成绩的人数;
e. 显示成绩为优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)的人数和所占百分比;
f. 将以上显示的信息存放到stuout.txt文件中;
二、C语言综合训练设计报告要求
a. 结合教材第二章的内容,写出本次综合训练的分析文档;
b. 文档要求以WORD排版,语言简练,条理清楚;
c. 测试过程中遇到的主要问题及采取的解决措施;
d. 最后写出本次设计的个人总结;
e. 文档以“设计报告.DOC”名字保存。
c. 以w方式打开stuout.tat文件,定义各分数段计数器变量,循环判断各学生的成绩,并分段计数,使用fprintf技术结果写入stuout.tat中
麻烦了 你发到我QQ:364298448 谢谢了 我不会stuout.tat 这个
设计报告提纲
根据综合训练程序设计的要求,我以设计了学生成绩管理系统,程序的文件名为: ,以下介绍程序的功能、程序调试中出现的问题及处理情况及设计总结。
一、系统的功能介绍
(此处可以叙述你设计程序的功能,可以用流程图表示,也可用语言叙述)
二、实际操作中遇到的问题及处理情况。
(要求写5条以上)
三、个人总结
(此处写通过综合训练的程序设计过程,自己的收获及感想等)
程序挺简单,但是要做的事挺多,哈哈~~
下面是用C语言基于你给题目的要求量身打造的,希望对你有所帮助!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#define STU_NUM 100
#define EPS 1e-3
typedef struct Student
{
int number;
char name[20];
int score;
}STU;
static int i = 0;
STU S[STU_NUM];
void load_file()
{
FILE *in;
assert((in=fopen("stuin.txt", "r"))!=NULL);
while (!feof(in))
{
fscanf(in, "%d", &S[i].number);
fscanf(in, "%s", S[i].name);
fscanf(in, "%d", &S[i].score);
i++;
}
fclose(in);
}
double average()
{
int n = i;
int sum = 0;
while (n--)
sum += S[n].score;
return ((double)sum/i);
}
void write_file(const double avg)
{
FILE *out;
assert((out=fopen("stuout.txt", "w"))!=NULL);
int n = 0; //循环变量
int high = S[0].score;
for (n=0; n<i; n++)
if (S[n].score > high)
high = S[n].score;
//写入成绩最高的学生信息
fprintf(out, "%s", "成绩最高的人的学号、姓名和成绩\n");
for (n=0; n<i; n++)
if (S[n].score == high)
fprintf(out, "%d\t%s\t%d\n", S[n].number, S[n].name, S[n].score);
//显示平均成绩、高于、低于和等于平均成绩的人数
int ln = 0; //低于平均分人数计数
int hn = 0; //高域平均分人数计数
int en = 0; //等于平均分人数计数
for (n=0; n<i; n++)
{
if (avg - S[n].score > EPS)
ln++;
else if (avg - S[n].score < EPS)
hn++;
else
en++;
}
fprintf(out, "%s", "平均成绩、高于、低于和等于平均成绩的人数\n");
fprintf(out, "%d\t%d\t%d\n", ln, hn, en);
//显示成绩为优秀(90~100)、良好(80~89)、中等(70~79)、
//及格(60~69)、不及格(0~59)的人数和所占百分比
int sn = 0; //成绩为优秀(90~100)书生人数
int gn = 0; //成绩为良好(80~89)书生人数
int mn = 0; //成绩为中等(70~79)书生人数
int pn = 0; //成绩为及格(60~69)书生人数
int fn = 0; //成绩为不及格(0~59)书生人数
for (n=0; n<i; n++)
{
if (S[n].score > 90)
sn++;
else if (S[n].score > 80)
gn++;
else if (S[n].score > 70)
mn++;
else if (S[n].score > 60)
pn++;
else
fn++;
}
fprintf(out, "%s", " 显示成绩为优秀、良好、中等、及格、不及格的人数和所占百分比\n");
fprintf(out, "%lf\t%lf\t%lf\t%lf\t%lf\n",
(double)sn/i, (double)gn/i, (double)mn/i, (double)pn/i, (double)fn/i);
fclose(out);
}
int main()
{
load_file();
write_file(average());
return 0;
}
部分截图:
追问谢谢了 我没学好 马上考试 没办法 只能这样了 太感谢你了
追答哈哈,没关系,你加油哦!
追问2.编写提示:
a. 定义最高成绩变量,使用r方式打开stuin.dat,使用fscanf读出成绩并求出最高成绩,以只写方式打开stuout.dat文件,循环判断,若成绩等于最高成绩,则打印该生的学号、姓名、成绩等信息(包括重复),并写入stuout.dat文件中
b. 定义平均成绩变量,定义并求出高于、低于、等于平均成绩计数器变量,以a方式打开stuout.dat文件, 使用fprintf将高于、低于、等于平均成绩人数写入stuout.dat
把.txt改成.bat就完事了啊!这不用我写了吧
本回答被提问者采纳