Главная страница

Информатика, 10 класс К. Ю. Поляков, Е. А. Еремин


Скачать 0.95 Mb.
НазваниеИнформатика, 10 класс К. Ю. Поляков, Е. А. Еремин
Дата17.09.2022
Размер0.95 Mb.
Формат файлаpdf
Имя файлаch10-8_c_cpp.pdf
ТипДокументы
#681932
страница2 из 9
1   2   3   4   5   6   7   8   9
§ 56. Вычисления В курсе программирования можно выделить две важнейшие составляющие – алгоритмы и способы организации данных. В этом параграфе мы познакомимся с простейшими типами данных в языках C и СВ следующих разделах рассматриваются основные алгоритмические конструкции ветвления, циклы, подпрограммы. В конце главы подробно изучаются сложные (составные) типы данных массивы, символьные строки, работа с файлами. Типы данных Любая переменная относится к какому-либо типу, то есть может хранить данные только того типа, который был указан при её объявлении. В языках C и C++ используются следующие основные типы данных
int – целые значения
float – вещественные значения
bool – логические значения
char – символ (в памяти хранится код символа На переменные типа
char ив памяти выделяется 1 байт, на переменную типа int – 2 или 4 байта (в зависимости от версии языка, на переменную типа
float – 4 байта. Существуют также расширенные типы данных для работы с большими числами и повышения точности вычислений
long int – длинное целое число (4 или 8 байт
double – вещественное число двойной точности (8 байт) . Как мы обсуждали в главе 4, большинство вещественных чисел хранится в памяти неточно, ив результате операций сними накапливается вычислительная ошибка. Поэтому для работы с целочисленными данными ненужно использовать вещественные переменные. Логические переменные относятся к типу
bool и принимают значения true (истина) и
false (ложь. Несмотря на то, что теоретически для хранения логического значения достаточно одного бита памяти, такая переменная занимает в памяти один байт. Так как процессор может читать и записывать в память только целые байты, операции с логическими переменными в этом случае выполняются быстрее. Арифметические выражения и операции Арифметические выражения в любом языке программирования записываются в строчку. Они могут содержать константы (постоянные значения, имена переменных, знаки арифметических операций, круглые скобки (для изменения порядка действий) и вызовы функций. Например,
a =(c+
5
-
1
)/
2
*d; При определении порядка действий используется приоритет (старшинство) операций. Они выполняются в следующем порядке
• действия в скобках умножение и деление, слева направо сложение и вычитание, слева направо Знаменитая книга швейцарского специалиста Никлауса Вирта, разработчика языков Паскаль, Модула-2 и Оберон, таки называлась Алгоритмы + структуры данных = программы.
3
Для того, чтобы не задумываться о потери точности вычислени, многие авторы и разработчики рекомендуют для работы с вещественными числами всегда использовать тип
double.
Информатика, 10 класс
К.Ю. Поляков, Е.А. Еремин
http://kpolyakov.spb.ru
8 Таким образом, умножение и деление имеют одинаковый приоритет, более высокий, чем сложение и вычитание. Поэтому в приведенном примере значение выражения, заключенного в скобки, сначала разделится на 2, а потом результат деления умножится на
d. В языках C и C++ часто используют сокращенную запись арифметических операций сокращенная запись полная запись

a += b;
a -= b;
a *= b;
a /= b;
a = a + b;
a = a - b;
a = a * b;
a = a / b; Если в выражение входят переменные разных типов, в некоторых случаях происходит автоматическое приведение типа к более широкому. Например, результат умножения целого числа на вещественное – это вещественное число. В языках C и C++ результат деления целого числа на целое – это всегда целое число, остаток при делении отбрасывается. Когда нужно получить вещественный результат деления, одно из чисел (делимое или делитель) нужно преобразовать к вещественному типу для числа поставить десятичную точку, а для переменной или выражения использовать явное приведение типа
int
a =
3
, b =
4
;
float
x;
x =
3
/
4
;
// = 0
x =
3
. /
4
;
// = 0.75
x =
3
/
4
.;
// = 0.75
x = a /
4
;
// = 0
x = a /
4
.;
// = 0.75
x = a / b;
// = 0
x =
float
(a) /
4
;
//
= 0.75
x = a /
float
(b);
// = Если нужно получить остаток отделения, применяют операцию «%», которая имеет такой же приоритет, как умножение и деление
d =
85
;
a = d /
10
;
// = 8
b = d %
10
;
// = Нужно учитывать, что для отрицательных чисел эти операции выполняются, строго говоря, не совсем корректно. Дело в том, что сточки зрения теории чисел остаток – это неотрицательное число, поэтому –7 = (–4)
⋅2+1, то есть частное отделения) на 2 равно –4, а остаток – 1. В тоже время во многих языках (в том числе, в Паскале ив) при целочисленном делении используется модуль числа, а затем к частному и остатку добавляется знак минус
7 = 3
⋅2 + 1 ⇒ –7 = (–3)⋅2 – 1. При таком подходе частное отделения) на 2 равно –3, а остаток – (–1). Операции возведения в степень в C и С+ нет. Для вещественных чисел можно использовать функцию
pow(x,y), которая возводит значение x в степень y. В языке C описание этой функции находится в файле
math.h, его нужно подключить вначале программы с помощью команды
#include. В C++ подключается аналогичный файл cmath. Вещественные значения При записи вещественных чисел в программе целую и дробную часть разделяют не запятой как принято в отечественной математической литературе, а точкой. Например
float
x;
x =
123.456
; Вещественное значение можно записывать в целочисленную переменную, при этом дробная часть значения отсекается. При выводе на экран вещественных значений в языке C можно использовать разные форматы с фиксированной точкой, по умолчанию выводятся 6 знаков дробной части
4
Корректное вычисление остатка реализовано в школьном алгоритмическом языке системы КуМир.
Информатика, 10 класс
К.Ю. Поляков, Е.А. Еремин
http://kpolyakov.spb.ru
9 22.10.2015
%e – научный (или экспоненциальный) формат, предназначенный для записи как очень больших, таки очень маленьких чисел – формат вывода выбирается автоматически в зависимости от значения числа.
Например, программа
float
x;
x =
123.456
;
printf(
"%f\n"
, x );
printf(
"%e\n"
, x );
printf(
"%g\n"
, x ); выведет на экран результат в виде
123.456001
1.234560e+002
123.456 Обратите внимание, что впервой строке выведено не то, число, которое мы записывали в переменную, оно отличается от верного значения на 10
-6
. Дело в том, что большинство вещественных чисел, в том числе и число 123,456, не могут быть точно представлены с помощью конечного числа двоичных разрядов и поэтому записываются в память с ошибкой (см. главу 4). Для данных типа
float верными можно считать 7 десятичных разрядов. Результат вывода во второй строке означает
456
,
123 10 234560
,
1 2
=

, то есть до буквы
E указывают значащую часть числа, а после нее – порядок (см. главу 4). Во всех форматах для вещественных чисел можно указывать общее количество знакомест и количество знаков в дробной части, например, программа
float
x;
x =
123.456
;
printf(
"%10.2f\n"
, x );
printf(
"%10.2e\n"
, x );
printf(
"%10.2g\n"
, x ); выведет на экран
◦◦◦◦123.46
◦1.23e+002
◦◦1.2e+002 Обратите внимание, что для формата
%10.2g второе число обозначает количество значащих цифр (в результате число пришлось округлить и использовать научный формат вывода. В языке C++ можно задать два значения общее количество знакомест для вывода (с помощью функции
cout.width) и число значащих десятичных цифр (с помощью функции
cout.precision). Программа
float
x;
x =
123.456
;
cout.width(
10
);
cout.precision(
5
);
cout << x << endl;
cout.width(
10
);
cout.precision(
2
);
cout << x << endl;
cout.width(
10
);
cout.precision(
3
);
cout << x; выведет на экран
◦◦◦◦123.46
◦◦1.2E+002
◦◦◦◦◦◦◦123 Если сравнивать эти результаты с выводом программы на языке C, можно заметить, что по умолчанию при выводе фактически используется формат
%g.
Информатика, 10 класс
К.Ю. Поляков, Е.А. Еремин
http://kpolyakov.spb.ru
10 Стандартные функции В стандартную математическую библиотеку, которая подключается с помощью команды включены математические функции
abs(a) – модуль целого числа
a
;
fabs(x) – модуль вещественного числа
x
;
sqrt(x) – квадратный корень числа
x
;
sin(x) – синус угла
x
, заданного в радианах
cos(x) – косинус угла
x
, заданного в радианах
exp(x)
x
e
, экспонента числа
x
;
ln(x) – натуральный логарифм числа
x
;
pow(x,y) – возведение числа
x
в степень
y
; Для перехода от вещественных значений к целым используется явное преобразование, при котором отсекается дробная часть
a = (
int
)-
1.6
;
// = -1
a = (
int
)
1.6
;
// = Кроме того, можно использовать стандартные функции
floor(x) – округление числа
x
до ближайшего целого, не большего, чем
x
; возвращает вещественное число
ceil(x) – округление числа
x
до ближайшего целого, не меньшего, чем
x
; возвращает вещественное число. Вот примеры использования этих функций
float
x;
x = floor(-
1.6
);
// = -2
x = ceil(-
1.6
);
// = -1
x = floor(
1.6
);
// = 1
x = ceil(
1.6
);
// = Случайные числа В некоторых задачах необходимо моделировать случайные явления, например, результат бросания игрального кубика (на нём может выпасть число от 1 до 6). Как сделать это на компьютере, который по определению неслучаен, то есть строго выполняет заданную ему программу Случайные числа – это последовательность чисел, в которой невозможно предсказать следующее число, даже зная все предыдущие. Чтобы получить истинно случайные числа, можно, например, бросать игральный кубик или измерять какой-то естественный шумовой сигнал (например, радиошум или электромагнитный сигнал, принятый из космоса. На основе этих данных составлялись и публиковались таблицы случайных чисел, которые использовали в разных областях науки.
Вернёмся к компьютерам. Ставить сложную аппаратуру для измерения естественных шумов или космического излучения на каждый компьютер очень дорого, и повторить эксперимент будет невозможно – завтра все значения будут уже другие. Существующие таблицы слишком малы, когда, скажем, нужно получать 100 случайных чисел каждую секунду. Для хранения больших таблиц требуется много памяти. Чтобы выйти из положения, математики придумали алгоритмы получения псевдослучайных как бы случайных) чисел. Для постороннего наблюдателя псевдослучайные числа практически неотличимы от случайных, но они вычисляются по некоторой математической формуле зная первое число (зерно) можно по формуле вычислить второе, затем третье и т.п. В стандартные библиотеки языков программирования обычно входит линейный конгруэнтный генератор псевдослучайных целых чисел, использующий формулу
=
+1
k
X
)
(
c
aX
k
+
mod
m
,
Информатика, 10 класс
К.Ю. Поляков, Е.А. Еремин
http://kpolyakov.spb.ru
11 В языке C существует функция
rand для получения случайных (точнее, псевдослучайных) целых чисел в диапазоне
[0,RAND_MAX], где RAND_MAX – постоянная, определённая в заголовочном файле
stdlib.h (для C++ вместо него используется файл cstdlib). Целое число в заданном диапазоне
[a,b] можно получить с помощью операции взятия остатка и простой арифметики Например, для того, чтобы записать в целую переменную
n случайное число в диапазоне от 1 до 6 результат бросания кубика, можно использовать оператор
n = 1 + rand() %
6
; Вещественное случайное число на отрезке
[x,y] получается так
z = x + (y-x)*rand()/RAND_MAX; Важно, чтобы при использовании этой формулы хотя бы одна из граничных переменных,
x или y, была вещественной (подумайте, почему.
1. Какие типы данных вызнаете. Как выдумаете, почему во многих языках программирования есть несколько целочисленных и вещественных типов данных
3. Какие данные записываются в логические переменные Почему они обычно занимают целое число байтов
4. Что такое приоритет операций Зачем он нужен
5. В каком порядке выполняются операции, если они имеют одинаковый приоритет
6. Зачем используются скобки
7. Что происходит, если в выражения входят переменные разных типов Какого типа будет результат. Опишите операции деления и взятия остатка. В чем их особенность в языках C и C++? Подумайте, почему в математике они не определены для вещественных чисел.
9. Расскажите о проблеме вычисления остатка отделения в различных языках программирования. Обсудите в классе этот вопрос.
10. Какие стандартные математические функции вызнаете В каких единицах задается аргумент тригонометрических функций
11. Как выполнить округление (к ближайшему целому) в языках C и C++?
12. Какие числа называют случайными Зачем они нужны
13. Как получить естественное случайное число Почему такие числа почти не используются в цифровой технике
14. Чем отличаются псевдослучайные числа от случайных
15. Какие функции для получения псевдослучайных чисел вызнаете. Найдите в справочной системе или в Интернете диапазон значений для вещественных типов данных.
2. Напишите программу, которая находит сумму, произведение и среднее арифметическое трёх целых чисел, введённых с клавиатуры. Например, при вводе чисел 4, 5 и 7 мы должны получить ответ
4+5+7=16, 4*5*7=140, (4+5+7)/3=5.333333 где
1
+
k
X
и
k
X
– следующее и предыдущее псевдослучайные числа запись
n
mod
k
означает остаток отделения на
k
;
a
, и
m
– целые числа, подобранные так, чтобы в получаемой цепочке чисел было как можно меньше закономерностей. Например, в библиотеке Microsoft C использовались значения
214013
=
a
,
2531011
=
c
и
31 Задачи и задания

? Контрольные вопросы
Информатика, 10 класс
К.Ю. Поляков, Е.А. Еремин
http://kpolyakov.spb.ru
12 22.10.2015 3. Напишите программу, которая вводит радиус круга и вычисляет его площадь и длину окружности. Можно использовать константу
M_PI, равную числу
π
(эта константа определена в математической библиотеке.
4. Напишите программу, которая меняет местами значения двух переменных в памяти.
5. В предыдущей задаче попробуйте найти решение, которое не использует дополнительные переменные.
6. Напишите программу, которая возводит введённое число в степень 10, используя только четыре операции умножения. Что произойдет, если ввести большое число, например, 78? Попытайтесь объяснить полученный результат.
7. Вычислите значение вещественной переменной
c при a = 2 и b = 3: ас б) св) с = (a +

4
) /
2
*
3
; гс. Вычислите значение целочисленной переменной
c при a = 26 и b = 6: а)
c = a % b + b; б)
c:= a / b + a; в)
b = a / b;
c = a / b; где ж)
b = a % b
c = a /(b +
1
)
9. Выполните предыдущее задание при
a = -22 и b = 4.
10. Напишите программу, которая вводит трёхзначное число и разбивает его на цифры. например, при вводе числа 123 программа должна вывести «1,2,3».
11. Напишите программу, которая вводит координаты двух точек на числовой оси и выводит расстояние между ними.
12. Напишите программу, которая округляет вещественное число до ближайшего целого.
13. Напишите программу, которая вводит два целых числа, аи, и выводит на экран 5 случайных целых чисел на отрезке [
a,b].
14. Напишите программу, которая моделирует бросание двух игральных кубиков при запуске выводит случайное число в диапазоне от 2 до 12.
15. Напишите программу, которая случайным образом выбирает дежурных выводит два различных случайных числа в диапазоне от 1 до
N, где N – количество учеников вашего класса. Какая проблема может при этом возникнуть
16. Напишите программу, которая вводит два вещественных числа, аи, и выводит на экран 5 случайных вещественных чисел в полуинтервале [
a,b).
1   2   3   4   5   6   7   8   9


написать администратору сайта