1
/*
2 动态构造存放学生信息的结构体数组,按分数排序输出
3 */
4 # include <stdio.h>
5 # include <malloc.h>
6
7 struct Student
8 {
9 int age;
10 float score;
11 char name[ 100];
12
13 };
14
15 int main( void)
16 {
17 int i,j;
18 int len;
19 struct Student * pArr;
20 struct Student t; // 临时变量要定义成 struct Student t
21
22 printf( " 请输入学生的个数:\n ");
23 printf( " len = ");
24 scanf( " %d ", &len);
25
26 pArr = ( struct Student *)malloc(len * sizeof( struct Student));
27
28 for(i= 0; i<len; i++)
29 {
30 printf( " 请输入第%d位学生信息\n ", i+ 1);
31 printf( " age = ");
32 scanf( " %d ", &pArr[i].age);
33
34 printf( " name = : ");
35 scanf( " %s ",pArr[i].name); // name是数组名,本身已经是数组首元素的地址。pArr[i].name不能写成&pArr[i].name
36
37 printf( " score = : ");
38 scanf( " %f ", &pArr[i].score);
39 }
40 // 排序
41 for(i= 0; i<len- 1; i++)
42 {
43 for(j= 0; j<len- 1-i; j++)
44 {
45 if(pArr[j].score >pArr[j+ 1].score) // > 是升序,<是升序
46 {
47 t = pArr[j];
48 pArr[j] = pArr[j+ 1];
49 pArr[j+ 1] = t;
50 }
51 }
52 }
53 // 输出
54 for(i= 0; i<len;i++)
55 {
56 printf( " 第%d位学生信息\n ", i+ 1);
57 printf( " age = %d\n ",pArr[i].age);
58 printf( " name = %s\n ",pArr[i].name);
59 printf( " score = %f\n ", pArr[i].score);
60 printf( " \n\n ");
61 }
62
63 return 0;
64 }
65 /*
66 在Vc++6.0中显示的结果是:
67 =================================================
68 请输入学生的个数:
69 len = 3
70 请输入第1位学生信息
71 age = 21
72 name = :张三
73 score = :39
74 请输入第2位学生信息
75 age = 24
76 name = :李四
77 score = :21
78 请输入第3位学生信息
79 age = 22
80 name = :王五
81 score = :99
82 第1位学生信息
83 age = 24
84 name = 李四
85 score = 21.000000
86
87
88 第2位学生信息
89 age = 21
90 name = 张三
91 score = 39.000000
92
93
94 第3位学生信息
95 age = 22
96 name = 王五
97 score = 99.000000
98 ===================================================
99 */
2 动态构造存放学生信息的结构体数组,按分数排序输出
3 */
4 # include <stdio.h>
5 # include <malloc.h>
6
7 struct Student
8 {
9 int age;
10 float score;
11 char name[ 100];
12
13 };
14
15 int main( void)
16 {
17 int i,j;
18 int len;
19 struct Student * pArr;
20 struct Student t; // 临时变量要定义成 struct Student t
21
22 printf( " 请输入学生的个数:\n ");
23 printf( " len = ");
24 scanf( " %d ", &len);
25
26 pArr = ( struct Student *)malloc(len * sizeof( struct Student));
27
28 for(i= 0; i<len; i++)
29 {
30 printf( " 请输入第%d位学生信息\n ", i+ 1);
31 printf( " age = ");
32 scanf( " %d ", &pArr[i].age);
33
34 printf( " name = : ");
35 scanf( " %s ",pArr[i].name); // name是数组名,本身已经是数组首元素的地址。pArr[i].name不能写成&pArr[i].name
36
37 printf( " score = : ");
38 scanf( " %f ", &pArr[i].score);
39 }
40 // 排序
41 for(i= 0; i<len- 1; i++)
42 {
43 for(j= 0; j<len- 1-i; j++)
44 {
45 if(pArr[j].score >pArr[j+ 1].score) // > 是升序,<是升序
46 {
47 t = pArr[j];
48 pArr[j] = pArr[j+ 1];
49 pArr[j+ 1] = t;
50 }
51 }
52 }
53 // 输出
54 for(i= 0; i<len;i++)
55 {
56 printf( " 第%d位学生信息\n ", i+ 1);
57 printf( " age = %d\n ",pArr[i].age);
58 printf( " name = %s\n ",pArr[i].name);
59 printf( " score = %f\n ", pArr[i].score);
60 printf( " \n\n ");
61 }
62
63 return 0;
64 }
65 /*
66 在Vc++6.0中显示的结果是:
67 =================================================
68 请输入学生的个数:
69 len = 3
70 请输入第1位学生信息
71 age = 21
72 name = :张三
73 score = :39
74 请输入第2位学生信息
75 age = 24
76 name = :李四
77 score = :21
78 请输入第3位学生信息
79 age = 22
80 name = :王五
81 score = :99
82 第1位学生信息
83 age = 24
84 name = 李四
85 score = 21.000000
86
87
88 第2位学生信息
89 age = 21
90 name = 张三
91 score = 39.000000
92
93
94 第3位学生信息
95 age = 22
96 name = 王五
97 score = 99.000000
98 ===================================================
99 */