南京建站方案,重庆网站公司设计方案,定西seo排名,营销策划精准营销描述
编写一个程序#xff0c;实现求解形如ax^2 bx c 0的二次方程的根。要求使用三个函数分别计算b^2 - 4ac大于0、等于0和小于0时的根#xff0c;并在主函数中输出结果。
输入
输入三个浮点数a、b和c#xff0c;分别表示二次方程的系数。
输出
输出二次方程的根实现求解形如ax^2 bx c 0的二次方程的根。要求使用三个函数分别计算b^2 - 4ac大于0、等于0和小于0时的根并在主函数中输出结果。
输入
输入三个浮点数a、b和c分别表示二次方程的系数。
输出
输出二次方程的根格式为两个浮点数用空格隔开。
输入样例 1
5 -4 -1
输出样例 1
x11.000 x2-0.200
#include iostream
#include cmath //需要用到sqrt函数
#include iomanip //需要用到保留几位小数当中
#include utility //需要用到pair
using namespace std;pairfloat, 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);pairfloat, floatresult;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){pairfloat, 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的用法
1C中的pair是一个模板类用于存储两个不同类型的值。它将两个值组合在一起可以用来表示一个键值对或者简单的有序组。
2pair 实际上可以看作一个内部有两个元素的结构体且这两个元素的类型是可以指定的如下
3pair 中只有两个元素分别是 first 和 second 只需要按正常结构体的方式去访问即可。
④“std::”是什么 ①函数模版
所谓函数模板实际上是建立一个通用函数其函数类型和形参类型不具体指定用一个虚拟的类型来代表这个通用函数就称为函数模板。
凡是函数体相同的函数都可以用这个模板来代替不必定义多个函数只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型从而实现不同函数的功能。 #include iostream using namespace std; template typename T //模板声明其中的T为类型参数 T max(T a,T b,T c) { if(ba) ab; if(ca) ac; return 0; } int main( ) { int i11,i23,i33,i; double d11.1,d22.2,d33.3,d; long g124324,g2876775,g35465646,g; imax(i1,i2,i3); //调用模板函数此时T被int取代 dmax(d1,d2,d3); //调用模板函数此时T被double取代 gmax(g1,g2,g3); //调用模板函数此时T被long取代 couti d gendl; return 0; } 定义函数模板的一般形式为 template typename T 通用函数定义 //或 template class T 通用函数定义 template的含义是“模板”尖括号中先写关键字typename或class后面跟一个类型参数T这个参数实际上是一个虚拟的类型名表示模板中出现的T是一个类型名但是现在并未指定它是哪一种具体的类型。
类型参数可以不止一个可以根据需要确定个数如 template class T1 , typename T2 用函数模板比函数重载更方便程序更简洁。但应注意它只适用于函数体相同函数的参数个数相同而数据类型不同的情况。如果参数个数不同则不能用函数模板。 ②函数的重载
C中允许用同一函数名定义多个函数而这些函数的参数个数和参数类型可以不相同。这就是函数的重载即对一个函数名重新赋予它新的含义使一个函数名可以多用。所谓重载其实就是“一物多用”。 函数可以重载运算符也可以重载例如运算符“”和“”既可以作为位移运算符又可以作为输出流中的插入运算符和输入流中的提取运算符。
重载函数的参数个数、参数类型或参数顺序三者必须至少有一种不同函数返回值类型可以相同也可以不同。
在使用重载函数时同名函数的功能应当相同或相近不要用同一函数名去实现完全不相干的功能虽然程序也能运行但可读性不好易使人莫名其妙。 ③pair的用法
1C中的pair是一个模板类用于存储两个不同类型的值。它将两个值组合在一起可以用来表示一个键值对或者简单的有序组。 要使用 pair应先添加头文件 #include utility并在头文件下面加上 using namespace std; 然后就可以使用了。 注意由于 map 的内部实现中涉及 pair因此添加 map 头文件时会自动添加 utility 头文件此时如果需要使用 pair 就不需要额外再去添加 utility 头文件了。 2pair 实际上可以看作一个内部有两个元素的结构体且这两个元素的类型是可以指定的如下 struct pair { typeName1 first; typeName2 second; }; // pair 有两个参数分别对应 first 和 second 的数据类型它们可以是任意基本数据类型或容器。 pairtypeName1, typeName2 name; // 想要定义参数为 string 和 int 类型的 pair如下 pairstring, int p; //如果想在定义 pair 时进行初始化只需要跟上一个小括号里面填写两个想要初始化的元素即可 pairstring, int p(haha,5); //如果想要在代码中临时构建一个 pair有如下两种方法 // (1) 将类型定义写在前面后面用小括号内两个元素的方式。 pairstring, int(haha, 5); // (2) 使用自带的 make_pair 函数。 make_pair(haha, 5) 3pair 中只有两个元素分别是 first 和 second 只需要按正常结构体的方式去访问即可。
#include iostream
#include utility
#include string
using namespace std;int main()
{pairstring, 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 pairstring, 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博客