代码运行出现问题,但算法应该没错
#include<stdio.h>
#include<math.h>
int main(){
int i;
float s,v=3.1415926;
float angle,L;
while(1){
printf("请输入函数值。\n");
scanf("%f",&L);
printf("请选择反三角函数求值的类型。\n");
printf("1-sin,2-cos,3-tan。\n");
scanf("%d",&i);
if(i==1)
{
//float s,v=3.1415926;
// s=(angle*1/180)*v;
for(angle=0;angle<=360;angle+=0.1)
{
s=(angle*1/180)*v;
if(-0.5<L-sin(s)<0.5)
{
printf("angle=%f",angle);
break;
}
}
}
else if(i==2)
{//float s,v=3.1415926;
//s=(angle*1/180)*v;
for(angle=0;angle<=360;angle+=0.1)
{
s=(angle*1/180)*v;
if(-0.5<L-cos(s)<0.5)
{
printf("angle=%f",angle);
break;
}
}
}
else if(i==3)
{//float s,v=3.1415926;
// s=(angle*1/180)*v;
for(angle=0;angle<=360;angle+=0.1)
{
s=(angle*1/180)*v;
if(-0.5<L-tan(s)<0.5)
{
printf("angle=%f",angle);
break;
}
}
}
else {
return(false);
}
}
return 0;
}
1.用逻辑与和两次比较替换连续比较
2.把0.5设置的更小一点
#include <stdio.h>
#include <math.h>
int main(){
int i;
float s, v = 3.1415926;
float angle, L;
while (1){
printf("请输入函数值。\n");
scanf("%f", &L);
printf("请选择反三角函数求值的类型。\n");
printf("1-sin,2-cos,3-tan。\n");
scanf("%d", &i);
if (i == 1){
//float s,v=3.1415926;
// s=(angle*1/180)*v;
for (angle = 0; angle <= 360; angle += 0.1){
s = (angle * 1 / 180) * v;
if (-0.0001 < L - sin(s) && L - sin(s) < 0.0001){
printf("angle=%f", angle);
break;
}
}
}
else if (i == 2){ //float s,v=3.1415926;
//s=(angle*1/180)*v;
for (angle = 0; angle <= 360; angle += 0.1){
s = (angle * 1 / 180) * v;
if (-0.0001 < L - cos(s)&& L - cos(s) < 0.0001){
printf("angle=%f", angle);
break;
}
}
}
else if (i == 3){ //float s,v=3.1415926;
// s=(angle*1/180)*v;
for (angle = 0; angle <= 360; angle += 0.1){
s = (angle * 1 / 180) * v;
if (-0.0001 < L - tan(s) && L - tan(s)< 0.0001){
printf("angle=%f", angle);
break;
}
}
}
else{
return 0;
}
}
return 0;
}
请说明你程序的输入, 你期待的输出, 和实际的输出。
if(-0.5<L-sin(s)<0.5)不对
应该是if(-0.5<L-sin(s)&&L-sin(s)<0.5)
这个也是if(-0.5<L-tan(s)<0.5)
代码出了什么问题?你得具体说出你的问题