这个问题在于,当判别式-1E-6(相当于判别式小于0),求共轭复数根时,你的x1和x2事先都是double类型(双精度浮点实数型),这个类型不能存储虚数。再加上rparti没有定义(因为系统会把rparti作为一个完整的标识符看待,所以你不能那样写)
目前成都创新互联公司已为上1000家的企业提供了网站建设、域名、雅安服务器托管、网站改版维护、企业网站设计、钟楼网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
我的建议,在求共轭复根时,x1和x2就不要再表示两个根了,分别用来代表实数部分和去掉虚数单位的虚数部分就行,然后用“字符串组合"的方式输出。在这种情况下,不要直接只写一条输出语句在最后(倒数第2行),而是在每个判别式的分支都写一次printf语句比较好。
具体说,就是在前面的if分支和else if分支都写上输出(倒数第二行的输出去掉),后面else分支写成
x1=-b/(2*a); x2=sqrt(-disc)/(2*a);
这里的x1和x2代表实数部分和虚数部分。
然后写如下的输出语句:
printf("x1=%lf+%lfi, x2=%lf-%lfi", x1,fabs(x2),x1,fabs(x2));
注意,虚数部分x2的符号要去掉(所以用了fabs函数),而是在字符串中写上+和-号,以形成共轭复数的形式
另外,这个程序当中a==0的情况你没有求解,而是显示了一行错误信息,所以,你的printf更不能放在倒数第二行了(这已经是所有分支的外面了),原因是a==0的时候x1和x2从未赋值
设计思路如下:
1、问题描述:
给定一个二元一次方程组,形如:
a * x + b * y = c;
d * x + e * y = f;
x,y代表未知数,a, b, c, d, e, f为参数。
求解x,y。
2、数据规模和约定:
0 = a, b, c, d, e, f = 2147483647。
3、设计思路:
二元一次方程组是由两个含有两个未知数的方程组成的,要求解,就要把二元转化为一元。由二元一次方程组的解法思想知,要把二元转化为一元.
实现的功能代码如下:
扩展资料:
C语言解求二元一次方程:(顺序消元法)
“消元”是解二元一次方程的基本思路。所谓“消元”就是减少未知数的个数,使多元方程最终转化为一元方程再解出未知数。这种将方程组中的未知数个数由多化少,逐一解决的想法,叫做消元思想。
实现代码如下:
因为在求解过程中只有数之间的运算,而没有整个式子的运算,因此这种方法被广泛地用于计算机中。
//问题有点多,不方便指出,更改如下,对应着看吧,调试过的,没问题;
#includestdio.h
#includemath.h //使用开方函数要引入这个头文件
void main()
{
float a,b,c,d,e,x1,x2,x;
//输入最好一个一个输入,一下子输入容易出毛病
printf("请输入a:\n");
scanf("%f",a);
printf("请输入b:\n");
scanf("%f",b);
printf("请输入c:\n");
scanf("%f",c);
d=b*b-4*a*c;
if (d0)
{
e=(float)sqrt(d);//使用开放函数得到的是double类型,比float级别高,要强转为float
x1=(-b+e)/(2*a);
x2=(-b-e)/(2*a);
printf("x1=%.2f,x2=%.2f",x1,x2);//输出保留两位小数
}
else if (d==0)
{
x=-b/(2*a);
printf("x=%.2f",x);
}
else
printf("无解");
printf("\n");
}