实验6

任务1

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

 任务2

 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                   {"《查令十字街84号》", "海莲.汉芙"},
19                   {"《只是孩子》", "帕蒂.史密斯"}, 
20                   {"《刀锋》", "毛姆"},
21                   {"《沉默的大多数》", "王小波"} };
22     Book *ptr;
23     int i;
24     char author[M];
25     int found;
26     
27     printf("-------------------所有图书信息-------------------\n");
28     for(ptr = x; ptr < x + N; ++ptr)
29         printf("%-30s%-30s\n", ptr->name, ptr->author);
30         
31     printf("\n-------------------按作者查询图书-------------------\n");
32     printf("输入作者名: ");
33     gets(author);
34     found=0;
35     for(ptr=x;ptr<x+N;++ptr)
36         if(strcmp(ptr->author,author)==0){
37             found=1;
38             printf("%-30s%-30s\n",ptr->name,ptr->author);
39         }
40         
41         if(!found)
42             printf("暂未收录该作者书籍!\n");
43             
44         return 0;        
45 }

任务3

 3.1

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

3.2

 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 void output(Film *head);
14 Film *insert(Film *head,int n);
15 
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 
38 Film *insert(Film *head,int n){
39     int i;
40     Film *p;
41     
42     for(i=1;i<=n;i++){
43         p=(Film *)malloc(sizeof(Film));
44         printf("请输入第%d部影片信息: ", i);
45         scanf("%s %s %s %d", p->name, p->director, p->region, &p->year);
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 }

任务4

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

任务5

 

  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() {
 18     Date d;
 19     int i;
 20 
 21     printf("输入日期:(以形如2024-12-16这样的形式输入)\n");
 22     for(i = 0; i < 3; ++i) {
 23         input(&d);
 24         printf("%d-%02d-%02d是这一年中第%d天\n\n", d.year, d.month, d.day, day_of_year(d));
 25     }
 26 }
 27 
 28 void test2() {
 29     Date Alice_birth, Bob_birth;
 30     int i;
 31     int ans;
 32 
 33     printf("输入Alice和Bob出生日期:(以形如2024-12-16这样的形式输入)\n");
 34     for(i = 0; i < 3; ++i) {
 35         input(&Alice_birth);
 36         input(&Bob_birth);
 37         ans = compare_dates(Alice_birth, Bob_birth);
 38         
 39         if(ans == 0)
 40             printf("Alice和Bob一样大\n\n");
 41         else if(ans == -1)
 42             printf("Alice比Bob大\n\n");
 43         else
 44             printf("Alice比Bob小\n\n");
 45     }
 46 }
 47 
 48 int main() {
 49     printf("测试1: 输入日期, 打印输出这是一年中第多少天\n");
 50     test1();
 51 
 52     printf("\n测试2: 两个人年龄大小关系\n");
 53     test2();
 54 }
 55 
 56 // 补足函数input实现
 57 // 功能: 输入日期给pd指向的Date变量
 58 void input(Date *pd) {
 59     int i;
 60     scanf("%d-%d-%d",&pd->year,&pd->month,&pd->day);
 61 }
 62 
 63 // 补足函数day_of_year实现
 64 // 功能:返回日期d是这一年的第多少天
 65 int day_of_year(Date d) {
 66     int cnt=0;
 67     if(d.year%4!=0){
 68         switch(d.month%12){
 69             case 1:cnt=d.day;break;
 70             case 2:cnt=31+d.day;break;
 71             case 3:cnt=59+d.day;break;
 72             case 4:cnt=90+d.day ;break;
 73             case 5:cnt=120+d.day ;break;
 74             case 6:cnt=151+d.day ;break;
 75             case 7:cnt=181+d.day ;break;
 76             case 8:cnt=212+d.day ;break;
 77             case 9:cnt=243+d.day ;break;
 78             case 10:cnt=273+d.day ;break;
 79             case 11:cnt=304+d.day;break;
 80             case 12:cnt=334+d.day ;break;
 81         }
 82     }
 83     else
 84     {
 85         switch(d.month){
 86             case 1:cnt=d.day;break;
 87             case 2:cnt=31+d.day;break;
 88             case 3:cnt=60+d.day;break;
 89             case 4:cnt=91+d.day ;break;
 90             case 5:cnt=121+d.day ;break;
 91             case 6:cnt=152+d.day ;break;
 92             case 7:cnt=183+d.day ;break;
 93             case 8:cnt=213+d.day ;break;
 94             case 9:cnt=244+d.day ;break;
 95             case 10:cnt=274+d.day ;break;
 96             case 11:cnt=305+d.day;break;
 97             case 12:cnt=335+d.day ;break;            
 98         }
 99     }
100     return cnt;
101 }
102 
103 // 补足函数compare_dates实现
104 // 功能:比较两个日期: 
105 // 如果d1在d2之前,返回-1;
106 // 如果d1在d2之后,返回1
107 // 如果d1和d2相同,返回0
108 int compare_dates(Date d1, Date d2) {
109     if(d1.year !=d2.year ){
110          return d1.year < d2.year ? -1 : 1;
111     }
112     if(d1.month != d2.month){
113         return d1.month < d2.month ? -1 : 1;
114     }
115     else{
116         if(d1.day <d2.day ){
117             return -1;
118         }
119         else if(d1.day>d2.day ){
120             return 1;
121         }
122         else
123         {
124             return 0;
125         }
126     }
127 }

任务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 
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,len,m,j,k;    
35     for(i=0;i<n;i++){
36         printf("%-20s",x[i].username);
37         len=strlen(x[i].password);
38         k=15-len;
39         for(j=0;j<len;j++)
40         {
41             printf("*");
42         }
43         for(m=0;m<k;m++){
44             printf(" ");
45         }
46     switch(x[i].type){
47         case admin:printf(" admin\n");break;
48         case student:printf(" student\n");break;
49         case teacher:printf(" teacher\n");break;
50     }
51     }
52 }

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

 

 

 

posted @ 2024-12-20 16:26  山雖去  阅读(1)  评论(0编辑  收藏  举报