Здравствуйте, сегодня на очереди работа с функциями Си. Для начала скажу, что функция — это самостоятельная единица программы, которая спроектирована для реализации конкретной подзадачи, короче говоря, если требуется выполнять набор одних и тех же действий в задаче, то проще будет вынести их в отдельную функцию, и когда вам понадобится выполнить этот набор, просто вызвать по имени функцию.
А вот и примеры:
Функция y = f(x) = 4x^2-8x^2+5x+1 рассматривается как набор точек на отрезке [-9.3; 15.2] c шагом 3.5. Выведите на экран координаты этих точек в две строки: на первой строке – координаты по оси Ох, на второй строке – координаты по оси Оу. Найти и вывести на экран что больше: сумма положительных значений функции или сумма модулей отрицательных значений функции на данном отрезке. Выполнить программу без использования массивов.
Код:
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <windows.h> double func(double x){ double y; y = 4 * pow(x,2) - 8 * pow(x,2) + 5 * x +1; return y; } int main(void) { SetConsoleCP(1251); SetConsoleOutputCP(1251); double x = 0, y = 0, mod = 0, sum = 0; for (x = -9.3; x <= 15.2; x += 3.5) { y = func(x); //y= 4 * pow(x,2) - 8 * pow(x,2) + 5 * x +1; printf(" Ox %.3lf ", x); if (y >= 0){ sum += y; } else { mod -= (y); } } printf("\n"); for (x = -9.3; x <= 15.2; x += 3.5) { y = func(x); //y= 4 * pow(x,2) - 8 * pow(x,2) + 5 * x +1; printf(" Oy %.3lf ", y); } if ( sum < mod ){ printf("\n"); printf(" сумма модулей отрицательных значений%.3lf", mod); } else { printf("\n"); printf(" сумма положительных значений %.3lf", sum); } return EXIT_SUCCESS; }
В этом примере я с помощью комментариев показал, как можно использовать функцию. Что касается новых команд, ничего нового. А на счёт алгоритма, в первом цикле находим sum и mod и заодно выводим значения для оси Ox. Второй цикл просто, чтобы вывести в новой строке. Далее сравниваем и выводим наибольшую переменную.
Следующий пример:
С помощью функции void print_console(int, int) вывести на экран каждое пятое число из диапазона [-45; 67]. Затем с помощью функции void print_file(int, int) вывести в файл все числа из этого диапазона, которые заканчиваются на единицу.
Код:
#include <stdio.h> #include <stdlib.h> #include <math.h> void print_console(); void print_file(); int main(void) { int x,y; print_console(); print_file(); return EXIT_SUCCESS; } void print_console(){ int x, y; for (x = - 45; x <= 67; x += 4){ y = x + 4; if (y < 67) { printf("%d ", y); } } } void print_file() { int x, y; FILE*file; file = fopen("file.txt","w"); for (x = - 45; x <= 67; x += 1){ y = abs(x % 10); if (y == 1) { fprintf(file,"%d ", y); } } fclose(file); }
В данном примере показано, как сначала объявляется функция, а затем описывается после основного блока (int main{}). Важно помнить, что объявление или объявление с описанием всегда должно идти до основного блока. Новых команд в этом примере нет и алгоритм не должен вас затруднить.
И последний:
Задать значения переменных из файла input.txt и вычислить результат с помощью функции double calculation(…). Итоговое значение вывести на экран. Для учета допустимости значений переменных использовать полный оператор if-else.
d = ((x + y)^0.5 − (a + b)^0.5) / ln(x^2 −b^2)
Код:
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <windows.h> double calculation(double, double, double, double); int main(void) { SetConsoleCP(1251); SetConsoleOutputCP(1251); double x,y,a,b,d; FILE*input; input = fopen("input.txt","r"); fscanf(input,"%lf%lf%lf%lf", &x, &y, &a, &b); if (x*x - b*b > 0){ if ((x + y >= 0) && (a + b >= 0) && (log( pow(x,2)- pow(b,2)) ) != 0) { d = calculation(x, y, a, b); } else { printf("неверно введены данные\n"); } } else printf("неверно введены данные\n"); printf("вывод %lf", d); return EXIT_SUCCESS; fclose(input); } double calculation(double x, double y, double a, double b) { double d; d=(sqrt(x+y)-sqrt(a+b)) /( log (pow(x,2)- pow(b,2))); return d; }
В примере нет новых команд и алгоритм несложен, но нужно понимать пару тонкостей. При работе с математическими функциями внимательно проверяйте области допустимых значений для той или иной переменной, иначе либо вылетит ошибка, либо программа выдаст машинный ноль, либо ещё какую-нибудь «абру-кадабру». Как раз в этом примере и показана работа с такими областями, если значение нам не подходит для решения выводим «неверно введены данные».
Вот и всё. Пишите вопросы, комментируйте, всем ответим.
Все исходники без файлов txt.
Скачать исходники задачи — 1
Скачать исходники задачи — 2
Скачать исходники задачи — 3
Будьте первым, кто оставит комментарий