实验6
task1.c
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <string.h> 4 #define N 3 // 运行程序输入测试时,可以把这个数组改小一些输入测试 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 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 int main() { 21 STU st[N], fst[N]; // 数组st记录学生信息,fst记录不及格学生信息 22 int k; // 用于记录不及格学生个数 23 printf("录入学生成绩信息:\n"); 24 input(st, N); 25 printf("\n成绩处理...\n"); 26 calc(st, N); 27 k = fail(st, fst, N); 28 sort(st, N); 29 printf("\n学生成绩排名情况:\n"); 30 output(st, N); 31 printf("\n不及格学生信息:\n"); 32 output(fst, k); 33 return 0; 34 } 35 void input(STU s[], int n) { 36 int i; 37 for (i = 0; i < n; i++) 38 scanf("%d %s %s %lf %lf %lf", &s[i].id, s[i].name, s[i].subject, 39 &s[i].perf, &s[i].mid, &s[i].final); 40 } 41 void output(STU s[], int n) { 42 int i; 43 printf("-----------------\n"); 44 printf("学号 姓名 科目 平时 期中 期末 总评 等级\n"); 45 for (i = 0; i < n; i++) 46 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); 47 } 48 void calc(STU s[], int n) { 49 int i; 50 for (i = 0; i < n; i++) { 51 s[i].total = s[i].perf * 0.2 + 52 s[i].mid * 0.2 + 53 s[i].final * 0.6; 54 if (s[i].total >= 90) 55 strcpy(s[i].level, "优"); 56 else if (s[i].total >= 80 && s[i].total < 90) 57 strcpy(s[i].level, "良"); 58 else if (s[i].total >= 70 && s[i].total < 80) 59 strcpy(s[i].level, "中"); 60 else if (s[i].total >= 60 && s[i].total < 70) 61 strcpy(s[i].level, "及格"); 62 else 63 strcpy(s[i].level, "不及格"); 64 } 65 } 66 int fail(STU s[], STU t[], int n) { 67 int i, cnt = 0; 68 for (i = 0; i < n; i++) 69 if (s[i].total < 60) 70 t[cnt++] = s[i]; 71 return cnt; 72 } 73 void sort(STU s[], int n) { 74 int i, j; 75 STU t; 76 for (i = 0; i < n - 1; i++) 77 for (j = 0; j < n - 1 - i; j++) 78 if (s[j].total < s[j + 1].total) { 79 t = s[j]; 80 s[j] = s[j + 1]; 81 s[j + 1] = t; 82 } 83 }

task2.c
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <string.h> 4 #define N 10 5 #define M 80 6 typedef struct { 7 char name[M]; // 书名 8 char author[M]; // 作者 9 } Book; 10 int main() { 11 Book x[N] = { {"《一九八四》", "乔治.奥威尔"}, 12 {"《美丽新世界》", "赫胥黎"}, 13 {"《昨日的世界》", "斯蒂芬.茨威格"}, 14 {"《万历十五年》", "黄仁宇"}, 15 {"《一只特立独行的猪》", "王小波"}, 16 {"《百年孤独》", "马尔克斯"}, 17 {"《查令十字街84号》", "海莲.汉芙"}, 18 {"《只是孩子》", "帕蒂.史密斯"}, 19 {"《刀锋》", "毛姆"}, 20 {"《沉默的大多数》", "王小波"} }; 21 Book* ptr; 22 int i; 23 char author[M]; 24 // 使用指针遍历结构体数组 25 printf("所有图书信息: \n"); 26 for (ptr = x; ptr < x + N; ++ptr) 27 printf("%-30s%-30s\n", ptr->name, ptr->author); 28 // 查找指定作者的图书 29 printf("\n输入作者名: "); 30 gets_s(author); 31 for (ptr = x; ptr < x + N; ++ptr) 32 if (strcmp(ptr->author, author) == 0) { 33 printf("%-30s%-30s\n", ptr->name, ptr->author); 34 } 35 return 0; 36 }

