dnf战斗法师觉醒视频:C语言问题

来源:百度文库 编辑:高校问答 时间:2024/04/29 22:07:56
#include<stdio.h>
#include<math.h>
void main()
{
float fdayu(float,float,float);
float fdeyu(float,float,float);
float fxiyu(float,float,float);
float a,b,c,d,e,f,g;
printf("Please insert 3 numbers:\n");
scanf("%f%f%f",&a,&b,&c);
if((b*b-4*a*c) > 0)
d = fdayu(a,b,c);
if((b*b-4*a*c) == 0)
d = fdeyu(a,b,c);
if((b*b-4*a*c) < 0)
d = fxiyu(a,b,c);
printf("%f",d);
}

float fdayu(float x,float y,float z)
{
int t,k;
t = (-y + sqrt(y * y - 4 * x * z))/(2 * x);
k = (-y - sqrt(y * y - 4 * x * z))/(2 * x);
return (t,k);
}

float fdeyu(float x,float y,float z)
{
int t,k;
t = (-y + sqrt(y * y - 4 * x * z))/(2 * x);
k = (-y - sqrt(y * y - 4 * x * z))/(2 * x);
return (t,k);
}

float fxiyu(float x,float y,float z)
{
int t,k;
t = (-y + sqrt(y * y - 4 * x * z))/(2 * x);
k = (-y - sqrt(y * y - 4 * x * z))/(2 * x);
return (t,k);
}

题目是求方程ax(2)+bx+c = 0{中的x(2)表示x的平方}的根,用3个函数分别求当b平方-4ac大于0,等于0和小于0时的根并输出结果,两个整数由键盘输入!
我错哪了?

#include<stdio.h>
#include<math.h>
void fdayu(float x,float y,float z,float *G1,float *G2);
float fdeyu(float x,float y,float z);
//小于时sqrt()内为负数,会报错的!
//函数在实数区间内也是无解的,这个函数是多余的!
//float fxiyu(float x,float y,float z);
void main()
{

float a,b,c,d,e,f,g;
printf("Please insert 3 numbers:\n");
scanf("%f%f%f",&a,&b,&c);
if((b*b-4*a*c) > 0)
{
fdayu(a,b,c,&e,&f);
printf("%f, %f",e,f);
}
else if((b*b-4*a*c) == 0)
{
printf("%f", fdeyu(a,b,c));
}
else if((b*b-4*a*c) < 0)
{
printf("无解");
}
return;
}

void fdayu(float x,float y,float z,float *G1,float *G2)
{
*G1 = (-y + sqrt(y * y - 4 * x * z))/(2 * x);
*G2 = (-y - sqrt(y * y - 4 * x * z))/(2 * x);

}

float fdeyu(float x,float y,float z)
{
float t; //等于是只有一个根
t = (-y + sqrt(y * y - 4 * x * z))/(2 * x);
return t;
}

//小于时sqrt()内为负数,会报错的!这个函数是多余的!
//float fxiyu(float x,float y,float z)
//{
//int t,k;
//t = (-y + sqrt(y * y - 4 * x * z))/(2 * x);
//k = (-y - sqrt(y * y - 4 * x * z))/(2 * x);
//return (t,k);
//}

在一个函数内可以调用其他的函数,但是不能在申明或定义其他函数.所以你开头的那几个申明应该写在main()的外面.
在你的main()函数中,由于第一种情况有两个结果,而return一般是不能返回多少结果的,当然如果必要可以使用指针.所以你可以直接调用那些函数,而不用让他们返回什么.
最后一种情况下,<0时,是无解的,你可以直接printf一个无解给他,而使用sqrt去开一个负数,显然会出错.我把你的程序稍微改了一下,你可以参考看看.
#include<stdio.h>
#include<math.h>
float fdayu(float,float,float);
float fdeyu(float,float,float);
float fxiyu(float,float,float);

void main()
{
float a,b,c;
printf("Please insert 3 numbers:\n");
scanf("%f%f%f",&a,&b,&c);
if((b*b-4*a*c) > 0)
fdayu(a,b,c);
if((b*b-4*a*c) == 0)
fdeyu(a,b,c);
if((b*b-4*a*c) < 0)
fxiyu(a,b,c);
}

