实验任务6

实验4

点击查看代码
#include <stdio.h>
#define N 10typedef struct {char isbn[25];char name[50];char author[30];double sale_price;int sale_count;
} BOOK;void output(BOOK x[], int n);
void sort(BOOK x[], int n);
double sales_amount(BOOK x[], int n);int main() {BOOK b[N] = {{"978-7-5327-4200-5", "门廊之影", "罗纳德", 45, 13},{"978-7-100-12042-7", "自由之地:人类进化史", "云图里", 49, 30},{"978-7-5404-8844-5", "陌生人", "弗里曼特尔", 68, 27},{"978-7-5442-7335-9", "生命的真相", "伊恩", 44.9, 10},{"978-7-5133-3175-0", "左耳的秘密", "艾拉", 22.8, 42},{"978-7-5404-9126-0", "我们的世界", "加西亚", 118, 23},{"978-7-5596-2150-4", "你今天的样子", "德里克·汤普森", 118, 42},{"978-7-111-60809-9", "天外的光:照亮进步的道路", "威廉", 59, 0},{"978-7-220-14356-1", "无尽的边界:威廉·麦金莱传", "戴维·麦卡洛", 37.5, 53},{"978-7-115-46688-4", "源泉", "安·兰德", 84, 59}};printf("图书销量排序(按销售金额): \n");sort(b, N);output(b, N);printf("\n图书销售总额: %.2f\n", sales_amount(b, N));return 0;
}void output(BOOK x[], int n) {int i;printf("%-22s%-30s%-20s%10s%10s\n", "图书编号", "书名", "作者", "售价", "销售册数");for (i = 0; i < n; i++) {printf("%-22s%-30s%-20s%10.1f%10d\n", x[i].isbn, x[i].name, x[i].author, x[i].sale_price, x[i].sale_count);}
}void sort(BOOK x[], int n) {int i, j;BOOK temp;for (i = 0; i < n - 1; i++) {for (j = 0; j < n - 1 - i; j++) {if (x[j].sale_price * x[j].sale_count < x[j + 1].sale_price * x[j + 1].sale_count) {temp = x[j];x[j] = x[j + 1];x[j + 1] = temp;}}}
}double sales_amount(BOOK x[], int n) {int i;double sum = 0;for (i = 0; i < n; i++) {sum += x[i].sale_price * x[i].sale_count;}return sum;
}

屏幕截图 2026-06-16 221807
实验5

点击查看代码
#include <stdio.h>typedef struct {int year;int month;int day;
} Date;void input(Date *pD);
int day_of_year(Date d);
int compare_dates(Date d1, Date d2);void test1() {Date d;int i;printf("测试1:输入日期,打印输出这是一年中第多少天\n");printf("输入日期:(以形如2025-12-12这样的形式输入)\n");for (i = 0; i < 3; i++) {input(&d);printf("%d-%02d-%02d是这一年中第%d天\n", d.year, d.month, d.day, day_of_year(d));}
}void test2() {Date Alice_birth, Bob_birth;int i;int ans;printf("\n测试2:两个人年龄大小关系\n");printf("输入Alice和Bob的出生日期:(以形如2025-12-12这样的形式输入)\n");for (i = 0; i < 3; i++) {input(&Alice_birth);input(&Bob_birth);ans = compare_dates(Alice_birth, Bob_birth);if (ans == 0)printf("Alice和Bob一样大\n\n");else if (ans == -1)printf("Alice比Bob大\n\n");elseprintf("Alice比Bob小\n\n");}
}int main() {printf("测试1:输入日期,打印输出这是一年中第多少天\n");test1();printf("\n测试2:两个人年龄大小关系\n");test2();return 0;
}void input(Date *pD) {scanf("%d-%d-%d", &pD->year, &pD->month, &pD->day);
}int day_of_year(Date d) {int months[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int days = 0, i;if ((d.year % 4 == 0 && d.year % 100 != 0) || (d.year % 400 == 0)) {months[2] = 29;}for (i = 1; i < d.month; i++) {days += months[i];}days += d.day;return days;
}int compare_dates(Date d1, Date d2) {if (d1.year < d2.year) return -1;if (d1.year > d2.year) return 1;if (d1.month < d2.month) return -1;if (d1.month > d2.month) return 1;if (d1.day < d2.day) return -1;if (d1.day > d2.day) return 1;return 0;
}

屏幕截图 2026-06-16 222347
实验任务6

点击查看代码
#include <stdio.h>
#include <string.h>enum Role {admin, student, teacher};typedef struct {char userid[20];char password[20];enum Role role;
} Account;void output(Account x[], int n);int main() {Account x[] = {{"A1001", "123456", student},{"A1002", "x1as2cdf", student},{"A1003", "yz112121", student},{"A1004", "12ab1231", teacher},{"C11551", "abp12314", teacher},{"C13353", "9k1afg12", teacher}};int n;n = sizeof(x)/sizeof(Account);output(x, n);return 0;
}void output(Account x[], int n) {int i, j;char *role_str[] = {"admin", "student", "teacher"};for (i = 0; i < n; i++) {printf("%-10s", x[i].userid);for (j = 0; x[i].password[j] != '\0'; j++) {printf("*");}printf("%20s\n", role_str[x[i].role]);}
}

屏幕截图 2026-06-16 222603
实验任务7

点击查看代码
#include <stdio.h>
#include <string.h>typedef struct {char name[20];char phone[15];int flag;
} Contact;void set_vip_contact(Contact x[], int n, char name[]);
void display(Contact x[], int n);
void output(Contact x[], int n);#define N 10int main() {Contact list[N] = {{"刘一", "15510846004", 0},{"陈二", "18038747351", 0},{"张三", "18851929332", 0},{"李四", "18632387924", 0},{"王五", "15873329197", 0},{"赵六", "18669666953", 0},{"吴七", "15974032768", 0},{"郑八", "15077704045", 0},{"钱九", "18607320508", 0}};int vip_cnt, i;char name[20];printf("请设置的通讯录数量:\n");output(list, N);printf("\n输入要设置的紧急联系人个数:");scanf("%d", &vip_cnt);printf("输入%d个紧急联系人姓名:", vip_cnt);for (i = 0; i < vip_cnt; i++) {scanf("%s", name);set_vip_contact(list, N, name);}printf("\n设置后的通讯录(按姓名字典序升序并将紧急联系人最先显示)\n");display(list, N);return 0;
}void set_vip_contact(Contact x[], int n, char name[]) {int i;for (i = 0; i < n; i++) {if (strcmp(x[i].name, name) == 0) {x[i].flag = 1;}}
}void display(Contact x[], int n) {int i, j;Contact temp;for (i = 0; i < n - 1; i++) {for (j = 0; j < n - 1 - i; j++) {if (x[j].flag < x[j + 1].flag) {temp = x[j];x[j] = x[j + 1];x[j + 1] = temp;}else if (x[j].flag == x[j + 1].flag && strcmp(x[j].name, x[j + 1].name) > 0) {temp = x[j];x[j] = x[j + 1];x[j + 1] = temp;}}}output(x, n);
}void output(Contact x[], int n) {int i;for (i = 0; i < n; i++) {if (x[i].flag)printf("%-10s%-15s", x[i].name, x[i].phone);elseprintf("%-10s%-15s", x[i].name, x[i].phone);if (x[i].flag)printf("vip\n");elseprintf("\n");}
}

屏幕截图 2026-06-16 223003