实验6
实验任务1
源代码
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <string.h> 4 #define N 3 5 6 typedef struct student { 7 int id; 8 char name[20]; 9 char subject[20]; 10 double perf; 11 double mid; 12 double final; 13 double total; 14 char level[10]; 15 }STU; 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]; 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 printf("\n学生成绩排名情况:\n"); 36 output(st, N); 37 38 printf("\n不及格学生信息:\n"); 39 output(fst, k); 40 41 return 0; 42 } 43 44 void input(STU s[], int n) { 45 int i; 46 47 for (i = 0; i < n; i ++ ) { 48 scanf("%d %s %s %lf %lf %lf", &s[i].id, s[i].name, s[i].subject, 49 &s[i].perf, &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", 60 s[i].id, s[i].name, s[i].subject, s[i].perf, s[i].mid, s[i].final, s[i].total, s[i].level); 61 62 } 63 } 64 65 void calc(STU s[], int n) { 66 int i; 67 68 for (i = 0; i < n; i++) { 69 s[i].total = s[i].perf * 0.2 + s[i].mid * 0.2 + 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 85 } 86 87 int fail(STU s[], STU t[], int n) { 88 int i, cnt = 0; 89 90 for (i = 0; i < n; i++) { 91 if (s[i].total < 60) 92 t[cnt++] = s[i]; 93 94 return cnt; 95 } 96 } 97 98 void sort(STU s[], int n) { 99 int i, j; 100 STU t; 101 102 for(i=0;i<n-1;i++) 103 for (j = 0; j < n - 1-i; j++) 104 if(s[j].total<s[j+1].total) { 105 t = s[j]; 106 s[j] = s[j + 1]; 107 s[j + 1] = t; 108 } 109 }
运行结果

实验任务2
源代码
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <string.h> 4 #define N 10 5 #define M 80 6 7 typedef struct { 8 char name[M]; 9 char author[M]; 10 }Book; 11 12 int main() { 13 Book x[N] = { {"《一九八四》","乔治.奥维尔"}, 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 printf("\n---------------------所有图书信息------------------\n"); 31 for (ptr = x; ptr < x + N; ++ptr) 32 printf("%-30s%-30s\n", ptr->name, ptr->author); 33 34 printf("\n---------------------按作者查询图书------------------\n"); 35 printf("输入作者名:"); 36 gets(author); 37 found = 0; 38 for(ptr=x;ptr<x+N;++ptr) 39 if (strcmp(ptr->author, author) == 0) { 40 found = 1; 41 printf("%-30s%-30s\n", ptr->name, ptr->author); 42 } 43 44 if (!found) 45 printf("暂未收录该作者书籍!\n"); 46 47 return 0; 48 49 }
运行结果


实验任务3
源代码
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 #define N 80 5 6 typedef struct Filminfo { 7 char name[N]; 8 char director[N]; 9 char region[N]; 10 int year; 11 struct Filminfo* next; 12 }Film; 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 head = insert(head, n); 26 27 printf("\n所有影片信息如下:\n"); 28 output(head); 29 30 return 0; 31 } 32 33 Film* insert(Film* head, int n) { 34 int i; 35 Film* p; 36 37 for (i = 1; i <= n; ++i) { 38 p = (Film*)malloc(sizeof(Film)); 39 printf("请输入第%d部影片信息:", i); 40 scanf("%s %s %s %d", p->name, p->director, p->region, &p->year); 41 42 p->next = head; 43 head = p; 44 } 45 46 return head; 47 } 48 49 void output(Film* head) { 50 Film* p; 51 52 p = head; 53 while (p != NULL) { 54 printf("%-20s %-20s %-20s %d\n", p->name, p->director, p->region, p->year); 55 p = p->next; 56 } 57 }
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 #define N 80 5 6 typedef struct Filminfo { 7 char name[N]; 8 char director[N]; 9 char region[N]; 10 int year; 11 struct Filminfo* next; 12 }Film; 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 p->next = head->next; 47 head->next = p; 48 } 49 50 return head; 51 } 52 53 void output(Film* head) { 54 Film* p; 55 56 p = head->next; 57 while (p != NULL) { 58 printf("%-20s %-20s %-20s %d\n", p->name, p->director, p->region, p->year); 59 p = p->next; 60 } 61 }
运行结果

