实验文档6

news/2024/12/16 14:26:34/文章来源:https://www.cnblogs.com/Samoyed0721/p/18609951

关于第6次实践课作业

实验结论

task4.c

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

 

 

task5.c

  1 #define _CRT_SECURE_NO_WARNINGS
  2 #include <stdio.h>
  3 #include<string.h>
  4 typedef struct {
  5     int year;
  6     int month;
  7     int day;
  8 } Date;
  9 
 10 // 函数声明
 11 void input(Date* pd);                   // 输入日期给pd指向的Date变量
 12 int day_of_year(Date d);                // 返回日期d是这一年的第多少天
 13 int compare_dates(Date d1, Date d2);    // 比较两个日期:
 14 // 如果d1在d2之前,返回-1;
 15 // 如果d1在d2之后,返回1
 16 // 如果d1和d2相同,返回0
 17 
 18 void test1() {
 19     Date d;
 20     int i;
 21 
 22     printf("输入日期:(以形如2024-12-16这样的形式输入)\n");
 23     for (i = 0; i < 3; ++i) {
 24         input(&d);
 25         printf("%d-%02d-%02d是这一年中第%d天\n\n", d.year, d.month, d.day, day_of_year(d));
 26     }
 27 }
 28 
 29 void test2() {
 30     Date Alice_birth, Bob_birth;
 31     int i;
 32     int ans;
 33 
 34     printf("输入Alice和Bob出生日期:(以形如2024-12-16这样的形式输入)\n");
 35     for (i = 0; i < 3; ++i) {
 36         input(&Alice_birth);
 37         input(&Bob_birth);
 38         ans = compare_dates(Alice_birth, Bob_birth);
 39 
 40         if (ans == 0)
 41             printf("Alice和Bob一样大\n\n");
 42         else if (ans == -1)
 43             printf("Alice比Bob大\n\n");
 44         else
 45             printf("Alice比Bob小\n\n");
 46     }
 47 }
 48 
 49 int main() {
 50     printf("测试1: 输入日期, 打印输出这是一年中第多少天\n");
 51     test1();
 52 
 53     printf("\n测试2: 两个人年龄大小关系\n");
 54     test2();
 55 }
 56 
 57 // 补足函数input实现
 58 // 功能: 输入日期给pd指向的Date变量
 59 void input(Date* pd) {
 60     char str[20];
 61     gets(str);
 62     int len = strlen(str);
 63     int sign = 0;
 64     int t[3][4] = {0};
 65     int k = 0;
 66     pd->year = 0, pd->month = 0, pd->day = 0;
 67     for (int i = 0; i < len; ++i) {
 68         if (str[i] == '-') {
 69             k = 0;
 70             sign++;
 71             continue;
 72         }
 73         else {
 74             if (sign == 0) {
 75                 t[sign][k] = str[i] - 48;
 76                 pd->year = pd->year * 10 + t[sign][k];
 77                 k++;
 78             }
 79             else if (sign == 1) {
 80                 t[sign][k] = str[i] - 48;
 81                 pd->month = pd->month * 10 + t[sign][k];
 82                 k++;
 83             }
 84             else {
 85                 t[sign][k] = str[i] - 48;
 86                 pd->day = pd->day* 10 + t[sign][k];
 87                 k++;
 88             }
 89         }
 90     }
 91 
 92 
 93 }
 94 
 95 // 补足函数day_of_year实现
 96 // 功能:返回日期d是这一年的第多少天
 97 int day_of_year(Date d) {
 98     int x[13] = { 0 };
 99     for (int i = 1; i < 13; ++i) {
100         if (i % 2 != 0) {
101             x[i] = 31;
102         }
103         else {
104             x[i] = 30;
105         }
106     }
107 
108     if ((d.year % 4 == 0 && d.year % 100 != 0) || (d.year % 400 == 0)) {
109         x[2] = 29;
110     }
111     else {
112         x[2] = 28;
113     }
114     int time = 0;
115     for (int i = 1; i < d.month; ++i)
116     {
117         time += x[i];
118     }
119     time += d.day;
120     return time;
121 }
122 
123 // 补足函数compare_dates实现
124 // 功能:比较两个日期:
125 // 如果d1在d2之前,返回-1;
126 // 如果d1在d2之后,返回1
127 // 如果d1和d2相同,返回0
128 int compare_dates(Date d1, Date d2) {
129     if (d1.year == d2.year && d1.month == d2.month && d1.day == d2.day) {
130         return 0;
131     }
132     if (d1.year > d2.year) {
133         return 1;
134     }
135     if (d1.year == d2.year && d1.month > d2.month) {
136         return 1;
137     }
138     if (d1.year == d2.year && d1.month == d2.month&& d1.day > d2.day) {
139         return 1;
140     }
141 
142     return -1;
143 }

 

 

