鱼C论坛

 找回密码
 立即注册
查看: 765|回复: 5

[已解决]一元二次方程运行结果的问题

[复制链接]
发表于 2020-8-1 18:46:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. #include <math.h>

  3. int main()
  4. {
  5.         double a,b,c,disc,p,q,x1,x2;
  6.         scanf("a=%lf b=%lf c=%lf",&a,&b,&c);
  7.         disc=b*b-4*a*c;
  8.         p=(-b)/(2.0*a);
  9.         q=sqrt(disc)/(2.0*a);
  10.         x1=p+q;
  11.         x2=p-q;
  12.         printf("x1=%f\nx2=%f",x1,x2);
  13. }
复制代码

这个代码不知道哪错了,得出来的X1,X2结果一样
最佳答案
2020-8-2 08:06:37
baige 发表于 2020-8-2 08:04
a=1 b=6 c=1这样输入scanf()是格式化输入,输入格式跟scanf()里面的内容要一致


批注 2020-08-02 080413.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-2 08:04:37 | 显示全部楼层
本帖最后由 baige 于 2020-8-2 08:05 编辑

a=1 b=6 c=1这样输入scanf()是格式化输入,输入格式跟scanf()里面的内容要一致
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-2 08:06:37 | 显示全部楼层    本楼为最佳答案   
baige 发表于 2020-8-2 08:04
a=1 b=6 c=1这样输入scanf()是格式化输入,输入格式跟scanf()里面的内容要一致


批注 2020-08-02 080413.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 12:48:46 | 显示全部楼层
本帖最后由 风过无痕1989 于 2020-8-4 12:56 编辑
  1. #include <stdio.h>
  2. #include <math.h>

  3. int main()
  4. {
  5.         double a,b,c,disc,p,q,x1,x2;
  6.         scanf("%lf,%lf,%lf",&a,&b,&c);
  7.         disc=b*b-4*a*c;
  8.         if (disc >= 0)
  9.         {
  10.              p=(-b)/(2.0*a);
  11.              q=sqrt(disc)/(2.0*a);
  12.              x1=p+q;
  13.              x2=p-q;
  14.              printf("x1=%f\nx2=%f\n",x1,x2);
  15.         }
  16.         else
  17.         {
  18.              printf("此方程无实数解\n");
  19.         }
  20.         return 0;
  21. }
复制代码



       键盘输入 scanf() 函数是严格按照你在引号内的格式从缓冲区读取字符。一般情况下引号之间只写格式化要求,格式化内容要和输入内容一致,数与数、字符与字符之间可以用空格隔开,也可以用逗号隔开,否则就会出错。除了格式化操作符以外,不加任何其他字符,连空格都不要加。

scan在你输入一个数后,它是不会立即显示的,要等再接收到一个非(空格、制表符、回车)的输入语scanf句才结束。而且,最后输入的那个非(空格、制表符、回车)的东西是不会被这个scanf读进来的,而是留在输入流里。

       scanf("%d,%d,%d",&a,&b,&c),在每个数字之间需要输入逗号,否则后面的变量就无法正常赋值。假如你先输入18,然后输入逗号以外的其他非数字字符, scanf()会认为第一个int型变量输入完成,将18赋值给变量a;然后就会一直等待你输入逗号,但是你迟迟没有输入,超时之后程序没有正常给变量bc赋值,你的程序运行结果肯定和你的预期不一样。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-8-5 16:38:24 | 显示全部楼层
你输入的数正好使得:b * b - 4 * a * c = 0 了,===> 使得 q = 0 ,这样的方程的两个根当然就相同了。

相信自己,你写的程序没有问题,过来给个 ” 最佳答案“吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-5 20:33:52 | 显示全部楼层

谢谢了,已经解决,是我输入数据格式的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 06:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表