我在互联网上搜索了我的问题但它不会得到解决.我有以下功能:
#include <stdio.h>
#include <math.h>
int solve(double a, double b, double c, double *x1, double *x2){
*x1=(-b+sqrt(pow(b,2)-(4*a*c)))/(2*a);
*x2=(-b-sqrt(pow(b,2)-(4*a*c)))/(2*a);
}
int main(void){
double a, b, c;
scanf("%lf", &a);
scanf("%lf", &b);
scanf("%lf", &c);
double x1, x2;
int count= solve(a, b, c, &x1, &x2);
if(!count){
printf("no solution");}
else if(count==1){
printf("one solution x: %lf", x1);}
else if(count>1){
printf("two solutions x1: %lf x2: %lf", x1, x2);}
}
Run Code Online (Sandbox Code Playgroud)
程序应该从函数solve中返回两个值,但每次启动程序时我都会收到一条警告"缺少返回值".我的错在哪里?顺便说一句,struct不是我教授限制的选项,它需要在一个函数中完成.
所以,这里有一些误解.根据我从模板代码中可以理解的,你的solve函数应该返回二次方程的(实数)解的数量,并且目前没有逻辑.
您应该return根据输入实现具有解决方案数量的逻辑.对于二次方程,您可以看一下判别式.这是b^2 - 4*a*c.如果它小于0,则没有解,如果它等于0则为一个解,否则为两个解.
此外,由于是负数的没有(真正)的平方根,你甚至不应该运行的计算,如果判别小于0.如果您用您的功能a*c > b^2,x1并且x2将不是一个数字.
您正在使用指针正确执行值的"返回".但是,由于您的函数被定义为int solve,因此期望您return <some value>;在函数内部使用.事实上,理论上也int main应该打破它,因为你没有返回任何东西(通常只是return 0),但这是一种特殊的例外,在语言中删除它main.