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结构的在内存中读写数…...

10. PH47代码框架文件组织
通过之前章节对PH47体系的介绍,读者对PH47能建立起了初步的概念及掌握各主要构成部分的使用开发方法。从本章节开始,就将对PH47代码的二次开发内容进行具体讲述。 本部分就将对PH47框架当中代码文件的组织方式及功能作用进行介绍,对于将来熟…...

LabVIEW提高开发效率技巧----VI继承与重载
在LabVIEW开发中,继承和重载是面向对象编程(OOP)中的重要概念。通过合理运用继承与重载,不仅能提高代码的复用性和灵活性,还能减少开发时间和维护成本。下面从多个角度介绍如何在LabVIEW中使用继承和重载,并…...

4.8 大数据发展趋势
文章目录 今天,我想与大家探讨一个充满潜力和变革的主题——大数据的发展趋势。大数据不仅正在改变我们的工作和生活方式,更是推动社会进步和经济发展的关键因素。 首先,让我们看看国内的大数据发展趋势。中国政府高度重视大数据产业&#x…...

【无标题】react组件封装
子组件制作 import { useState,useRef, useEffect} from "react"const Table (data)> {const {value ,option} dataconsole.log(value)const [stata,setValue] useState()const useRefs useRef(value)useEffect(()> {useRefs.current.value value })c…...

git+cmake将Open3D配置到visual studio
这里假设你已经安装好了上述内容,我们直接开始安装: 第一步:以管理员身份打开powershell,执行 git clone https://github.com/isl-org/Open3D.git然后依次执行 cd Open3D mkdir build cd build开启你的梯子,并设置你…...

ArcGIS-CityEngine 2024-新手小白也能试用+入门可视化vga编程--第一篇
目录 下载CityEngine并创建空项目 场景双击 _Tour (Navigator面板)的就行了,(不用额外下载) 生成街道 基本操作 多个图层Group 区分 Editor 多个区域(插件模式,浮空窗口, 官方的例子&…...

IntelliJ IDEA 快捷键大全(也适用全家桶其他编辑器)
以下是 IntelliJ IDEA 的常用功能快捷键大全,适用于 Windows/Linux 系统(Mac 用户可将 Ctrl 替换为 Cmd,Alt 替换为 Option): 功能分类功能描述快捷键 (Windows/Linux)基本操作显示所有快捷键Ctrl J显示主菜单Alt H…...

基于SSM高校普法系统的设计
管理员账户功能包括:系统首页,个人中心,学生管理,律师管理,法律知识管理,新闻类型管理,法律新闻,律师推荐管理 律师账号功能包括:系统首页,个人中心…...

CDN加速流程分享
我们有IP,我们需要用CDN的阿里云进行加速,让网站的视频显示的更加流畅 首先,我们面对的第一个问题就是把ip解析成域名的形式,我们这里的域名是 edu.senhacore.xyz 解释一下为什么要变成域名才行,因为国内要使用cdn就必须把ip转…...

全网爆火的排队免单模式究竟是如何运作?
在私域平台的探索过程中,许多企业主尝试了链动21、推三返一等裂变模式。虽然这些模式在某些情况下取得了显著成效,但也有不少企业反映难以推广。问题的核心在于客户的购买意愿不足,市场动力缺乏。仅仅依靠推广团队的积极裂变是不够的…...