C语言问题,输出结果总是负数,求教

C语言问题,输出结果总是负数,求教,第1张

你定义的类型不一致,前边定义是双精度double的实数,后边输出用的是%f单精度的浮点型,这两个数精度差太多,在C++里double输出用的是%lf,你看看这里是不是,要么把前边类型改成float,要么后边输出改成%lf

/

c语言复数运算

/

#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语言中的负数怎么 *** 作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10209163.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存