C++ prime plus-7-編程練習
1,
#include <iostream>// 函数声明
double harmonicMean(double x, double y);int main() {double x, y, result;while (true) {std::cout << "请输入两个数(其中一个为0时结束): ";std::cin >> x >> y;// 检查是否输入了0if (x == 0 || y == 0) {break;}// 计算调和平均数result = harmonicMean(x, y);// 报告结果std::cout << "调和平均数是: " << result << std::endl;}std::cout << "程序结束。" << std::endl;return 0;
}// 函数定义
double harmonicMean(double x, double y) {if (x == 0 || y == 0) {return 0; // 如果其中一个数为0,则调和平均数没有意义}return 2.0 * x * y / (x + y);
}
2,
#include <iostream>
#include <vector>// 声明数组函数
void inputScores(std::vector<int>& scores);
void displayScores(const std::vector<int>& scores);
double calculateAverage(const std::vector<int>& scores);int main() {std::vector<int> scores;inputScores(scores);displayScores(scores);double average = calculateAverage(scores);std::cout << "平均成绩是: " << average << std::endl;return 0;
}// 实现输入函数
void inputScores(std::vector<int>& scores) {int score;std::cout << "请输入高尔夫成绩(输入非数字结束): ";while (std::cin >> score && scores.size() < 10) {scores.push_back(score);std::cout << "继续输入高尔夫成绩(输入非数字结束): ";}std::cin.clear(); // 清除错误状态std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 忽略剩余输入
}// 实现显示函数
void displayScores(const std::vector<int>& scores) {std::cout << "输入的成绩为: ";for (int i = 0; i < scores.size(); ++i) {std::cout << scores[i] << " ";}std::cout << std::endl;
}// 实现计算平均成绩函数
double calculateAverage(const std::vector<int>& scores) {if (scores.empty()) {return 0.0;}int sum = 0;for (int score : scores) {sum += score;}return static_cast<double>(sum) / scores.size();
}
3,
#include <iostream>
#include <cstring> // 用于处理字符串struct box {char maker[40];float height;float width;float length;float volume;
};// 函数声明
void displayBox(const box& b);
void calculateVolume(box& b);int main() {box myBox;// 获取用户输入std::cout << "请输入制造商名称: ";std::cin.getline(myBox.maker, 40);std::cout << "请输入高度: ";std::cin >> myBox.height;std::cout << "请输入宽度: ";std::cin >> myBox.width;std::cout << "请输入长度: ";std::cin >> myBox.length;// 计算体积calculateVolume(myBox);// 显示盒子信息displayBox(myBox);return 0;
}// 按值传递box结构,并显示每个成员的值
void displayBox(const box& b) {std::cout << "制造商: " << b.maker << std::endl;std::cout << "高度: " << b.height << std::endl;std::cout << "宽度: " << b.width << std::endl;std::cout << "长度: " << b.length << std::endl;std::cout << "体积: " << b.volume << std::endl;
}// 传递box结构的地址,并将volume成员设置为其他三维长度的乘积
void calculateVolume(box& b) {b.volume = b.height * b.width * b.length;
}
4,
#include <iostream>
#include <cmath> // 用于log和pow函数// 计算阶乘的函数
double factorial(int n) {double result = 1;for (int i = 2; i <= n; ++i) {result *= i;}return result;
}// 计算组合数的函数
double combination(int n, int k) {return factorial(n) / (factorial(k) * factorial(n - k));
}// 计算几率的对数的函数
double logCombination(int n, int k) {return lgamma(n + 1) - (lgamma(k + 1) + lgamma(n - k + 1));
}int main() {int fieldNumbers = 47; // 域号码的数量int chosenNumbers = 5; // 选择的号码数量int specialNumbers = 27; // 特选号码的数量// 计算中头奖的几率的对数double logOdds = logCombination(fieldNumbers, chosenNumbers) + logCombination(specialNumbers, 1);// 输出几率的对数std::cout << "中头奖的几率的对数是: " << logOdds << std::endl;// 如果需要,可以计算几率的实际值double odds = exp(logOdds);std::cout << "中头奖的几率是: " << odds << std::endl;return 0;
}
5,
#include <iostream>// 递归函数声明
unsigned long long factorial(int n);int main() {int number;std::cout << "请输入一个整数(输入-1结束): ";while (std::cin >> number && number != -1) {unsigned long long result = factorial(number);std::cout << number << "! = " << result << std::endl;std::cout << "请输入一个整数(输入-1结束): ";}std::cout << "程序结束。" << std::endl;return 0;
}// 递归函数定义
unsigned long long factorial(int n) {if (n <= 1) { // 基本情况return 1;} else { // 递归情况return n * factorial(n - 1);}
}
6,
#include <iostream>
#include <limits> // 用于std::numeric_limits// 函数声明
int fill_array(double arr[], int size);
void show_array(const double arr[], int size);
void reverse_array(double arr[], int size);int main() {const int size = 10; // 定义数组大小double array[size];// 使用fill_array函数填充数组int count = fill_array(array, size);std::cout << "填充了 " << count << " 个数字。" << std::endl;// 显示数组内容std::cout << "原始数组:" << std::endl;show_array(array, count);// 反转数组reverse_array(array, count);// 显示反转后的数组内容std::cout << "反转后的数组:" << std::endl;show_array(array, count);// 再次反转数组中除第一个和最后一个元素之外的所有元素reverse_array(array + 1, count - 2);// 显示最终数组内容std::cout << "最终数组:" << std::endl;show_array(array, count);return 0;
}// fill_array函数定义
int fill_array(double arr[], int size) {int count = 0;double value;std::cout << "请输入 " << size << " 个double值 (输入非数字结束):" << std::endl;while (count < size && std::cin >> value) {arr[count++] = value;}std::cin.clear(); // 清除错误状态std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 忽略剩余输入return count;
}// show_array函数定义
void show_array(const double arr[], int size) {for (int i = 0; i < size; ++i) {std::cout << arr[i] << " ";}std::cout << std::endl;
}// reverse_array函数定义
void reverse_array(double arr[], int size) {for (int i = 0; i < size / 2; ++i) {double temp = arr[i];arr[i] = arr[size - i - 1];arr[size - i - 1] = temp;}
}
7,
#include <iostream>
#include <limits> // 用于std::numeric_limits// 函数声明
double* fill_array(double* start, double* end);
void show_array(const double* start, const double* end);
void reverse_array(double* start, double* end);int main() {const int size = 10; // 定义数组大小double array[size];// 使用fill_array函数填充数组double* fill_end = fill_array(array, array + size);std::cout << "数组填充结束位置:" << fill_end << std::endl;// 显示数组内容std::cout << "原始数组:" << std::endl;show_array(array, fill_end);// 反转数组reverse_array(array, fill_end);// 显示反转后的数组内容std::cout << "反转后的数组:" << std::endl;show_array(array, fill_end);// 再次反转数组中除第一个和最后一个元素之外的所有元素reverse_array(array + 1, fill_end - 1);// 显示最终数组内容std::cout << "最终数组:" << std::endl;show_array(array, fill_end);return 0;
}// fill_array函数定义
double* fill_array(double* start, double* end) {double value;std::cout << "请输入double值 (输入非数字结束):" << std::endl;while (start < end && std::cin >> value) {*start++ = value;}std::cin.clear(); // 清除错误状态std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 忽略剩余输入return start; // 返回最后被填充的位置
}// show_array函数定义
void show_array(const double* start, const double* end) {while (start < end) {std::cout << *start++ << " ";}std::cout << std::endl;
}// reverse_array函数定义
void reverse_array(double* start, double* end) {while (start < end) {double temp = *start;*start = *end;*end = temp;start++;end--;}
}
8,
#include <iostream>
#include <string>const int NUM_QUARTERS = 4; // 定义季度数量int main() {const char* quarters[NUM_QUARTERS] = {"Q1", "Q2", "Q3", "Q4"};double expenses[NUM_QUARTERS] = {0};// 输入每个季度的开支for (int i = 0; i < NUM_QUARTERS; ++i) {std::cout << "请输入 " << quarters[i] << " 的开支: ";std::cin >> expenses[i];}// 显示每个季度的开支std::cout << "\n季度开支:" << std::endl;for (int i = 0; i < NUM_QUARTERS; ++i) {std::cout << quarters[i] << ": " << expenses[i] << std::endl;}return 0;
}
9,
#include <iostream>
#include <string>
using namespace std;const int SLEN = 30;struct student {char fullname[SLEN];char hobby[SLEN];int age;
};// 获取学生信息的函数
int getinfo(student *arr, int n) {int count = 0;string line;while (count < n) {cout << "请输入学生姓名: ";getline(cin, line);if (line.empty()) {break; // 如果输入的是空行,则终止输入}strncpy(arr[count].fullname, line.c_str(), SLEN - 1);arr[count].fullname[SLEN - 1] = '\0'; // 确保字符串以空字符结尾cout << "请输入学生爱好: ";getline(cin, line);strncpy(arr[count].hobby, line.c_str(), SLEN - 1);arr[count].hobby[SLEN - 1] = '\0';cout << "请输入学生年龄: ";cin >> arr[count].age;cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略换行符count++;}return count; // 返回填充的数组元素数量
}// 显示学生信息的函数
void display(const student *s) {cout << "姓名: " << s->fullname << endl;cout << "爱好: " << s->hobby << endl;cout << "年龄: " << s->age << endl;
}int main() {const int MAX_STUDENTS = 5;student students[MAX_STUDENTS];int numStudents = getinfo(students, MAX_STUDENTS);cout << "\n学生信息:" << endl;for (int i = 0; i < numStudents; i++) {display(&students[i]);cout << endl;}return 0;
}
10,
#include <iostream>// 函数声明
double add(double x, double y);
double multiply(double x, double y);
double calculate(double x, double y, double (*pf)(double, double));int main() {double x, y, result;double (*pf[3])(double, double) = {add, multiply}; // 函数指针数组while (true) {std::cout << "请输入两个数字(输入非数字结束): ";std::cin >> x >> y;if (!std::cin) {std::cin.clear(); // 清除错误状态std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 忽略剩余输入break;}// 使用 calculate 调用不同的函数std::cout << "加法结果: " << calculate(x, y, add) << std::endl;std::cout << "乘法结果: " << calculate(x, y, multiply) << std::endl;std::cout << "\n继续输入两个数字,或输入非数字结束程序。\n";}std::cout << "程序结束。" << std::endl;return 0;
}// add 函数定义
double add(double x, double y) {return x + y;
}// multiply 函数定义
double multiply(double x, double y) {return x * y;
}// calculate 函数定义
double calculate(double x, double y, double (*pf)(double, double)) {return pf(x, y);
}
相关文章:
C++ prime plus-7-編程練習
1, #include <iostream>// 函数声明 double harmonicMean(double x, double y);int main() {double x, y, result;while (true) {std::cout << "请输入两个数(其中一个为0时结束): ";std::cin >> x >> y;…...
计算1 / 1 - 1 / 2 + 1 / 3 - 1 / 4 + 1 / 5 …… + 1 / 99 - 1 / 100 的值,打印出结果
我们写这道题的时候需要俩变量接受,一个总数一个分母,我们发现分母变化是有规律的从1~100循环。 #include<stdio.h> int main() {int i 0;int tag 1;double sum 0.0;for (i 1; i < 101; i){if (i % 2 0){sum sum - 1.0 / i;}else{sum s…...
Linux本地服务器搭建开源监控服务Uptime Kuma与远程监控实战教程
文章目录 前言**主要功能**一、前期准备本教程环境为:Centos7,可以跑Docker的系统都可以使用本教程安装。本教程使用Docker部署服务,如何安装Docker详见: 二、Docker部署Uptime Kuma三、实现公网查看网站监控四、使用固定公网地址…...
JS 历史简介
目录 1. JS 历史简介 2. JS 技术特征 1. JS 历史简介 举例:在提交用户的注册信息的时候,为避免注册出现错误后重新填写信息,可以在写完一栏信息后进行校验,并提示是否出现错误,这样会大大提高用户提交的成功率&…...
爬虫逆向学习(七):补环境动态生成某数四代后缀MmEwMD
声明:本篇文章内容是整理并分享在学习网上各位大佬的优秀知识后的实战与踩坑记录 前言 这篇文章主要是研究如何动态生成后缀参数MmEwMD的,它是在文章爬虫逆向学习(六):补环境过某数四代的基础上进行研究的,代码也是在它基础上增…...
光伏电站并网验收需要注意什么细节
一、设备质量及安装验收 光伏组件:检查光伏组件的外观是否完好无损,无明显的缺陷和破损,表面是否清洁无污染。同时,需要验证光伏组件的型号、参数是否与设备台账资料一致。 逆变器:确认逆变器具备防雷、防尘、防潮等…...
页面禁用鼠标右键属于反爬虫措施吗 ?
是的,禁用鼠标右键通常被视为一种反爬虫(anti-scraping)措施。网站开发者常常采用这种技术来防止用户通过右键菜单复制文本、图像或其他内容,特别是在内容保护和数据安全方面。以下是禁用鼠标右键的一些背景和目的: 1…...
视频理解大模型最新进展
文章目录 Video-LLaMAVision-Language BranchAudio-Language Branch Video-ChatGPTMiniGPT4-videoCogVLM2-Video(1)Pre-training(2)Post-training Qwen2-VLMA-LMMChat-UniVi大模型对比 Video-LLaMA 2023:阿里达摩院的…...
cocos creator 使用 protobuf 的步骤与注意事项
移除可能曾安装过的protobuf // 移除全局 npm remove -g protobufjs npm remove -g protobufjs-cli npm remove -g pbjs // 移除项目中的 npm remove --save protobufjs npm remove --save protobufjs-cli npm remove --save pbjs全局安装 npm i -g protobufjs //或者 cnpm …...
mac访达查找文件目录
mac访达查找文件目录 在Mac上使用访达(Finder)查找文件或目录的方法如下: 打开访达。 在访达窗口的侧边栏中,选择“ Go to Folder”(转到文件夹)选项,或者使用快捷键ShiftCommandG打开一个对…...
【数据结构】点分治 点分树
求树上长度小于等于k的路径 #include <iostream> #include <cstring> #include <algorithm>using namespace std;const int N 10010, M N * 2;int n, m; int h[N], e[M], w[M], ne[M], idx; //邻接表 bool st[N]; //记录每个点是否被删掉 int p[N]; //存储…...
K8s Calico替换为Cilium,以及安装Cilium过程(鲁莽版)
迁移CNI插件的3种办法: 1、创建一个新的集群,通过Gitops的方式迁移负载,然而,这可能涉及大量的准备工作和潜在的中断。 2、另一种方法是重新配置/etc/cni/net.d/指向Cilium。但是,现有的pod仍将由旧的…...
背景图鼠标放上去切换图片过渡效果
文章目录 css鼠标放上去之前效果鼠标放上去时效果 css <li class"message"></li>.message {width: 22px;height: 22px;background-image: url(/assets/message-01.png);background-size: cover;background-position: center;transition: background-ima…...
【Linux】当前进展
驱动层日志添加了下文件目录,函数,代码行的打印(这里要小心,驱动目录源代码打印日志里边添进程号可能有问题,因为在驱动初始化的时候,内核还没有创建进程,不过猜测可以先不打印进程相关信息&…...
阿里云云效多个ssh密钥对配置
实现功能 windows本地多个ssh密钥对,分别对应不同的阿里云账号的云效 实现办法 1.生成ssh密钥对 ssh-keygen -t rsa -f C:\xxx\id_rsa_customname(我这里C:\Users\admin\.ssh\id_rsa_customname) 2.配置.ssh目录的config文件 # ruiyi Host customnameHostName codeup.al…...
前后端跨域问题及其在ThinkPHP中的解决方案
在现代Web开发中,前后端分离的架构越来越普遍,但这也带来了跨域问题。跨域指的是在一个域下的网页试图请求另一个域的资源,浏览器出于安全考虑会限制这种行为。本文将探讨如何在ThinkPHP中解决跨域问题。 #### 1. 什么是跨域? 跨…...
基于CentOS7上安装MicroK8s(最小生产的 Kubernetes)
简介 MicroK8s是一个轻量级的Kubernetes发行版,其内存和存储要求远低于全尺寸Kubernetes集群。它可以在几分钟内通过一条命令快速创建功能齐全的Kubernetes集群,极大地简化了部署过程。 兼容性:MicroK8s与Kubernetes全面兼容,确保用户可以无缝迁移和扩展他们的应用程序。 …...
从《GTA5》的反外挂斗争看网络安全的重要性
摘要: 在网络游戏的世界里,外挂(作弊软件)一直是破坏游戏公平性和玩家体验的一大难题。作为一款深受全球玩家喜爱的游戏,《GTA5》(Grand Theft Auto V)在线模式也不例外地遭遇了外挂问题。本文将…...
python如何将字符转换为数字
python中的字符数字之间的转换函数 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 complex(real [,imag ]) 创建一个复数 str(x ) 将对象 x 转换为字…...
TikTok流量不佳:是网络环境选择不当还是其他原因?
TikTok,作为全球短视频社交平台的佼佼者,每天都有海量的内容被上传和分享。然而,很多用户和内容创作者发现,他们的TikTok视频流量并不理想。这引发了一个问题:TikTok流量不佳,是因为网络环境选择不当&#…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
