實驗6

马猴烧酒酱發表於2024-06-24

task4

 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 void sort(Book x[], int n);
14 double sales_amount(Book x[], int n);
15 
16 int main() {
17     Book x[N] = {{"978-7-229-14156-1", "源泉", "安.蘭德", 84, 59},
18                  {"978-7-5133-5261-1", "李白來到舊金山", "譚夏陽", 48, 16},
19                  {"978-7-5617-4347-8", "陌生人日記", "周怡芳", 72.6, 27},
20                  {"978-7-5722-5475-8", "晶片簡史", "汪波", 74.9, 49},
21                  {"978-7-5046-9568-0", "資料化決策", "道格拉斯·W·哈伯德", 49, 42},
22                  {"978-7-5133-4388-6", "美好時代的背後", "凱瑟琳.布", 34.5, 39},
23                  {"978-7-1155-0509-5", "無窮的開始:世界進步的本源", "戴維·多伊奇", 37.5, 55},
24                  {"978-7-5321-5691-7", "何為良好生活", "陳嘉映", 29.5 , 31},
25                  {"978-7-5133-5109-6", "你好外星人", "英國未來出版集團", 118, 42},
26                  {"978-7-2011-4617-1", "世界盡頭的咖啡館", "約翰·史崔勒基", 22.5, 44}};
27     
28     printf("圖書銷量排名: \n");
29     sort(x, N);
30     output(x, N);
31 
32     printf("\n圖書銷售總額: %.2f\n", sales_amount(x, N));
33     
34     return 0;
35 }
36 
37 // 待補足:函式output()實現
38 // ×××
39 void output(Book x[], int n){
40     int i;
41     printf("ISBN                     書名                            作者                            售價            銷售冊數\n");
42     for(i=0;i<n;i++){
43     printf("%-13s\t %-30s\t %-28s\t %-10.1lf\t %-4d\n",x[i].isbn,x[i].name,x[i].author,x[i].sales_price,x[i].sales_count);
44     }
45 
46 }
47 
48 
49 // 待補足:函式sort()實現
50 // ×××
51 void sort(Book x[], int n){
52 int i, j;
53 Book t;
54 
55     for(i = 0; i < n-1; i++){
56       for(j = 0; j < n-1-i; j++){
57         if(x[j].sales_count < x[j+1].sales_count) {
58             t = x[j];
59             x[j] = x[j+1];
60             x[j+1]= t;}}}
61 }
62 
63 // 待補足:函式sales_count()實現
64 // ×××
65 double sales_amount(Book x[], int n){
66         int i;
67         double he=0.0;
68         for(i=0;i<n;i++){
69             he=he+x[i].sales_count*x[i].sales_price;}
70         return he;
71         }

