计算机二级-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",n);
67    for(i=0;i<n; i++)
68      printf("%s  %4d\n",h[i].num,h[i].s);//注意这里是4d,所以如果是两位数,会出现两个空格。
69    printf("\n");
70    out = fopen("out.dat","w") ;
71    fprintf(out, "%d\n",n);
72    for(i=0;i<n; i++)
73      fprintf(out, "%4d\n",h[i].s);//可以修改out文件,考试的时候
74    fclose(out);
75 }

 

posted @ 2019-01-12 11:09  小大大小  阅读(669)  评论(0编辑  收藏  举报