首页 > 编程语言 >C语言程序设计 练习题参考答案 第八章 文件(2)

C语言程序设计 练习题参考答案 第八章 文件(2)

时间:2023-11-08 11:01:37浏览次数:41  
标签:练习题 struct int void ex88 C语言 student txt 参考答案

/* 8.8从文件ex88_1.txt中取出成绩,排序后,按降序存放EX88_2.TXT中 */

#include "stdio.h"

#define N 10

struct student

{

  int num;

  char name[20];

  int score[3];  /*不能使用float*/

  float average;

};


void sort(struct student stu[]);

void print(FILE *fp, struct student stu[]);

void printtopfive(FILE *fp, struct student stu[]);


void main()

{

   struct student s[N];

   int i;

   FILE *fp1,*fp2;

    char ch;

    if((fp1=fopen("c:\\ex88_1.txt","r"))==NULL)

      {

       printf("不能打开文件c:\\ex88_1.txt");

       exit(1);

      }

    if((fp2=fopen("c:\\ex88_2.txt","w"))==NULL)

      {

       printf("不能打开文件c:\\ex88_2.txt");

       exit(1);

      }


   for(i=0;i<N;i++)

   {

      fscanf(fp1,"%d%s%d%d%d",&s[i].num,s[i].name,&s[i].score[0],

                        &s[i].score[1],&s[i].score[2]);

      s[i].average=(s[i].score[0]+s[i].score[1]+s[i].score[2])/3.0;

   }

   fprintf(fp2,"原始成绩报表\n");

   print(fp2,s);

   sort(s);

   fprintf(fp2,"排序之后的成绩报表\n");

   print(fp2,s);

   fprintf(fp2,"前五名成绩报表\n");

   printtopfive(fp2,s);

}


void sort(struct student stu[])

{

  int i,k,j;

  struct student t;

  for(i=0;i<N-1;i++)

  {

    k=i;

    for(j=i+1;j<N;j++)

    {

      if(stu[k].average<stu[j].average)

         k=j;

      if(k!=i)

      {

       t=stu[i];

       stu[i]=stu[k];

       stu[k]=t;

      }

    }


   }

}


void print(FILE *fp, struct student stu[])

{

 int i;

 fprintf(fp,"StudentID StudentName   Score1  Score2  Score3  Average\n");

 for(i=0;i<N;i++)

   fprintf(fp,"%-10d%-12s%8d%8d%8d%8.1f\n",stu[i].num,stu[i].name,

   stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].average);

}


void printtopfive(FILE *fp, struct student stu[])

{

 int i;

 fprintf(fp,"StudentName   Average\n");

 for(i=0;i<5;i++)

   fprintf(fp,"%-12s%8.1f\n",stu[i].name,stu[i].average);

}


/*ex88_1.txt中取出成绩?


20001    姓名(1)    70    80    90

20002    姓名(2)    71    81    91

20003    姓名(3)    72    82    92

20004    姓名(4)    73    83    93

20005    姓名(5)    74    84    94

20006    姓名(6)    75    85    95

20007    姓名(7)    76    86    96

20008    姓名(8)    77    87    97

20009    姓名(9)    78    88    98

20010    姓名(10)    79    89    99

*/


/*排序后,按降序存放EX88_2.TXT中


原始成绩报表

StudentID StudentName   Score1  Score2  Score3  Average

20001     姓名(1)         70      80      90    80.0

20002     姓名(2)         71      81      91    81.0

20003     姓名(3)         72      82      92    82.0

20004     姓名(4)         73      83      93    83.0

20005     姓名(5)         74      84      94    84.0

20006     姓名(6)         75      85      95    85.0

20007     姓名(7)         76      86      96    86.0

20008     姓名(8)         77      87      97    87.0

20009     姓名(9)         78      88      98    88.0

20010     姓名(10)        79      89      99    89.0

排序之后的成绩报表

StudentID StudentName   Score1  Score2  Score3  Average

20010     姓名(10)        79      89      99    89.0

20009     姓名(9)         78      88      98    88.0

20008     姓名(8)         77      87      97    87.0

20007     姓名(7)         76      86      96    86.0

20006     姓名(6)         75      85      95    85.0

20005     姓名(5)         74      84      94    84.0


*/

