实验六



1
#include <stdio.h> 2 #include <string.h> 3 #define N 10 // 运行程序输入测试时,可以把N改小一些输入测试 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]; // 数组st记录学生信息,fst记录不及格学生信息 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, s[i].subject, 48 &s[i].perf, &s[i].mid, &s[i].final); 49 } 50 51 void output(STU s[], int n) { 52 int i; 53 54 printf("-----------------\n"); 55 printf("学号 姓名 科目 平时 期中 期末 总评 等级\n"); 56 for(i = 0; i<n; i++) 57 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); 58 } 59 60 61 void calc(STU s[],int n) { 62 int i; 63 64 for(i = 0; i < n; i++) { 65 s[i].total = s[i].perf * 0.2 + 66 s[i].mid * 0.2 + 67 s[i].final * 0.6; 68 69 if(s[i].total >= 90) 70 strcpy(s[i].level, ""); 71 else if(s[i].total >= 80) 72 strcpy(s[i].level, ""); 73 else if(s[i].total >= 70) 74 strcpy(s[i].level, ""); 75 else if(s[i].total >= 60) 76 strcpy(s[i].level, "及格"); 77 else 78 strcpy(s[i].level, "不及格"); 79 } 80 } 81 82 int fail(STU s[], STU t[], int n) { 83 int i, cnt = 0; 84 85 for(i = 0; i < n; i++) 86 if(s[i].total < 60) 87 t[cnt++] = s[i]; 88 89 return cnt; 90 } 91 92 void sort(STU s[], int n) { 93 int i, j; 94 STU t; 95 96 for(i = 0; i < n-1; i++) 97 for(j = 0; j < n-1-i; j++) 98 if(s[j].total < s[j+1].total) { 99 t = s[j]; 100 s[j] = s[j+1]; 101 s[j+1] = t; 102 } 103 }

 

image

 

 

五:

 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("输入日期:(以形如2025-12-19这样的形式输入)\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出生日期:(以形如2025-12-19这样的形式输入)\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 return 0;
52 }
53 
54 void input(Date *pd){
55 scanf("%d-%d-%d",&pd->year,&pd->month,&pd->day);
56 }
57 
58 int day_of_year(Date d){
59 int month_days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
60 int total_days=0;
61 int i;
62 
63 if((d.year%4==0&&d.year%100!=0)||(d.year%400==0)){
64     month_days[2]=29;
65 }
66 
67 for(i=1;i<d.month;i++){
68     total_days+=month_days[i];
69 }
70 total_days+=d.day;
71 
72 return total_days;
73 }
74 
75 int compare_dates(Date d1,Date d2){
76 if(d1.year<d2.year){
77     return -1;
78 }else if(d1.year>d2.year){
79     return 1;
80 }else{
81     if(d1.month<d2.month){
82         return -1;
83     }else if(d1.month>d2.month){
84         return 1;
85     }else{
86         if(d1.day<d2.day){
87             return -1;
88         }else if(d1.day>d2.day){
89             return 1;
90         }else{
91             return 0;
92         }
93     }
94 }
95 

 image

 

六:

 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 int n;
22 n=sizeof(x)/sizeof(Account);
23 output(x,n);
24 return 0;
25 }
26 
27 void output(Account x[], int n) {
28     for (int i = 0; i < n; i++) {
29         int pwd_len = strlen(x[i].password);
30         char pwd_star[20] = {0};
31         for (int j = 0; j < pwd_len; j++) {
32             pwd_star[j] = '*';
33         }
34         const char* role_str;
35         switch (x[i].type) {
36             case admin:
37                 role_str = "admin";
38                 break;
39             case student:
40                 role_str = "student";
41                 break;
42             case teacher:
43                 role_str = "teacher";
44                 break;
45             default:
46                 role_str = "unknown";
47         }
48         printf("%s\t%s\t%s\n", x[i].username, pwd_star, role_str);
49     }
50 }

image

 七:

 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 
16 int main(){
17 Contact list[N]={{"刘一","15510846604",0},
18 {"陈二","18038747351",0},
19 {"张三","18853253914",0},
20 {"李四","13230584477",0},
21 {"王五","15547571923",0},
22 {"赵六","18856659351",0},
23 {"周七","17705843215",0},
24 {"孙八","15552933732",0},
25 {"吴九","18077702405",0},
26 {"郑十","18820725036",0}};
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 
47 void set_vip_contact(Contact x[],int n,char name[]){
48 int i;
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 output(Contact x[],int n){
58 int i;
59 for(i=0;i<n;++i){
60     printf("%-10s%s",x[i].name,x[i].phone);
61     if(x[i].vip){
62         printf("*");
63     }
64     printf("\n");
65 }
66 }
67 
68 void display(Contact x[], int n) {
69 
70     Contact temp[n];
71     memcpy(temp, x, sizeof(Contact) * n);
72 
73     for (int i = 0; i < n-1; i++) {
74         for (int j = 0; j < n-1-i; j++) {
75             if (temp[j].vip < temp[j+1].vip) {
76                 Contact t = temp[j];
77                 temp[j] = temp[j+1];
78                 temp[j+1] = t;
79             } else if (temp[j].vip == temp[j+1].vip) {
80 
81                 if (strcmp(temp[j].name, temp[j+1].name) > 0) {
82                     Contact t = temp[j];
83                     temp[j] = temp[j+1];
84                     temp[j+1] = t;
85                 }
86             }
87         }
88     }
89 
90     output(temp, n);
91 }

 

image

 

posted @ 2025-12-19 09:33  超级累的长颈鹿  阅读(4)  评论(1)    收藏  举报