当前位置: 首页 > news >正文

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系列&#xff0c;Llama 2 和 Llama 2-Chat 模型的参数规模达到 70B。Llama 2-Chat 模型专门为对话场景进行了优化。 这是一个系列的文章&#xff0c;会分别从LLAMA2的预训练&#xff0c;微调&#xff0c;安全性等方面进行讲解。 1.数据来源 数据…...

使用poi-tl动态写入目录更新问题解决

在使用poi-tl动态写完word后&#xff0c;是无法更新目录的&#xff0c;使用poi-tl提供的插件也是不行的&#xff0c;而且很多使用poi手动写入的也是不行&#xff0c;最多就是让你在打开文件时提示你更新目录/更新域&#xff0c;用户体验很差&#xff0c;要点击好几次而且wps还不…...

OpenCV高级图形用户界面(9)更改指定窗口的位置函数moveWindow()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将窗口移动到指定的位置。 cv::moveWindow() 函数用于更改指定窗口的位置。你可以使用这个函数来移动窗口到屏幕上的任何位置。 函数原型 void …...

华山论剑之Rust的Trait

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

AI 编译器学习笔记之七五 -- pdb 使用方法

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

15分钟学Go 第8天:控制结构 - 循环

第8天&#xff1a;控制结构 - 循环 在Go语言中&#xff0c;循环是一种基本的控制结构&#xff0c;用于重复执行一段代码。今天我们将深入了解Go语言中的for循环&#xff0c;包括它的各种用法、语法结构、以及如何在实践中有效地应用循环。 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&#xff09;启动ubuntu:22.04容器 2&#xff09;配置编译环境G 3&#xff09;安装软件 4&#xff09;测试 1. 如何打包容器生成tar&#xff1f; a. 生成容器镜像 b. 将镜像压缩成tar 2. 如何将容器内部的端口映射至宿主机&#xf…...

darknet_ros 使用教程

首先是git clone可能会因为到没有权限的问题&#xff08;SSH&#xff09;&#xff0c;此时输入 git clone --recursive https://github.com/leggedrobotics/darknet_ros.git 下载成功之后 catkin_make -DCMAKE_BUILD_TYPERelease catkin失败原因&#xff08;在CMakefile中&…...

第九课 Vue中的v-bind指令拓展

Vue中的v-bind指令 示例拓展 1&#xff09;切换样式 <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&#xff08;Diagnostic communication over Internet Protocol&#xff09;是基于以太网的通讯协议&#xff0c;用于对UDS协议的数据进行传输&#xff0c;规范于ISO13400标准。DOIP的Type&#xff1a;Diagnostic power mode information request&#xff08;0x4003&#x…...

Eclipse 软件:配置 JDBC、连接 MySQL 数据库、导入 jar 包

目录 一、配置 JDBC &#xff08;一&#xff09;作用 &#xff08;二&#xff09;官网下载 1. 下载链接 2. 下载 3. 补充&#xff1a;压缩包分类与用途 &#xff08;三&#xff09;eclipse 导入 JDBC 的 jar 包 &#xff08;四&#xff09;加载数据库驱动 &#xff08;五…...

二叉树中的最长交错路径

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

高校企业数据可视化平台功能介绍/特色功能

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

RHCE第三次笔记SSH

第三章 远程连接服务器 1、远程连接服务器简介 &#xff08;1&#xff09;什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统&#xff0c;让你在远程终端前登录 linux 主机以取得可操作主机接口&#xff08;shell &#xff09;&#xff0c;而登录后…...

JAVA基础-包装类

文章目录 包装类1 概述2 Integer类2.1 Integer类构造方法2.2 Integer类成员方法 3 基本类型与字符串之间的转换3.1 基本类型转换为String3.2 String转换成基本类型 4 底层原理 第六章&#xff1a;算法小题练习一&#xff1a;练习二&#xff1a;练习三&#xff1a;练习四&#x…...

复合逻辑运算与复合逻辑门

或非门&#xff08;NOR gate&#xff09; 是一种基本的逻辑门&#xff0c;它结合了“或”&#xff08;OR&#xff09;和“非”&#xff08;NOT&#xff09;操作。或非门的输出是输入信号的否定&#xff0c;只有在所有输入都为零时&#xff0c;输出才为一。 与非运算&#xff0…...

工厂模式~

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

Elasticsearch基本使用及介绍

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

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...