标签:练习题,struct,int,void,ex88,C语言,student,txt,参考答案
From: https://blog.51cto.com/emanlee/8246700

相关文章

  • C语言程序设计 笔试考试,试题样卷
    2008C语言笔试考试,试题样卷http://202.200.112.204/jingpin_c/XiTiKu/BiShiYangJuan.htm注:(1)其中参考答案不一定正确(部分从网上或习题书上搜集的)。(2)出题教师可能会参考此题库,但不限于此题库。......
  • C语言程序设计 回答同学提出的几个疑问 2008
    1,例4.11中的K=1时什麽意思?K用来表示是否是空格字符(注:不是空字符,而是空格字符)0表示空格字符1表示非空格字符  2,例3.17看不懂呀?这一题不难。如果看不懂需要加把劲了。=12时就是按第三个式子算得呀。是有逻辑错误的。1<=x<10就有明显的错误,因为这是数学中的写法,不是C语言中的写法。......
  • 网络数据库练习题
    练习一1  简述什么是网络数据库。 2  SQLServer2000的常见版本有哪些。 3  解释以下若干名词术语:关系,元组,属性,主键。 4  简述SQLServer2000中的4个系统数据库的主要用途。 5  简述SQLServer2000中的一些常用数据类型(datetime,int,float,money)的用法或......
  • 2008秋-计算机软件基础-第四章习题参考答案 P131 ,习题4,5
    Author:EmanLee 计算机软件基础,教材P131,第4题参考答案(1)查找e的过程abcdefghLow=1Mid=4High=8abcdefghLow=5Mid=6High=8abcdefghLow=5Mid=5High=5查找成功(2)查找f的过程abcdefghLow=1Mid=4High=8abcdefghLow=5Mid=6High=8查找成功(3)查找h的过程abcdefghLow=1Mid=4High=8abcdefghLo......
  • 2008秋-计算机软件基础-第四章习题参考答案 P131 ,习题6之一
    Author:EmanLee P131,第6题之一参考答案(1)      直接插入排序初始状态第一趟第二趟第三趟第四趟第五趟第六趟第七趟第八趟第九趟(2)      冒泡排序初始状态第一趟 第二趟第三趟第四趟第五趟 第六趟 第七趟第八趟第九趟53       12    12 ......
  • 2008秋-计算机软件基础-第四章习题参考答案 P131 ,习题6之二
    P131,第6题之二参考答案(1)      快速排序(第一趟)初始状态Pivot=5353871261706827652135J向左扫描ij第一次交换后358712617068276521ijI向右扫描,第二次交换后351261706827652187ijJ向左扫描,第三次交换后352112617068276587ijI向右扫描,第四次交换352112706827656187ijJ向左扫描35......
  • C语言变量分类
    按照变量的定义位置分类,在函数外部定义的变量为全局变量或者外部变量;在函数内部定义的变量为局部变量。在不加修饰\(^*\)的情况下,全局变量的作用域是定义以下的整个文件,局部变量的定义域是定义以下的所在函数体。在函数内访问变量时,优先查找局部变量,所以如果局部变量与全局变......
  • 字符串复健(c语言)
    目录目录目录字符串的声明和初始化字符串的内存表示字符串的输入输出输入输出字符串相关函数总结字符串的声明和初始化在C语言中,字符串实际上是使用空字符\0结尾的一维字符数组。声明和初始化一个abc字符串:charsite[4]={'a','b','c','\0'};简化:charsite[]="a......
  • 学习c语言的一天(1)
     打印地址使用%p输出int(整型)二维数组时,发现地址每次+4,是因为一个整型占4个字节,同理输出char(字符型)二维数组占1个字节,所以存储地址每次+1 #define_CRY_SECURE_NO_WARNINGS#include<stdio.h>intmain(){ intarr[3][4]={{1,2,3,4},{5,6}};charcarr[3][4]={{'a......
  • CF练习题19
    PathsontheTree贪心题,因为对于每一个儿子,经过的路径数之差少于\(1\),所以这道题可以理解为先把所有路径均分,然后把剩下的按照权值大小依次分布给那些儿子。那么儿子传给父亲的权值又是如何处理呢?首先,我们需要把父亲首先传递过来的\(k\)条路径均分,然后把剩下的最大路径给传......