当前位置: 首页 > 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结构的在内存中读写数…...

从怀疑到真香!2026我日常办公离不开的这款在线文字转换器太好用了

刚入职那半年我踩过太多坑&#xff1a;一周三次新人培训&#xff0c;怕漏记知识点全程录音&#xff0c;下课手动整理1小时录音要熬3小时&#xff0c;知识点散得根本没法复习&#xff1b;部门周会做完记录&#xff0c;散会就要我出整理好的纪要&#xff0c;赶工赶得饭都吃不上&a…...

[智能体-69]:重新认知MCP:协议不生产智能,只是AI全域交互的标准化基石

MCP只是提供了大模型、编排调度、外部工具能够进行结构化交流的标准&#xff0c;而整个系统的智能主要依赖编排调度&#xff0c;与外部软件系统的交互取决于外部工具&#xff0c;包括外部语音交互、视觉交互、数字化交互。当下MCP&#xff08;Model Context Protocol&#xff0…...

6款高效降AI率工具 改写实力出众

写论文时反复检测出的AI痕迹总让你提心吊胆&#xff1f;别担心&#xff0c;这里整理了6款真正好用的论文降AI率工具&#xff0c;堪称应对AI生成特征的“得力助手”。它们能有效识别并消除AI生成的痕迹&#xff0c;改写能力出众&#xff0c;帮你快速降低查重率&#xff0c;顺利通…...

从CTF题看RSA安全:为什么你的密钥不能‘共享素数’?

从CTF实战看RSA密钥安全&#xff1a;那些年我们踩过的坑 在网络安全竞赛和实际渗透测试中&#xff0c;RSA算法的错误实现方式往往成为突破的关键点。本文将通过典型CTF赛题案例&#xff0c;揭示五种常见RSA实现漏洞背后的数学原理和安全启示&#xff0c;帮助开发者在实际项目中…...

Owl-Alpha 新手快速上手指南

在处理大规模数据或构建高性能应用时&#xff0c;我们常常会遇到一个棘手的问题&#xff1a;如何在不阻塞主线程的情况下&#xff0c;高效地执行耗时任务&#xff1f;无论是处理图像、解析大型文件&#xff0c;还是进行复杂的数学运算&#xff0c;传统的单线程模式往往会让界面…...

别急着扔!12年老ThinkPad X230升级SSD和内存后,Win10流畅得像新电脑

12年老ThinkPad X230重生指南&#xff1a;极简升级打造流畅办公利器每次打开抽屉看到那台积灰的ThinkPad X230&#xff0c;总有种说不出的情感。这款2012年问世的经典商务本&#xff0c;曾陪伴无数人度过加班到凌晨的夜晚。如今性能确实有些力不从心&#xff0c;但直接丢弃又觉…...

Jetson Orin上TVA模型DLA精准卸载配置

重磅预告&#xff1a;本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容&#xff0c;该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著&#xff0c;特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...

Java网络编程基础分享

在学习 Java 的过程中&#xff0c;网络编程是非常重要的一环。无论是后端开发、分布式系统、即时通讯、文件传输&#xff0c;还是游戏服务、物联网设备&#xff0c;都离不开网络通信一、计算机网络基础1.1 什么是计算机网络把不同地理位置、具有独立功能的计算机&#xff0c;通…...

实测对比,使用Taotoken聚合接口后Agent任务延迟与稳定性观感

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 实测记录&#xff1a;使用 Taotoken 聚合接口后 Agent 任务延迟与稳定性观感 效果展示类&#xff0c;记录将原有基于单一 API 的 A…...

【独家首发】Sora 2 AVI支持并非“开箱即用”:3层封装校验机制详解(RIFF→AVI→OpenCV Mat内存映射链路图解)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Sora 2 AVI支持并非“开箱即用”&#xff1a;核心矛盾与技术定位 Sora 2 的官方文档与发布说明中明确将 AVI 视为“实验性容器支持”&#xff0c;而非默认启用的输入格式。其底层解码栈基于 FFmpeg 5.1 构建&…...