实验6

任务4

 

 1 #include <stdio.h>
 2 #define N 10
 3 
 4 typedef struct {
 5     char isbn[20];          // isbn号
 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 {
14     printf("ISBN号\t\t\t书名\t\t\t\t\t作者\t\t\t\t售价\t销售册数");
15     printf("\n");
16     
17     int i;
18     for (i = 0; i < n; i++)
19     {
20         printf("%s\t%-30s\t\t%-20s\t\t%g\t%d",x[i].isbn, x[i].name, x[i].author,x[i].sales_price ,x[i].sales_count);
21         printf("\n");
22     }
23 }
24 
25 void sort(Book x[], int n)
26 {
27     int i, j;
28     Book tmp;
29     for (i = 0; i < n - i; i++)
30     {
31         for (j = 0; j < n - 1 - i; j++)
32         {
33             if (x[j].sales_price < x[j].sales_price)
34             {
35                 tmp = x[j];
36                 x[j] = x[j + 1];
37                 x[j + 1] = tmp;
38             }
39         }
40     }
41 }
42 
43 double sales_amount(Book x[], int n)
44 {
45     double total[n];
46     int i;
47     for (i = 0; i < n; i++)
48     {
49         total[i] = x[i].sales_price * x[i].sales_count;
50     }
51 
52     double sum = 0; 
53     for(i = 0; i < n; i++)
54     {
55         sum = sum + total[i];
56     }
57     return sum;
58 }
59 
60 int main() {
61      Book x[N] = {{"978-7-5327-6082-4", "门将之死", "罗纳德.伦", 42, 51},
62                   {"978-7-308-17047-5", "自由与爱之地:入以色列记", "云也退", 49 , 30},
63                   {"978-7-5404-9344-8", "伦敦人", "克莱格泰勒", 68, 27},
64                   {"978-7-5447-5246-6", "软件体的生命周期", "特德姜", 35, 90}, 
65                   {"978-7-5722-5475-8", "芯片简史", "汪波", 74.9, 49},
66                   {"978-7-5133-5750-0", "主机战争", "布莱克.J.哈里斯", 128, 42},
67                   {"978-7-2011-4617-1", "世界尽头的咖啡馆", "约翰·史崔勒基", 22.5, 44},
68                   {"978-7-5133-5109-6", "你好外星人", "英国未来出版集团", 118, 42},
69                   {"978-7-1155-0509-5", "无穷的开始:世界进步的本源", "戴维·多伊奇", 37.5, 55},
70                   {"978-7-229-14156-1", "源泉", "安.兰德", 84, 59}
71                   };
72     
73     printf("图书销量排名(按销售册数): \n");
74     sort(x, N);
75     output(x, N);
76 
77     printf("\n图书销售总额: %.2f\n", sales_amount(x, N));
78     
79     return 0;
80 }

 

实验5

 

 1 #include <stdio.h>
 2 typedef struct {
 3     int year;
 4     int month;
 5     int day;
 6 } Date;
 7 
 8 void input(Date *pd)
 9 {
10     scanf("%d-%d-%d", &pd->year, &pd->month, &pd->day);
11 }   
12                
13 int day_of_year(Date d)
14 {
15     int sum = 0;
16     int i;
17     int leap_year_month_day[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
18     int common_year_month_day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
19     
20     if ((d.year % 4 == 0 && d.year % 100 != 0) || d.year % 400 == 0)
21     {
22         for (i = 0; i < d.month - 1; i++)
23         sum += leap_year_month_day[i];
24     }
25     else
26     {
27         for (i = 0; i < d.month - 1; i++)
28         sum += common_year_month_day[i];
29     }
30     return (sum + d.day);
31 }   
32              
33 int compare_dates(Date d1, Date d2)
34 {
35     if(d1.day == d2.day && d1.month == d2.month && d1.year == d2.year)
36     return 0;
37     
38     else if(d1.year < d2.year || (d1.year == d2.year && d1.month < d2.month) || (d1.year == d2.year && d1.month == d2.month && d1.day < d2.day))
39     return -1;
40     
41     else 
42     return 1;
43     
44 }                          
45 
46 void test1() {
47     Date d;
48     int i;
49 
50     printf("输入日期:(以形如2024-12-16这样的形式输入)\n");
51     for(i = 0; i < 3; ++i) {
52         input(&d);
53         printf("%d-%02d-%02d是这一年中第%d天\n\n", d.year, d.month, d.day, day_of_year(d));
54     }
55 }
56 
57 void test2() {
58     Date Alice_birth, Bob_birth;
59     int i;
60     int ans;
61 
62     printf("输入Alice和Bob出生日期:(以形如2024-12-16这样的形式输入)\n");
63     for(i = 0; i < 3; ++i) {
64         input(&Alice_birth);
65         input(&Bob_birth);
66         ans = compare_dates(Alice_birth, Bob_birth);
67         
68         if(ans == 0)
69             printf("Alice和Bob一样大\n\n");
70         else if(ans == -1)
71             printf("Alice比Bob大\n\n");
72         else
73             printf("Alice比Bob小\n\n");
74     }
75 }
76 
77 int main() {
78     printf("测试1: 输入日期, 打印输出这是一年中第多少天\n");
79     test1();
80 
81     printf("\n测试2: 两个人年龄大小关系\n");
82     test2();
83 }

 

实验6

 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 i, j;
15     int password_length[n];
16     for (i = 0; i < n; i++)
17     {
18         password_length[i] = strlen(x[i].password);
19     }
20     
21     for (i = 0; i < n; i++)
22     {
23         printf("%-10s", x[i].username);
24         for (j = 0; j < password_length[i]; j++)
25         {
26             printf("*");
27         }
28         printf("\t\t");
29         switch (x[i].type)
30         {
31             case student:
32             printf("student\n");break;
33             case teacher:
34             printf("teacher\n");break;
35             case admin:
36             printf("admin\n");break;
37         }
38     } 
39 }
40 
41 int main() {
42     Account x[] = {{"A1001", "123456", student},
43                     {"A1002", "123abcdef", student},
44                     {"A1009", "xyz12121", student}, 
45                     {"X1009", "9213071x", admin},
46                     {"C11553", "129dfg32k", teacher},
47                     {"X3005", "921kfmg917", student}};
48     int n;
49     n = sizeof(x)/sizeof(Account);
50     output(x, n);
51 
52     return 0;
53 }

 

实验7

 

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 typedef struct 
 5 {
 6     char name[20];      
 7     char phone[12];     
 8     int  vip;           
 9 } Contact; 
10 
11 void set_vip_contact(Contact x[], int n, char name[])
12 {
13     int i;
14     for (i = 0; i < n; i++)
15     {
16         if (strcmp(x[i].name,name) == 0)
17         x[i].vip = 1;
18     }
19 }
20   
21 void output(Contact x[], int n) 
22 {
23     int i;
24     for(i = 0; i < n; ++i) {
25         printf("%-10s%-15s", x[i].name, x[i].phone);
26         if(x[i].vip)
27             printf("%5s", "*");
28         printf("\n");
29     }
30 } 
31 
32 void display(Contact x[], int n)
33 {
34     int i, j;
35     Contact temp;
36     for (i = 0; i < n - 1; i++) {
37         
38         for (j = i + 1; j < n; j++)
39         {
40             if (x[i].vip < x[j].vip)
41             {
42                 temp = x[i];
43                 x[i] = x[j];
44                 x[j] = temp;
45             } else if (x[i].vip == x[j].vip && strcmp(x[i].name, x[j].name) > 0) 
46             {
47                 temp = x[i];
48                 x[i] = x[j];
49                 x[j] = temp;
50             }
51         }
52     }
53     
54     output(x,n);
55 }   
56 
57 #define N 10
58 int main() {
59     Contact list[N] = {{"刘一", "15510846604", 0},
60                        {"陈二", "18038747351", 0},
61                        {"张三", "18853253914", 0},
62                        {"李四", "13230584477", 0},
63                        {"王五", "15547571923", 0},
64                        {"赵六", "18856659351", 0},
65                        {"周七", "17705843215", 0},
66                        {"孙八", "15552933732", 0},
67                        {"吴九", "18077702405", 0},
68                        {"郑十", "18820725036", 0}
69                        };
70     int vip_cnt, i;
71     char name[20];
72 
73     printf("显示原始通讯录信息: \n"); 
74     output(list, N);
75 
76     printf("\n输入要设置的紧急联系人个数: ");
77     scanf("%d", &vip_cnt);
78     
79     printf("输入%d个紧急联系人姓名:\n", vip_cnt);
80     for(i = 0; i < vip_cnt; ++i) 
81     {
82         scanf("%s", name);
83         set_vip_contact(list, N, name);
84     }
85 
86     printf("\n显示通讯录列表:(按姓名字典序升序排列,紧急联系人最先显示)\n");
87     display(list, N);
88 
89     return 0;
90 }

 

posted @ 2024-12-22 21:09  64rytr76d65  阅读(10)  评论(0)    收藏  举报