实验六

实验任务一

  1 #include <stdio.h>
  2 #include <string.h>
  3 #define N 3  
  4 
  5 typedef struct student {
  6     int id;              // 学号
  7     char name[20];       // 姓名
  8     char subject[20];    // 考试科目
  9     double perf;         // 平时成绩
 10     double mid;          // 期中成绩
 11     double final;        // 期末成绩
 12     double total;        // 总评成绩
 13     char level[10];      // 成绩等级
 14 } STU;
 15 
 16 
 17 void input(STU[], int);
 18 void output(STU[], int);
 19 void calc(STU[], int);
 20 int fail(STU[], STU[], int);
 21 void sort(STU[], int);
 22 
 23 int main() {
 24     STU st[N], fst[N];   // 数组st记录学生信息,fst记录不及格学生信息
 25     int k;               // 用于记录不及格学生个数
 26 
 27     printf("录入学生成绩信息:\n");
 28     input(st, N);
 29 
 30     printf("\n成绩处理...\n");
 31     calc(st, N);
 32 
 33     k = fail(st, fst, N);
 34     sort(st, N);
 35     
 36     printf("\n学生成绩排名情况:\n");
 37     output(st, N);
 38 
 39     printf("\n不及格学生信息:\n");
 40     output(fst, k);
 41 
 42     return 0;
 43 }
 44 
 45 
 46 void input(STU s[], int n) {
 47     int i;
 48     for(i = 0; i < n; i++)
 49         scanf("%d %s %s %lf %lf %lf", &s[i].id, s[i].name, s[i].subject,
 50               &s[i].perf, &s[i].mid, &s[i].final);
 51 }
 52 
 53 
 54 void output(STU s[], int n) {
 55     int i;
 56     
 57     printf("----------------------------------------------------------------\n");
 58     printf("学号   姓名   科目     平时  期中  期末  总评  等级\n");
 59     
 60     for(i = 0; i < n; i++)
 61         printf("%-6d %-6s %-8s %-4.0f %-4.0f %-4.0f %-4.1f %s\n",
 62                s[i].id, s[i].name, s[i].subject, 
 63                s[i].perf, s[i].mid, s[i].final, 
 64                s[i].total, s[i].level);
 65 }
 66 
 67 
 68 void calc(STU s[], int n) {
 69     int i;
 70     
 71     for(i = 0; i < n; i++) {
 72         s[i].total = s[i].perf * 0.2 + 
 73                      s[i].mid * 0.2 + 
 74                      s[i].final * 0.6;
 75         
 76         if(s[i].total >= 90)
 77             strcpy(s[i].level, "");
 78         else if(s[i].total >= 80)
 79             strcpy(s[i].level, "");
 80         else if(s[i].total >= 70)
 81             strcpy(s[i].level, "");
 82         else if(s[i].total >= 60)
 83             strcpy(s[i].level, "及格");
 84         else
 85             strcpy(s[i].level, "不及格");
 86     }
 87 }
 88 
 89 
 90 int fail(STU s[], STU t[], int n) {
 91     int i, cnt = 0;
 92     
 93     for(i = 0; i < n; i++)
 94         if(s[i].total < 60)
 95             t[cnt++] = s[i];
 96     
 97     return cnt;
 98 }
 99 
100 
101 void sort(STU s[], int n) {
102     int i, j;
103     STU t;
104     
105     for(i = 0; i < n-1; i++)
106         for(j = 0; j < n-1-i; j++)
107             if(s[j].total < s[j+1].total) {
108                 t = s[j];
109                 s[j] = s[j+1];
110                 s[j+1] = t;
111             }
112 }

屏幕截图 2025-12-25 172618

实验任务二

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 10
 4 #define M 80
 5 
 6 typedef struct {
 7     char name[M];    // 书名
 8     char author[M];  // 作者
 9 } Book;
