• 计算机二级-C语言-程序设计题-190112记录-结构体的遍历和结构体的数据的交换处理,文件的操作。


    //程序设计题:学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生人数。

    //重难点:结构体的定义。结构体的使用。文件指针的定义。对文件的操作。输出格式‘%4d’。两种方法获取最小值。

     1 #include <stdio.h>
     2 #define   N   16
     3 typedef  struct//定义一个新结构体类型
     4 {  char  num[10];
     5    int   s;
     6 } STREC;//新类型名称
     7 int  fun( STREC  *a, STREC *b )//形参这里可以有三种定义方式,指针,数组,数组加下标
     8 {
     9     //第一种方法:先把第一个数定义为最小的,然后遍历,如果遇见更小的就重新赋值。
    10     int i, j;
    11     j = 0;
    12     int min = a[0].s;
    13     for (i = 1; i < N; i++)
    14     {
    15         if (min > a[i].s)
    16         {
    17             min = a[i].s;
    18         }
    19     }
    20     for (i = 0; i < N; i++)
    21     {
    22         if (a[i].s == min)
    23         {
    24             b[j]= a[i];
    25             j++;
    26         }
    27     }
    28     return j;//这里不是j+1,因为上面多了一次j++。
    29 /*    //第二种方法:先把a数组进行由小到大的排序,然后再遍历一遍,和第一个相等的,都输出出来。
    30     int i, j, t;
    31     STREC m;
    32     t = 1;
    33     for (i = 0; i < N; i++)
    34     {
    35         for (j = i; j < N; j++)
    36         {
    37             if (a[i].s > a[j].s)
    38             {
    39                 m = a[i];
    40                 a[i] = a[j];
    41                 a[j]= m;
    42             }
    43         }
    44     }
    45     b[0]= a[0];//灵活变通,如果分开不能赋值的话,就把整体直接交换定义。
    46     for (i = 1; i < N; i++)
    47     {
    48         if (b[0].s == a[i].s)
    49         {
    50             b[i]= a[i];
    51             t = t + 1;
    52         }
    53     }
    54     return t;*/
    55 }
    56 main()
    57 {
    58     //定义结构体数组。
    59     STREC  s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},
    60           {"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},
    61           {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},
    62           {"GA011",91},{"GA017",64},{"GA018",64},{"GA016",72}};
    63    STREC  h[N];
    64    int  i,n;FILE *out ;
    65    n=fun( s,h );//以地址方式传递
    66    printf("The %d lowest score :
    ",n);
    67    for(i=0;i<n; i++)
    68      printf("%s  %4d
    ",h[i].num,h[i].s);//注意这里是4d,所以如果是两位数,会出现两个空格。
    69    printf("
    ");
    70    out = fopen("out.dat","w") ;
    71    fprintf(out, "%d
    ",n);
    72    for(i=0;i<n; i++)
    73      fprintf(out, "%4d
    ",h[i].s);//可以修改out文件,考试的时候
    74    fclose(out);
    75 }
  • 相关阅读:
    BZOJ3697: 采药人的路径
    解题:WC 2007 石头剪刀布
    解题:CQOI 2017 老C的方块
    解题:洛谷4314 CPU监控
    解题:CQOI 2017 老C的任务
    解题:CF1009 Dominant Indices
    解题:CF570D Tree Requests
    解题:APIO 2012 派遣
    解题:ZJOI 2015 幻想乡战略游戏
    解题:洛谷4178 Tree
  • 原文地址:https://www.cnblogs.com/ming-4/p/10259038.html
Copyright © 2020-2023  润新知