Составить программу для определения значения функции
Составить программу для определения значения функции. Предусмотреть вывод
сообщения о том, по какой ветви происходило вычисление значения аргумента
функции х.

Я не очень силён в математике, не могли бы вы указать на ошибки, которые я допустил?
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
void main() {
double x,y,z,k;
printf("k value: \n");
scanf("%lf", &k);
printf("z value: \n");
scanf("%lf", &z);
if (k<1) {
x = k * pow(z, 3);
y = pow( log(1+pow(x,2.0)) + cos(x+1) ,exp(k*x));
printf("%5.5lf", y);
} else {
x = z * (z+1);
y = pow( log(1+pow(x,2.0)) + cos(x+1) ,exp(k*x));
printf("%5.5lf", y);
}
}
Ответы (1 шт):
Основное вычисление у вас -
if (k<1) {
x = k * pow(z, 3);
y = pow( log(1+pow(x,2.0)) + cos(x+1) ,exp(k*x));
printf("%5.5lf", y);
} else {
x = z * (z+1);
y = pow( log(1+pow(x,2.0)) + cos(x+1) ,exp(k*x));
printf("%5.5lf", y);
}
Но обратите внимание: две последние строки в каждой ветви идентичны. Почему бы не сделать так:
if (k<1) {
x = k * pow(z, 3);
} else {
x = z * (z+1);
}
y = pow( log(1+pow(x,2.0)) + cos(x+1) ,exp(k*x));
printf("%5.5lf", y);
Ну, я бы переписал все примерно как
x = z*((k<1) ? k*z*z : z+1);
y = pow(log(x*x+1)+cos(x+1),exp(k*x));
но это уже не принципиально.
Ах, да - у вас еще требуют вывод ветви...
printf("%5.5lf - ветвь %s", y, (k<1) ? "k<1" : "k>=1");
Конкретный %5.5lf оставляю вам - вам виднее, как требуется выводить значения. Я бы написал просто %lf, если никаких требований нет.
Раз у вас очень большие значения - используйте научную нотацию:
printf("%lg - ветвь %s", y, (k<1) ? "k<1" : "k>=1");
Да, и еще! int main, не void main!