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结构的在内存中读写数…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...