Составить программу для определения значения функции

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

Я не очень силён в математике, не могли бы вы указать на ошибки, которые я допустил?

#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 шт):

Автор решения: Harry

Основное вычисление у вас -

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!

→ Ссылка