实验任务4
源代码
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 30 sort(x, N); 31 output(x, N); 32 33 printf("\n图书销售总额:%.2f\n", sales_amount(x, N)); 34 35 return 0; 36 } 37 38 void output(book x[], int n) { 39 int i; 40 41 printf("%-20s %-30s %-20s %-10s %-10s\n", 42 "ISBN号 ","书名","作者","售价","销售册数"); 43 44 for (i = 0; i < n; ++i) { 45 printf("%-20s %-30s %-20s %-10.1f %-10d\n", 46 x[i].isbn, x[i].name, x[i].author, x[i].sales_price, x[i].sales_count); 47 } 48 49 } 50 51 void sort(book x[], int n) { 52 int i, j; 53 book t; 54 55 for (i = 0; i < n - 1; i++) { 56 for (j = 0; j < n - 1 - i; j++) { 57 if (x[j].sales_count < x[j + 1].sales_count) { 58 t = x[j]; 59 x[j ] = x[j+1]; 60 x[j + 1] = t; 61 } 62 } 63 } 64 65 } 66 67 double sales_amount(book x[], int n) { 68 double sum=0; 69 int i; 70 71 for (i = 0; i < n; ++i) { 72 sum += x[i].sales_price * x[i].sales_count; 73 } 74 75 return sum; 76 }
运行结果

实验任务5
源代码
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 4 typedef struct { 5 int year; 6 int month; 7 int day; 8 }date; 9 10 void input(date* pd); 11 int day_of_year(date d); 12 int compare_dates(date d1, date d2); 13 14 int run(int n) { 15 if (n % 100 == 0) { 16 if (n % 400 == 0) 17 return 1; 18 else 19 return 0; 20 } 21 else { 22 if (n % 4 == 0) 23 return 1; 24 else 25 return 0; 26 } 27 } 28 29 void test1() { 30 date d; 31 int i; 32 33 printf("输入日期:(以形如2025-12-29这样的形式输入)\n"); 34 for (i = 0; i < 3; ++i) { 35 input(&d); 36 printf("%d-%02d-%02d是这一年中的第%d天\n\n", d.year, d.month, d.day,day_of_year(d)); 37 38 } 39 } 40 41 void test2() { 42 date Alice_birth, Bob_birth; 43 int i; 44 int ans; 45 46 printf("输入Alice和Bob的生日期:(以形如2025-12-29这样的形式输入)\n"); 47 for (i = 0; i < 3; ++i) { 48 input(&Alice_birth); 49 input(&Bob_birth); 50 ans = compare_dates(Alice_birth, Bob_birth); 51 52 if (ans == 0) { 53 printf("Alice和Bob一样大\n\n"); 54 } 55 else if (ans == -1) { 56 printf("Alice比Bob大\n\n"); 57 } 58 else { 59 printf("Alice比Bob小\n\n"); 60 61 } 62 } 63 64 } 65 66 int main() { 67 printf("测试1:输入日期,打印输出是这一年中第多少天\n"); 68 test1(); 69 70 printf("\n测试2:两个人年龄大小关系\n"); 71 test2(); 72 73 } 74 75 void input(date* pd) { 76 scanf("%d-%d-%d", &pd->year, &pd->month, &pd->day); 77 } 78 79 int day_of_year(date d) { 80 int day; 81 82 if (run(d.year) == 1) { 83 if (d.month == 1) 84 day = d.day; 85 else if (d.month == 2) 86 day = 31 + d.day; 87 else if (d.month == 3) 88 day = 60 + d.day; 89 else if (d.month == 4) 90 day = 91 + d.day; 91 else if (d.month == 5) 92 day = 121 + d.day; 93 else if (d.month == 6) 94 day = 152 + d.day; 95 else if (d.month == 7) 96 day = 182 + d.day; 97 else if (d.month == 8) 98 day = 213 + d.day; 99 else if (d.month == 9) 100 day = 244 + d.day; 101 else if (d.month == 10) 102 day = 274 + d.day; 103 else if (d.month == 11) 104 day = 305 + d.day; 105 else 106 day = 335 + d.day; 107 } 108 else { 109 if (d.month == 1) 110 day = d.day; 111 else if (d.month == 2) 112 day = 31 + d.day; 113 else if (d.month == 3) 114 day = 59 + d.day; 115 else if (d.month == 4) 116 day = 90 + d.day; 117 else if (d.month == 5) 118 day = 120 + d.day; 119 else if (d.month == 6) 120 day = 151 + d.day; 121 else if (d.month == 7) 122 day = 181 + d.day; 123 else if (d.month == 8) 124 day = 212 + d.day; 125 else if (d.month == 9) 126 day = 243 + d.day; 127 else if (d.month == 10) 128 day = 273 + d.day; 129 else if (d.month == 11) 130 day = 304 + d.day; 131 else 132 day = 334 + d.day; 133 } 134 135 return day; 136 } 137 138 int compare_dates(date d1, date d2) { 139 if (d1.year > d2.year) 140 return 1; 141 else if (d1.year < d2.year) 142 return -1; 143 else 144 { 145 if (day_of_year(d1) > day_of_year(d2)) 146 return 1; 147 else if (day_of_year(d1) < day_of_year(d2)) 148 return -1; 149 else 150 return 0; 151 } 152 }
运行结果