float fdayu(float x,float y,float z)
{
int t,k;
t = (-y + sqrt(y * y - 4 * x * z))/(2 * x);
k = (-y - sqrt(y * y - 4 * x * z))/(2 * x);
printf("%f\t%f\n",t,k);
}

float fdeyu(float x,float y,float z)
{
int t,k;
t = (-y + sqrt(y * y - 4 * x * z))/(2 * x);
k = (-y - sqrt(y * y - 4 * x * z))/(2 * x);
printf("%f\t%f\n",t,k);
}

float fxiyu(float x,float y,float z)
{
printf("no\n");
}
当然这个程序还并不太好,比如你应该要先判断一下a是否为0,每一个函数的输出内容我写的也不是很完整,但用来说明问题应该足够了.

#include<stdio.h>
#include<math.h>
void main()
{
float fdayu1(float x,float y,float z);
float fdayu2(float x,float y,float z);
float fdeyu (float x,float y,float z);
float fxiyu (float x,float y,float z);
float a,b,c,d,e;
printf("Please insert 3 numbers:\n");
scanf("%f%f%f",&a,&b,&c);
if((b*b-4*a*c) > 0)
{d = fdayu1(a,b,c);
e = fdayu2(a,b,c);
printf ("%f",e);}
if((b*b-4*a*c) == 0)
d = fdeyu(a,b,c);
if((b*b-4*a*c) < 0)
d = fxiyu(a,b,c);
printf("%f",d);
}

float fdayu1(float x,float y,float z)
{
float t;
t = (-y + sqrt(y * y - 4 * x * z))/(2 * x);
return (t);
}

float fdayu2(float x,float y,float z)
{
int t;
t = (-y-sqrt(y*y-4*x*z))/(2*x);
return (t);
}

float fdeyu(float x,float y,float z)
{
int t;
t =-y/(2*x);
return (t);
}

float fxiyu(float x,float y,float z)
{
printf("no answer!\n");
}
绝对好使
呵呵
它还能改进哦

在一个函数内可以调用其他的函数,但是不能在申明或定义其他函数.所以你开头的那几个申明应该写在main()的外面.
在你的main()函数中,由于第一种情况有两个结果,而return一般是不能返回多少结果的,当然如果必要可以使用指针.所以你可以直接调用那些函数,而不用让他们返回什么.
最后一种情况下,<0时,是无解的,你可以直接printf一个无解给他,而使用sqrt去开一个负数,显然会出错.我把你的程序稍微改了一下,你可以参考看看.
#include<stdio.h>
#include<math.h>
float fdayu(float,float,float);
float fdeyu(float,float,float);
float fxiyu(float,float,float);

void main()
{
float a,b,c;
printf("Please insert 3 numbers:\n");
scanf("%f%f%f",&a,&b,&c);
if((b*b-4*a*c) > 0)
fdayu(a,b,c);
if((b*b-4*a*c) == 0)
fdeyu(a,b,c);
if((b*b-4*a*c) < 0)
fxiyu(a,b,c);
}

float fdayu(float x,float y,float z)
{
int t,k;
t = (-y + sqrt(y * y - 4 * x * z))/(2 * x);
k = (-y - sqrt(y * y - 4 * x * z))/(2 * x);
printf("%f\t%f\n",t,k);
}

float fdeyu(float x,float y,float z)
{
int t,k;
t = (-y + sqrt(y * y - 4 * x * z))/(2 * x);
k = (-y - sqrt(y * y - 4 * x * z))/(2 * x);
printf("%f\t%f\n",t,k);
}

float fxiyu(float x,float y,float z)
{
printf("no\n");
}
当然这个程序还并不太好,比如你应该要先判断一下a是否为0,每一个函数的输出内容我写的也不是很完整,但用来说明问题应该足够了.

是挺高深的,我也没见过这样返回两个值的。
另外,局部变量也不会影响返回结果,我个人认为。void之后再有返回值好像不可能吧。一楼的意见不敢苟同。

最后三个函数return的都是局部变量
当然会出错
把t k 设为全局变量
把后面三个函数写成void
就行了