tgwz

实验6

task1.c

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

image

task2.c

task2.c

image

image

task3_1.c

 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 
18 int main() {
19     int n;         
20     Film *head;     
21 
22     head = NULL;
23     printf("输入影片数目: ");
24     scanf("%d", &n);
25     head = insert(head, n);
26     printf("\n所有影片信息如下: \n");
27     output(head);
28 
29     return 0;
30 }
31 Film *insert(Film *head, int n) {
32     int i;
33     Film *p;
34 
35     for(i = 1; i <= n; ++i) {
36         p = (Film *)malloc(sizeof(Film));
37         printf("请输入第%d部影片信息: ", i);
38         scanf("%s %s %s %d", p->name, p->director, p->region, &p->year);
39         p->next = head;
40         head = p;   
41     }
42 
43     return head;
44 }
45 
46 void output(Film *head) {
47     Film *p;
48 
49     p = head;
50     while(p != NULL) {
51         printf("%-20s %-20s %-20s %d\n", p->name, p->director, p->region, p->year);
52         p = p -> next;
53     }
54 }
task3_1.c

image

task3_2.c

 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 void output(Film *head);   
13 Film *insert(Film *head, int n);   
14 int main() {
15     int n;          
16     Film *head;     
17     Film *p;        
18     p = (Film *)malloc(sizeof(Film));
19     p->next = NULL;
20     head = p;       
21     printf("输入影片数目: ");
22     scanf("%d", &n);
23     head = insert(head, n);
24     printf("\n所有影片信息如下: \n");
25     output(head);
26     return 0;
27 }
28 Film *insert(Film *head, int n) {
29     int i;
30     Film *p;
31     for(i = 1; i <= n; ++i) {
32         p = (Film *)malloc(sizeof(Film));
33         printf("请输入第%d部影片信息: ", i);
34         scanf("%s %s %s %d", p->name, p->director, p->region, &p->year);
35         p->next = head->next;
36         head->next = p;
37     }
38 
39     return head;
40 }
41 void output(Film *head) {
42     Film *p;
43 
44     p = head->next;
45     while(p != NULL) {
46         printf("%-20s %-20s %-20s %d\n", p->name, p->director, p->region, p->year);
47         p = p -> next;
48     }
49 }
task3_2.c

image

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] = {{"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 // 待补足:函数output()实现
38 void output(Book x[],int n){
39     printf("ISBN号                    书名                       作者                         售价      销售册数\n");
40     int i;
41     for(i=0;i<=n;i++){
42         printf("%-20s %-30s %-30s %g       %d\n",x[i].isbn,x[i].name,x[i].author,x[i].sales_price,x[i].sales_count);
43     }
44 }
45 
46 
47 // 待补足:函数sort()实现
48 void sort(Book x[],int n){
49     int i,j;
50     Book t;
51     for(i=0;i<n-1;i++){
52         for(j=0;j<n-1-i;i++){
53             if(x[j].sales_price<x[j+1].sales_price){
54                 t=x[j];
55                 x[j]=x[j+1];
56                 x[j+1]=t;
57                 
58             }
59         }
60     }
61 }
62 
63 
64 // 待补足:函数sales_count()实现
65 double sales_amount(Book x[],int n){
66     int i;
67     double sum=0.0; 
68     for(i=0;i<n;i++){
69         sum+=x[i].sales_count*x[i].sales_price;
70     }
71     return sum;
72 }
task4.c

image

 task5.c

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

QQ_1766464991190

 task6.c

 1 #include <stdio.h>
 2 #include <string.h>
 3 enum Role {admin, student, teacher};
 4 typedef struct {
 5     char username[20];  
 6     char password[20];  
 7     enum Role type;     
 8 } Account;
 9 void output(Account x[], int n);  
10 int main() {
11     Account x[] = {{"A1001", "123456", student},
12                     {"A1002", "123abcdef", student},
13                     {"A1009", "xyz12121", student}, 
14                     {"X1009", "9213071x", admin},
15                     {"C11553", "129dfg32k", teacher},
16                     {"X3005", "921kfmg917", student}};
17     int n;
18     n = sizeof(x)/sizeof(Account);
19     output(x, n);
20 
21     return 0;
22 }
23 void output(Account x[], int n) {
24     int i,j,len;
25     for(i=0;i<n;i++){
26         len=strlen(x[i].password);
27         printf("%-20s",x[i].username);
28         for(j=0;j<len;j++){
29             printf("*");
30         }
31         printf("\t");
32         switch(x[i].type){
33             case admin:printf("admin");break;
34             case student:printf("student");break;
35             case teacher:printf("teacher");break;
36         }
37         printf("\n");
38     }
39     
40 }
task6.c

image

 task7.c

 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 
11 // 函数声明
12 void set_vip_contact(Contact x[], int n, char name[]);  
13 void output(Contact x[], int n);    
14 void display(Contact x[], int n);  
15 
16 
17 #define N 10
18 int main() {
19     Contact list[N] = {{"刘一", "15510846604", 0},
20                        {"陈二", "18038747351", 0},
21                        {"张三", "18853253914", 0},
22                        {"李四", "13230584477", 0},
23                        {"王五", "15547571923", 0},
24                        {"赵六", "18856659351", 0},
25                        {"周七", "17705843215", 0},
26                        {"孙八", "15552933732", 0},
27                        {"吴九", "18077702405", 0},
28                        {"郑十", "18820725036", 0}};
29     int vip_cnt, i;
30     char name[20];
31 
32     printf("显示原始通讯录信息: \n"); 
33     output(list, N);
34 
35     printf("\n输入要设置的紧急联系人个数: ");
36     scanf("%d", &vip_cnt);
37     
38     printf("输入%d个紧急联系人姓名:\n", vip_cnt);
39     for(i = 0; i < vip_cnt; ++i) {
40         scanf("%s", name);
41         set_vip_contact(list, N, name);
42     }
43 
44     printf("\n显示通讯录列表:(按姓名字典序升序排列,紧急联系人最先显示)\n");
45     display(list, N);
46 
47     return 0;
48 }
49 void set_vip_contact(Contact x[], int n, char name[]) {
50     int i;
51     for(i=0;i<n;i++){
52         if(strcmp(x[i].name,name)==0){
53             x[i].vip=1;
54             break;
55         }
56     }
57 }
58 
59 // 补足函数display实现
60 // 功能: 显示联系人数组x中的联系人信息
61 //      按姓名字典序升序显示, 紧急联系人显示在最前面
62 void display(Contact x[], int n) {
63     int i,j;
64     Contact t;
65     for(i=0;i<n-1;i++){
66         for(j=0;j<n-1-i;j++){
67             if(x[j].vip<x[j+1].vip){
68                 t=x[j];
69                 x[j]=x[j+1];
70                 x[j+1]=t;
71             }
72             else if(x[j].vip==x[j+1].vip&&strcmp(x[j].name,x[j+1].name)>0){
73                 t=x[j];
74                 x[j]=x[j+1];
75                 x[j+1]=t;
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 
87 void output(Contact x[], int n) {
88     int i;
89 
90     for(i = 0; i < n; ++i) {
91         printf("%-10s%-15s", x[i].name, x[i].phone);
92         if(x[i].vip)
93             printf("%5s", "*");
94         printf("\n");
95     }
96 }
task7.c

image

 

 

posted on 2025-12-23 15:18  添罐望仔  阅读(4)  评论(0)    收藏  举报

导航