我写了一个小的c代码来查找数字的sqrt。我希望程序甚至可以找到负数的sqrt。我遇到了complex.h和几个函数来执行复杂的算术。我已经使用了它们,并且在编译时我收到了一些警告信息。代码没有正确计算正数和负数的平方根。
1)printf和scanf用于打印和记录复数的正确格式说明符是什么? 请让我知道我哪里出错了。我正在使用gcc编译器,操作系统是Ubuntu 12.04 LTS。我已经附加了代码和输出。
#include <stdio.h>
#include <math.h>
#include <complex.h>
int main()
{
float complex var,op;
printf(" Enter the number : " );
scanf("%lf",&var);
op=csqrt(var);
printf("%lf \n",op);
}
o/p Enter the number : 4
0.011604
Another o/p Enter the number : -4
-0.011604
答案 0 :(得分:2)
来自C99:
6.2.5 / 13类型
每种复杂类型具有相同的表示和对齐方式 要求作为一个数组类型,恰好包含两个元素 相应的实际类型;第一个元素等于实部, 和复数的虚部的第二个元素。
作为一种可能性,您可以使用:
scanf("%f %f",&var[0], &var[1]);
以float complex
类型读取,用空格分隔实部和虚部。
答案 1 :(得分:1)
要查找负数的平方根,可以使用以下代码
printf(" Enter the number : " );
scanf("%lf",&var);
if(var < 0)
{
op=csqrt(-var);
printf("The square root is %lfi \n",op);
}
else
{
op=csqrt(var);
printf("The square root is %lf \n",op);
}
答案 2 :(得分:1)
printf
和scanf
没有复杂数字的原生支持,但这没关系;你可以很容易地写出格式:
scanf( "%f %fi", &re, &im );
现在re
和im
包含实部和虚部(虽然它不会在+
或-
之后接受空格,所以3 + 2i
会被拒绝,但3 +2i
和3+2i
没问题。
印刷也是如此;
printf( "%f%+fi", re, im );
将以3+2i
形式打印变量。
最后,虽然它似乎不是你问题的直接部分,但负数的平方根只是正值的平方根乘以i
。