(1) 输入学生的基本信息,计算每个学生的平均分,并将学生信息存入磁盘文件“stud”中; (2) 将文件stud中的数据按平均分从高到低的顺序进行排序,并将排序结果存放到文件“stud_sort”中
2017-09-29 21:28
1021 查看
(1) 输入学生的基本信息,计算每个学生的平均分,并将学生信息存入磁盘文件“stud”中;
(2) 将文件stud中的数据按平均分从高到低的顺序进行排序,并将排序结果存放到文件“stud_sort”中;
(3) 输入一个学生的基本信息,将该信息存入文件“stud_sort”中,使插入数据后仍按平均分排序,并保存在原文件“stud_sort”中;
(4) 输入一个学生的学号,在文件“stud_sort”中,将该生删除,其结果仍保存在原文件“stud_sort”中。
#include<stdio.h>
#include<stdlib.h>
#define N 3
typedef struct student{
int num;
char name[20];
float score[3];
float aver;
}S;
void input(S *pw){
int i,j;
FILE *fp;
if((fp=fopen("stud.dat","wb"))==NULL){
printf("can not open file.\n");
exit(0);
}
for(i=0;i<N;i++){
scanf("%d%s",&(pw->num),pw->name);
pw->aver=0;
for(j=0;j<3;j++){
scanf("%f",&(pw->score[j]));
pw->aver+=pw->score[j];
}
pw->aver/=3;
fwrite(pw,sizeof(S),1,fp);
}
fclose(fp);
}
void sort(){
int i,j,k;
S t;
FILE *fp,*fp1;
S stu
;
if((fp=fopen("stud.dat","rb"))==NULL){
printf("can not open file.\n");
exit(0);
}
i=0;
while(!feof(fp)){
fread(&stu[i],sizeof(S),1,fp);
i++;
}
for (k=0;k<N-1;k++){
for (j=0;j<N-k-1;j++){
if (stu[j].aver<stu[j+1].aver){
t=stu[j];
stu[j]=stu[j+1];
stu[j+1]=t;
}
}
}//加个排序
if((fp1=fopen("stud_sort.dat","wb"))==NULL){
printf("can not open file.\n");
exit(0);
}
for(i=0;i<N;i++)
fwrite(&stu[i],sizeof(S),1,fp1);
fclose(fp);
fclose(fp1);
}
void insert_rec(S st){
int i;
FILE *fp;
S stu[N+1];
if((fp=fopen("stud_sort.dat","rb"))==NULL){
printf("can not open file.\n");
exit(0);
}
i=0;
while(!feof(fp)){
fread(&stu[i],sizeof(S),1,fp);
i++;
}
for(i=N;i>=0&&stu[i].aver<st.aver;i--)
stu[i+1]=stu[i];
stu[i+1]=st;
fclose(fp);
if((fp=fopen("stud_sort.dat","wb"))==NULL){
printf("can not open file.\n");
exit(0);
}
for(i=0;i<N+1;i++)
fwrite(&stu[i],sizeof(S),1,fp);
fclose(fp);
}
void delete_rec(int number){
int i,j;
FILE *fp;
S stu[N+1];
if((fp=fopen("stud_sort.dat","rb"))==NULL){
printf("can not open file.\n");
exit(0);
}
i=0;
while(!feof(fp)){
fread(&stu[i],sizeof(S),1,fp);
i++;
}
fclose(fp);
for(i=0;i<N;i++){
if(stu[i].num==number)
break;
for(j=i+1;j<N+1;j++)
stu[j-1]=stu[j];
}
if((fp=fopen("stud_sort.dat","wb"))==NULL){
printf("can not open file.\n");
exit(0);
}
for(i=0;i<N;i++)
fwrite(&stu[i],sizeof(S),1,fp);
}
int main(){
S a
;
S st;
int i,j,k;
int number;
printf("请输入%d个学生的信息:\n",N);
printf("学号 姓名 三门课成绩\n");
for(i=0;i<N;i++){
scanf("%d%s",&a[i].num,&a[i].name);
for(j=0;j<3;j++){
scanf("%f",&a[i].score[j]);
}
}
input(a);
sort();
printf("再输入一个学生的信息:\n");
scanf("%d%s",&st.num,st.name);
for(k=0;k<3;k++){
scanf("%f",&st.score[k]);
}
insert_rec(st);
printf("输入要删除学生的学号:");
scanf("%d",&number);
delete_rec(number);
return 0;
}
(2) 将文件stud中的数据按平均分从高到低的顺序进行排序,并将排序结果存放到文件“stud_sort”中;
(3) 输入一个学生的基本信息,将该信息存入文件“stud_sort”中,使插入数据后仍按平均分排序,并保存在原文件“stud_sort”中;
(4) 输入一个学生的学号,在文件“stud_sort”中,将该生删除,其结果仍保存在原文件“stud_sort”中。
#include<stdio.h>
#include<stdlib.h>
#define N 3
typedef struct student{
int num;
char name[20];
float score[3];
float aver;
}S;
void input(S *pw){
int i,j;
FILE *fp;
if((fp=fopen("stud.dat","wb"))==NULL){
printf("can not open file.\n");
exit(0);
}
for(i=0;i<N;i++){
scanf("%d%s",&(pw->num),pw->name);
pw->aver=0;
for(j=0;j<3;j++){
scanf("%f",&(pw->score[j]));
pw->aver+=pw->score[j];
}
pw->aver/=3;
fwrite(pw,sizeof(S),1,fp);
}
fclose(fp);
}
void sort(){
int i,j,k;
S t;
FILE *fp,*fp1;
S stu
;
if((fp=fopen("stud.dat","rb"))==NULL){
printf("can not open file.\n");
exit(0);
}
i=0;
while(!feof(fp)){
fread(&stu[i],sizeof(S),1,fp);
i++;
}
for (k=0;k<N-1;k++){
for (j=0;j<N-k-1;j++){
if (stu[j].aver<stu[j+1].aver){
t=stu[j];
stu[j]=stu[j+1];
stu[j+1]=t;
}
}
}//加个排序
if((fp1=fopen("stud_sort.dat","wb"))==NULL){
printf("can not open file.\n");
exit(0);
}
for(i=0;i<N;i++)
fwrite(&stu[i],sizeof(S),1,fp1);
fclose(fp);
fclose(fp1);
}
void insert_rec(S st){
int i;
FILE *fp;
S stu[N+1];
if((fp=fopen("stud_sort.dat","rb"))==NULL){
printf("can not open file.\n");
exit(0);
}
i=0;
while(!feof(fp)){
fread(&stu[i],sizeof(S),1,fp);
i++;
}
for(i=N;i>=0&&stu[i].aver<st.aver;i--)
stu[i+1]=stu[i];
stu[i+1]=st;
fclose(fp);
if((fp=fopen("stud_sort.dat","wb"))==NULL){
printf("can not open file.\n");
exit(0);
}
for(i=0;i<N+1;i++)
fwrite(&stu[i],sizeof(S),1,fp);
fclose(fp);
}
void delete_rec(int number){
int i,j;
FILE *fp;
S stu[N+1];
if((fp=fopen("stud_sort.dat","rb"))==NULL){
printf("can not open file.\n");
exit(0);
}
i=0;
while(!feof(fp)){
fread(&stu[i],sizeof(S),1,fp);
i++;
}
fclose(fp);
for(i=0;i<N;i++){
if(stu[i].num==number)
break;
for(j=i+1;j<N+1;j++)
stu[j-1]=stu[j];
}
if((fp=fopen("stud_sort.dat","wb"))==NULL){
printf("can not open file.\n");
exit(0);
}
for(i=0;i<N;i++)
fwrite(&stu[i],sizeof(S),1,fp);
}
int main(){
S a
;
S st;
int i,j,k;
int number;
printf("请输入%d个学生的信息:\n",N);
printf("学号 姓名 三门课成绩\n");
for(i=0;i<N;i++){
scanf("%d%s",&a[i].num,&a[i].name);
for(j=0;j<3;j++){
scanf("%f",&a[i].score[j]);
}
}
input(a);
sort();
printf("再输入一个学生的信息:\n");
scanf("%d%s",&st.num,st.name);
for(k=0;k<3;k++){
scanf("%f",&st.score[k]);
}
insert_rec(st);
printf("输入要删除学生的学号:");
scanf("%d",&number);
delete_rec(number);
return 0;
}
相关文章推荐
- 有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩), 计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
- java 有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
- 文件操作:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包 括学生号,姓名,三门课成绩),计算出平均成绩,将所输入有的数据和计算出 的平均分数存放在磁盘文件 "stud "中
- 有五个学生,每个学生有3门课的成绩, 从键盘输入以上数据(包括姓名,三门课成绩), 输入的格式:如:zhagnsan,30,40,60计算出总成绩, 并把学生的信息和计算出的总分数高低顺序存放在磁盘文
- 有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩, 况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
- 有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,编写如下函数: (1) 输入10个学生 的基本信息(input); (2) 求出每个学生的平均分(average); (3) 求出平均分
- 五十道编程小题目 --- 50 有五个学生,每个学生有3门课的成绩,计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中java
- 【程序50】TestStu.java 题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩), //计算 出平均成绩,况原有的数据和计算出的平均分数存放在磁盘
- 编写一个void sort(int*x,int n)实现将x数组中的n个数据从大到小排序。n及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件
- 学生信息键盘输入成绩并反转比较器进行降序排列存入TreeSet写入文件示例
- 编写程序,从键盘输入各位职工的工资数据,存入磁盘文件Salary.dat中,然后从该文件读出职工的工资数据,并计算输出每位职工的实发工资。实发工资的计算方法如下:实发工资=基本工资+加班工奖金-扣除
- 编写一个void sort(int*x,int n)实现将x数组中的n个数据从大到小排序。n及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件
- 假设有10位同学,各有3门课程的成绩。从键盘输入每位同学的学号、姓名和3门课程的成绩,然后把数据保存到磁盘文件,再将磁盘文件中的学生信息读入并显示
- 一月十日练习习题,1数组数据存入字典并输出2降序 和倒叙 输出数组中内容3对字符串当中信息进行查找是否存在4 把数组当中信息按照中文排序
- 从终端输入一组数据进行进栈、出栈操作并将其结果打印出来(采用顺序栈的方式)
- PHP之键盘输入四个学生的学号 姓名 语文 数学 英语信息 ,计算出每个学生的平均成绩,输出
- 从键盘输入4个学生的有关数据,然后把它们保存到磁盘文件中,最后从磁盘文件中读取数据输出到屏幕
- 有两个磁盘文件“A"和”B",各存放一行字母,先要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件“C"中去。
- 已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。 给定一个int数组A,同时给定
- 有五个学生,每个学生有3门课的成绩,定义一种比较直观的文本文件格式, 输入学生姓名和成绩,输入的格式:name,30,30,30从键盘输入以上数据(包括姓名,三门课成绩), 按总分数从高到低的顺序将学