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结构的在内存中读写数…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
