#include <stdio.h>
#include <conio.h>
#include <math.h>
void main(void)
{
double f,z,x;
int m;
printf("vvedite x=");
scanf("%lf",&x);
printf("vvedite m=");
scanf("%d",&m);
if( x > 10 )
f = sin(3*x);
else if( x < 10 )
f = 3*x;
else
f = cos(x);
printf("x=%.1lf,f=%.3lf", x, f);
switch(m){
case 3: z = tan(x); break;
case 5,2: z = log(abc(-m)); break;
default: z = sin(m);
}
printf("x=%.1lf,m=%d,z=%.3lf\n", x, m, z);
}
Asked
Active
Viewed 138 times
0
Alexander Chernin
- 9,743
1 Answers
3
Вот, исправил некоторые ошибки в Вашем коде, компилируется, выполняется...
#include <stdio.h>
#include <math.h>
int main()
{
double f,z,x;
int m;
printf("vvedite x = ");
scanf("%lf",&x);
printf("vvedite m = ");
scanf("%d",&m);
if (x > 10.0) f = sin(3.0 * x); // сравнивать числа с пл. точкой лучше через эпсилон
else if(x < 10.0) f = 3.0 * x;
else f = cos(x);
printf("x = %.1lf, f = %.3lf\n", x, f); // тут добавил \n
switch(m)
{
case 3:
z = tan(x);
break;
case 5: case 2: // тут была ошибка
z = log(abs(-m)); // тут была ошибка
break;
default:
z = sin(m);
break;
}
printf("x = %.1lf, m = %d, z = %.3lf\n", x, m, z);
return 0;
}
Пример работы:
vvedite x = 11.0
vvedite m = 5
x = 11.0, f = 1.000
x = 11.0, m = 5, z = 1.609
Заметьте, f округлено с 0.9999.... Что касается точности сравнения чисел с плавающей точкой - то Вы вводите эпсилон (точность), например, 10^-3 и сравниваете Ваше число с некоторым плюс или минус этот самый эпсилон. Например, посмотрите этот вопрос.
Jens
- 3,373