第10讲 结构 单元作业

发布时间 2023-12-14 08:17:40作者: YANTARES
1. 

有一组关于学生成绩的信息,编写函数max,该函数返回值为分数最高的学生的信息(包括学号和分数)。再编写主函数对其进行调用并输出最高分者的信息。假设结构类型定义为:

struct student

{

  char  *num;

  int   score;

};

提示:num定义为指针类型,注意向其复制内容之前要先为其申请空间。

 

yzy's version:

 1 # include <iostream>
 2 #define N 256
 3 using namespace std;
 4 struct student
 5 {
 6     char* num;
 7     int score;
 8 };
 9 struct student max(struct student s[N],int n)
10 {
11     struct student t = {0,s[0].score };
12     t.num = (char*)malloc(sizeof(char));
13     for (int i = 0; i < n; i++)
14     {
15         if (s[i].score > t.score)
16         {
17             t.score = s[i].score;
18             t.num = s[i].num;
19         }
20     }
21     return t;
22 }
23 int main()
24 {
25     struct student s[N] = {}, t = {};
26     int n,i;
27     t.num = (char*)malloc(sizeof(char));
28     cout << "输入学生数:" << endl;
29     /*char a[N];
30     s->num = a;*/
31     cin >> n;
32     cout << "输入各学生序号及成绩:" << endl;
33     for (i = 0; i < n; i++)
34     {
35         s[i].num = (char*)malloc(sizeof(char));
36         cin >> s[i].num >> s[i].score;
37     }
38     t=max(s,n);
39     cout << "最高分者序号为" << *t.num <<",分值为:" << t.score << endl;
40     system("pause");
41     return 0;
42 }
View Code

 

2. 编写程序,定义一个日期结构变量,计算某日期是本年度的第几天。提示:为简单起见,可定义一个存放12个月中每个月总天数的数组。

yzy's version:

 1 # include <iostream>
 2 #define N 256
 3 using namespace std;
 4 struct time
 5 {
 6     int month;
 7     int date;
 8 };
 9 int change(struct time t,bool run)
10 {
11     int i,num=0, a[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }, b[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };
12     if (run == 1)
13         for (i = 0; i < t.month-1; i++)
14             num += b[i];
15     else
16         for (i = 0; i < t.month-1; i++)
17             num += a[i];
18     num += t.date;
19     return num;
20 }
21 int main()
22 {
23     struct time t;
24     bool run;
25     int num;
26     cout << "今年是不是闰年?(是:1;否:0)" << endl;
27     cin >> run;
28     cout << "输入一日期(月/日)" << endl;
29     cin >> t.month >> t.date;
30     num = change(t, run);
31     cout << "这是今年的第" << num << "" << endl;
32     system("pause");
33     return 0;
34 }
View Code

 

 

3. 使用结构数组输入10本书的名称和单价,调用函数按照书名的字母顺序序进行排序,在主函数输出排序结果。

yzy's version:

 1 #include <iostream>
 2 #define N 5
 3 using namespace std;
 4 struct book
 5 {
 6     char name[100];
 7     int price;
 8 };
 9 struct book *sort(struct book b[])
10 {
11     int i, j;
12     struct book a;
13     for(i=0;i<N-1;i++)
14         for (j = 0; j < N - 1 - i; j++)
15         {
16             //for(int z=0; b[j].name[z] != '\0' && b[j + 1].name[z] != '\0';z++)
17             if (strcmp(b[j].name, b[j+1].name) > 0)
18             {
19                 a = b[j];
20                 b[j] = b[j + 1];
21                 b[j + 1] = a;
22             }
23         }
24     struct book* p = b;
25     return p;
26 }
27 int main()
28 {
29     struct book b[N],*p;
30     int i;
31     for (i = 0; i < N; i++)
32         cin >> b[i].name >> b[i].price;
33     p = sort(b);
34     cout << "排序后结果:" << endl;
35     for (i = 0; i < N; i++)
36         cout << p[i].name << ' ' << p[i].price << endl;
37     system("pause");
38     return 0;
39 }
View Code