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

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...