task6.c

 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 
14 // 函数声明
15 void output(Account x[], int n);    // 输出账户数组x中n个账户信息,其中,密码用*替代显示
16 
17 int main() {
18     Account x[] = { {"A1001", "123456", student},
19                     {"A1002", "123abcdef", student},
20                     {"A1009", "xyz12121", student},
21                     {"X1009", "9213071x", admin},
22                     {"C11553", "129dfg32k", teacher},
23                     {"X3005", "921kfmg917", student} };
24     int n;
25     n = sizeof(x) / sizeof(Account);
26     output(x, n);
27 
28     return 0;
29 }
30 
31 // 待补足的函数output()实现
32 // 功能:遍历输出账户数组x中n个账户信息
33 //      显示时,密码字段以与原密码相同字段长度的*替代显示
34 void output(Account x[], int n) {
35     for (int i = 0; i < n; ++i) {
36         int len = strlen(x[i].password);
37         char t[20];
38         int j;
39         for (j = 0; j < len; j++) {
40             t[j] = '*';
41         }
42         t[j] = '\0';
43         char temp[20];
44         if (x[i].type == 0) {
45             strcpy(temp, "admin");
46         }
47         else if (x[i].type == 1) {
48             strcpy(temp, "student");
49         }
50         else {
51             strcpy(temp, "teacher");
52         }
53         printf("%-15s%-15s%-15s\n", x[i].username, t,temp);
54     }
55 }

 

 

 

