Chapter11
11.3
#include <stdio.h>
#include <string.h> #define NUM_STUDENTS 40
#define NUM_SUBJECTS 3 // 学生结构体
typedef struct { int id; char name[50]; float scores[NUM_SUBJECTS]; float average;
} Student; void inputData(Student students[], int numStudents);
void calculateAverages(Student students[], int numStudents);
void printReport(Student students[], int numStudents);
void printTop5(Student students[], int numStudents); int main() { Student students[NUM_STUDENTS]; // 输入学生数据 inputData(students, NUM_STUDENTS); // 计算平均成绩 calculateAverages(students, NUM_STUDENTS); // 输出成绩报表 printReport(students, NUM_STUDENTS); // 输出平均分前5名的学生 printTop5(students, NUM_STUDENTS); return 0;
} // 输入学生数据
void inputData(Student students[], int numStudents) { for (int i = 0; i < numStudents; i++) { printf("请输入第%d个学生的学号: ", i + 1); scanf("%d", &students[i].id); printf("请输入第%d个学生的姓名: ", i + 1); scanf("%s", students[i].name); for (int j = 0; j < NUM_SUBJECTS; j++) { printf("请输入第%d个学生的第%d门成绩: ", i + 1, j + 1); scanf("%f", &students[i].scores[j]); } }
} // 计算平均成绩
void calculateAverages(Student students[], int numStudents) { for (int i = 0; i < numStudents; i++) { float sum = 0; for (int j = 0; j < NUM_SUBJECTS; j++) { sum += students[i].scores[j]; } students[i].average = sum / NUM_SUBJECTS; }
} // 输出成绩报表
void printReport(Student students[], int numStudents) { printf("\n成绩报表:\n"); printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均分\n"); for (int i = 0; i < numStudents; i++) { printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].average); }
} // 输出平均分前5名的学生
void printTop5(Student students[], int numStudents) { // 使用冒泡排序对平均分进行降序排序 for (int i = 0; i < numStudents - 1; i++) { for (int j = 0; j < numStudents - i - 1; j++) { if (students[j].average < students[j + 1].average) { Student temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } } printf("\n平均分前5名的学生:\n"); printf("姓名\t平均分\n"); for (int i = 0; i < 5 && i < numStudents; i++) { printf("%s\t%.2f\n", students[i].name, students[i].average); }
}
11.4
#include <stdio.h>
#include <string.h> #define MAX_LEN 30 struct member { char no[MAX_LEN]; char name[MAX_LEN]; char phone[20];
}; void strip_newline(char *str) { size_t len = strlen(str); if (len > 0 && str[len - 1] == '\n') { str[len - 1] = '\0'; }
} int main() { struct member members[4]; for (int i = 0; i < 4; i++) { printf("请输入第%d位员工的工作证号: ", i + 1); fgets(members[i].no, MAX_LEN, stdin); strip_newline(members[i].no); printf("请输入第%d位员工的姓名: ", i + 1); fgets(members[i].name, MAX_LEN, stdin); strip_newline(members[i].name); printf("请输入第%d位员工的电话号码: ", i + 1); fgets(members[i].phone, 20, stdin); strip_newline(members[i].phone); printf("\n"); } printf("工作证号\t姓名\t电话号码\n"); for (int j = 0; j < 4; j++) { printf("%29s\t", members[j].no); printf("%29s\t", members[j].name); printf("%s\t", members[j].phone); printf("\n"); } return 0;
}
11.5
#include <stdio.h>
#include <stdlib.h>
#include <time.h> // 日期结构体
typedef struct { int year; int month; int day;
} Date; // 判断是否是闰年
int is_leap_year(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
} // 计算某年某月的天数
int days_in_month(int year, int month) { static const int days_per_month[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; if (month == 2 && is_leap_year(year)) { return 29; } return days_per_month[month - 1];
} // 将日期转换为从某个固定日期(如1970年1月1日)开始的天数
long date_to_days(Date date) { long days = 0; for (int year = 1970; year < date.year; year++) { days += is_leap_year(year) ? 366 : 365; } for (int month = 1; month < date.month; month++) { days += days_in_month(date.year, month); } days += date.day - 1; // 1970年1月1日是第0天,所以要减1 return days;
} // 计算两个日期之间的天数差异
long diff(Date date1, Date date2) { long days1 = date_to_days(date1); long days2 = date_to_days(date2); return abs(days1 - days2);
} // 输入日期
void input_date(Date *date) { printf("请输入年份: "); scanf("%d", &date->year); printf("请输入月份: "); scanf("%d", &date->month); printf("请输入日期: "); scanf("%d", &date->day);
} int main() { Date date1, date2; printf("请输入第一个日期:\n"); input_date(&date1); printf("请输入第二个日期:\n"); input_date(&date2); long days_diff = diff(date1, date2); printf("两个日期之间相隔的天数是: %ld\n", days_diff); return 0;
}
11.6
#include <stdio.h>
#include <stdlib.h>
#include <string.h> // 考生信息结构体
typedef struct { int id; // 考生号 char name[50]; // 姓名 char gender; // 性别 float score; // 考试成绩
} Student; Student* findTopStudent(Student* students[], int n); int main() { int N; // 考生总数 printf("请输入考生人数: "); scanf("%d", &N); // 动态分配内存以存储考生信息指针 Student* students[N]; // 输入每位考生的信息 for (int i = 0; i < N; i++) { students[i] = (Student*)malloc(sizeof(Student)); printf("请输入第%d位考生的信息:\n", i + 1); printf("考生号: "); scanf("%d", &students[i]->id); printf("姓名: "); scanf("%s", students[i]->name); printf("性别 (M/F): "); scanf(" %c", &students[i]->gender); printf("考试成绩: "); scanf("%f", &students[i]->score); } // 查找并显示成绩最佳的考生信息 Student* topStudent = findTopStudent(students, N); printf("\n成绩最佳的考生信息如下:\n"); printf("考生号: %d\n", topStudent->id); printf("姓名: %s\n", topStudent->name); printf("性别: %c\n", topStudent->gender); printf("考试成绩: %.2f\n", topStudent->score); // 释放动态分配的内存 for (int i = 0; i < N; i++) { free(students[i]); } return 0;
} // 查找成绩最好的考生信息
Student* findTopStudent(Student* students[], int n) { Student* best = students[0]; // 假设第一个考生为当前最好 for (int i = 1; i < n; i++) { if (students[i]->score > best->score) { best = students[i]; // 更新最好考生 } } return best;
}
11.7
#include <stdio.h> // 定义日期结构体
typedef struct { int year; int month; int day;
} Date; // 判断是否是闰年
int isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
} // 计算某年某月的天数(不包含该月最后一天)
int daysInMonth(int year, int month) { static const int daysBeforeMonth[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }; if (isLeapYear(year)) { return daysBeforeMonth[month] + 1; // 闰年2月有29天,所以加1 } else { return daysBeforeMonth[month]; }
} // 计算给定日期是星期几(0代表星期日,1代表星期一,...,6代表星期六)
int week(Date date, int firstDayOfYear) { int totalDays = 0; // 计算从该年元旦到前一年结束的总天数(考虑闰年) for (int year = 1900; year < date.year; year++) { totalDays += isLeapYear(year) ? 366 : 365; } // 计算从该年元旦到目标月份前一天的总天数 for (int month = 1; month < date.month; month++) { totalDays += daysInMonth(date.year, month); } // 加上目标日期的天数 totalDays += date.day - 1; // 因为元旦是第0天,所以要减1 // 计算星期几(注意:这里firstDayOfYear是从1开始的,而我们的计算是从0开始的,所以要减1) int weekDay = (totalDays + (firstDayOfYear - 1)) % 7; if (weekDay < 0) { weekDay += 7; // 处理负数情况(虽然在这个特定情况下不会发生,但为了代码的健壮性还是加上) } // 返回结果(0-6代表星期日到星期六) return weekDay;
} // 输出星期几的中文表示
void printWeekDay(int weekDay) { const char* weekDays[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; printf("%s\n", weekDays[weekDay]);
} int main() { Date date; int firstDayOfYear; // 输入日期 printf("请输入年份: "); scanf("%d", &date.year); printf("请输入月份: "); scanf("%d", &date.month); printf("请输入日期: "); scanf("%d", &date.day); // 输入该年元旦是星期几(1-7分别代表星期一到星期日) printf("请输入该年元旦是星期几(1代表星期一,7代表星期日): "); scanf("%d", &firstDayOfYear); if (firstDayOfYear < 1 || firstDayOfYear > 7) { printf("输入错误!元旦的星期几应在1到7之间。\n"); return 1; } // 注意:用户可能输入7代表星期日,但我们的计算是基于0代表星期日的,所以需要进行转换 if (firstDayOfYear == 7) { firstDayOfYear = 0; } // 计算并输出该日期是星期几 int result = week(date, firstDayOfYear); printWeekDay(result); return 0;
}
相关文章:
Chapter11
11.3 #include <stdio.h> #include <string.h> #define NUM_STUDENTS 40 #define NUM_SUBJECTS 3 // 学生结构体 typedef struct { int id; char name[50]; float scores[NUM_SUBJECTS]; float average; } Student; void inputData(Student studen…...
LLAMA2入门(一)-----预训练
Llama 2 是预训练和微调的LLM系列,Llama 2 和 Llama 2-Chat 模型的参数规模达到 70B。Llama 2-Chat 模型专门为对话场景进行了优化。 这是一个系列的文章,会分别从LLAMA2的预训练,微调,安全性等方面进行讲解。 1.数据来源 数据…...
使用poi-tl动态写入目录更新问题解决
在使用poi-tl动态写完word后,是无法更新目录的,使用poi-tl提供的插件也是不行的,而且很多使用poi手动写入的也是不行,最多就是让你在打开文件时提示你更新目录/更新域,用户体验很差,要点击好几次而且wps还不…...
OpenCV高级图形用户界面(9)更改指定窗口的位置函数moveWindow()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将窗口移动到指定的位置。 cv::moveWindow() 函数用于更改指定窗口的位置。你可以使用这个函数来移动窗口到屏幕上的任何位置。 函数原型 void …...

华山论剑之Rust的Trait
华山论剑,群雄荟萃,各显神通。武林中人,各有所长,或剑法飘逸,或掌法刚猛,或轻功绝顶。这就好比Rust中的trait,它定义了一种武功套路,而不同的门派、不同的人,可以将这套武…...

AI 编译器学习笔记之七五 -- pdb 使用方法
1、进入调试状态有2种方法:Python工具PDB调试器的使用方法详解_python_脚本之家 (jb51.net) a) 在重新种设置断点正常执行:遇到代码中插入的pdb.set_trace()或者breakpoint()进入调试状态 b) 不修改命令行:直接使用 python3 -m pdb pdb_demo.…...

