Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Кроме математических функций, в языке Си есть несколько констант, связанных с числом p, наиболее важная из которых M_PI (3.14159...). В MS Visual Studio перед подключением заголовочного файла math. h следует использовать директиву препроцессора
#define _USE_MATH_DEFINES
Функции «округления» не изменяют тип данных с вещественного на целый. Для изменения необходимо приведение типа, например
floor(3.6) // результат 3.0
(int)3.6 // результат 3
Для получения случайных чисел используется библиотека stdlib. h.
Для получения целых случайных чисел в диапазоне 0..N нужно использовать вызов функции
random(N+1). (|N|<32767)
Для получения случайных чисел из другого диапазона лучше всего вычислить отдельно каждую цифру случайного числа, умножить эти цифры на весовые коэффициенты (...100, 10, 1, 0.1, 0.01...) и сложить. При необходимости можно случайным образом определять знак числа (+/-).
Для получения случайных чисел, распределенных по нормальному закону, нужно взять среднее 12 чисел, распределенных по равномерному закону.
Для случайной установки генератора случайных чисел следует использовать функцию randomize();
Задания для подготовки к работе
1. Изучите математические операции и функции языка Си.
2. Исследуйте поведение функций и операций на простых выражениях.
3. Ознакомьтесь с заданиями к работе и подготовьте тексты программ.
Задания к работе
1. Напишите программу для исследования поведения операций (+, -, *, /, %, ++, --) с различными типами данных.
2. Напишите программу для вычисления нескольких выражений согласно варианта.
Формулы к заданию 2
Вариант задания | Расчетные формулы | Значения исходных данных |
1 |
| x=1,426 y=-1,220 z=3,5 |
2 |
| х= 1,825 y=18,225 z=-3,298 |
3 |
| x=0,335 y=0,025 |
4 |
| a=-0,5 b=1,7 t=0,44 |
5 |
| a=1,5 b=15,5 x=-2,9 |
6 |
| a=16,5 b=3,4 x=0,61 |
7 |
| а = 0,7 b=0,05 x=0,5 |
8 |
| a=l, l b=0,004 x=0,2 |
9 |
| m=2 c=-1 t=1,2 b=0,7 |
10 |
| a =3,2 b=17,5 x=-4,8 |
11 |
| a=10,2 b=9,2 x=0,61 |
12 |
| a=0,3 b=0,9 x=0,61 |
13 |
| a =0,5 b=3,1 x=1,4 |
14 |
| а=0,5 b=2,9 x=0,3 |
15 |
| m=0,7 c=2,1 x=1,7 a=0,5 b=1,08 |
Содержание отчета
Отчет должен содержать:
Тексты заданий (по вариантам);
Тексты программ с комментариями;
Протоколы работы программ;
Выводы по работе.
Контрольные вопросы
8. В чем заключается отличие между операциями Х++ и ++Х?
9. В чем заключается отличие между функциями abs и fabs, abs и absl?
10. Как округлить число в ближайшую сторону?
11. В какую сторону округляется число, если дробная часть рана 0.5?
12. Как получить остаток от деления а) целых; б) дробных чисел?
13. Как получить произвольное случайное число из диапазона a...b?
14. Как записываются дробные числа в экспоненциальной форме?
Литература
6. , Березин курс С и С++. – М.: Диалог-МИФИ, 2000. – 288с.
7. . С/С++. Программирование на языке высокого уровня. – СПб.: Питер, 2002. – 464с.
8. Митницкий теории алгоритмов и язык программирования С. Учебное пособие. –М.: МФТИ, 2001. – 180с.
9. Могилев А. В. и др. Информатика. М.: Изд. центр «Академия», 2000. – 816 с.
10. Толковый словарь стандарта языка Си. СПб.: Питер, 1994.
Лабораторная работа № 3
Разветвляющиеся программы
Цели работы:
Овладение практическими навыками разработки, программирования вычислительного процесса разветвляющейся структуры.
Получение навыков пол отладке и тестированию программ.
Краткие теоретические сведения
Инструкция if.
Формат оператора:
if (выражение) оператор1; [else оператор2;]
Выполнение оператора if начинается с вычисления выражения.
Далее выполнение осуществляется по следующей схеме:
- если выражение истинно (т. е. отлично от 0), то выполняется оператор1.
- если выражение ложно (т. е. равно 0),то выполняется оператор2.
- если выражение ложно и отсутствует оператор2 (в квадратные скобки заключена необязательная конструкция), то выполняется следующий за if оператор.
После выполнения оператора if значение передается на следующий оператор программы, если последовательность выполнения операторов программы не будет принудительно нарушена использованием операторов перехода.
Пример:
if (i < j) i++:
else { j = i-3; i++; }
Этот пример иллюстрирует также и тот факт, что на месте оператор1, так же как и на месте оператор2 могут находиться сложные конструкции.
Допускается использование вложенных операторов if. Оператор if может быть включен в конструкцию if или в конструкцию else другого оператора if. Чтобы сделать программу более читабельной, рекомендуется группировать операторы и конструкции во вложенных операторах if, используя фигурные скобки. Если же фигурные скобки опущены, то компилятор связывает каждое ключевое слово else с наиболее близким if, для которого нет else.
Примеры:
int main ( ) {
int t=2, b=7, r=3;
if (t>b){
if (b < r) r=b;
}
else r=t;
return (0);
}
В результате выполнения этой программы r станет равным 2.
Если же в программе опустить фигурные скобки, стоящие после оператора if, то программа будет иметь следующий вид:
int main ( ) {
int t=2,b=7,r=3;
if ( a>b )
if ( b < c ) t=b;
else r=t;
return (0);
}
В этом случае r получит значение равное 3, так как ключевое слово else относится ко второму оператору if, который не выполняется, поскольку не выполняется условие, проверяемое в первом операторе if.
Следующий фрагмент иллюстрирует вложенные операторы if:
char ZNAC;
int x, y,z;
:
if (ZNAC == '-') x = y - z;
else if (ZNAC == '+') x = y + z;
else if (ZNAC == '*') x = y * z;
else if (ZNAC == '/') x = y / z;
else...
Для проверки условий применяются операции отношения и логические операции:
Знак | Операция | Использование |
Отношения | ||
< | Меньше | a<5 |
> | Больше | b>(4-x) |
== (-) | Равно | a==b |
<= | Меньше или равно | x<=y |
>= | Больше или равно | x>=y |
!= | Не равно | x!=y |
Логические | ||
&& | И | (x>=5 && x<8) |
|| | Или | (a==b || t<2) |
! | Не | !x (x=0); !(a>b) |
ЗАМЕЧАНИЕ: При проверке на равенство необходимо указывать два знака “=”. Если указан один знак, выполняется операция присваивания и проверка условия будет проведена логически некорректно. При этом переменная получит новое значение вопреки логике программиста.
Приступая к решению задач раздела if, следует вспомнить, что:
1) инструкция if используется для выбора одного из двух направлений дальнейшего хода программы;
2) выбор последовательности инструкций осуществляется в зависимости от значения условия – заключенного в скобки выражения, записанного после if;
3) инструкция, записанная после else, выполняется в том случае, если значение выражения условие равно нулю, во всех остальных случаях выполняется инструкция, следующая за условием;
4) если при соблюдении или несоблюдении условия надо выполнить несколько инструкций программы, то эти инструкции следует объединить в группу – заключить в фигурные скобки;
5) при помощи вложенных одна в другую нескольких инструкций if можно реализовать множественный выбор.
Пример: Написать программу, которая вычисляет дату следующего дня.
#include <stdio. h>
#include <conio. h>
void main() {
int day;
int month;
int year;
int last; //1, если текущий день – последний день месяца.
int r; // если год високосный, то остаток от деления year на 4 равен нулю.
printf(“Введите в одной строке (цифрами) ”);
printf(“сегодняшнюю дату\n”);
printf(“(число месяц год) ”);
scanf(“%i%i%i”, &day, &month, &year);
last = 0;
if (month == 2) {
if ((year % 4) != 0 && day == 28) last = 1;
if ((year % 4) == 0 && day == 29) last = 1;
}
else if ((month == 4 || month == 6 || month == 9 || month ==11)
&& (day ==31))
last = 1;
else if (day ==31) last = 1;
if (last == 1) {
printf(“Последний день месяца!\n”);
day = 1;
if (month == 12) {
month == 1;
year++;
printf(“С наступающим Новым годом!\n”);
}
else month++;
}
else day++;
printf(”Завтра %i %i %i”, day, month, year);
printf(”\nДля завершения нажмите <Enter>”);
getch();
}
Оператор switch
Оператор switch предназначен для организации выбора из множества различных вариантов. Формат оператора следующий:
switch ( выражение )
{ [объявление]
:
[ case константное-выражение1]: [ список-операторов1]
[ case константное-выражение2]: [ список-операторов2]
:
:
[ default: [ список операторов ]]
}
Выражение, следующее за ключевым словом switch в круглых скобках, может быть любым выражением, допустимыми в языке СИ, значение которого должно быть целым. Отметим, что можно использовать явное приведение к целому типу, однако необходимо помнить о тех ограничениях и рекомендациях, о которых говорилось выше.
Значение этого выражения является ключевым для выбора из нескольких вариантов. Тело оператора switch состоит из нескольких операторов, помеченных ключевым словом case с последующим константным-выражением. Следует отметить, что использование целого константного выражения является существенным недостатком, присущим рассмотренному оператору.
Так как константное выражение вычисляется во время трансляции, оно не может содержать переменные или вызовы функций. Обычно в качестве константного выражения используются целые или символьные константы.
Все константные выражения в операторе switch должны быть уникальны. Кроме операторов, помеченных ключевым словом case, может быть, но обязательно один, фрагмент помеченный ключевым словом default.
Список операторов может быть пустым, либо содержать один или более операторов. Причем в операторе switch не требуется заключать последовательность операторов в фигурные скобки.
Отметим также, что в операторе switch можно использовать свои локальные переменные, объявления которых находятся перед первым ключевым словом case, однако в объявлениях не должна использоваться инициализация.
Схема выполнения оператора switch следующая:
- вычисляется выражение в круглых скобках;
- вычисленные значения последовательно сравниваются с константными выражениями, следующими за ключевыми словами case;
- если одно из константных выражений совпадает со значением выражения, то управление передается на оператор, помеченный соответствующим ключевым словом case;
- если ни одно из константных выражений не равно выражению, то управление передается на оператор, помеченный ключевым словом default, а в случае его отсутствия управление передается на следующий после switch оператор.
Отметим интересную особенность использования оператора switch: конструкция со словом default может быть не последней в теле оператора switch. Ключевые слова case и default в теле оператора switch существенны только при начальной проверке, когда определяется начальная точка выполнения тела оператора switch. Все операторы, между начальным оператором и концом тела, выполняются вне зависимости от ключевых слов, если только какой-то из операторов не передаст управления из тела оператора switch. Таким образом, программист должен сам позаботится о выходе из case, если это необходимо. Чаще всего для этого используется оператор break.
Для того, чтобы выполнить одни и те же действия для различных значений выражения, можно пометить один и тот же оператор несколькими ключевыми словами case.
Пример:
int i=2;
switch (i)
{
case 1: i += 2;
case 2: i *= 3;
case 0: i /= 2;
case 4: i -= 5;
default: ;
}
Выполнение оператора switch начинается с оператора, помеченного case 2. Таким образом, переменная i получает значение, равное 6, далее выполняется оператор, помеченный ключевым словом case 0, а затем case 4, переменная i примет значение 3, а затем значение -2. Оператор, помеченный ключевым словом default, не изменяет значения переменной.
Рассмотрим ранее приведенный пример, в котором иллюстрировалось использование вложенных операторов if, переписанной теперь с использованием оператора switch.
char ZNAC;
int x, y,z;
switch (ZNAC)
{
case '+': x = y + z; break;
case '-': x = y - z; break;
case '*': x = y * z; break;
case '/': x = u / z; break;
default : ;
}
Использование оператора break позволяет в необходимый момент прервать последовательность выполняемых операторов в теле оператора switch, путем передачи управления оператору, следующему за switch.
Отметим, что в теле оператора switch можно использовать вложенные операторы switch, при этом в ключевых словах case можно использовать одинаковые константные выражения.
Пример:
switch (a)
{
case 1: b=c; break;
case 2:
switch (d)
{ case 0: f=s; break;
case 1: f=9; break;
case 2: f-=9; break;
}
case 3: b-=c; break;
:
}
Пример:
Написать программу, которая запрашивает у пользователя номер дня недели,
затем выводит название дня недели или сообщение об ошибке, если введены неверные данные.
#include <stdio. h>
#include <conio. h>
void main() {
int nd; // номер дня недели.
puts (“\nВведите номер дня недели (1…7)”);
scanf(“%i”, &nd);
switch (nd) {
case 1: puts(“Понедельник”); break;
case 2: puts(“Вторник”); break;
case 3: puts(“Среда”); break;
case 4: puts(“×Четверг”); break;
case 5: puts(“Пятница”); break;
case 6: puts(“Суббота”); break;
case 7: puts(“Воскресенье”); break;
default: puts(“Число должно быть в диапазоне 1..7”);
}
getch();
}
Задания для подготовки к работе
1. Изучите возможности языка программирования для реализации условной передачи управления;
2. Разработать алгоритмы решения в соответствии с заданием.
3. подготовьте тексты программ и тестовые варианты исходных данных для каждой ветви вычислительного процесса.
Задания к работе
1. Напишите программу вычисления значения функции согласно варианта задания а) без использования оператора ИНАЧЕ; б) с использованием оператора ИНАЧЕ.
2. Напишите программу для вычисления всех корней уравнения AX2 + BX2 + C=0, в том числе комплексных, учитывая, что любой из коэффициентов А, В, С может быть равен 0. В программе нужно использовать вложенные операторы ветвления.
3. Написать программу с использованием оператора множественного выбора, которая выведет на экран меню и предложит пользователю выбрать один из пунктов (по номеру или букве). В зависимости от выбора программа должна выполнить одно из действий, состоящих из одного или нескольких операторов.
Зациклите программу с помощью безусловного перехода.
Варианты к заданию 1.
Вариант задания | Функция | Условие | Исходные данные | Диапазон и шаг измерения аргумента |
1 |
|
|
|
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
|
|
|
|
5 |
|
|
|
|
6 |
|
|
|
|
7 |
|
|
|
|
8 |
|
|
| |
9 |
|
|
|
|
10 |
|
|
|
|
11 |
|
|
|
|
12 |
|
|
|
|
13 |
|
|
|
|
14 |
|
|
|
|
15 |
|
|
|
|
Последняя колонка таблицы используется для организации цикла.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 |
































