C 有人能给我解释一下这些错误吗?它表示一元'*';(有';int';)。我想计算一个二次方程的根
我正在学习C语言,我必须创建一个程序来计算二次方程的根。我已经编写了一个代码,可以将整个二次方程作为用户的输入,然后将其分配给变量。但是当我使用switch语句时,它显示了一个错误。请帮忙C 有人能给我解释一下这些错误吗?它表示一元'*';(有';int';)。我想计算一个二次方程的根,c,C,我正在学习C语言,我必须创建一个程序来计算二次方程的根。我已经编写了一个代码,可以将整个二次方程作为用户的输入,然后将其分配给变量。但是当我使用switch语句时,它显示了一个错误。请帮忙 #include <stdio.h> #include <stdlib.h> int main() { char a[20]; char firstOperand; char b[20]; char secondOperand; cha
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a[20];
char firstOperand;
char b[20];
char secondOperand;
char c[20];
char thirdOperand = '=';
char d = '0';
int a1;
int b1;
int c1;
int d1;
int D;
int x1;
printf("Please enter the quadratic equation: ");
scanf("%s %c %s %c %s", a, &firstOperand, b, &secondOperand, c);
a1 = atoi(a);
b1 = atoi(b);
c1 = atoi(c);
printf("%d %d %d", a1, b1, c1);
switch(-b1 + sqrt((b1**2) - (4*a1*c1))/ (2*a1))
{
case 1:
x1 = (-b1 + sqrt((b1**2) - (4*a1*c1))/ (2*a1));
printf("The first root of the quadratic equation is: %d", x1);
break;
}
return 0;
}
#包括
#包括
int main()
{
chara[20];
字符第一个操作数;
charb[20];
字符第二操作数;
charc[20];
char thirdOperand='=';
字符d='0';
int a1;
int b1;
int c1;
int d1;
int D;
int-x1;
printf(“请输入二次方程:”);
scanf(“%s%c%s%c%s”,a和第一个操作数,b和第二个操作数,c);
a1=atoi(a);
b1=原子(b);
c1=atoi(c);
printf(“%d%d%d”,a1、b1、c1);
开关(-b1+sqrt((b1**2)-(4*a1*c1))/(2*a1))
{
案例1:
x1=(-b1+sqrt((b1**2)-(4*a1*c1))/(2*a1));
printf(“二次方程的第一根为:%d”,x1);
打破
}
返回0;
}
这些就是我所犯的错误。还要注意的是,我刚刚开始学习c编程,正如评论中提到的,您有几个问题
首先,
**
在C中不是有效的运算符。b1**2
被解释为b1*(*2)
-编译器认为您将2
视为指针并试图取消引用它。由于2
是int
而不是指针类型,编译器正在抱怨
C没有指数运算符-您要么必须手动执行乘法(b1*b1
),要么必须使用pow
函数(pow(b1,2)
)
其次,您需要为sqrt
(和pow
以及trig函数和其他数学函数)包含
最后,switch
对整数表达式进行操作,但是表达式中的sqrt
保证了浮点结果。我甚至不清楚为什么要使用开关。你想在那里做什么
此外,整数除法产生整数结果-1/2==0
,3/2==1
,5/2==2
,等等。(4*a1*c1)/(2*a1)
可能不会给出您期望的结果。您可能希望将变量声明为double
而不是int
(这意味着您需要在scanf
调用中使用%lf
而不是%d
).**
在C中不是有效的运算符。请改用b1*b1
。请注意#include
缺失,并且sqrt
返回浮点值。您是否尝试使用整数算术(特别是除法)进行所有计算?您希望开关如何工作?Bobs注释表示您没有打开编译器的警告:打开它们!switch表达式的结果有问题(在几个方面)。除此之外,带有ints
的eg除法不会产生可靠的计算结果。