你定义的类型不一致,前边定义是双精度double的实数,后边输出用的是%f单精度的浮点型,这两个数精度差太多,在C++里double输出用的是%lf,你看看这里是不是,要么把前边类型改成float,要么后边输出改成%lf
/
/
#include<stdioh>
#include<stdlibh>
typedef struct
{
double r,i; //r为实部,i为虚部
}complex;
complex add(complex a,complex b); //复数a + 复数b
complex minus(complex a,complex b); //复数a - 复数b
complex multiply(complex a,complex b); //复数a 复数b
void printComplex(complex a); //输出
complex add(complex a,complex b) {
complex add;
add->r =a->r+b->r;
add->i =a->i+b->i;
return add;
}
complex minus(complex a,complex b)
{
complex minus;
minus->r =a->r-b->r;
minus->i =a->i-b->i;
return minus;
}
complex multiply(complex a,complex b)
{
complex multiply;
multiply->r = a->rb->r-a->ib->i;
multiply->i = a->ib->r+a->rb->i;
return multiply;
}
void printComplex(complex a) //输出要注意虚部有负数的情况
{
if(a->r!=0)
printf("%2lf",a->r); //不要断行,先输出实部
else
printf("000");
if(a->i>0) //大于0,正常输出+虚部
printf(" + %2lfi\n",a->i);
else if(a->i<0) //虚部是负数,不用输出+号了,直接输出负数
printf(" %2lfi\n",a->i);
else
printf(" + 000i\n");//虚部为0
}
帮你改了下,再去试试吧。一时之间我也想不出还有什么漏洞了。祝好运。如果是自己写主函数的话,改一改那个输入吧,输入很容易会造成问题的
这一句: scanf("%f %c ",,c),一个不好输入就会出错,c可能会获取到空白。
负数和正数一样参与加减乘除运算,不同之处显示时前面多一个负号,
用sprint函数将其转化为字符串,即可进行显示
对于整数,还有一种方法,先判断是是否大于等于0,如果小于0,则取反,可以和正数一样分离个
十
百
千
万,然后显示,前面加一负号即可
可能的原因太多,可以肯定程序输出不在你的预想,代码有错。错误代码输出的结果没有参考性。先检查代码。
比如:
一、运算式子有没错。
二、调用了未赋值且未初始化的变量。
三、数组访问越界。
等等。
程序会输出负数的原因是,在这个程序中你没有对每次运算的结果进行检查,因此当乘积超出了long类型的最大值时,就会产生溢出,导致结果为负数。
为了避免这个问题,你可以在每次运算后检查结果是否已经超出了long类型的范围,并在必要时退出循环。可以这样改:
#include<stdioh>
main()
{
long i;
i=chengji();
printf("%ld", i);
}
long chengji () {
long a, b=1;
for (a=1; a<=100; a+=2)
{
if (b > LONG_MAX/a) break;
b = a;
}
return b;
}
以上就是关于C语言问题,输出结果总是负数,求教全部的内容,包括:C语言问题,输出结果总是负数,求教、c语言负数运算、单片机C语言中的负数怎么 *** 作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)