task7.c

  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;           // 是否为紧急联系人,是取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 void bubble(Contact x[], int n);
 17 
 18 #define N 10
 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     for (int i = 0; i < n; ++i) {
 55         if (strcmp(x[i].name, name) == 0) {
 56             x[i].vip = 1;
 57             break;
 58         }
 59    }
 60 }
 61 
 62 // 补足函数display实现
 63 // 功能: 显示联系人数组x中的联系人信息
 64 //      按姓名字典序升序显示, 紧急联系人显示在最前面
 65 void display(Contact x[], int n) {
 66     Contact t1[N],t2[N];
 67     int k1 = 0, k2 = 0;
 68     for (int i = 0; i < n ; ++i) {
 69         if (x[i].vip == 1) {
 70             t1[k1++] = x[i];
 71         }
 72         else {
 73             t2[k2++] = x[i];
 74         }
 75     }
 76     bubble(t1, k1);
 77     bubble(t2, k2);
 78     int k = 0;
 79     for (int i = 0; i < k1; i++) {
 80         x[k++] = t1[i];
 81     }
 82     for (int i = 0; i < k2; i++) {
 83         x[k++] = t2[i];
 84     }
 85     for (int i = 0; i < n; i++) {
 86         if (i < k1) {
 87             printf("%-10s%-15s*\n", x[i].name, x[i].phone);
 88         }
 89         else {
 90             printf("%-10s%-15s\n", x[i].name, x[i].phone);
 91         }
 92     }
 93 }
 94 void bubble(Contact x[], int n) {
 95     for (int i = 0; i < n - 1; ++i) {
 96         for (int j = 0; j < n-1-i; ++j) {
 97             if (strcmp(x[j].name, x[j + 1].name) > 0) {
 98                 Contact t = x[j];
 99                 x[j] = x[j + 1];
100                 x[j + 1] = t;
101             }
102         }
103     }
104 
105 }
106 
107 void output(Contact x[], int n) {
108     int i;
109 
110     for (i = 0; i < n; ++i) {
111         printf("%-10s%-15s", x[i].name, x[i].phone);
112         if (x[i].vip)
113             printf("%5s", "*");
114         printf("\n");
115     }
116 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/853783.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实时协作+跨时区支持,在线文档的未来是什么?

在线文档协作如何突破跨境流程协作的瓶颈 在全球化的今天,越来越多的企业面临跨国、跨时区的协作挑战。跨境团队需要的不仅是语言和文化的融合,还需要高效的流程管理和信息同步工具,而在线文档协作正是破局的关键之一。 跨境协作的难点 跨境流程协作中,企业往往会遇到以下挑…

java中RSA加密解密的使用

作为常用的非对称加密算法,本篇文章大致记录一下,在java代码中如何生成RSA的密钥对以及加密解密的使用。 1、生成密钥对public class RSAUtils {// 填充方式public static final String RSA_ALGORITHM_NOPADDING = "RSA";public static final String RSA_ALGORITHM…

升降梯人数识别摄像机

升降梯人数识别摄像机是一种结合摄像技术与智能识别算法的设备,旨在监测升降梯厢内的人数,提供实时准确的人数统计信息。通过安装在升降梯厢内的摄像头,系统可以智能识别厢内的人数,并将数据传输至监控中心或手机APP等平台,帮助管理人员及时了解并控制升降梯的负荷情况。这…

首尔之春(2023)【蓝光原盘 / REMUX】【内封简繁特效字幕】电影百度云/夸克迅雷UC网盘资源链接下载

◎译  名 首尔之春/12.12: The Day/12.12:首尔之春(台) ◎片  名 서울의 봄 ◎年  代 2023 ◎产  地 韩国 ◎类  别 剧情 ◎语  言 韩语 ◎上映日期 2023-11-22(韩国) ◎片  长 141分钟 ◎导  演 金成洙 Sung-su Kim ◎编  剧 金成洙 Sung-su Kim…

多源最短路Floyd算法

多源最短路算法-Floyd 使用Floyd(弗洛伊德)算法,可以以 \(O(n^3)\) 的时间复杂度求出一张多源图的任意两点间的最短路径 一般采用邻接矩阵的方法来存储图: int g[N][N]; g[i][j]其中,g[i][j]的意义为第i个节点到第j个节点的权重 我们需要对邻接矩阵进行路径初始化,将自身…

推荐一款强大的开源物联网 Web 组态软件

前言 快速发展的物联网(IoT)领域,设备管理和监控的需求日益增长。为了满足这一需求并提供更高效的解决方案。 向大家推荐一款强大的开源物联网Web组态软件。这款软件不仅具备灵活的可视化配置功能,还提供了丰富的工具和接口,轻松实现设备集成、数据监控和远程管理。 项目介…

Win10 wsl 迁移到 D 盘

wsl 关闭wsl --shutdown查看系统wsl --list导出 tar 文件wsl --export Ubuntu-24.04 D:/export.tar删除C盘的虚拟机wsl --unregister Ubuntu-24.04导入新的虚拟机wsl --import Ubuntu-24.04 D:\wsl\ D:\export.tar --version 2查看状态直面挑战,躬身入局

PHP源码加密之php-beast

1、简介 php-beast可以对PHP源码文件进行加密,加密后的文件也可以正常的访问。2、安装php-beast# 下载php-beast wget https://github.com/liexusong/php-beast/archive/master.zip# 解压下载的文件 unzip master.zip# 进入解压后的目录 cd php-beast-master# ‌生成配置文件 …

ABB机器人3HAC17332-1电机维修攻略分享

ABB作为工业机器人制造商,其伺服电机是机器人执行精确动作的核心部件。伺服电机负责将电能转化为机械能,驱动机器人的关节和臂部运动。一旦伺服电机出现故障,将直接影响机器人的运行精度和稳定性。一、ABB机器人维修前准备在进行ABB机器人伺服电机维修之前,需要做好以下准备…

大话《权限设计》全篇,领略不同设计模式的魅力

说明该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。说明:OverallAuth2.0 是一个简单、易懂、功能强大的权限+可视化流程管理系统。 友情提醒:本篇文章是属于系列文章,…

LLM应用实战-财经新闻自动聚合

开发了一款新闻资讯的自动聚合的工具,基于crawl4ai框架实现。1. 背景 这段时间项目比较忙,所以本qiang~有些耽误了学习,不过也算是百忙之中,抽取时间来支撑一个读者的需求,即爬取一些财经网站的新闻并自动聚合。 该读者看了之前的《AI资讯的自动聚合及报告生成》文章后,…

减少延迟时间的方法

减少延迟时间的方法 ‍ ​​ ‍一、回顾 重点:延迟时间就是磁头在某一磁道上开转的时间 盘片一直在旋转个不停 机械硬盘的数据读取以一个扇区为单位 物理上相邻的扇区并不能连续读数据,因为磁头读入一个扇区的数据后还需要一小段时间来处理,并不能紧接着读取相邻的扇区的数据…