第一部分

①补足程序 学生的记录由学号和成绩组成。N名学生的数据已在主函数中放入结构体数组stu中。编写函数findMinlist,实现:把分数最低的学生数据放在数组t中,函数返回分数最低的学生的人数。(注意:分数最低的学生可能不止一个)

代码如下:

 1 #include <stdio.h>
 2 
 3 const int N=5;
 4 
 5 // 定义结构体类型struct student,并定义STU为其别名 
 6 typedef struct student {
 7     long no;
 8     char name[20];
 9     int score;     
10 }STU;
11 
12 // 函数声明 
13 void input(STU s[], int n);
14 int findMinlist(STU s[], STU t[], int n);
15 void output(STU s[], int n);
16 
17 int main() {
18     STU stu[N], minlist[N];
19     int count;
20     
21     printf("录入%d个学生信息\n", N);
22     input(stu, N);
23     
24     printf("\n统计最低分人数和学生信息...\n");
25     count = findMinlist(stu, minlist, N);
26     
27     printf("\n一共有%d个最低分,信息如下:\n", count);
28     output(minlist, count);
29      
30     return 0;
31 } 
32 
33 // 输入n个学生信息,存放在结构体数组s中 
34 void input(STU s[], int n) {
35     int i;
36     for(i=0; i<n; i++) 
37         scanf("%ld %s %d", &s[i].no, s[i].name, &s[i].score);
38 } 
39 
40 // 输出结构体s中n个元素信息
41 void output(STU s[], int n) {
42     int i;
43     for(i=0; i<n; i++)
44         printf("%ld %s %d\n", s[i].no, s[i].name, s[i].score); 
45 } 
46 
47 // 在结构体数组s中,查找最低分学生的记录,将其存入结构体数组s中
48 // 形参n是结构体数组s中元素个数
49 // 函数返回最低分的学生人数 
50 int findMinlist(STU s[], STU t[], int n) {
51     // 补足函数实现
52     // ×××
53     int i,j=0,k=s[0].score;
54     for(i=0;i<n;i++)
55     if(s[i].score<k)
56     k=s[i].score;
57     for(i=0;i<n;i++)
58         if(s[i].score==k)
59         t[j++]=s[i];
60     return j;
61 
62 } 

运行截图示例:

                    

 

②:补足程序:题目描述

某省计算机等级考试的最终成绩是由两部分组成的:客观题和操作题组成。学生信息包含准考证号、学生姓名、客观题分数、操作题分数、总得分和等级。其中客观题占40%,操作题占60%。编写函数,实现如下功能:根据客观题和操作题的分数计算学生的总得分,并对学生的总得分进行排序,然后对前总得分前10%的学生的等级确定为"优秀",前10%-50%之间(不包含10%但包含50%的学生)确定为"合格",其余学生等级确定为"不合格"。

代码如下:

 1 #include <stdio.h>
 2 #include <string.h>
 3 const int N = 10;
 4 
 5 // 定义结构体类型struct student,并定义其别名为STU 
 6 typedef struct student {
 7     long int id;
 8     char name[20];
 9     float objective;    /*客观题得分*/
10     float subjective;    /*操作题得分*/
11     float sum;
12     char level[10];    
13 }STU; 
14 
15 // 函数声明
16 void input(STU s[], int n);
17 void output(STU s[], int n);
18 void process(STU s[], int n);
19 
20 int main() {
21     STU stu[N];
22     
23     printf("录入%d个考生信息: 准考证号,姓名,客观题得分(<=40),操作题得分(<=60)\n", N); 
24     input(stu, N);
25     
26     printf("\n对考生信息进行处理: 计算总分,确定等级\n");
27     process(stu, N);
28     
29     printf("\n打印考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级\n");
30     output(stu, N); 
31     
32     return 0;
33 } 
34 
35 // 录入考生信息:准考证号,姓名,客观题得分,操作题得分
36 void input(STU s[], int n) {
37     // 补足代码
38      int i;
39      for(i=0;i<n;i++)
40      scanf("%d %s %f %f",&s[i].id,s[i].name,&s[i].objective,&s[i].subjective); 
41 }
42 
43 //输出考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级
44 void output(STU s[], int n) {
45     // 补足代码
46      int i;
47      for(i=0;i<n;i++)
48      printf("%d %s %f %f %f %s\n",s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].level);
49 }
50 
51 // 对考生信息进行处理:计算总分,排序,确定等级
52 void process(STU s[], int n) {
53     // 补足代码
54     int i,j;
55     STU temp;
56     for(i=0;i<n;i++) {    
57         s[i].sum=s[i].subjective+s[i].objective;
58     }
59     
60     for(i=0;i<n;i++)
61     {
62         if((i+1)<=n*0.1)
63           strcpy(s[i].level,"优秀"); 
64         else if((i+1)>n*0.1&&(i+1)<=n*0.5)
65           strcpy(s[i].level,"合格");
66         else
67           strcpy(s[i].level,"不合格");    
68     } 
69     
70     for(i=0;i<n-1;i++)
71       for(j=0;j<n-1-i;j++)
72         if(s[j].sum<s[j+1].sum) {
73             temp = s[j];
74             s[j] = s[j+1];
75             s[j+1] = temp;
76         }
77     
78 }

运行截图:

 

 

 

第二部分:共用体类型及编程示例:

共用体与结构体类型的区别?

①:共用体:几个不同类型的变量共占一段内存;

②:结构体:系统分配内存为各成员所需要内存量的总和。

 

第三部分:枚举类型及编程示例

Q:枚举类型用于描述哪一类数据?

A:枚举是所包含值为固定几个值的数据,是一系列命名的整型常量,是一种基本数据类型,而不是一钟构造类型,适用于变量取值有限的情形。

Q:枚举变量使用过程中的注意事项;能否直接输入输出?

A1:默认情况下,枚举值列表中的值按顺序对应0,1,2......如果指定某个枚举值对应的整数,则后续枚举值在此基础上加1。

A2:不能直接输入/输出。

Q:能否把一个int型数值赋值给一个枚举类型的变量?反过来呢?

A: int型数值n赋值给枚举类型的变量,必须用强制类型(显式)转换,意义为将顺序号为n的枚举元素赋予枚举变量;枚举值可以赋给整型变量,意义为将枚举值的顺序号赋予整型变量。

 

实验总结与体会:

这次实验踩得坑比较多 ,最后还是都爬起来了。

exp1.2 中这个只要弄通循环 就挺简单了,就是先根据条件找到自己想要的那些数组,然后再通过变量对应到数组,从而找到自己要的个数,

这部分其实自己有个发现:对自己初始化的变量 可以用s[0].xxx也可以用根据题目意思来定义的一个常量。但一般初始化还是用s[0].xxx。

exp1.3 这部分其实和exp1.1里面有很多一样的,可以照样子搬就行,可我发现看似如此 自己做起来还是有很多问题

第一 对于那个10%的问题 就显得很愚笨,无从下手,然后现在编的这个程序 也是有漏洞的 对于无法整除10 和5的数就不成立了。

第二  写了%10d  %lf 后数据输出以后就变成0.00000  很震惊,哭了  后来改成%d  %f 就可以了 觉得自己蠢得很。

总之下次再多加练习  虽然计算机这块 自己真的不太行 就希望能自己多拿分吧。

 

 

互评:

①:

②:

③: