гических операций "&&" ("И"), "||" ("ИЛИ") и "!" ("НЕ") (см. таблицу).
Выражение:
(6 <= 6) && (5 < 3)
(6 <= 6) || (5 < 3)
(5 != 6)
(5 < 3) && (6 <= 6) || (5 != 6)
(5 < 3) && ((6 <= 6) || (5 != 6))
!((5 < 3) && ((6 <= 6) || (5 != 6)))
Истинно или ложно:
false
true
true
true
false
true
В таблицевчетвертомпримеревыражениеистинно, посколькуприоритетопе-
рации "&&" выше, чему "||". Приоритет (порядоквыполнения) различныхопераций
Си++ можноузнатьвучебникеилируководствепоязыкуСи++, атакжевсправочной
системе Visual C++ (темаOperator Precedence). Еслиувасвозникаютсомненияотно-
сительно приоритетаопераций, применяйтекруглыескобки(). Применениеэтих
скобок облегчаетчтениепрограмм.
Составные логическиевыраженияобычноприменяютсявкачествеусловийв
операторах if и вциклахfor. Например:
...
...
if ( total_test_score >= 50 && total_test_score < 65 )
cout << "Вы прошли тест со средним результатом.\n";
...
...
У логических выраженийвСи++ естьещеодноважноесвойство. ВСи++ ис-
тинное значение ("true") представляетсяввидецелогочисла 1 (большинство ком-
пиляторов любоеположительноечислосчитаютистиннымзначением), аложное
значение ("false") ввидезначения 0. Этоможетпривестикошибкам. Например,
легко напечатать "=" вместо "==". Поэтомуфрагмент
...
...
if ( number_of_people = 1 )
cout << "Есть только один человек.\n";
...
...
всегда будетпечататьсообщение "Естьтолькоодинчеловек", дажееслидооператора
if переменная "number_of_people" былабольше 1.
28
6. Сводка результатов
В даннойлекциидовольноподробнорассматривалисьпеременныеязыкаСи++.
У переменныхвсегдаестьопределенныйтипданных. Переменныеприменяютсядля
временного илипостоянногохранениязначенийразныхтипов. Значенияпеременным
можно присваиватьразличнымиспособами. Ввыраженияхдлявычисленияновых
значений переменныхможно использоватьразличныеарифметическиеилогические
операции.
7. Упражнения
Упражнение 1
Для преобразованиятемпературыизшкалыЦельсиявабсолютнуюшкалутем-
ператур (шкалуКельвина) надо добавить ктемпературепоЦельсиюзначение 273.15.
В шкалуФаренгейтатемпературапоЦельсиюпреобразуетсяt = 1.8t o + 32 f .
Напишите программупреобразованиязначенийтемпературы, котораябудет
печатать наэкранеследующуютаблицу:
Цельсий Фаренгейт Абсолютная температура
0 32.00 273.15
20 68.00 293.15
40 104.00 313.15
... ... ...
... ... ...
300 572.00 573.15
Упражнение 2
Измените программуизупражнения 1 так, чтобыоназапрашивалаупользова-
теля минимальную имаксимальнуютемпературупоЦельсию, которыедолжныбыть
в первойипоследнейстрокахтаблицы. Программатакжедолжназапроситьшагиз-
менения температуры (наэтозначениедолжныотличатьсятемпературывсоседних
строках таблицы, вупражнении 1 шагбылравен 20-тиградусам).
Перед таблицейпрограммадолжнавывестинесколькострокспояснениемсво-
их действий, атакжеповторитьвыводнаэкранвведенныхпользователемданных.
Упражнение 3
Напишите программу, котораясчитываетсклавиатурысимвол (ch) изатемвы-
водит одноизследующихсообщений (вместо ch долженвыводитьсявведенныйсим-
вол, авместо ... –соответствующаяпрописнаяилистрочнаябуква):
а) еслисимвол ch является 2ьстрочнойбуквой–сообщение "Букве ch соответст-
вует прописнаябуква ...",
б) если ch являетсяпрописнойбуквой–сообщение "Букве ch соответствует
строчная буква ...",
в) если ch неявляетсябуквой–сообщение "Символ ch неявляетсябуквой".
Для составлениянеобходимыхусловийобратитеськрасширеннойтаблице
символов ASCII (см. п.8.3).
Упражнение 4
Напишите программудлявозведенияпроизвольногочислаx в положительную
степень n с помощьюциклаfor. (Естьлиспособыповышенияэффективностивашей
программы?)
29
8. Приложения
8.1 Служебные слова Си++
По назначениюслужебныесловаязыкаСи++ можноразделитьнанесколько
групп. Нижеперечисленыэтигруппыиотносящиесякнимслова. Полужирным
шрифтом выделеныслова, назначениекоторыхвыузнаетевданномвводномкурсе.
•Типы данных (определяюттипыданных, которыеможнохранитьвпамяти
компьютера).
char short int long (целые числа)
enum (тип "перечисление")
double float (вещественные числа)
void
struct union typedef (типы, определяемые
пользователем)
•Модификаторы типовданных (позволяютзадатьнекоторыесвойствахране-
ния данныхвпамяти).
signed unsigned
volatile register
const static extern auto
•Управление порядкомвыполненияоператоров.
if else (ветвление с двумя вариантами)
switch case default (множественное ветвление)
for while do (циклы)
break continue
return (возврат из функции)
goto (безусловный переход)
•Динамическое распределениепамяти.
new delete
•Объектно-ориентированноепрограммирование (этисловабудутподробно
рассматриваться вотдельномкурсеобъектно-ориентированногопрограм-
мирования ипроектирования).
class private protected public
virtual this friend template
operator
•Обработка исключений (особыймеханизмобработкиошибоквобъектно-
ориентированных программах).
try throw catch
•Разное.
sizeof inline asm
30
8.2 Таблица символов ASCII
8.3 Расширенная таблица символов ASCII для кодовой страницы DOS-866
31
ЛЕКЦИЯ 3. Функции и процедурная абстракция
1. Назначение подпрограмм
Естественный иинтуитивнопонятныйподходкрешениюбольшихсложных
задач состоитвтом, чтобыразбитьбольшуюзадачунанаборменьших, которыемож-
но решитьболееилименеенезависимоизатемскомбинироватьполученныерешения
для полученияполногорешения. Натакомподходеоснованаметодологияструктур-
ного программирования, котороегосподствоваловразработкепрограммногообеспе-
чения допоявления объектно-ориентированногоподхода.
При структурномпрограммированиибольшаяпрограммаразделяетсянанабор
более илименеенезависимыхподпрограмм. ВСи++ подпрограммыназываются
функциями (вПаскалеинекоторыхдругих языкахпрограммированияестьдватипа
подпрограмм – "процедуры" и "функции").
Подпрограммы уженеоднократновстречалисьвпредыдущихлекциях. Напри-
мер, впрограмме 2.3.2 дляпостроениятаблицыквадратныхкорнейбылприменен
следующий циклfor:
...
#include<math.h>
...
...
for ( number=1 ; number<=10 ; number=number+1 )
{
cout.width(20);
cout << number << sqrt(number) << "\n";
}
...
Функция "sqrt(...)" –этоподпрограмма, описаниекоторойхранитсявзаголо-
вочном файле "math.h", ареализация–вбиблиотечномфайле "math.lib". Привызове
функции "sqrt(...)" ейпередаетсячисловойпараметр "number", функцияприменяет
алгоритм вычисленияквадратногокорняизэтогочисла, изатемвозвращаетвычис-
ленное значениеобратновместовызова. Дляпримененияэтойфункциипрограмми-
сту совсемнеобязательнознать, какойименноалгоритмреализованвнутринее. Глав-
ное, чтобыфункциягарантированновозвращалаверныйрезультат. Былобыдовольно
нелепо включатьвявномвидеалгоритмизвлеченияквадратногокорня (и, возможно,
делать этонеоднократно) вглавнуюфункциюпрограммы "main".
В даннойлекцииописывается, какпрограммистможетопределятьсвоисобст-
венные функции. Сначалапредполагается, чтоэтифункцииразмещаютсяводном
файле сфункцией "main". Вконцелекциипоказывается, какраспределятьфункции
программы понесколькимфайлам.
2. Определение новых функций
Простым примеромопределенияииспользованияновойфункцииявляется
программа 2.1 (внейпользовательскаяфункцияназывается "area(...)"). Этапро-
грамма вычисляетплощадьпрямоугольниказаданнойдлиныиширины.
#include<iostream.h>
int area(int length, int width); /* Описание функции */
32
// ГЛАВНАЯ ФУНКЦИЯ:
int main()
{
int this_length, this_width;
cout << "Введите длину: "; /* <--- строка 10 */
cin >> this_length;
cout << "Введите ширину: ";
cin >> this_width;
cout << "\n"; /* <--- строка 14 */
cout << "Площадь прямоугольника с размерами ";
cout << this_length << "x" << this_width;
cout << " равна " << area(this_length, this_width) << "\n";
return 0;
}
// КОНЕЦ ГЛАВНОЙ ФУНКЦИИ
// ФУНКЦИЯ ВЫЧИСЛЕНИЯ ПЛОЩАДИ:
int area(int length, int width) /* Начало определения функции */
{
int number;
number = length * width;
return number;
} /* Конец определения функции */
// КОНЕЦ ФУНКЦИИ
Программа 2.1.
Программа 2.1, конечно, допускаетзаписьвболеесжатойформе, новданном
виде онаслужитхорошейиллюстрациейнекоторыхсвойствфункцийСи++:
•Структура определения (реализации) функцииподобнаструктурефункции
"main()" –втелефункцииестьописаниялокальныхпеременныхииспол-
няемые операторы.
•У функциимогутбытьпараметры, которыеуказываютсявспискевнутри
круглых скобокпослеименифункции. Укаждогопараметразадаетсятип.
•Если вызовфункциивстречаетсяранееееопределения, товначалепро-
граммы должносодержатьсяописаниефункции (прототип). Прототип
функции описываетеепараметрыитипвозвращаемогозначения. Обычно
прототипы функцийразмещаютсяпослеописанияглобальныхконстант.
Внутри функцииможетбытьнесколькооператороввозврата "return". Функ-
ция завершаетсяпослевыполнениялюбогооператора "return". Например:
double absolute_value(double number)
{
if (number >= 0)
return number;
else
return -number;
}
33
3. Способы передачи параметров внутрь функций
Во всехрассмотренныхдосихпорпримерахпараметры функцийпередавались
по значению. Привызовеизфункции "main()" вызываемойфункциипередаютсяко-
пии указанных переменных. Например, впрограмме 2.1 функции "area(...)" переда-
ются текущиезначенияпеременных "this_length" и "this_width". Затемфункция
"area(...)" сохраняетпереданныезначениявсобственныхлокальныхпеременных, и