15分钟学Go 第8天:控制结构 - 循环
第8天:控制结构 - 循环 在Go语言中,循环是一种基本的控制结构,用于重复执行一段代码。今天我们将深入了解Go语言中的for循环,包括它的各种用法、语法结构、以及如何在实践中有效地应用循环。 1. for 循环的基本概念 for循环是G…...
后端接收参数的几种常用注解
目录 一、RequestParam 二、RequestBody 三、PathVariable 四、RequestHeader 五、RequestAttribute 六、RequestPart 七、Valid 一、RequestParam 1.作用 用于将请求中的 查询参数 或 表单参数 绑定到方法的参数上。支持 GET 和 POST 请求。 2.使用方法 GetMappin…...

如何使用docker在linux中配置C++环境
目录 1. 安装docker 2. 配置C环境 1)启动ubuntu:22.04容器 2)配置编译环境G 3)安装软件 4)测试 1. 如何打包容器生成tar? a. 生成容器镜像 b. 将镜像压缩成tar 2. 如何将容器内部的端口映射至宿主机…...
darknet_ros 使用教程
首先是git clone可能会因为到没有权限的问题(SSH),此时输入 git clone --recursive https://github.com/leggedrobotics/darknet_ros.git 下载成功之后 catkin_make -DCMAKE_BUILD_TYPERelease catkin失败原因(在CMakefile中&…...
第九课 Vue中的v-bind指令拓展
Vue中的v-bind指令 示例拓展 1)切换样式 <style>.test{width: 100px;height: 100px;border: 3px solid #000;}.bg{background: red;}</style><div id"app"><input type"button" value"点击切换样式" click&qu…...
DOIP协议介绍2-Diagnostic power mode information request (0x4003)消息
DOIP(Diagnostic communication over Internet Protocol)是基于以太网的通讯协议,用于对UDS协议的数据进行传输,规范于ISO13400标准。DOIP的Type:Diagnostic power mode information request(0x4003&#x…...
Eclipse 软件:配置 JDBC、连接 MySQL 数据库、导入 jar 包
目录 一、配置 JDBC (一)作用 (二)官网下载 1. 下载链接 2. 下载 3. 补充:压缩包分类与用途 (三)eclipse 导入 JDBC 的 jar 包 (四)加载数据库驱动 (五…...

二叉树中的最长交错路径
题目链接 二叉树中的最长交错路径 题目描述 注意点 每棵树最多有 50000 个节点每个节点的值在 [1, 100] 之间起点无需是根节点 解答思路 要找到最长交错路径,首先想到的是深度优先遍历因为起点无需是根节点,所以对于任意一个节点,其可以…...

高校企业数据可视化平台功能介绍/特色功能
数据可视化平台是一款适用于高校教学和各领域企业的零门槛可视化工具,能够解决高校数据分析与可视化类课程教学、实训问题。平台采用B/S结构,用户不需要下载客户端,可通过浏览器进行访问。 数据可视化平台提供多种指标设计,学…...

RHCE第三次笔记SSH
第三章 远程连接服务器 1、远程连接服务器简介 (1)什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录 linux 主机以取得可操作主机接口(shell ),而登录后…...
JAVA基础-包装类
文章目录 包装类1 概述2 Integer类2.1 Integer类构造方法2.2 Integer类成员方法 3 基本类型与字符串之间的转换3.1 基本类型转换为String3.2 String转换成基本类型 4 底层原理 第六章:算法小题练习一:练习二:练习三:练习四&#x…...

复合逻辑运算与复合逻辑门
或非门(NOR gate) 是一种基本的逻辑门,它结合了“或”(OR)和“非”(NOT)操作。或非门的输出是输入信号的否定,只有在所有输入都为零时,输出才为一。 与非运算࿰…...

工厂模式~
现实世界中的例子 考虑一个招聘经理的情况。一个人不可能为每一个职位都进行面试。根据职位空缺,她必须决定并将面试步骤委托给不同的人。 用简单的话来说 它提供了一种将实例化逻辑委托给子类的方法。 维基百科的解释 在基于类的编程中,工厂方法模式是…...

Elasticsearch基本使用及介绍
Elasticsearch 1. 关于各种数据库的使用 关于MySQL:是关系型数据库,能清楚的表示数据之间的关系,并且,是基于磁盘存储的,可以使用相对较低的成本存储大量的数据 关于Redis:是基于K-V结构的在内存中读写数…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...