task4
1 #include <stdio.h>
2 #define N 10
3
4 typedef struct {
5 char isbn[20];
6 char name[80];
7 char author[80];
8 double sales_price;
9 int sales_count;
10 } Book;
11
12 void output(Book x[], int n);
13 void sort(Book x[], int n);
14 double sales_amount(Book x[], int n);
15
16 int main() {
17 Book x[N] = {
18 {"978-7-5327-6082-4", "门将之死", "罗纳德.伦", 42, 51},
19 {"978-7-308-17047-5", "自由与爱之地:入以色列记", "云也退", 49, 30},
20 {"978-7-5404-9344-8", "伦敦人", "克莱格泰勒", 68, 27},
21 {"978-7-5447-5246-6", "软件体的生命周期", "特德姜", 35, 90},
22 {"978-7-5722-5475-8", "芯片简史", "汪波", 74.9, 49},
23 {"978-7-5133-5750-0", "主机战争", "布莱克.J.哈里斯", 128, 42},
24 {"978-7-2011-4617-1", "世界尽头的咖啡馆", "约翰·史崔勒基", 22.5, 44},
25 {"978-7-5133-5109-6", "你好外星人", "英国未来出版集团", 118, 42},
26 {"978-7-1155-0509-5", "无穷的开始:世界进步的本源", "戴维·多伊奇", 37.5, 55},
27 {"978-7-229-14156-1", "源泉", "安.兰德", 84, 59}
28 };
29 printf("图书销量排名(按销售册数): \n");
30 sort(x, N);
31 output(x, N);
32 printf("\n图书销售总额: %.2f\n", sales_amount(x, N));
33 return 0;
34 }
35
36 void output(Book x[], int n) {
37 printf("%-20s %-30s %-20s %-6s %s\n", "ISBN号", "书名", "作者", "售价", "销售册数");
38 int i;
39 for (i = 0; i < n; i++) {
40 if (x[i].sales_price == (int)x[i].sales_price)
41 printf("%-20s %-30s %-20s %6d %6d\n",
42 x[i].isbn, x[i].name, x[i].author, (int)x[i].sales_price, x[i].sales_count);
43 else
44 printf("%-20s %-30s %-20s %6.1f %6d\n",
45 x[i].isbn, x[i].name, x[i].author, x[i].sales_price, x[i].sales_count);
46 }
47 }
48
49 void sort(Book x[], int n) {
50 int i;
51 for (i = 0; i < n - 1; i++) {
52 int max_idx = i;
53 int j;
54 for (j = i + 1; j < n; j++) {
55 if (x[j].sales_count > x[max_idx].sales_count)
56 max_idx = j;
57 }
58 if (max_idx != i) {
59 Book temp = x[i];
60 x[i] = x[max_idx];
61 x[max_idx] = temp;
62 }
63 }
64 }
65
66 double sales_amount(Book x[], int n) {
67 double total = 0.0;
68 int i;
69 for (i = 0; i < n; i++) {
70 total += x[i].sales_price * x[i].sales_count;
71 }
72 return total;
73 }
![image]()
task5
1 #include <stdio.h>
2
3 typedef struct {
4 int year;
5 int month;
6 int day;
7 } Date;
8
9 void input(Date *pd);
10 int day_of_year(Date d);
11 int compare_dates(Date d1, Date d2);
12
13 void test1() {
14 Date d;
15 int i;
16 printf("输入日期:(以形如2025-12-19这样的形式输入)\n");
17 for(i = 0; i < 3; ++i) {
18 input(&d);
19 printf("%d-%02d-%02d是这一年中第%d天\n\n", d.year, d.month, d.day, day_of_year(d));
20 }
21 }
22
23 void test2() {
24 Date Alice_birth, Bob_birth;
25 int i;
26 int ans;
27 printf("输入Alice和Bob出生日期:(以形如2025-12-19这样的形式输入)\n");
28 for(i = 0; i < 3; ++i) {
29 input(&Alice_birth);
30 input(&Bob_birth);
31 ans = compare_dates(Alice_birth, Bob_birth);
32 if(ans == 0)
33 printf("Alice和Bob一样大\n\n");
34 else if(ans == -1)
35 printf("Alice比Bob大\n\n");
36 else
37 printf("Alice比Bob小\n\n");
38 }
39 }
40
41 int main() {
42 printf("测试1: 输入日期, 打印输出这是一年中第多少天\n");
43 test1();
44 printf("\n测试2: 两个人年龄大小关系\n");
45 test2();
46 return 0;
47 }
48
49 void input(Date *pd) {
50 scanf("%d-%d-%d", &pd->year, &pd->month, &pd->day);
51 }
52
53 int day_of_year(Date d) {
54 int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
55 if ((d.year % 4 == 0 && d.year % 100 != 0) || (d.year % 400 == 0))
56 days_in_month[1] = 29;
57 int i;
58 int total = 0;
59 for (i = 0; i < d.month - 1; i++)
60 total += days_in_month[i];
61 total += d.day;
62 return total;
63 }
64
65 int compare_dates(Date d1, Date d2) {
66 if (d1.year < d2.year) return -1;
67 if (d1.year > d2.year) return 1;
68 if (d1.month < d2.month) return -1;
69 if (d1.month > d2.month) return 1;
70 if (d1.day < d2.day) return -1;
71 if (d1.day > d2.day) return 1;
72 return 0;
73 }
![image]()
task6
1 #include <stdio.h>
2 #include <string.h>
3
4 enum Role { admin, student, teacher };
5
6 typedef struct {
7 char username[20];
8 char password[20];
9 enum Role type;
10 } Account;
11
12 void output(Account x[], int n);
13
14 int main() {
15 Account x[] = {
16 {"A1001", "123456", student},
17 {"A1002", "123abcdef", student},
18 {"A1009", "xyz12121", student},
19 {"X1009", "9213071x", admin},
20 {"C11553", "129dfg32k", teacher},
21 {"X3005", "921kfmg917", student}
22 };
23 int n = sizeof(x) / sizeof(Account);
24 output(x, n);
25 return 0;
26 }
27
28 void output(Account x[], int n) {
29 int i;
30 int a=13;
31 for (i = 0; i < n; i++) {
32 printf("%-10s ", x[i].username);
33 int len = strlen(x[i].password);
34 int j;
35 for (j = 0; j < len; j++) {
36 printf("*");
37 }
38 for (j=0;j<a-len;j++)
39 printf(" ");
40 switch (x[i].type) {
41 case admin: printf("admin\n"); break;
42 case student: printf("student\n"); break;
43 case teacher: printf("teacher\n"); break;
44 }
45 }
46 }
![image]()
task7
1 #include <stdio.h>
2 #include <string.h>
3
4 typedef struct {
5 char name[20];
6 char phone[12];
7 int vip;
8 } Contact;
9
10 void set_vip_contact(Contact x[], int n, char name[]);
11 void output(Contact x[], int n);
12 void display(Contact x[], int n);
13
14 #define N 10
15
16 int main() {
17 Contact list[N] = {
18 {"刘一", "15510846604", 0},
19 {"陈二", "18038747351", 0},
20 {"张三", "18853253914", 0},
21 {"李四", "13230584477", 0},
22 {"王五", "15547571923", 0},
23 {"赵六", "18856659351", 0},
24 {"周七", "17705843215", 0},
25 {"孙八", "15552933732", 0},
26 {"吴九", "18077702405", 0},
27 {"郑十", "18820725036", 0}
28 };
29 int vip_cnt, i;
30 char name[20];
31 printf("显示原始通讯录信息:\n");
32 output(list, N);
33 printf("\n输入要设置的紧急联系人个数: ");
34 scanf("%d", &vip_cnt);
35 printf("输入%d个紧急联系人姓名:\n", vip_cnt);
36 for(i = 0; i < vip_cnt; ++i) {
37 scanf("%s", name);
38 set_vip_contact(list, N, name);
39 }
40 printf("\n显示通讯录列表:(按姓名字典序升序排列,紧急联系人最先显示)\n");
41 display(list, N);
42 return 0;
43 }
44
45 void set_vip_contact(Contact x[], int n, char name[]) {
46 int i;
47 for (i = 0; i < n; ++i) {
48 if (strcmp(x[i].name, name) == 0) {
49 x[i].vip = 1;
50 break;
51 }
52 }
53 }
54
55 void output(Contact x[], int n) {
56 int i;
57 for (i = 0; i < n; ++i) {
58 printf("%-10s%-15s", x[i].name, x[i].phone);
59 if (x[i].vip)
60 printf("%5s", "*");
61 printf("\n");
62 }
63 }
64
65 void display(Contact x[], int n) {
66 Contact temp[N];
67 int i;
68 for (i = 0; i < n; ++i)
69 temp[i] = x[i];
70 for (i = 0; i < n - 1; ++i) {
71 int j;
72 for (j = 0; j < n - i - 1; ++j) {
73 if (temp[j].vip < temp[j+1].vip) {
74 Contact t = temp[j];
75 temp[j] = temp[j+1];
76 temp[j+1] = t;
77 } else if (temp[j].vip == temp[j+1].vip) {
78 if (strcmp(temp[j].name, temp[j+1].name) > 0) {
79 Contact t = temp[j];
80 temp[j] = temp[j+1];
81 temp[j+1] = t;
82 }
83 }
84 }
85 }
86 for (i = 0; i < n; ++i) {
87 printf("%-10s%-15s", temp[i].name, temp[i].phone);
88 if (temp[i].vip)
89 printf("%5s", "*");
90 printf("\n");
91 }
92 }
![image]()