69,368
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <math.h>
int main()
{
double a, b, c;
scanf("%lf%lf%lf", &a, &b, &c);
if(!a && !b)
{
printf(c?"Not An Equation":"Zero Equation");
return 0;
}
if(!a)
{
printf("%.2f", -c/b);
return 0;
}
double delta = b*b - 4*a*c;
if(delta == 0)
{
printf("%.2f", -b/2/a);
}
else if(delta > 0)
{
printf("%.2f\n%.2f", (-b+pow(delta, 0.5))/2/a, (-b-pow(delta, 0.5))/2/a);
}
else
{
if(b == 0)
printf("%.2f+%.2fi\n%.2f-%.2fi", 0.00, pow(-delta, 0.5)/2/fabs(a), 0.00, pow(-delta, 0.5)/2/fabs(a));
else
printf("%.2f+%.2fi\n%.2f-%.2fi", -b/2/a, pow(-delta, 0.5)/2/fabs(a), -b/2/a, pow(-delta, 0.5)/2/fabs(a));
}
return 0;
}
if(b == 0)
printf("%.2f", 0.00)
else
printf("%.2f", -b/2/a)
和
printf("%.2f", -b/2/a)
这两段代码在什么情况下会不一样?
其中a,b都是double#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
int i, n;
char s[sizeof(double)];
double a = -1.0;
double b = +1.0;
n = sizeof(s);
while (a != 0.0) {
a = a / 2.0;
}
printf("a=%.2g\n", a);
memcpy(s, &a, sizeof(s));
for (i = 0; i < n; i++) {
printf("%02x ", (unsigned char)s[i]);
}
printf("\n");
while (b != 0.0) {
b = b / 2.0;
}
printf("b=%.2g\n", b);
memcpy(s, &b, sizeof(s));
for (i = 0; i < n; i++) {
printf("%02x ", (unsigned char)s[i]);
}
printf("\n");
return 0;
}
/* 输出:
a=0
00 00 00 00 00 00 00 80
b=0
00 00 00 00 00 00 00 00
*/
#include <stdio.h>
#include <string.h>
int
main(int argc, char *argv[])
{
int i, n;
char s[sizeof(double)];
double a = -1.0;
double b = +1.0;
n = sizeof(s);
while (a != 0.0) {
a = a / 2.0;
}
printf("a=%.2f\n", a);
memcpy(s, &a, sizeof(s));
for (i = 0; i < n; i++) {
printf("%02x ", (unsigned char)s[i]);
}
printf("\n");
while (b != 0.0) {
b = b / 2.0;
}
printf("b=%.2f\n", b);
memcpy(s, &b, sizeof(s));
for (i = 0; i < n; i++) {
printf("%02x ", (unsigned char)s[i]);
}
printf("\n");
return 0;
}
/* 输出:
a=-0.00
00 00 00 00 00 00 00 80
b=0.00
00 00 00 00 00 00 00 00
*/
a=-0.00
00 00 00 00 00 00 00 80
b=0.00
00 00 00 00 00 00 00 00