Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебно-практическое пособие ПРОГ лаб.раб..doc
Скачиваний:
19
Добавлен:
20.11.2019
Размер:
3.08 Mб
Скачать

Пример выполнения работы

Задания:

1. Вычислить

2. Верно ли, что каждое из чисел x, y, z больше нуля?

3. Вычислить:

,

Выполнение задания 1.

Для написания программы вычисляющей значения a и b по заданным формулам воспользуемся стандартными математическими функциями языка Си. Все заголовки математических функций перечислены в файле math.h. Базовые функции сведены в табл.Л1.2.

Все эти функции принимают double, если не определено иначе. Для работы с типами float и long double используются функции с постфиксами f и l соответственно. Все функции, принимающие или возвращающие угол, работают с радианами.

Таблица Л1.2

Имя

Описание

acos

арккосинус

asin

арксинус

atan

арктангенс

atan2

арктангенс с двумя параметрами

ceil

округление до ближайшего большего целого числа

cos

косинус

cosh

гиперболический косинус

exp

вычисление экспоненты

fabs

абсолютная величина (числа с плавающей точкой)

floor

округление до ближайшего меньшего целого числа

fmod

вычисление остатка от деления нацело для чисел с плавающей точкой

frexp

разбивает число с плавающей точкой на мантиссу и показатель степени.

ldexp

умножение числа с плавающей точкой на целую степень двух

log

натуральный логарифм

log10

логарифм по основанию 10

modf(x,p)

извлекает целую и дробную части (с учетом знака) из числа с плавающей точкой

pow(x,y)

результат возведения x в степень y, xy

sin

синус

sinh

гиперболический синус

sqrt

квадратный корень

tan

тангенс

tanh

гиперболический тангенс

Многие из функций можно выразить через другие. При этом следует использовать следующие формулы:

  • , пусть , тогда

  • и др.

Программа для вычисления значения a и b по заданным формулам будет следующей:

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

double a,b;

float x,y,z;

int main(void) {

setbuf(stdout, NULL);

printf("ЛАБОРАТОРНАЯ РАБОТА №1\n");

printf("x(рад.)="); scanf("%f",&x);

printf("y="); scanf("%f",&y);

printf("z="); scanf("%f",&z);

a=(0.5*cos(x+1)*cos(x+1)-sqrt(sqrt(exp(2*y))))/(y+8+0.1*cos(x+1));

printf("a=%f\n",a);

b=exp(-z*y)-pow(exp(2*y),1.0/5.0);

printf("b=%f\n",b);

printf("Работа программы завершена.\n");

return EXIT_SUCCESS;

}

Создадим проект "Лаб.раб.1" (см.рис.Л1.3, Л1.10).

Ведем текст программы. Обратите внимание на команду setbuf(stdout, NULL). Данная команда нужна для перевода консоли в общепринятый режим работы.

Выполним компиляцию (рис.Л1.8) и запустим программу на выполнение. Результат представлен на рис. Л1.11.

Обратите внимание на запись pow(exp(2*y),1.0/5.0) в тексте программы. Здесь для извлечения корня пятой степени (возведение в степень 1/5) используется запись 1.0/5.0. Если использовать запись 1/5, то результат будет неверным (Рис.Л1.12). Это связано с тем, что запись 1/5 определяет целочисленное деление 1 на 5.

Подбор тестовых данных выполните самостоятельно.

Выполнение задания 2.

Для определения факта, что каждое из заданных чисел x, y, z больше нуля можно предложить несколько алгоритмов. Три из таких алгоритмов представлены блок-схемами на рис.Л1.13-Л1.15.

Алгоритм 1 (рис.Л1.13) в условных блоках содержать только одну операцию отношения. Алгоритм 2 (рис.Л1.14) имеет один условный блок, в котором записано логическое выражение, состоящее из операций отношения и логических операций. Алгоритмы 1 и 2 не используются рабочие переменные. В алгоритме 3 (рис.Л1.15) используется целочисленная рабочая переменная в качестве счётчика.

Достаточно реализовать один из вариантов алгоритма. Программа, реализующая второй вариант алгоритма (рис.Л1.14) будет следующей:

#include <stdio.h>

#include <stdlib.h>

float x,y,z;

int main(void) {

setbuf(stdout, NULL);

printf("ЛАБОРАТОРНАЯ РАБОТА №1 (задание 2)\n");

printf("x="); scanf("%f",&x);

printf("y="); scanf("%f",&y);

printf("z="); scanf("%f",&z);

if((x>0)&&(y>0)&&(z>0)) printf("Верно\n");

else printf("Неверно\n");

printf("Работа программы завершена.\n");

return EXIT_SUCCESS;

}

Тестовые данные представлены в табл.Л1.3. Результат работы программы представлен на рис.Л1.16.

Таблица Л1.3

Номер

набора

Исходные данные

Результат

x

y

z

1

-1

-1

-1

неверно

2

-1

-1

1

неверно

3

-1

1

-1

неверно

4

-1

1

1

неверно

5

1

-1

-1

неверно

6

1

-1

1

неверно

7

1

1

-1

неверно

8

1

1

1

верно

Выполнение задания 3.

Даны числа x и E (E>0). Вычислить приближенное значение суммы

,

где . Нужное приближение получено, если очередное слагаемое меньше E.

Алгоритм нахождения требуемой суммы представлен блок-схемой на рис. Л.1.4.

Рассмотрим один из тестов. Пусть x=2 и E=0.5, тогда будет получен следующий результат , т.к. , а . Результат работы данной программе на рассмотренных тестовых данных представлен на рис.Л1.17.