10 
11 int main() {
12     Book x[N] = { 
13         {"《一九八四》", "乔治.奥威尔"},
14         {"《美丽新世界》", "赫胥黎"},
15         {"《昨日的世界》", "斯蒂芬.茨威格"},
16         {"《万历十五年》", "黄仁宇"},
17         {"《一只特立独行的猪》", "王小波"},
18         {"《百年孤独》", "马尔克斯"},
19         {"《查令十字街84号》", "海莲.汉芙"},
20         {"《只是孩子》", "帕蒂.史密斯"},
21         {"《刀锋》", "毛姆"},
22         {"《沉默的大多数》", "王小波"}
23     };
24     
25     Book *ptr;
26     int i;
27     char author[M];
28     int found;
29     
30     
31     printf("---所有图书信息---\n");
32     for(ptr = x; ptr < x + N; ++ptr)
33         printf("%-30s%-30s\n", ptr->name, ptr->author);
34     
35     
36     printf("\n---按作者查询图书---\n");
37     printf("输入作者名: ");
38     gets(author);
39     
40     found = 0;
41     for(ptr = x; ptr < x + N; ++ptr)
42         if(strcmp(ptr->author, author) == 0) {
43             found = 1;
44             printf("%-30s%-30s\n", ptr->name, ptr->author);
45         }
46     
47     if(!found)
48         printf("暂未收录该作者书籍!\n");
49     
50     return 0;
51 }

屏幕截图 2025-12-25 172921

屏幕截图 2025-12-25 173116

实验任务三

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define N 80
 4 
 5 typedef struct FilmInfo {
 6     char name[N];         // 片名
 7     char director[N];     // 导演
 8     char region[N];       // 制片国家/地区
 9     int year;             // 上映年份
10     struct FilmInfo *next;// 指向下一个结点的指针
11 } Film;
12 
13 
14 void output(Film *head);
15 Film *insert(Film *head, int n);
16 
17 int main() {
18     int n;        
19     Film *head;   
20     
21     head = NULL;
22     printf("输入影片数目: ");
23     scanf("%d", &n);
24     
25     
26     head = insert(head, n);
27     
28     
29     printf("\n所有影片信息如下:\n");
30     output(head);
31     
32     return 0;
33 }
34 
35 
36 Film *insert(Film *head, int n) {
37     int i;
38     Film *p;
39     
40     for(i = 1; i <= n; ++i) {
41         p = (Film *)malloc(sizeof(Film));
42         printf("请输入第%d部影片信息: ", i);
43         scanf("%s %s %s %d", p->name, p->director, p->region, &p->year);
44         
45         
46         p->next = head;
47         head = p;  
48     }
49     
50     return head;
51 }
52 
53 
54 void output(Film *head) {
55     Film *p;
56     
57     p = head;
58     while(p != NULL) {
59         printf("%-20s %-20s %-20s %d\n", 
60                p->name, p->director, p->region, p->year);
61         p = p->next;
62     }
63 }

屏幕截图 2025-12-25 173645

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define N 80
 4 
 5 typedef struct FilmInfo{
 6     char name[N];
 7     char director[N];
 8     char region[N];
 9     int year;
10     struct FilmInfo *next;
11 }Film;
12 
13 
14 void output(Film *head);
15 Film *insert(Film *head,int n);
16 
17 int main(){
18     int n;
19     Film *head;
20     Film *p;
21     
22     p=(Film *)malloc(sizeof(Film));
23     p->next=NULL;
24     head=p;
25     
26     printf("输入影片数目:");
27     scanf("%d",&n);
28     
29     head=insert(head,n);
30     
31     printf("\n所有影片信息如下:\n");
32     output(head);
33     
34     return 0;
35 }
36 
37 Film *insert(Film *head,int n){
38     int i;
39     Film *p;
40     
41     for (i=1;i<=n;++i){
42         p=(Film*)malloc(sizeof(Film));
43         printf("请输入第%d部影片信息:",i);
44         scanf("%s %s %s %d",p->name,p->director,p->region,&p->year);
45         
46         
47         p->next=head->next;
48         head->next=p;
49     }
50     
51     return head;
52 }
53 
54 void output(Film *head){
55     Film *p;
56     
57     p=head->next;
58     while(p!=NULL){
59         printf("%-20s %-20s %-20s %d\n",p->name,p->director,p->region,p->year);
60         p=p->next;
61     }
62 }

实验任务四

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

屏幕截图 2025-12-25 174239

实验任务五

 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 int day_of_year(Date d); 
