汕头网站建设制作方案/免费代理浏览网页
题目
本题是中国海洋大学《高级程序设计》2015年秋季编程题第2题。
题目:
请编写两个程序,首先手机游戏得分管理的功能,(20分)
假设有N(N=4)个朋友都喜欢玩同样的3个手机游戏,要求实现以下功能:
1.先编一个程序,要求从键盘输入N个人的昵称,编号,每个人的游戏得分,将每个人的
上述信息均存入磁盘文件record1.dat中。
2.再编一个程序,从record1.dat文件中读出游戏得分信息,计算每个人的平均得分,
按照平均得分由高到低进行排序,按照排序结果将参加游戏人员的昵称,编号,平均得分
存入新的磁盘文件record2.dat中。
以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj
一、解题思路
思路:
1,遇到此类题不要慌,虽然题目换了,但考的大部分都是结构体与文件相关的知识。
2,分析题目后,定义一个结构体,包含昵称,编号,3个游戏得分,平均得分。
3,第一个程序实现对结构体数组输入数据然后使用文件指针将结构体内的数据打印到文件中。
4,第二个程序,首先定义新的一个结构体数组,从第一个文件中读取数据到结构体数组中同时计算每个人的平均成绩存放到各个avg,然后使用选择排序按照avg的值进行从小到大的排序,结构体之间的数据交换使用memcpy内存交换函数。
5,将这些数据打印到第二个文件中即可。
二、代码部分
1.引入库
代码如下(示例):
#include<Stdio.h>
2.主函数部分
代码如下(示例):
#define N 4
typedef struct
{char name[20];int id;float score[3];float avg;
}game;
int i,j;
void input(game g[])
{//1.先编一个程序,要求从键盘输入N个人的昵称,编号,每个人的游戏得分,将每个人的
//上述信息均存入磁盘文件record1.dat中。for (i = 0; i < N; i++){printf("请输入第%d个人的信息:", i + 1);scanf("%s %d %f %f %f", g[i].name, &g[i].id, &g[i].score[0], &g[i].score[1], &g[i].score[2]);}FILE* fp = fopen("record1.txt", "w");if (fp == NULL){printf("open file erro!");return -1;}for (i = 0; i < N; i++)fprintf(fp,"%s %d %f %f %f\n", g[i].name, g[i].id, g[i].score[0], g[i].score[1], g[i].score[2]);fclose(fp);}
void white(game g[])
{//2.再编一个程序,从record1.dat文件中读出游戏得分信息,计算每个人的平均得分,
//按照平均得分由高到低进行排序,按照排序结果将参加游戏人员的昵称,编号,平均得分
//存入新的磁盘文件record2.dat中。FILE* fp2 = fopen("record1.txt", "r");if (fp2 == NULL){printf("open file erro!");return -1;}for (i = 0; i < N; i++){fscanf(fp2, "%s %d %f %f %f", g[i].name, &g[i].id, &g[i].score[0], &g[i].score[1], &g[i].score[2]);g[i].avg = (g[i].score[0] + g[i].score[1] + g[i].score[2]) / 3.0;}for(i=0;i<N;i++)for(j=i+1;j<N;j++)if (g[i].avg > g[j].avg){game s;memcpy(&s, &g[i], sizeof(game));memcpy(&g[i], &g[j], sizeof(game));memcpy( &g[j], &s, sizeof(game));}fclose(fp2);fp2 = fopen("record2.txt", "w");for (i = 0; i < N; i++)fprintf(fp2, "%s %d %f %f %f %f\n", g[i].name, g[i].id, g[i].score[0], g[i].score[1], g[i].score[2],g[i].avg);fclose(fp2);
}
void main()
{game g[N];game g2[N];input(g);white(g2);
}
三、执行结果
输入:
请输入第1个人的信息:茶话 1 88 66 55
请输入第2个人的信息:三国 2 99 88 10
请输入第3个人的信息:无语 3 66 44 11
请输入第4个人的信息:大侠 4 99 88 77
输出:
无语 3 66.000000 44.000000 11.000000 40.333332
三国 2 99.000000 88.000000 10.000000 65.666664
茶话 1 88.000000 66.000000 55.000000 69.666664
大侠 4 99.000000 88.000000 77.000000 88.000000