task5

  1 #include <stdio.h>
  2 
  3 typedef struct {
  4     int year;
  5     int month;
  6     int day;
  7 } Date;
  8 
  9 // 函式宣告
 10 void input(Date *pd);                   // 輸入日期給pd指向的Date變數
 11 int day_of_year(Date d);                // 返回日期d是這一年的第多少天
 12 int compare_dates(Date d1, Date d2);    // 比較兩個日期: 
 13                                         // 如果d1在d2之前,返回-1;
 14                                         // 如果d1在d2之後,返回1
 15                                         // 如果d1和d2相同,返回0
 16 
 17 void test1();   // 測試函式1: 測試某個日期時這一年第多少天                   
 18 void test2();   // 測試函式2: 測試兩個日期先後順序
 19 
 20 
 21 int main() {
 22     printf("測試1: 輸入日期, 列印輸出這是一年中第多少天\n");
 23     test1();
 24 
 25     printf("\n測試2: 兩個人年齡大小關係\n");
 26     test2();
 27 }
 28 
 29 // 測試函式實現
 30 void test1() {
 31     Date d;
 32     int i;
 33 
 34     printf("輸入日期:(以形如2024-06-01這樣的形式輸入)\n");
 35     for(i = 0; i < 3; ++i) {
 36         input(&d);
 37         printf("%04d-%02d-%02d是這一年中第%d天\n\n", d.year, d.month, d.day, day_of_year(d));
 38     }
 39 }
 40 
 41 void test2() {
 42     Date Alice_birth, Bob_birth;
 43     int i;
 44     int ans;
 45 
 46     printf("輸入Alice和Bob出生日期:(以形如2005-08-11這樣的形式輸入)\n");
 47     for(i = 0; i < 3; ++i) {
 48         input(&Alice_birth);
 49         input(&Bob_birth);
 50         ans = compare_dates(Alice_birth, Bob_birth);
 51         
 52         if(ans == 0)
 53             printf("Alice和Bob一樣大\n\n");
 54         else if(ans == -1)
 55             printf("Alice比Bob大\n\n");
 56         else
 57             printf("Alice比Bob小\n\n");
 58     }
 59 }
 60 
 61 // 補足函式input實現
 62 // 功能: 輸入日期給pd指向的Date變數
 63 void input(Date *pd) {    
 64     scanf("%d-%d-%d", &pd->year, &pd->month, &pd->day);
 65 }
 66 
 67 // 補足函式day_of_year實現
 68 // 功能:返回日期d是這一年的第多少天
 69 int day_of_year(Date d) {
 70     int i,dath=0;
 71     for(i=1;i<d.month;i++){
 72         if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
 73         dath+=31;
 74         }
 75         else if(i==2)
 76             {if((d.year%4==0&&d.year%100!=0)||d.year%400==0)
 77             dath+=29;
 78             else
 79             dath+=28;
 80         }
 81         else
 82             dath+=30;
 83     }
 84    dath+=d.day;
 85    return dath;
 86 }
 87 
 88 // 補足函式compare_dates實現
 89 // 功能:比較兩個日期: 
 90 // 如果d1在d2之前,返回-1;
 91 // 如果d1在d2之後,返回1
 92 // 如果d1和d2相同,返回0
 93 int compare_dates(Date d1, Date d2) {
 94     if(d1.year>d2.year)
 95         return 1;
 96     else if(d1.year<d2.year)
 97         return -1;
 98     else
 99     {if(d1.month>d2.month)
100         return 1;
101     else if(d1.month<d2.month)
102         return -1;
103     else
104     {if(d1.day>d2.day)
105     return 1;
106     else if(d1.day<d2.day)
107         return -1;
108     else
109         return 0;
110     
111     }
112     }
113 }

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 
13 // 函式宣告
14 void output(Account x[], int n);    // 輸出賬戶陣列x中n個賬戶資訊,其中,密碼用*替代顯示
15 
16 int main() {
17     Account x[] = {{"A1001", "123456", student},
18                     {"A1002", "123abcdef", student},
19                     {"A1009", "xyz12121", student}, 
20                     {"X1009", "9213071x", admin},
21                     {"C11553", "129dfg32k", teacher},
22                     {"X3005", "921kfmg917", student}};
23     int n;
24     n = sizeof(x)/sizeof(Account);
25     output(x, n);
26 
27     return 0;
28 }
29 
30 // 待補足的函式output()實現
31 // 功能:遍歷輸出賬戶陣列x中n個賬戶資訊
32 //      顯示時,密碼欄位以與原密碼相同欄位長度的*替代顯示
33 void output(Account x[], int n) {
34    int i,j;
35     for (i = 0; i < n; i++) {
36         printf("%s\t", x[i].username);
37         for (j = 0; j < strlen(x[i].password); j++) {
38             printf("*");
39         }
40         printf("    \t");
41         switch (x[i].type) {
42             case admin:
43                 printf("admin\n");
44                 break;
45             case student:
46                 printf("student\n");
47                 break;
48             case teacher:
49                 printf("teacher\n");
50                 break;
51         }
52     }
53       
54 }

相關文章