10 int compare_dates(Date d1, Date d2); 
11 
12 void test1() {
13     Date d;
14     int i;
15 
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 
28     printf("输入Alice和Bob出生日期: (以形如2025-12-19这样的形式输入)\n");
29     for(i = 0; i < 3; ++i) {
30         input(&Alice_birth);
31         input(&Bob_birth);
32         ans = compare_dates(Alice_birth, Bob_birth);
33 
34         if(ans == 0)
35             printf("Alice和Bob一样大\n\n");
36         else if(ans == -1)
37             printf("Alice比Bob大\n\n");
38         else
39             printf("Alice比Bob小\n\n");
40     }
41 }
42 
43 int main() {
44     printf("测试1: 输入日期,打印输出这是一年中第多少天\n");
45     test1();
46 
47     printf("\n测试2:两个人年龄大小关系\n");
48     test2();
49     
50     return 0;
51 }
52 
53 void input(Date *pd) {
54     scanf("%d-%d-%d", &pd->year, &pd->month, &pd->day);
55 }
56 
57 
58 int is_leap(int year) {
59     return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
60 }
61 
62 
63 int day_of_year(Date d) {
64     int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
65     int total_days = 0;
66     int i;
67 
68     if(is_leap(d.year)) {
69         days_in_month[1] = 29;
70     }
71 
72     for(i = 0; i < d.month - 1; i++) {
73         total_days += days_in_month[i];
74     }
75 
76     total_days += d.day;
77     
78     return total_days;
79 }
80 
81 int compare_dates(Date d1, Date d2) {
82 
83     if(d1.year < d2.year) return -1;
84     if(d1.year > d2.year) return 1;
85     
86     if(d1.month < d2.month) return -1;
87     if(d1.month > d2.month) return 1;
88     
89     if(d1.day < d2.day) return -1;
90     if(d1.day > d2.day) return 1;
91 
92     return 0;
93 }

屏幕截图 2025-12-25 175330

实验任务六

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

屏幕截图 2025-12-25 175508

实验任务七

 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 int main() {
16     Contact list[N] = {{"刘一", "15510846604", 0},
17                       {"陈二", "18038747351", 0},
18                       {"张三", "18853253914", 0},
19                       {"李四", "13230584477", 0},
20                       {"王五", "15547571923", 0},
21                       {"赵六", "18856659351", 0},
22                       {"周七", "17705843215", 0},
23                       {"孙八", "15552933732", 0},
24                       {"吴九", "18077702405", 0},
25                       {"郑十", "18820725036", 0}};
26 
27     int vip_cnt, i;
28     char name[20];
29 
30     printf("显示原始通讯录信息:\n");
31     output(list, N);
32 
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 
41     printf("\n显示通讯录列表:(按姓名字典序升序排列,紧急联系人最先显示)\n");
42     display(list, N);
43 
44     return 0;
45 }
46 void set_vip_contact(Contact x[], int n, char name[]) {
47     int i;
48     
49     for(i = 0; i < n; i++) {
50         if(strcmp(x[i].name, name) == 0) {
51             x[i].vip = 1;
52             break; 
53         }
54     }
55 }
56 
57 void display(Contact x[], int n) {
58     int i, j;
59     Contact temp;
60     for(i = 0; i < n-1; i++) {
61         for(j = i+1; j < n; j++) {
62             int need_swap = 0;
63             
64             if(x[i].vip < x[j].vip) {
65                 need_swap = 1;
66             } else if(x[i].vip == x[j].vip) {
67                 if(strcmp(x[i].name, x[j].name) > 0) {
68                     need_swap = 1;
69                 }
70             }
71             
72             if(need_swap) {
73                 temp = x[i];
74                 x[i] = x[j];
75                 x[j] = temp;
76             }
77         }
78     }
79     for(i = 0; i < n; i++) {
80         printf("%-10s%-15s", x[i].name, x[i].phone);
81         if(x[i].vip)
82             printf("%5s", "*");
83         printf("\n");
84     }
85 }
86 void output(Contact x[], int n) {
87     int i;
88     for(i = 0; i < n; ++i) {
89         printf("%-10s%-15s", x[i].name, x[i].phone);
90         if(x[i].vip)
91             printf("%5s", "*");
92         printf("\n");
93     }
94 }

屏幕截图 2025-12-25 175837

 

posted @ 2025-12-25 18:00  沈春玲  阅读(6)  评论(0)    收藏  举报