求解二次方程
描述
编写一个程序,实现求解形如ax^2 + bx + c = 0的二次方程的根。要求使用三个函数分别计算b^2 - 4ac大于0、等于0和小于0时的根,并在主函数中输出结果。
输入
输入三个浮点数a、b和c,分别表示二次方程的系数。
输出
输出二次方程的根,格式为两个浮点数,用空格隔开。
输入样例 1
5 -4 -1
输出样例 1
x1=1.000 x2=-0.200
#include <iostream>
#include <cmath> //需要用到sqrt函数
#include <iomanip> //需要用到保留几位小数当中
#include <utility> //需要用到pair
using namespace std;pair<float, float> dayu(float a, float b, float c)
{float t = sqrt(b * b - 4 * a * c);float x1, x2;x1 = (-b + t) / (2 * a);x2 = (-b - t) / (2 * a);pair<float, float>result;result = make_pair(x1, x2);return result; //此处需要返回两个值
}float dengyu(float a, float b, float c)
{float x1, x2;x1 = x2 = (-b) / (2 * a);return x1;
}float xiaoyu(float, float, float)
{return 0;
}int main()
{float a, b, c;cin >> a >> b >> c;float t = b * b - 4 * a * c;float x1, x2;if (t > 0){pair<float, float> result = dayu(a, b, c);cout << fixed << setprecision(3) << "x1=" << result.first;cout << " ";cout << fixed << setprecision(3) << "x2=" << result.second;}else if (t == 0){x1 = x2 = dengyu(a, b, c);cout << fixed << setprecision(3) << "x1=" << x1 << " x2=" << x2;}else{xiaoyu(a, b, c);cout << "此方程无解!";}return 0;
}
问题点:
目录
①:函数模版
②:函数的重载
③:pair的用法
1)C++中的pair是一个模板类,用于存储两个不同类型的值。它将两个值组合在一起,可以用来表示一个键值对或者简单的有序组。
2)pair 实际上可以看作一个内部有两个元素的结构体,且这两个元素的类型是可以指定的,如下:
3)pair 中只有两个元素,分别是 first 和 second ,只需要按正常结构体的方式去访问即可。
④:“std::”是什么?
①:函数模版
所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,这个通用函数就称为函数模板。
凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现不同函数的功能。
#include <iostream>
using namespace std;
template <typename T> //模板声明,其中的T为类型参数
T max(T a,T b,T c)
{
if(b>a) a=b;
if(c>a) a=c;
return 0;
}
int main( )
{
int i1=1,i2=3,i3=3,i;
double d1=1.1,d2=2.2,d3=3.3,d;
long g1=24324,g2=876775,g3=5465646,g;
i=max(i1,i2,i3); //调用模板函数,此时T被int取代
d=max(d1,d2,d3); //调用模板函数,此时T被double取代
g=max(g1,g2,g3); //调用模板函数,此时T被long取代
cout<<i<<" "<<d<<" "<<g<<endl;
return 0;
}
定义函数模板的一般形式为:
template <typename T>
通用函数定义
//或
template <class T>
通用函数定义
template的含义是“模板”,尖括号中先写关键字typename(或class),后面跟一个类型参数T,这个参数实际上是一个虚拟的类型名,表示模板中出现的T是一个类型名,但是现在并未指定它是哪一种具体的类型。
类型参数可以不止一个,可以根据需要确定个数,如:
template <class T1 , typename T2>
用函数模板比函数重载更方便,程序更简洁。但应注意它只适用于函数体相同,函数的参数个数相同而数据类型不同的情况。如果参数个数不同,则不能用函数模板。
②:函数的重载
C++中允许用同一函数名定义多个函数,而这些函数的参数个数和参数类型可以不相同。这就是函数的重载,即对一个函数名重新赋予它新的含义,使一个函数名可以多用。所谓重载,其实就是“一物多用”。 函数可以重载,运算符也可以重载,例如:运算符“<<”和“>>”既可以作为位移运算符,又可以作为输出流中的插入运算符和输入流中的提取运算符。
重载函数的参数个数、参数类型或参数顺序三者必须至少有一种不同,函数返回值类型可以相同也可以不同。
在使用重载函数时,同名函数的功能应当相同或相近,不要用同一函数名去实现完全不相干的功能,虽然程序也能运行,但可读性不好,易使人莫名其妙。
③:pair的用法
1)C++中的pair是一个模板类,用于存储两个不同类型的值。它将两个值组合在一起,可以用来表示一个键值对或者简单的有序组。
要使用 pair,应先添加头文件 #include <utility>,并在头文件下面加上 " using namespace std; " ,然后就可以使用了。
注意:由于 map 的内部实现中涉及 pair,因此添加 map 头文件时会自动添加 utility 头文件,此时如果需要使用 pair ,就不需要额外再去添加 utility 头文件了。
2)pair 实际上可以看作一个内部有两个元素的结构体,且这两个元素的类型是可以指定的,如下:
struct pair
{
typeName1 first;
typeName2 second;
};
// pair 有两个参数,分别对应 first 和 second 的数据类型,它们可以是任意基本数据类型或容器。
pair<typeName1, typeName2> name;
// 想要定义参数为 string 和 int 类型的 pair,如下:
pair<string, int> p;
//如果想在定义 pair 时进行初始化,只需要跟上一个小括号,里面填写两个想要初始化的元素即可;
pair<string, int> p("haha",5);
//如果想要在代码中临时构建一个 pair,有如下两种方法:
// (1) 将类型定义写在前面,后面用小括号内两个元素的方式。
pair<string, int>("haha", 5);
// (2) 使用自带的 make_pair 函数。
make_pair("haha", 5)
3)pair 中只有两个元素,分别是 first 和 second ,只需要按正常结构体的方式去访问即可。
#include <iostream>
#include <utility>
#include <string>
using namespace std;int main()
{pair<string, int> p;p.first = "haha";p.second = 5;cout << p.first << " " << p.second << endl;p = make_pair("xixi", 55);cout << p.first << " " << p.second << endl;p = pair<string, int>("heihei", 555);cout << p.first << " " << p.second << endl;return 0;
}
此部分选自C++中pair使用详细说明_c++ pair_想去的远方的博客-CSDN博客
④:“std::”是什么?
std是一个类(输入输出标准),它包括了cin成员和cout成员,声明了“using namespace std;”以后才能使用它的成员。
如果不先声明“using namespace std;”,就需要在cin和cout前面加“std::”,如"std::cin"和"std::cout"。
std是命名空间,你所用到的很多函数或者类都是被放到命名空间里面的,命名空间是防止名字重复而使用的。当你自己定义一个string并把它放到命名空间AAA中的时候,你使用string只要指定是哪个命名空间的,就不会导致编译器分不清是哪个string了。你使用时会用std::string或者AAA::string,前者告诉编译器我用的string是在命名空间std里面的,后者告诉编译器用的string是在命名空间AAA里面的。
"using namespace std;"这样告诉编译器,我没有指定命名空间的,就默认使用std这个命名空间,那么你使用string就不用再加std::作用域了,只需要直接写string就可以了。
此部分选自【C++】C++中“std::“是什么意思?起什么作用?_一拳Marx的博客-CSDN博客
相关文章:
求解二次方程
描述 编写一个程序,实现求解形如ax^2 bx c 0的二次方程的根。要求使用三个函数分别计算b^2 - 4ac大于0、等于0和小于0时的根,并在主函数中输出结果。 输入 输入三个浮点数a、b和c,分别表示二次方程的系数。 输出 输出二次方程的根&am…...
【hive 运维】hive注释/数据支持中文
文章目录 一. 设置mysql中的hive库二. hive-site.xml 设置三. 测试 hive支持中文需要关注两个方面: 设置hive 元数据库中的一些表设置hive-site.xml. 一. 设置mysql中的hive库 use hivedb; alter table TBLS modify column TBL_NAME varchar(1000) character se…...
架构,性能和游戏 《游戏编程模式》学习笔记
开新坑,准备把《游戏编程模式》这本书啃完。这是一本讲设计模式的书,针对游戏开发而作,写得很好。 以下是读书笔记,文末有原文链接 每个程序都有一定的软件架构,哪怕是全塞到main里也是一种架构好的架构可以把代码写成…...
Spring Bean的生命周期
文章目录 Spring Bean的生命周期加载Bean对象创建Bean对象构造对象填充属性初始化实例注册销毁 销毁 Spring Bean的生命周期 Spring Bean的生命周期就是指Bean对象从创建到销毁的过程,大体可以分为:实例化、属性赋值、初始化、使用、销毁。 加载Bean对象…...
基于量子同态的安全多方量子求和加密
摘要安全多方计算在经典密码学中一直扮演着重要的角色。量子同态加密(QHE)可以在不解密的情况下对加密数据进行计算。目前,大多数协议使用半诚实的第三方(TP)来保护参与者的秘密。我们使用量子同态加密方案代替TP来保护各方的隐私。在量子同态加密的基础上ÿ…...
前端自动化测试:确保质量和稳定性的关键步骤
文章目录 测试金字塔与前端测试层级1. 单元测试(Unit Testing)2. 组件测试(Component Testing)3. 集成测试(Integration Testing)4. 端到端测试(End-to-End Testing) 单元测试、集成…...
《Ansible自动化工具篇:Centos操作系统基于ansible工具一键远程离线部署之K8S1.24.12二进制版集群》
一、部署背景 由于业务系统的特殊性,我们需要针对不同的客户环境部署二进制版K8S集群,由于大都数用户都是专网环境,无法使用外网,为了更便捷,高效的部署,针对业务系统的特性,我这边编写了 基于a…...
Java实现十大经典排序算法之快速排序
0 算法简介 快速排序是一种高效率排序算法,它是对冒泡排序的一种改进,它也是一种不稳定排序算法。快速排序的核心是比较、交换和递归。 在待排序数组中指定一个基准元素pivot(一般选取数组首元素),使得数组排序之后基…...
【0803作业】创建两个线程:其中一个线程拷贝图片的前半部分,另一个线程拷贝后半部分(4种方法)
方法一:使用pthread_create、pthread_exit、pthread_join函数【两个线程不共用同一份资源】 先在主函数创建并清空拷贝的目标文件,再创建两个线程,在两个线程内部同时打开要读取的文件以及要拷贝的目标文件(两个线程不共用同一份资…...
php运算符的短路特性
php运算符的短路特性 1、逻辑运算符:逻辑与(&&)和逻辑或(||),存在着短路特性 PHP中有以下两个运算符具有短路的特性,他们是逻辑运算符的逻辑与(&&)和逻辑或(||&am…...
C语言假期作业 DAY 13
一、选择题 1、如果 x2014 ,下面函数的返回值是( ) int fun(unsigned int x) { int n 0; while(x 1) { n; x x | (x 1); } return n; } A: 20 B: 21 C: 23 D 25 答案解析 正确答案:C 这个作用是对整型中0的个数进行统计&…...
以产品经理的角度去讲解原型图---会议OA项目
目录 一.前言 二.原型图 2.1 原型图是什么 3.1 原型图的作用 三.演示讲解 3.1 项目背景 3.2 项目介绍 3.2.1 会议管理(会议的发起,通知) 3.2.2 投票管理(会议的流程重大决策记录) 3.2.3 会议室管理 3.2.4 系统管…...
C++ 外部变量和外部函数
1.外部变量 如果一个变量除了在定义它的源文件中可以使用外,还能被其他文件使用,那么就称这个变量为外部变量。命名空间作用域中定义的变量,默认情况下都是外部变量,但在其他文件中如果需要使用这一变量,需要用extern…...
C# Onnx Paddle模型 OCR识别服务
效果 项目 可运行程序exe下载 Demo(完整源码)下载...
MCUXpresso for VS Code -- 基于VSCode开发RT1176
MCUXpresso for VS Code 是nxp推出插件,旗下MCX LPC, Kinetis和i.MX rt等MCU,都能在VS Code平台进行嵌入式开发。功能框图如下: 前期准备: 软件环境: windows(实际可以跨系统,linux和mac没有测试) VS Code ninja CMa…...
MySQL的使用——【初识MySQL】第二节
MySQL的使用——【初识MySQL】第二节 文章目录 MySQL环境变量的配置(如使用Navicat可忽略)使用命令行连接MySQL(如使用Navicat可忽略)步骤注意 NavicatNavicat的下载Navicat的使用连接MySQL新建表 总结总结 MySQL环境变量的配置&a…...
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字
一、💛并发基本概念 并发的基本意思: 什么是并发呢?简单的理解就是同一时间执行 服务器同一时刻,给多个客户端提供服务~~,这两个客户端都可以给服务器提交事务。 如果提交两个事务,改…...
⌈C++⌋从无到有了解并掌握C++面向对象三大特性——封装、继承、多态
前置知识:类和对象 参考书籍:《C Primer 第五版》 目录 什么是面向过程?什么是面向对象? 一、封装 1、封装的含义以及如何实现封装 1.1 访问限定符(访问说明符) 1.2 什么是封装? 2、封装的优点…...
Element的el-select下拉框多选添加全选功能
先看效果图 全选: 没有选中时: 选中部分: 作者项目使用的是vue3写法,如果是vue2的自己转换一下 html代码: js代码: 拓展 另一种方法,如果不想使用勾选框,可以试试下面的方…...
python调用pytorch的clip模型时报错
使用python调用pytorch中的clip模型时报错:AttributeError: partially initialized module ‘clip’ has no attribute ‘load’ (most likely due to a circular import) 目录 现象解决方案一、查看项目中是否有为clip名的文件二、查看clip是否安装成功 现象 clip…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