task3_1.c
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 #define N 80 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); // 向链表中插入n个结点,返回头指针 14 int main() { 15 int n; // 结点数 16 Film* head; // 头指针变量,存放链表中第一个节点的地址 17 head = NULL; 18 printf("输入影片数目: "); 19 scanf("%d", &n); 20 // 向链表中插入n部影片信息 21 head = insert(head, n); 22 // 遍历输出链表中所有影片信息 23 printf("\n所有影片信息如下: \n"); 24 output(head); 25 return 0; 26 } 27 // 向链表中插入n个结点,从表头插入,返回头指针变量 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 // 把结点从表头插入到链表中 36 p->next = head; 37 head = p; // 更新头指针变量 38 } 39 return head; 40 } 41 // 遍历输出链表信息 42 void output(Film* head) { 43 Film* p; 44 p = head; 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
1 #define _CRT_SEUCRE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 #define N 80 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); // 向链表中插入n个结点,返回头指针 14 int main() { 15 int n; // 结点数 16 Film* head; // 头指针变量,存放链表中第一个节点的地址 17 Film* p; // 存放新申请的Film节点内存空间地址 18 // 创建头结点 19 p = (Film*)malloc(sizeof(Film)); 20 p->next = NULL; 21 head = p; // 头指针变量存放头节点的地址 22 printf("输入影片数目: "); 23 scanf("%d", &n); 24 // 向链表中插入n部影片信息 25 head = insert(head, n); 26 // 遍历输出链表中所有影片信息 27 printf("\n所有影片信息如下: \n"); 28 output(head); 29 return 0; 30 } 31 // 向链表中插入n个结点,从表头插入,返回头指针变量 32 Film* insert(Film* head, int n) { 33 int i; 34 Film* p; 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 // 把结点从表头插入到链表中 40 p->next = head->next; 41 head->next = p; 42 } 43 return head; 44 } 45 // 遍历输出链表信息 46 void output(Film* head) { 47 Film* p; 48 p = head->next; 49 while (p != NULL) { 50 printf("%-20s %-20s %-20s %d\n", p->name, p->director, p->region, p -> year); 51 p = p->next; 52 } 53 }
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<stdlib.h> 4 #define N 10 5 typedef struct { 6 char isbn[20]; 7 char name[80]; 8 char author[80]; 9 double sales_price; 10 int sales_count; 11 }Book; 12 void output(Book x[], int n); 13 void sort(Book x[], int n); 14 double sales_amount(Book x[], int n); 15 int main() { 16 Book x[N]= {{ "978-7-229-14156-1", "源泉", "安.兰德", 84, 59 }, 17 { "978-7-5133-5261-1", "李白来到旧金山", "谭夏阳", 48, 16 }, 18 { "978-7-5617-4347-8", "陌生人日记", "周怡芳", 72.6, 27 }, 19 { "978-7-5722-5475-8", "芯片简史", "汪波", 74.9, 49 }, 20 { "978-7-5046-9568-0", "数据化决策", "道格拉斯·W·哈伯德", 49, 42 }, 21 { "978-7-5133-4388-6", "美好时代的背后", "凯瑟琳.布", 34.5, 39 }, 22 { "978-7-1155-0509-5", "无穷的开始:世界进步的本源", "戴维·多伊奇", 37.5, 55 }, 23 { "978-7-5321-5691-7", "何为良好生活", "陈嘉映", 29.5 , 31 }, 24 { "978-7-5133-5109-6", "你好外星人", "英国未来出版集团", 118, 42 }, 25 { "978-7-2011-4617-1", "世界尽头的咖啡馆", "约翰·史崔勒基", 22.5, 44 }}; 26 printf("图书销量排名:\n"); 27 sort(x, N); 28 output(x, N); 29 printf("\n图书销售总额:%.2f\n", sales_amount(x, N)); 30 return 0; 31 } 32 void output(Book x[], int n) 33 {int i = 0; 34 for (i = 0; i < n; i++) 35 printf("%s %-28s %-24s %-15lf %d\n", x[i].isbn, x[i].name, x[i].author, x[i].sales_price, x[i].sales_count); 36 } 37 void sort(Book x[], int n) { 38 int i = 0, j = 0; 39 Book t; 40 for (i = 0; i < n - 1; i++) 41 for (j = 0; j < n - i - 1; j++) 42 if (x[j].sales_count < x[j + 1].sales_count) 43 { 44 t = x[j]; 45 x[j] = x[j + 1]; 46 x[j + 1] = t; 47 } 48 49 50 } 51 double sales_amount(Book x[], int n) { 52 int i = 0, j = 0; 53 double sum = 0; 54 for (i = 0; i < n; i++) 55 sum = sum + (double)(x[i].sales_count * x[i].sales_price); 56 return sum; 57 }

task5.c
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("输入日期:(以形如2023-12-11这样的形式输入)\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出生日期:(以形如2023-12-11这样的形式输入)\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 date=0; 58 switch(d.month) 59 { 60 case 1:date=d.day;break; 61 case 2:date=31+d.day;break; 62 case 3:date=60+d.day;break; 63 case 4:date=91+d.day;break; 64 case 5:date=121+d.day;break; 65 case 6:date=152+d.day;break; 66 case 7:date=182+d.day;break; 67 case 8:date=213+d.day;break; 68 case 9:date=244+d.day;break; 69 case 10:date=274+d.day;break; 70 case 11:date=305+d.day;break; 71 case 12:date=335+d.day;break; 72 } 73 if (d.year%4!=0&&d.month>2) 74 date--; 75 return date; 76 } 77 78 int compare_dates(Date d1, Date d2) { 79 int ans; 80 if (d1.year<d2.year) 81 ans=-1; 82 else if (d1.year>d2.year) 83 ans=1; 84 else 85 { 86 if (d1.month<d2.month) 87 ans=-1; 88 else if (d1.month>d2.month) 89 ans=1; 90 else 91 { 92 if (d1.day<d2.day) 93 ans=-1; 94 else if (d1.day>d2.day) 95 ans=1; 96 else 97 ans=0; 98 } 99 } 100 return ans; 101 }

task6.c
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 25 return 0; 26 } 27 28 void output(Account x[], int n) { 29 int i,j; 30 for (i=0;i<n;i++) 31 { 32 printf("%-20s",x[i].username); 33 for (j=0;j<strlen(x[i].password);j++) 34 printf("*"); 35 for (;j<20;j++) 36 printf(" "); 37 switch(x[i].type) 38 { 39 case 0:printf("admin");break; 40 case 1:printf("student");break; 41 case 2:printf("teacher");break; 42 } 43 printf("\n"); 44 } 45 }

浙公网安备 33010602011771号