发新话题
打印

[讨论]C语言问题

[讨论]C语言问题

议题提交:光芒果
信息来源:邪恶八进制信息安全团队(www.eviloctal.com

要求a*x平方+b*x+c=0中的x,我写的程序如下

# include "stdio.h"
void main()
{
int a,b,c,x,n,m,o,p,q,r,s;
scanf("%d,%d,%d",&a,&b,&c);
n=b*b;            /*求b的平方*/
m=a*c;            /*求a与c的乘积*/
o=4*m;            /*求4ac*/
p=n-o;            /*求b的平方-4ac*/
q=sqrt(p);          /*求b的平方-4ac的平方根*/
r=-b+q;            /*求-b与b的平方-4ac的平方根的差*/
s=2*a;            /*求2a的值*/
x=r/s;            /*求出x*/
printf("x=%d\n",x);    /*输出x的值*/
}

我运行后输入2,1,-3
但输出的是2455,正确答案应该是1,不知道是怎么回事,
q=sqrt(p);  似乎应该为q=double sqrt(double p);      
但我这样打TC++3老提示这句出错。
刚开始学C,请大家多多指教。
select girl from Guilin where age='18-20' and bg='beautiful'--

TOP

太复杂的没学到,只求正根。
select girl from Guilin where age='18-20' and bg='beautiful'--

TOP

没能看懂题意,也没能看懂程序的意图。。。 [s:58]  [s:58]  [s:58]

TOP

include <math.h>

TOP

经过老师指导后程序调整为:
# include "stdio.h"
# include "math.h"
void main()
{
int a,b,c,x,n,m;
scanf("%d,%d,%d",&a,&b,&c);
n=b*b-4*a*c;
m=sqrt(n);
x=(-b+m)/(2*a);
printf("x=%d\n",x);
}
但输入2,1,-3的结果为0,还是不为1。
把int改为double,%d全改为%f也是一样。
select girl from Guilin where age='18-20' and bg='beautiful'--

TOP

乍一看就是一元二次方程的根的通用求法
妖怪已经给了你最关键的提示 也就是程序少一个头文件 不然这个平方根函数在哪里定义的?

但是加上了定义include <math.h>以后 问题还是很多的

sqrt函数的定义是
double sqrt(double x);
也就是该函数接受一个双精度值 返回一个双精度值 这是第一个问题

第二个问题是你除法运算的时候 你用的是/ 但是他运算完了 还是int么?
这是第二个问题

而假如a b c取值2 3 4那么到开方之前 p的值是-23 开放后q就等于0
这是第三个问题...

我们可以通过如下程序来检查这些问题:
复制内容到剪贴板
代码:
#include <stdio.h>
#include <math.h>

int main(void)
{
  int a,b,c,n,m,o,p,s;
  double q,r,x;

  scanf("%d,%d,%d",&a,&b,&c);
  n=b*b;         /*求b的平方*/
  printf("n=%d\n",n);
  m=a*c;         /*求a与c的乘积*/
  printf("m=%d\n",m);
  o=4*m;         /*求4ac*/
  printf("o=%d\n",o);
  p=n-o;         /*求b的平方-4ac*/
  printf("p=%d\n",p);
  q=sqrt(p);      /*求b的平方-4ac的平方根*/
  printf("q=%d\n",q);
  r=-b+q;        /*求-b与b的平方-4ac的平方根的差*/
  s=2*a;         /*求2a的值*/
  x=r/s;         /*求出x*/
  printf("x=%d\n",x);  /*输出x的值*/

  return 0;
}
多用printf的目的是为了检查值到什么地方出了问题 提示到这里结束
曾几何时,有人对我说:装B遭雷劈。我说:去你妈的。于是,这个人又对我说:如果再说脏话,上帝会惩罚你的。我说:我操上帝。结论:彪悍的人生不需要上帝。

TOP

不好意思,开始忘记写版权信息,写4楼我已经把程序改为
# include "stdio.h"
# include "math.h"
void main()
{
double a,b,c,x,n,m;
scanf("%f,%f,%f",&a,&b,&c);
n=b*b-4*a*c;
m=sqrt(n);
x=(-b+m)/(2*a);
printf("x=%f\n",x);
}
输入2,1,-3返回的结果是0.还是不明白,老师也没检查出来是什么问题
[s:57]
对于除法用 /  的问题我也不是很清楚,但双精度问题用double应该解决了吧.
我刚学开始C,只上了谭浩强第3版第一章的3个例子,也就是printf一段文字,求两个数的和,输入两个数并比较出最大者.很多都还不懂,请大家多指教啊!
"多用printf的目的是为了检查值到什么地方出了问题"这个提示很实用,多谢了.现在是在网吧,等下回去看下.
select girl from Guilin where age='18-20' and bg='beautiful'--

TOP

对于第3个问题,呵呵,其实整个思路都有问题,并没有判断解的正负和零,也没有判断是否有解,现在需要讨论的是有解且解为正的情况.
select girl from Guilin where age='18-20' and bg='beautiful'--

TOP

因为sqrt()返回的类型是double的,所以代码该成如下的。
复制内容到剪贴板
代码:
//////////DEV C++下调试成功/////////////
# include "stdio.h"
#include <math.h>

int main()
{
    int a,b,c;
    double x,n,m;

    scanf("%d,%d,%d",&a,&b,&c);
    n=b*b-4*a*c;
    m=sqrt(n);
    x=(-b+m)/(2*a);
    printf("x= %f\n",x);
    return 0;
}

运行结果:
C:\>test.exe
2,1,-3
x= 1.000000
http://hi.baidu.com/fengze

TOP

光芒果,你用什么写的C程序,不过现在学生入们都用TC,建议你好好看看你们教程后面附录里用TC调试软件的方法,这才是更本!! [s:59]
欢迎2008!

TOP

风大哥的那个写法在我看到之前我也用过(不过好像少了个return 0;)结果还是0。
我看完老大的提示后回去把最原始那个程序改为了

# include "stdio.h"
# include "math.h"
void main()
{
int a,b,c,x,n,m,o,p,q,r,s;
scanf("%d,%d,%d",&a,&b,&c);
n=b*b;         /*求b的平方*/
printf("n=%d\n",n);
m=a*c;         /*求a与c的乘积*/
printf("m=%d\n",m);
o=4*m;         /*求4ac*/
printf("o=%d\n",o);
p=n-o;         /*求b的平方-4ac*/
printf("p=%d\n",p);
q=sqrt(p);      /*求b的平方-4ac的平方根*/
printf("q=%d\n",q);
r=-b+q;        /*求-b与b的平方-4ac的平方根的差*/
printf("r=%d\n",r);
s=2*a;         /*求2a的值*/
printf("s=%d\n",s);
x=r/s;         /*求出x*/
printf("x=%d\n",x);  /*输出x的值*/
}
我这么写到是运行正确了,我只是在原来的基础上一步步printf出来检查,结果每一步都正确,而且输入无解的3个数还会帮你报错,晕。
我用的是TC++3,偶回去会看调试方法的,谢谢大家的帮忙。
select girl from Guilin where age='18-20' and bg='beautiful'--

TOP

你的写法和我的写法都是可以的,当然是在VC6.0中是可以这样的(2个代码在VC 6中运行都等于1)。

但有点你要注意一下,sqrt()返回的类型是double,你上面的代码在DEV C++中是不好编译的,提示你的q应该是double类型的,而在VC6.0中可以编译,但也报警“warning C4244: &#39;=&#39; : conversion from &#39;double&#39; to &#39;int&#39;, possible loss of data”。

所以这个问题就不讨论了,因为可以说这个问题正确与否取决于编译器。
http://hi.baidu.com/fengze

TOP

我们学校教的JAVA,刚刚自己在学C++,好像不是很难的样子,楼主的那个和JAVA中的思想一样

TOP

编译程序的问题 我以前学习c的时候 在tc中也遇到过这样的事情
啃完你这里的所有好东东!

TOP

# include "stdio.h"
#include <math.h>

int main()
{
  int a,b,c;
  double x,n,m;

  scanf("%d,%d,%d",&a,&b,&c);
  n=b*b-4*a*c;
  m=sqrt(n);
  x=(-b+m)/(2*a);
  printf("x= %f\n",x);
  return 0;
}
先要判断它的根值
  if(n>0)
  就有两个不同的跟
  if(n<0)
就没有跟
  else 只有两个相同的跟

TOP

发新话题