保研练习题(5)

流程练习题,基本不涉及什么算法。

要求:
学生有(学号,姓名,性别,年龄),初始化三个学生的信息
(10,wes,f,23)(20,ert,f,45)(30,str,t,89),然后对学生信息进行插入和删除处理
例如
I12,rt,f,67表示插入12,rt,f,67
D10 表示删除学号为10的学生的信息
每次操作完成以后输出所有学生的信息按学号从小到大排序


输入:
I12,rt,f,67
输出
(10,wes,f,23) (12,rt,f,67) (20,ert,f,45) (30,str,t,89)
输入:
D10 
输出
(12,rt,f,67) (20,ert,f,45) (30,str,t,89)

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 
 5 // 学生信息
 6 struct student
 7 {
 8     int num;
 9     char name[30];
10     char sex;
11     int age;
12 };
13 
14 int main()
15 {
16     struct student t;
17     struct student stu[50];
18     char cmd,sex,name[30];
19     int num,age,i,j,k;
20 
21     // 初始化
22     stu[0].num = 10;
23     strcpy(stu[0].name,"wes");
24     stu[0].sex = 'f';
25     stu[0].age = 23;
26 
27     stu[1].num = 20;
28     strcpy(stu[1].name,"ert");
29     stu[1].sex = 'f';
30     stu[1].age = 45;
31 
32     stu[2].num = 30;
33     strcpy(stu[2].name,"str");
34     stu[2].sex = 't';
35     stu[2].age = 89;
36 
37     // 输入
38     for (i=2; ;){
39         scanf("%c",&cmd);
40         if (cmd == 'I'){    // 插入
41             i += 1;
42             scanf("%d,%[^,]%*c%c,%d",&stu[i].num,stu[i].name,&stu[i].sex,&stu[i].age);
43             // 排序 共i+1个
44             for (j=0; j<i; j++){
45                 for (k=0; k<i-j; k++){
46                     if (stu[k].num > stu[k+1].num){
47                         t = stu[k];
48                         stu[k] = stu[k+1];
49                         stu[k+1] = t;
50                     }
51                 }
52             }
53             // 输出结果
54             for (j=0; j<=i; j++){
55                 printf("(%d,%s,%c,%d) ",stu[j].num,stu[j].name,stu[j].sex,stu[j].age);
56             }
57             printf("
");
58         }
59         else if (cmd == 'D'){    // 删除
60             scanf("%d",&num);
61             for (j=0; j<=i; j++){    // 定位到要删除的节点
62                 if (stu[j].num == num){
63                     break;
64                 }
65             }
66             for (k=j; k<i; k++){    // 删除节点 把以后的都向前移一个
67                 stu[k] = stu[k+1];
68             }
69             i -= 1;        // 删除后节点数减一
70             // 输出结果
71             for (j=0; j<=i; j++){
72                 printf("(%d,%s,%c,%d) ",stu[j].num,stu[j].name,stu[j].sex,stu[j].age);
73             }
74             printf("
");
75         }
76     }
77     return 0;
78 }

原文地址:https://www.cnblogs.com/raul-ac/p/3324557.html