实验6

任务一

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

 任务四

 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 
38 void output(Book x[],int n){
39     int i;
40     printf("ISBN号               书号                      作者             售价    销售册数\n"); 
41     for(i=0;i<n;i++)
42         printf("%-20s %-25s %-16s %-7g %-20d\n",x[i].isbn,x[i].name,x[i].author,x[i].sales_price,x[i].sales_count);
43     
44 }
45 void sort(Book x[],int n){
46     int i,j;
47     Book temp;
48     for(i=0;i<n;i++){
49         for(j=0;j<n-1-i;j++){
50             if(x[j].sales_count<x[j+1].sales_count){
51                 temp=x[j];
52                   x[j]=x[j+1];
53                 x[j+1]=temp;
54             }  
55         }
56     }
57 }
58 
59 double sales_amount(Book x[],int n){
60     int i;
61     double ans=0;
62     for(i=0;i<n;i++){
63         ans+=(x[i].sales_price)*(x[i].sales_count);    
64     }
65     return ans;
66 }

 任务五

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

任务六

 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 void output(Account x[], int n);   
14 
15 int main() {
16     Account x[] = {{"A1001", "123456", student},
17                     {"A1002", "123abcdef", student},
18                     {"A1009", "xyz12121", student}, 
19                     {"X1009", "9213071x", admin},
20                     {"C11553", "129dfg32k", teacher},
21                     {"X3005", "921kfmg917", student}};
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,t,m,p;
31     char password[20];
32     for(i=0;i<n;i++){
33         printf("%-15s",x[i].username);
34         t=strlen(x[i].password);
35         for(j=0;j<t;j++){
36             printf("*");
37         }
38         m=20-t;
39         for(p=0;p<m;p++){
40             printf(" ");
41         }
42         switch(x[i].type){
43             case admin:printf("admin\n");break;
44             case student:printf("student\n");break;
45             case teacher:printf("teacher\n");break;
46         }
47         
48     }
49 }

任务七

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 typedef struct {
 5     char name[20];      // 姓名
 6     char phone[12];     // 手机号
 7     int  vip;           // 是否为紧急联系人,是取1;否则取0
 8 } Contact; 
 9 
10 
11 // 函数声明
12 void set_vip_contact(Contact x[], int n, char name[]);  // 设置紧急联系人
13 void output(Contact x[], int n);    // 输出x中联系人信息
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 
50 // 补足函数set_vip_contact实现
51 // 功能:将联系人数组x中,联系人姓名与name一样的人,设置为紧急联系人(即成员vip值设为1)
52 void set_vip_contact(Contact x[], int n, char name[]) {
53     int i;
54     for(i=0;i<n;i++){
55         if(strcmp(x[i].name,name)==0){
56             x[i].vip=1;
57         }
58     }
59 }
60 
61 // 补足函数display实现
62 // 功能: 显示联系人数组x中的联系人信息
63 //      按姓名字典序升序显示, 紧急联系人显示在最前面
64 void display(Contact x[], int n) {
65     int i,j;
66     Contact t;
67     for(i=0;i<n-1;i++){
68         for(j=0;j<n-i-1;j++){
69             if(x[j].vip<x[j+1].vip){
70                 t=x[j];
71                 x[j]=x[j+1];
72                 x[j+1]=t;
73             }
74             else if(x[j].vip==x[j+1].vip&&strcmp(x[j].name,x[j+1].name)>0){
75                 t=x[j];
76                 x[j]=x[j+1];
77                 x[j+1]=t;
78             }
79         }
80     }
81     
82     output(x,n);
83 }
84 
85 void output(Contact x[], int n) {
86     int i;
87 
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 }

 

posted @ 2024-12-21 17:14  糯檽檽米  阅读(0)  评论(0编辑  收藏  举报