首页 > 其他分享 >实验六

实验六

时间:2024-12-16 20:19:57浏览次数:4  
标签:return int void 实验 printf d2 day

任务四:

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

 任务5:

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

 任务6:

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 enum Role
 5 {
 6     admin,
 7     student,
 8     teacher
 9 };
10 
11 typedef struct
12 {
13     char username[20]; // 用户名
14     char password[20]; // 密码
15     enum Role type;    // 账户类型
16 } Account;
17 
18 // 函数声明
19 void output(Account x[], int n); // 输出账户数组x中n个账户信息,其中,密码用*替代显示
20 
21 int main()
22 {
23     Account x[] = {{"A1001", "123456", student},
24                    {"A1002", "123abcdef", student},
25                    {"A1009", "xyz12121", student},
26                    {"X1009", "9213071x", admin},
27                    {"C11553", "129dfg32k", teacher},
28                    {"X3005", "921kfmg917", student}};
29     int n;
30     n = sizeof(x) / sizeof(Account);
31     output(x, n);
32 
33     return 0;
34 }
35 
36 // 待补足的函数output()实现
37 // 功能:遍历输出账户数组x中n个账户信息
38 //      显示时,密码字段以与原密码相同字段长度的*替代显示
39 void output(Account x[], int n)
40 {
41     for (int i = 0; i < n; i++)
42     {
43         printf("%s\t", x[i].username);
44         int sz = strlen(x[i].password);
45         for (int j = 0; j < sz; j++)
46         {
47             printf("*");
48         }
49         printf("\t");
50         switch (x[i].type)
51         {
52         case admin:
53             printf("admin\n");
54             break;
55         case student:
56             printf("student\n");
57             break;
58         case teacher:
59             printf("teacher\n");
60             break;
61         }
62     }
63 }

 任务7:

  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 
  5 typedef struct
  6 {
  7     char name[20];  // 姓名
  8     char phone[12]; // 手机号
  9     int vip;        // 是否为紧急联系人,是取1;否则取0
 10 } Contact;
 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 
 17 int compare(const void *a, const void *b)
 18 {
 19     Contact *contact1 = (Contact *)a;
 20     Contact *contact2 = (Contact *)b;
 21 
 22     if (contact1->vip != contact2->vip)
 23     {
 24         return contact2->vip - contact1->vip;
 25     }
 26 
 27     return strcmp(contact1->name, contact2->name);
 28 }
 29 
 30 #define N 10
 31 int main()
 32 {
 33     Contact list[N] = {{"刘一", "15510846604", 0},
 34                        {"陈二", "18038747351", 0},
 35                        {"张三", "18853253914", 0},
 36                        {"李四", "13230584477", 0},
 37                        {"王五", "15547571923", 0},
 38                        {"赵六", "18856659351", 0},
 39                        {"周七", "17705843215", 0},
 40                        {"孙八", "15552933732", 0},
 41                        {"吴九", "18077702405", 0},
 42                        {"郑十", "18820725036", 0}};
 43     int vip_cnt, i;
 44     char name[20];
 45 
 46     printf("显示原始通讯录信息: \n");
 47     output(list, N);
 48 
 49     printf("\n输入要设置的紧急联系人个数: ");
 50     scanf("%d", &vip_cnt);
 51 
 52     printf("输入%d个紧急联系人姓名:\n", vip_cnt);
 53     for (i = 0; i < vip_cnt; ++i)
 54     {
 55         scanf("%s", name);
 56         set_vip_contact(list, N, name);
 57     }
 58 
 59     printf("\n显示通讯录列表:(按姓名字典序升序排列,紧急联系人最先显示)\n");
 60     display(list, N);
 61 
 62     return 0;
 63 }
 64 
 65 // 补足函数set_vip_contact实现
 66 // 功能:将联系人数组x中,联系人姓名与name一样的人,设置为紧急联系人(即成员vip值设为1)
 67 void set_vip_contact(Contact x[], int n, char name[])
 68 {
 69     int i;
 70     for (i = 0; i < n; i++)
 71     {
 72         if (strcmp(x[i].name, name) == 0)
 73         {
 74             x[i].vip = 1;
 75             break;
 76         }
 77     }
 78 }
 79 
 80 // 补足函数display实现
 81 // 功能: 显示联系人数组x中的联系人信息
 82 //      按姓名字典序升序显示, 紧急联系人显示在最前面
 83 void display(Contact x[], int n)
 84 {
 85     qsort(x, n, sizeof(Contact), compare);
 86 
 87     output(x, n);
 88 }
 89 
 90 void output(Contact x[], int n)
 91 {
 92     int i;
 93 
 94     for (i = 0; i < n; ++i)
 95     {
 96         printf("%-10s%-15s", x[i].name, x[i].phone);
 97         if (x[i].vip)
 98             printf("%5s", "*");
 99         printf("\n");
100     }
101 }

 

标签:return,int,void,实验,printf,d2,day
From: https://www.cnblogs.com/Erhjiu/p/18609280

相关文章

  • Python程序设计——实验与实践
    三、PY_03_03PY_03_06PY_03_07四、PY_04_02PY_04_03PY_04_05PY_04_07PY_04_08......
  • 实验六
    实验1Complex.hpp#pragmaonce#include<iostream>#include<stdexcept>//声明//////////////////////////////////////////////////////复数模板类声明template<typenameT>classComplex{public:Complex(Tr=0,Ti=0);Complex(constComplex<......
  • 20222314 2024-2025-1 《网络与系统攻防技术》实验八实验报告
    202223142024-2025-1《网络与系统攻防技术》实验八实验报告1.实验内容1.1Web前端HTML能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML1.2Web前端javascipt理解JavaScript的基本功能,理解DOM在1的基础上,编写JavaScript验证用户名、密......
  • 实验6
    4.实验任务4完整的task4.c源码1#include<stdio.h>2#defineN1034typedefstruct{5charisbn[20];//isbn号6charname[80];//书名7charauthor[80];//作者8doublesales_price;//售价9......
  • 实验六 模板类,文件I/O和异常处理
    任务4代码:Vector.hpp:1#pragmaonce2#include<iostream>3#include<stdexcept>4#include<cmath>56usingnamespacestd;78template<typenameT>9classVector{10public:11Vector(ints):size{s}{12......
  • 实验六
    任务4:代码:#pragmaonce#include<iostream>#include<stdexcept>usingnamespacestd;template<typenameT>classVector{public:Vector(intn,constT&value=T()):size(n){if(n<0){......
  • 实验六
    任务四#include<stdio.h>#include<stdlib.h>#defineN10typedefstruct{charisbn[20];//isbn号charname[80];//书名charauthor[80];//作者doublesales_price;//售价intsales_count;//销售册数}Book;voidoutput(Bookx[],intn);voidsort(Boo......
  • 实验6
    Task4源代码#include<stdio.h>#defineN10typedefstruct{charisbn[20];//isbn号charname[80];//书名charauthor[80];//作者doublesales_price;//售价intsales_count;//销售册数}Book;......
  • 实验6 C语言结构体、枚举应用编程
    一、实验目的 能正确定义结构体类型能正确定义结构体变量,会对其进行初始化,访问,赋值,输入或输出能正确定义结构体数组,会对其进行初始化,访问,赋值,输入或输出能正确定义结构体指针变量,会使用其间接访问结构体变量,结构体数组初步体验链表的创建,遍历及插入节点操作能综合应用结构......
  • 实验6
    任务4源代码:1#include<stdio.h>2#defineN1034typedefstruct{5charisbn[20];//isbn号6charname[80];//书名7charauthor[80];//作者8doublesales_price;//售价9intsales_count;......