实验任务6
源代码
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <string.h> 4 5 enum Role {admin,student,teacher}; 6 7 typedef struct { 8 char username[20]; 9 char password[20]; 10 enum Role type; 11 }account; 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; 31 for (i = 0; i < n; ++i) { 32 int cnt = strlen(x[i].password); 33 34 int j; 35 char t[20]; 36 for (j = 0; j < cnt; j++) { 37 t[j] = '*'; 38 } 39 t[cnt] = '\0'; 40 41 char u[20]; 42 43 switch (x[i].type) { 44 case admin: 45 strcpy(u, "admin"); 46 break; 47 case student: 48 strcpy(u, "student"); 49 break; 50 case teacher: 51 strcpy(u, "teacher"); 52 break; 53 default: 54 break; 55 } 56 57 printf("%-20s %-20s %-10s\n", x[i].username, t, u); 58 } 59 }
运行结果

实验任务7
源代码
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <string.h> 4 5 typedef struct { 6 char name[20]; 7 char phone[12]; 8 int vip; 9 }contact; 10 11 void set_vip_contact(contact x[], int n, char name[]); 12 void output(contact x[], int n); 13 void display(contact x[], int n); 14 15 #define N 10 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 50 for (i = 0; i < n; ++i) { 51 if (strcmp(x[i].name, name) == 0) { 52 x[i].vip = 1; 53 break; 54 } 55 } 56 } 57 58 void output(contact x[], int n) { 59 int i; 60 61 for (i = 0; i < n; ++i) { 62 printf("%-10s%-15s", x[i].name, x[i].phone); 63 if (x[i].vip) 64 printf("%5s", "*"); 65 printf("\n"); 66 } 67 } 68 69 void display(contact x[], int n) { 70 contact t[N]; 71 72 int i, j, k=0; 73 74 for (i = 0; i < n; ++i) { 75 if (x[i].vip) { 76 t[k++] = x[i]; 77 } 78 } 79 80 for(i=0;i<k-1;++i) 81 for (j = 0; j < k - 1-1; ++j) { 82 if (strcmp(t[j].name, t[j + 1].name) > 0) { 83 contact u; 84 u = t[j]; 85 t[j] = t[j + 1]; 86 t[j + 1] = u; 87 } 88 } 89 90 for (i = 0; i < n; ++i) { 91 if (x[i].vip==0) { 92 t[k++] = x[i]; 93 } 94 } 95 96 for (i = k; i < n; ++i) { 97 for (j = k; j < n-1-i; ++j) { 98 if (strcmp(t[j].name, t[j + 1].name) > 0) { 99 contact u; 100 u = t[j]; 101 t[j] = t[j + 1]; 102 t[j + 1] = u; 103 } 104 } 105 } 106 107 output(t, n); 108 }
运行结果


浙公网安备 33010602011771号