C
C
Оглавление.
Введение
1. Работа с экранным меню Турбо Си
2. Ввод - вывод данных
3. Операторы и операции.
4. Функции
5. Типы констант. Использование констант вТурбо Си
6. Управляющие структуры
7. Массивы в ТС++
Задачи
Введение
Важной вехой в развитии программирования явилось создание и широкое
распространение языка С++. Этот язык, сохранив средства ставшего
общепризнанным стандартом для написания системных и прикладных программ
языка С (процедурно-ориентированный язык), ввел в практику программирования
возможности нового технологического подхода к разработке программного
обеспечения, получившего название “объектно-ориентированное
программирование”. Внедрение в практику программирования объектно-
ориентированной парадигмы дает развитие новых областей информатики,
значительное повышение уровня технологичности создаваемых программных
средств, сокращение затрат на разработку и сопровождение программ, их
повторное использование, вовлечение в процесс расширения интеллектуальных
возможностей ЭВМ. Объектный подход информационного моделирования предметных
областей все более успешно применяется в качестве основы для структуризации
их информационных отражений и, в частности , баз знаний.
С++ - это язык программирования общего назначения, хорошо известный
своей эффективностью, экономичностью, и переносимостью. Указанные
преимущества С++ обеспечивают хорошее качество разработки почти любого вида
программного продукта. Использование С++ в качестве инструментального языка
позволяет получать быстрые и компактные программы. Во многих случаях
программы, написанные на С++, сравнимы по скорости с программами,
написанными на языке ассемблера.
Перечислим некоторые существенные особенности языка С++:
- С++ обеспечивает полный набор операторов структурного
программирования;
- С++ предлагает необычно большой набор операций. Многие операции С++
соответствуют машинным командам и поэтому допускают прямую трансляцию в
машинный код. Разнообразие операций позволяет выбирать их различные наборы
для минимизации результирующего кода;
С++ поддерживает указатели на переменные и функции. Указатель на
объект программы соответствует машинному адресу этого объекта. Посредством
разумного использования указателей можно создавать эффективно выполняемые
программы, т.к. указатели позволяют ссылаться на объекты тем же самым
путем, как это делает ЭВМ. С++ поддерживает арифметику указателей, и тем
самым позволяет осуществлять непосредственный доступ и манипуляции с
адресами памяти.
Однако, следует отметить, что преимущества языка С++ становятся
очевидными при реализации больших программных проектов. Первые же шаги при
программировании на С++ требуют от студента тщательного проектирования
программы, а также определенной дисциплины при программировании.
Первая часть методических указаний для проведения лабораторных работ
по дисциплине “Алгоритмические языки программирования” включает примеры
программ и задачи для программирования, ориентированные в основном на
изучение синтаксических конструкций языка TURBO C++.
Лабораторная работа 1
(6 часов)
Справочник по ИСР
Цель работы: Изучение интегрированной Среды разработки программ TURBO
C++.
TURBO C++ упрощает процесс программирования и делает его более
эффективным. При работе в TURBO C++ весь комплекс инструментальных средств,
необходимых для написания, редактирования, компиляции, компоновки и отладки
программ, оказывается под рукой у пользователя.
Весь этот комплекс возможностей заключен в Интегрированной Среде
Разработки (ИСР).
Кроме того, Среда разработки программ TURBO C++ предоставляет
следующие дополнительные возможности, которые еще больше упрощают процесс
написания программ:
. Возможность отображения на экране монитора значительного числа окон
, которые можно перемещать по экрану и размеры которых можно
изменять.
. Наличие поддержки “мыши”.
. Наличие блоков диалога.
. Наличие команд удаления и вставки (при этом допускается копирование
из окна HELP и между окнами EDIT).
. Возможность быстрого вызова других программ и обратного возврата.
. Наличие в редакторе макроязыка.
ИСР содержит три визуальных компоненты: строку меню у верхнего края
экрана, оконную область в средней части экрана и строку состояния у нижнего
края экрана. В результате выбора некоторых элементов меню на экран будут
выдаваться блоки диалога.
Строка меню и меню
Строка меню представляет собой основное средство доступа ко всем
командам меню. Строка меню оказывается невидимой лишь во время просмотра
информации , отображаемой программой и во время перехода к другой
программе.
Окна TURBO C++
Большая часть того, что видно и делается в среде TURBO C++ ,
происходит в окне. Окно - это область экрана, которую можно перемещать ,
размеры которой можно перемещать, изменять, которую можно распахивать на
весь экран, ориентировать встык с другими окнами.
В TURBO C++ может существовать произвольное число окон, но в каждый
момент активно только одно окно. Активным является то окно, в котором в
настоящий момент происходит работа.
Любые вводимые команды или вводимый текст, как правило, относятся
только к активному окну.
Существует несколько типов окон , но большая их часть имеет следующие
общие элементы:
строку заголовка;
маркер закрытия окна;
полосы прокрутки;
угол изменения размера окна;
маркер распахивания окна на весь экран;
номер окна.
Строка состояния
Строка состояния, расположенная у нижнего края экрана, выполняет
следующие функции:
. Напоминает об основных клавишах и клавишах активизации, которые в
настоящий момент могут быть применены к активному окну.
. Позволяет установить указатель мыши на обозначения клавиш и
кратковременно нажать кнопку мыши для выполнения указанного действия,
вместо того, чтобы выбирать команды из меню или нажимать
соответствующие клавиши.
. Сообщает, какое действие выполняется программой.
. Предлагает состоящие из одной строки советы и рекомендации по любой
выбранной команде меню и элементам блока диалога.
Блоки диалога
Если за элементом меню располагается многоточие, то в результате
выбора данной команды будет открыт блок диалога , обеспечивающий удобный
способ просмотра и задания многочисленных параметров.
При задании значения в блоке диалога работа происходит с пятью
базовыми типами средств управления: указателями выбора, переключателями
состояния, кнопками действия, блоками ввода и блоками списка.
Работа с экранным меню Турбо Си.
МЕНЮ (системное)
Отображается у левого края строки меню. Для вызова следует нажать ALT
-пробел. При вызове этого меню отображаются команды:
About
При выборе данной команды появляется блок диалога, в котором
содержится информация по авторским правам и номер версии TURBO C++. Данное
окно закрывается нажатием клавиши ESC или ENTER.
Clear Desktop
Закрывает все окна и стирает все списки предысторий. Эта команда
полезна в тех случаях, когда начинается работа над новым проектом.
Repaint Desktop
Осуществляет регенерацию изображения на экране.
Элементы подменю Transfer
В этом подменю показаны имена всех программ, которые установлены с
помощью блока диалога Transfer, вызываемого командой Options/Transfer. Для
запуска программы необходимо выбрать ее имя из системного меню.
Меню File(ALT F)
Это МЕНЮ позволяет открывать в окнах EDIT и создавать исходные файлы
программ, сохранять внесенные изменения, выполнять другие действия над
файлами ,выходить в оболочку DOS и завершать работу с TURBO C++.
Open(F3)
Команда FILE OPEN отображает блок диалога, в котором выбирается
исходный файл программы, который будет открыт в окне EDIT.
Этот блок диалога содержит блок ввода, список файлов, и кнопки OPEN,
REPLACE, CANCEL и HELP, а также информационную панель.
Здесь можно выполнить одно из действий:
1) Ввести полное имя файла и выбрать указатель REPLACE или OPEN.
В результате выбора Open файл загружается в новое окно Edit. Для
выбора Replace должно иметься активное окно Edit; в результате выполнения
Replace содержимое окна заменяется выбранным файлом.
2) Ввести имя файла с метасимволами. Это позволяет отфильтровать
список файлов в соответствии со спецификацией.
Нажать (, чтобы выбрать спецификацию файла из списка предыстории,
который содержит введенные ранее спецификации файлов.
3) Просмотреть содержимое других каталогов, выбрав имя каталога из
списка файлов.
Блок ввода позволяет явно ввести имя файла или ввести имя файла с
метасимволами DOS (* и ?). Если ввести имя полностью и нажать Enter, Turbo
C++ откроет указанный файл. (Если ввести имя файла, который система Turbo
C++ не может обнаружить, она автоматически создаст и откроет новый файл с
таким именем.)
Если нажать ? , когда курсор находится в блоке ввода,. то под этим
блоком появляется список предыстории, содержащий последние восемь имен
файлов, которые были введены ранее.
New
Команда File New позволяет открывать новое окно Edit со стандартным
именем NONAMExx. С (где вместо букв хх задается число в диапазоне от 00 до
99). Файлы с именем NONAME используются в качестве временного буфера для
редактирования; когда файл с подобным именем сохраняется на диске, Turbo
C++ запрашивает действительное имя файла.
Save (F2)
Команда File Save записывает на диск файл, находящийся в активном окне
Edit (если активно окно Edit в настоящий момент, если нет, то данным
элементом меню нельзя воспользоваться.) Если файл имеет использованное по
умолчанию имя (NONAMEOO.C и т.п.) TurboC++ откроет блок диалога Save Editor
File, который позволяет переименовать данный файл и сохранять его в другом
каталоге или на другом дисководе.
Save As
Команда File Save As позволяет сохранить файл в активном окне Edit
под другим именем, в другом каталоге или на другом дисководе.
Change Dir
Команда File Change Dir позволяет задать идентификатор и имя
каталога, которые следует сделать текущими. Текущим является тот каталог,
который используется в Turbo C++ для сохранения и поиска файлов. (При
использовании относительных маршрутов в Options Directories они задаются
только относительно текущего каталога).
Команда File Print печатает содержимое активного окна Edit Turbo C++
"раскрывает" символы табуляции (заменяет их соответствующим числом
пробелов), а затем посылает файл на устройство печати, заданное в DOS.
Данная команда будет "запрещена", если содержимое активного окна не может
быть выведено на печать. Для вывода на печать только выделенного текста
следует использовать Ctrl-K P.
Get Info
Команда File Get Info отображает блок, в котором содержится
информация относительно текущего файла.
Таблица: Значения блока Get Info
|ЗНАЧЕНИЕ | СМЫСЛ |
|Current directory | Имя каталога по умолчанию |
|Current file |Имя файла в активном окне |
|Extended memory | Объем дополнительной памяти, |
|usage |зарезервированной для Turbo |
| |C++ |
|Expanded memory |Объем расширенной памяти, |
|usage |зарезервированной для Turbo |
| |C++ |
|Lines compiled |Число откомпилированных |
| |строк |
|Total warnings |Число выданных системой |
| |предупреждающих сообщений|
|Totals errors |Число сгенерированных |
| |ошибок |
|Total time |Время последнего |
| |выполнения программы |
|Program loaded |Статус отладки |
|Program exit |Код возврата от последней|
| |завершившейся программы |
|Available memory |Объем доступной памяти |
| |DOS (640 К) |
|Last step time |Время выполнения |
| |последнего шага отладки |
DOS Shell
Команда File DOS Shell позволяет временно выйти из Turbo C++, чтобы
выполнить команду DOS или запустить программу. Для возврата в Turbo C++
необходимо ввести с клавиатуры EXIT и нажать Enter.
Иногда можно обнаружить, что во время отладки не хватает памяти для
выполнения этой команды. В этом случае необходимо завершить сеанс отладки
командой Run Program Reset (Ctrl-F2).
Quit (Alt-x)
Команда File Quit осуществляет выход из системы Turbo C++, удаляет ее
из памяти и передает управление DOS. Если внесены изменения, которые еще не
были сохранены, то перед выходом Turbo C++ выдаст запрос на их сохранение.
Меню Edit(Alt-E)
Позволяет выполнять удаления, копирование и вставку текста в окнах
Edit. Можно также открыть окно текстового буфера для просмотра или
редактирования его содержимого. Выбрать текст это значит выделить его
цветом:
1) Нажать Shift с одновременным нажатием стрелки.
2) Нажать Ctrl-K B, чтобы пометить начало выделяемого блока.
Затем переместить курсор в конец фрагмента текста и на жать
Ctrl-K K.
3)Для выбора строки необходимо нажать Ctrl-K L.
После выделения фрагмента текста становятся доступными команды,
расположенные в меню Edit, и можно использовать текстовый буфер
(Clipboard).Он взаимодействует с командами меню Edit:
Restore Line
Эта команда отменяет действие последней команды редактирования,
примененной к какой-либо строке. Она действует только над последней
отредактированной строкой.
Cut (Shift-Del)
Удаляет выделенный фрагмент текста из документа и заносит его в
текстовый буфер. Затем можно вставить текст в другой документ путем выбора
Paste.
Copy (Ctrl-Ins)
Эта команда не изменяет выделенный текст, но заносит в текстовый
буфер его точную копию. Затем можно вставить текст в другой документ
командой Paste. Можно скопировать текст из окна Help; следует использовать
Shift и клавиши управления курсором.
Paste (Shift-Ins)
Эта команда вставляет текст из текстового буфера в текущее окно в
позиции курсора.
Show Clipboard
Эта команда открывает окно Clipboard, в котором хранятся фрагменты
текста, удаленного и скопированного из других окон.
Clear (Ctrl-Del)
Эта команда удаляет выбранный фрагмент текста ,но не заносит его в
текстовый буфер. Это означает, что восстановить удаленный текст нельзя.
Меню Search (Alt-S)
Меню Search выполняет поиск текста, объявлений функций, а также
местоположение ошибок в файлах.
Команда Search Find отображает блок диалога Find, который позволяет
ввести образец поиска и задать параметры, влияющие на процесс поиска. Эта
команда может быть также вызвана с помощью (Ctrl Q F).
Replace (Ctrl Q A)
Команда Search Replace отображает блок диалога для ввода искомого
текста и текста, на который его следует заменить.
Search Again (Ctrl L)
Команда Search Again повторяет действие последней команды Find или
Replace. Все параметры, которые были заданы при последнем обращении к
использованному блоку диалога(Find или Replace), остаются действительными
при выборе данной команды.
Меню Run (Alt-R)
Команды этого меню выполняют программу, а также инициализируют и
завершают сеанс отладки.
Run(Ctrl-F9)
Команда Run выполняет программу, используя те аргументы, которые
переданы программе с помощью команды Run Arguments.
Тrace Into(F7)
Эта команда выполняет программу по операторам. По достижению вызова
функции будет выполняться каждый ее оператор вместо того, чтобы выполнить
эту функцию за один шаг. Этой командой следует пользоваться для перемещения
выполнения в функцию, которая вызывается из отлаживаемой функции.
Program Reset(Ctrl-F2)
Команда Run Program Reset прекращает текущий сеанс отладки,
освобождает память программы и закрывает все открытые файлы, которые
использовались в программе.
Over
Команда Run Step Over выполняет следующий оператор в текущей функции
без вхождения в функции более низкого уровня, даже если эти функции
доступны отладчику. Командой Step Over следует пользоваться в случаях,
когда необходимо отладить функцию в пооператорном режиме выполнения без
вхождения в другие функции.
Arguments
Команда Run Arguments позволяет задать выполняемой программе
аргументы командной строки точно так же, как если бы они вводились в
командной строке DOS. Команды переназначения ввода/вывода DOS будут
игнорироваться.
Compile ( C)
Команды из меню Compile используются для компиляции программы в
активном окне, а также для полной или избирательной компиляции проекта:
EXE File
Команда Compile Make EXE File вызывает Менеджер проектов для создания
EXE-файла.
Link EXE File Только при полном наборе меню
Команда Compile Link EXE File использует текущие OBJ и LIB-файлы и
компонует их, не производя избирательной компиляции.
Меню Debug (Alt F9)
Команды меню Debug управляют всеми возможностями интегрированного
отладчика.
Inspect (Alt F4)
Команда Debug Inspect открывает окно Inspector, которому позволяет
проанализировать и модифицировать значения элемента данных.
Меню Options(Alt-O)
Меню Oрtions содержит команды, которые позволяют просматривать и
модифицировать стандартные параметры, определяющие функционирование Turbo
C++.
Задание: Используя команды экранного меню File, найти, открыть и
переименовать какой-либо файл из каталога примеров пакета
Turbo C++.
Используя команды экранного меню Edit, отработать приемы
редактирования.
Контрольные вопросы.
Какая команда позволяет сохранить на диске файл, который находится в
активном окне?
Какая команда отображает на экране блок диалога, позволяющий открыть файл?
Какая команда позволяет распахивать на весь экран активное окно?
Для чего служит команда Change Dir?
Какая команда позволяет осуществлять циклическое перемещение от одного
открытого окна к следующему?
Какая команда позволяет выполнять программу в режиме отладки с
отслеживанием внутри функции?
Для чего служит команда Inspect?
Какая команда позволяет выполнять программу в режиме отладки , выполняя
функцию за один шаг?
Какая команда позволяет удалить текст из окна не помещая его в текстовый
буфер?
Для чего служит команда Arguments?
Какая команда позволяет копировать выбранный текст в текстовый буфер?
Какая команда позволяет заносить выбранный текст в текстовый буфер и
удалять выбранный текст из окна?
Для чего служит команда Trace Into?
Какая команда позволяет отображать на экране кадр контекстной подсказки?
Какая команда позволяет осуществить переход к предыдущей ошибке?
Какая команда позволяет инициализировать программу?
Какая команда позволяет компилировать в OBJ-файл?
Какая команда позволяет выполнять программу?
Какая команда позволяет выполнять программу до строки, на которой
установлен курсор?
Для чего служит команда DOS Shell?
Какая команда позволяет включить или выключить полный набор меню?
Какая команда позволяет регенерировать изображение на экране?
Какая команда позволяет сохранить файл под другим именем?
Для чего служит команда Get Info?
Лабораторная работа 2
Ввод - вывод данных
(2 часа)
Цель работы: Изучение структуры исполняемого файла, типов данных и
операторов ввода-вывода системы TURBO C++.
Функция Main
Каждый исполняемый файл системы (Турбо) Си (программа) должен
содержать функцию main.
Код- задающий тело функции main, заключается в фигурные скобки {и}.
Общая структура функции main такова:
main()
{
/* Код, реализующий main */
}
Комментарии
Текст на (Турбо) Си, заключенный в скобки /* и */, компилятором
игнорируется. Комментарии служат двум целям: документировать код и
облегчить отладку. Если программа работает не так, как надо, то иногда
оказывается полезным закомментировать часть кода ( т.е. вынести ее в
комментарий ) , заново скомпилировать программу и выполнить ее . Если после
этого программа начнет работать правильно, то значит, закомментированный
код содержит ошибку и должен быть исправлен .
Директивы Include
Во многие программы на (Турбо) Си подставляются один или несколько
файлов, часто в самое начало кода главной функции main.
Появление директив
#include
#include "файл_2"
...
#include
приводит к тому , что препроцессор подставляет на место этих директив
тексты файлов файл_1, файл_2 , ... , файл_n соответственно.
Если имя файла заключено в угловые скобки , то поиск файла
производится в специальном разделе подстановочных файлов. В отличие от
многих других операторов (Турбо) Си директива Include не должна
оканчиваться точкой с запятой .
Макро
С помощью директивы #define, вслед за которой пишутся имя макро и
значение макро, оказывается возможным указать препроцессору, чтобы он при
любом появлении в исходном файле на (Турбо) Си данного имени макро заменял
это имя на соответствующие значения макро .
Например, директива
#define pi 3.1415926
связывает идентификатор pi со значением 3.1415926. После значения
макро (;) не ставится.
Типы данных
В (Турбо) Си переменные должны быть описаны, а их тип специфирован до
того, как эти переменные будут использованы.
При описании переменных применяется префиксная запись , при которой
вначале указывается тип, а затем - имя переменной.
Например:
float weight;
int exam_score;
char ch;
С типом данных связываются и набор предопределенных значений, и набор
операций, которые можно выполнять над переменной данного типа.
Переменные можно инициализировать в месте их описаний.
Пример:
int height = 71 ;
float income =26034.12 ;
Простейшими скалярными типами, предопределёнными в (Турбо) Си,
являются
char Представляется как однобайтовое целое число
int Двубайтовое целое
long Четырёхбайтовое целое
float Четырёхбайтовое вещественное
double Восьмибайтовое вещественное
Оператор printf: вывод на терминал
Функцию printf можно использовать для вывода любой комбинации
символов, целых и вещественных чисел, строк, беззнаковых целых, длинных
целых и беззнаковых длинных целых.
Пример:
printf("\nВозраст Эрика - %d. Его доход $%.2f",age,income);
Предполагается, что целой переменной age (возраст) и вещественной
переменной income (доход) присвоены какие-то значения.
Последовательность символов "\n" переводит курсор на новую строку.
Последовательность символов "Возраст Эрика -" будет выведена с начала
новой строки. Символы %d - это спецификация для целой переменной age.
Следующая литерная строка " Его доход $ ". %2f - это спецификация ( символ
преобразования формата ) для вещественного значения, а также указание
формата для вывода только двух цифр после десятичной точки. Так выводится
значение переменной income
|Символ | |
|формата |Тип выводимого объекта |
%с char
%s строка
%d int
%o int ( в восьмеричном виде )
%u unsigned int
%x int ( в шестнадцатеричном виде )
%ld long ( в десятичном виде )
%lo long ( в восьмеричном виде )
%lu unsigned long
%lx long ( в шестнадцатеричном виде )
%f float/double ( c фиксированной точкой)
%e float/double ( в экспоненциальной форме )
%g float/double ( в виде f или е в зависимости
от значения )
%lf long float ( c фиксированной точкой )
%le long float ( в экспоненциальной форме )
%lg long float ( в виде f или е в зависимости
от значения )
Оператор scanf: ввод с клавиатуры
Оператор scanf является одной из многих функций ввода, имеющихся во
внешних библиотеках.
Каждой вводимой переменной в строке функции scanf должна
соответствовать спецификация. Перед именами переменных необходимо оставить
символ &. Этот символ означает "взять адрес".
Пример:
#include
main()
{
int weight, /*вес*/
height; /*рост*/
printf(" Введите ваш вес: ");
scanf("%d", &weight);
printf(" Введите ваш pocт: ");
scanf("%d", &height);
printf("\n\nВес = %d, рост = %d\n",
weight,height);
}
Задание:
Составить и распечатать программу вывода на экран своих анкетных
данных различного типа: - вводимых с клавиатуры,
- с помощью директивы define,
- инициализированных при описании.
Лабораторная работа 3
Операторы и операции
(2 часа)
Цель работы: Изучение арифметических, логических операций и операций
отношения и присваивания.
Основу языка (Турбо) Си составляют операторы. Оператором-выражения
называют выражение, вслед за которым стоит точка с запятой. В (Турбо) Си
точки с запятой используются для разделения операторов. Принято
группировать все операторы в следующие классы: присваивания, вызов функции,
ветвления и цикла.
В операторе присваивания используется операция присваивания = ,
Например:
c = a * b;
Действие такого оператора можно описать следующими словами: " с
присваивается значение а, умножение на b ". Значение, присваиваемое
переменной с, равняется произведению текущих значений переменных а и b.
Операторы часто относятся более чем к одному из четырех классов.
Например: оператор:
if ( ( c = cube( a * b ) ) > d )
...
составлен из представителей следующих классов: присваивания, вызов
функции, и ветвление.
К понятию оператора вплотную примыкает понятие операции.
Различают следующие группы операций (Турбо) Си : арифметические
операции, операции отношения, операции присваивания, логические операции,
побитовые операции, операция вычисления размера (sizeof) и операция
следования (запятая).
Арифметические операции
К арифметическим операциям относятся: сложение (+), вычитание (-),
деление (/) , умножение (*) и остаток (%). Все операции (за исключением
остатка) определены для переменных типа int , char , float. Остаток не
определен для переменных типа float. Все арифметические операции с
плавающей точкой производятся над операндами двойной точности.
Операции отношения
В языке определены следующие операции отношения: проверка на равенство
(==), проверка на неравенство (!=), меньше (), больше или равно (>=).
Все перечисленные операции вырабатывают результат типа int. Если
данное отношение между операндами истинно, то значение этого целого -
единица, а если ложно, то нуль.
Все операции типа больше-меньше имеют равный приоритет, причем он выше
, чем приоритет операций == и !=. Приоритет операции присваивания ниже
приоритета всех операций отношений. Для задания правильного порядка
вычислений используются скобки.
Логические операции
В языке имеются три логические операции:
&& операции И (and)
|| операции ИЛИ (or)
! отрицание
Аргументами логических операций могут быть любые числа, включая
задаваемые аргументами типа char. Результат логической операции-единица,
если истина, и нуль, если ложь. Вообще все значения, отличные от нуля,
интерпретируются как истинные.
Логические операции имеют низкий приоритет, и поэтому в выражениях с
такими операциями скобки используются редко.
Вычисление выражений, содержащих логические операции, производится
слева направо и прекращается (усекается), как только удается определить
результат. Если выражение составлено из логических утверждений (т.е.
выражения, вырабатывающие значения типа int), соединенных между собой
операцией И (&&), то вычисление выражения прекращается, как только хотя бы
в одном логическом утверждении вырабатывается значение нуль. Если выражение
составлено из логических утверждений, соединенных между собой операцией ИЛИ
(||), то вычисление выражения прекращается, как только хотя бы в одном
логическом утверждении вырабатывается ненулевое значение.
Вот несколько примеров, в которых используются логические операции:
if( i > 50 && j == 24)
...
if( value1 < value2 && (value3 > 50 || value4 < 20) )
...
Операции присваивания
К операциям присваивания относятся =, +=, -=, *= и /=, а также
префиксные и постфиксные операции ++ и --. Все операции присваивания
присваивают переменной результат вычисления выражения. Если тип левой части
присваивания отличается от типа правой части, то тип правой части
приводится к типу левой.
В одном операторе операция присваивания может встречаться несколько
раз. Вычисления производятся справа налево.
Например:
a = ( b = c ) * d;
Вначале переменной d присваивается значение с, затем выполняется
операция умножения на d, и результат присваивается переменной а.
Операции +=, -=, *= и /= являются укороченной формой записи операции
присваивания. Их применение проиллюстрируем при помощи следующего описания:
a += b означает a = a + b.
a -= b означает a = a - b.
a *= b означает a = a * b.
a /= b означает a = a / b.
Префиксные и постфиксные операции ++ и -- используют для увеличения
(инкремент) и уменьшения (декремент) на единицу значения переменной.
Семантика указанных операций следующая:
++a увеличивает значение переменной а на единицу до использования этой
переменной в выражении.
а++ увеличивает значение переменной а на единицу после использования
этой переменной в выражении.
--a уменьшает значение переменной а на единицу до использования этой
переменной в выражении.
a-- уменьшает значение переменной а на единицу после использования
этой переменной в выражении.
Операцию sizeof (размер) можно применить к константе, типу или
переменной. В результате будет получено число байтов, занимаемых операндом.
Например:
printf ( "\nРазмер памяти под целое %d", sizeof( int) );
printf ( "\nРазмер памяти под cимвол %d", sizeof( сhar) );
Задание: Cоставить и распечатать программу, использующую оператор
присваивания, арифметические операции и операцию sizeof.
Лабораторная работа 4
Функции
(2 часа)
Цель работы: Изучение логической организации программы и простейшее
использование функций в Турбо Си.
Процесс разработки программного обеспечения предполагает разделение
сложной задачи на набор более простых задач и заданий. В (Турбо) Си
поддерживаются функции как логические единицы (блоки текста программы) ,
служащие для выполнения конкретного задания.
Важным аспектом разработки программного обеспечения является
функциональная декомпозиция.
Функции имеют нуль или более формальных параметров и возвращают
значение скалярного типа, типа void (пусто) или указатель. При вызове
функции значения, задаваемые на входе, должны соответствовать числу и типу
формальных параметров в описании функции. Если функция не возвращает
значения (т.е. возвращает void), то она служит для того, чтобы изменять
свои параметры (вызывать побочный эффект) или глобальные для функции
переменные.
Например, функция, возвращающая куб ее вещественного аргумента:
double cube( double x )
{
return x * x * x ;
}
Аргумент х типа double специфицируется вслед за первой открывающей
скобкой. Описание extern , помещаемое в функцию main , является ссылкой
вперед , позволяющей использовать функцию cube в функции main. Ключевое
слово extern можно опускать, но сама ссылка вперед на описание функции
является обязательной.
Логическая организация простой программы на Турбо Си.
(Турбо) Си предоставляет необычайно высокую гибкость для физической
организации программы или программной системы.
В табл.1 показана типичная организация небольшой программы на (Турбо)
Си.
/* Заголовки и комментарии, описывающие программу */
/* Директивы include */
#include имя_файла_1
...
#include имя_файла_n
/* Макро */
#define макро_1 значение_1
...
#define макро_n значение_n
/* Описание глобальных переменных */
тип_данных глобальная_переменная_1;
...
тип_данных глобальная_переменная_n;
main()
{
/* описание extern, обеспечивающие ссылку вперед на функции
и используемые в теле функции main */
/* Описание локальных переменных */
тип_данных локальная_переменная_1;
...
тип_данных локальная_переменная_m;
/* Тело функции main */
...
}
/* Функции, используемые в программе main */
Тип_данных имя_функции_1( формальные параметры )
{
/* Описание extern, обеспечивающее ссылку вперед на функции и
используемые в теле данной функции */
/* Описание локальных переменных */
тип_данных локальная_переменная_1;
...
тип_данных локальная_переменная_u;
/* Тело функции - 1 */
...
}
...
Тип_данных имя_функции_n( формальные параметры )
{
/* Описание extern, обеспечивающая ссылку вперед на функции
и используемые в теле данной функции n */
/* Описание локальных переменных */
тип_данных локальная_переменная_1;
...
тип_данных локальная_переменная_r;
/* Тело функции n */
...
}
Cтруктура каждой функции совпадает со структурой главной программы
(main). Поэтому функции иногда еще называют подпрограммами.
Подпрограммы решают небольшую и специфическую часть общей задачи.
Задание: Составить и распечатать программу, вычисляющую кубы чисел,
заданных разными способами.
Лабораторная работа 5
Типы констант. Использование констант в (Турбо) Си
(2 часа)
Цель работы: Изучение использования констант различных типов в Турбо
Си.
В языке (Турбо) Си имеются четыре типа констант: целые, вещественные
(с плавающей точкой), символьные и строковые.
Константы целого типа
Константы целого типа могут задаваться в десятичной, двоичной,
восьмеричной или шестнадцатеричной системах счисления.
Десятичные целые константы образуются из цифр. Первой цифрой не
должен быть нуль.
Восьмеричные константы всегда начинаются с цифры нуль, вслед за
которой либо не стоит ни одной цифры, либо стоят несколько цифр от нуля до
семерки.
Шестнадцатеричные константы всегда начинаются с цифры нуль и символа
х или Х, все, за которыми может стоять одна или более шестнадцатеричных
цифр.
Шестнадцатеричные цифры - это десятичные цифры от 0 до 9 и латинские
буквы: a, b, c, d, e, f, или A, B, C, D, E, F.
Например: задание константы 3478 в десятичном, восьмеричном и
шестнадцатеричном виде:
int a = 3478,
b = 06626,
c = 0хD96;
К любой целой константе можно справа приписать символ l или L, и это
будет означать, что константа - длинная целая (long integer). Символ u или
U, приписанный к константе справа, указывает на то, что константа целая без
знака (unsigned long).
Считается, что значение любой целой константы всегда неотрицательно.
Если константе предшествует знак минус, то он трактуется как операция смены
знака, а не как часть константы.
Константы вещественного типа
Константы с плавающей точкой (называемые вещественными) состоят из
цифр, десятичной точки и знаков десятичного порядка е или Е. Ниже приведены
все возможные варианты записи констант вещественного типа:
1. 2e1 .1234 .1e3
.1 2E1 1.234 0.0035e-6
1.0 2e-1 2.1e-12 .234
Cимвольные константы
Cимвольные константы заключаются в апострофы (кавычки). Все
символьные константы имеют в (Турбо) Си значение типа int (целое),
совпадающее с кодом символа в кодировке ASCII.
Одни символьные константы соответствуют символам, которые можно
вывести на печать, другие - управляющим символам, задаваемым с помощью esc
- последовательности, третьи - форматирующими символами, также задаваемым с
помощью esc - последовательности.
Например:
символ " апостроф " задается как '\'', переход на новую
строку - как '\', а обратный слэш - как '\\'.
Каждая esc - последовательность должна быть заключена в кавычки.
Управляющие коды
\n Новая строка
\t Горизонтальная табуляция
\v Вертикальная табуляция
\b Возврат на символ
\r Возврат в начало строки
\f Прогон бумаги до конца страницы
\\ Обратный слэш
\' Одинарная кавычка
\" Двойная кавычка
\а Звуковой сигнал
\? Знал вопроса
\ddd Код символа в ASCII от одной до трех восьмеричных цифр
\xhhh Код символа в ASCII от одной до трех шестнадцатеричных цифр.
Строковые константы
Строковые константы состоят из нуля или более символов, заключенных в
двойные кавычки. В строковых константах управляющие коды задаются с помощью
esc - последовательности. Обратный слэш используется как символ переноса
текста на новую строку.
Пример описания строковых констант:
# include
main( )
{
char *str1, *str2;
str1=“ Пример использования\n\n”;
str2=“строковых\
констант.\n\n”;
printf(str1);
printf(str2);
}
Программа выведет следующий текст:
Пример использования
строковых констант.
Задание: Написать и распечатать программу, выводящую на экран
строковую константу и число, состоящее из цифр вашего дня
рождения, заданное в виде десятичной, восьмеричной и
шестнадцатеричной константы.
Лабораторная работа 6
Управляющие структуры (Турбо) Си
(2 часа)
Цель работы: Изучение приемов использования операторов ветвления и
операторов циклов в Турбо Си.
Управляющие структуры или операторы управления служат для управления
последовательностью вычислений в программе. Операторы ветвления и циклы
позволяют переходить к выполнению другой части программы или выполнять
какую-то часть программы многократно, пока удовлетворяется одно или более
условий .
Блоки и составные операторы.
Любая последовательность операторов, заключенная в фигурные скобки,
является составным оператором(блоком). Составной оператор не должен
заканчиваться (;), поскольку ограничителем блока служит сама закрывающаяся
скобка. Внутри блока каждый оператор должен ограничиваться (;).
Составной оператор может использоваться везде, где синтаксис языка
допускает применение обычного оператора.
Пустой оператор.
Пустой оператор представляется символом (;), перед которым нет
выражения. Пустой оператор используют там, где синтаксис языка требует
присутствия в данном месте программы оператора, однако по логике программы
оператор должен отсутствовать.
Необходимость в использовании пустого оператора часто возникает, когда
действия, которые могут быть выполнены в теле цикла, целиком помещаются в
заголовке цикла.
Операторы ветвления.
К операторам ветвления относятся if, if else, ?,switch и go to. Общий
вид операторов ветвления следующий:
if (логическое выражение)
оператор;
-------------------------------------------------------------------
if (логическое выражение)
оператор_1;
else
оператор_2;
-------------------------------------------------------------------
? : ;
Если значение логического выражения истинно, то вычисляется
выражение_1, в противном случае вычисляется выражение_2.
-------------------------------------------------------------------
switch (выражение целого типа)
{
case значение_1:
последовательность_операторов_1;
break;
case значение_2:
последовательность_операторов_2;
break;
. . .
case значение_n:
последовательность_операторов_n;
break;
default:
последовательность_операторов_n+1;
}
Ветку default можно не описывать. Она выполняется, если ни одно из
вышестоящих выражений не удовлетворено.
-------------------------------------------------------------------
Оператор цикла.
В Турбо Си имеются следующие конструкции, позволяющие программировать
циклы: while, do while и for. Их структуру можно описать следующим образом:
while( логическое выражение)
оператор;
Цикл с проверкой условия наверху
--------------------------------------------------------------
do
оператор;
while (логическое выражение);
Цикл с проверкой условия внизу
--------------------------------------------------------------
for (инициализация, проверка, новое_значение)
оператор;
----------------------------------------------------------------
Задание:
1. Составить и получить распечатку программы выбора всех четных чисел
от 1 до 1000.
2. Составить и получить распечатку программы выбора всех нечетных чисел
от 1 до 1000.
3. Составить и получить распечатку программы выбора всех чисел,
заканчивающихся на цифру 5, от 1 до 1000.
4. Составить и получить распечатку программы выбора всех чисел,
заканчивающихся на цифру 2, от 1 до 1000.
5. Составить и получить распечатку программы выбора всех чисел,
заканчивающихся на цифру 3, от 1 до 1000.
6. Составить и получить распечатку программы выбора всех чисел,
заканчивающихся на цифру 4, от 1 до 1000.
Лабораторная работа 7
Массивы в ТС++
(2 часа)
Цель работы: Изучение приемов объявления и обращения к массивам,
использования функций и директивы define при работе с массивами.
Массивы - это набор объектов одинакового типа, доступ к которым
осуществляется прямо по индексу в массиве. Обращение к массивам в (Турбо)
Си осуществляется и с помощью указателей .
Массивы можно описывать следующим образом:
тип_данных имя_массива [ размер массива ];
Используя имя массива и индекс, можно адресоваться к элементам
массива:
имя_массива [ значение индекса ]
Значения индекса должны лежать в диапазоне от нуля до величины, на
единицу меньшей, чем размер массива, указанный при его описании.
Вот несколько примеров описания массивов:
char name [ 20 ];
int grades [ 125 ];
float income [ 30 ];
double measurements [ 1500 ];
Первый из массивов ( name ) содержит 20 символов. Обращением к
элементам массива может быть name [0], name [1], ...,name[19].
Второй массив ( grades ) содержит 125 целых чисел. Обращением к
элементам массива может быть grades [0],grades [1],...,grades[124].
Третий массив ( incom ) содержит 30 вещественных чисел. Обращением к
элементам массива может быть income [0], incom[1],...,income[29].
Четвертый массив (measurements ) содержит 1500 вещественных чисел с
двойной точностью. Обращением к элементам массива может быть
measurements[0],measurements[1],...,measurements[1499].
/* Программа, иллюстрирующая использование массивов */
/*Файл array.с*/
#include
#define size 1000
int data [size];
main ( )
{
extern float average (int a[ ], int s );
int i;
for ( i=0; i data [ i ]= i; printf ( “\nСреднее значение массива data =%f\n”,average (data,size)); } float average (int a[ ] ,int s ) { float sum=0.0; int i; for ( i=0; i sum+=a[ i ]; return sum/s; } В программе заводится массив на 1000 целых чисел. При помощи функции average подсчитывается сумма элементов этого массива. Первым формальным параметром функции average является массив. В качестве второго параметра функции передается число суммируемых значений в массиве a. Обратите внимание на использование константы size (размер). Если изменяется размерность массива, задаваемая этой константой, то это не приводит к необходимости менять что-либо в самом коде программы. Задание: Составить и распечатать программу, решающую задачу вычисления максимального и минимального значений с использованием функций max и min. В качестве входных значений для указанных функций задаются массив чисел с плавающей точкой и размер такого массива. ИТОГОВЫЕ КОНТРОЛЬНЫЕ ЗАДАНИЯ. 1. Построить 10 вложенных квадратов окрашенных поочередно в зеленый и красные цвета. 2. Получить в центре экрана изображение, состоящее из 10 вложенных квадратов со сторонами 10,20,30,...,100 : 3. Вывести на экран 2 прямоугольника. Один заштриховать вертикальными прямыми, другой - горизонтальными: 4.Построить прямоугольник со сторонами 30 и 50, центр которого совмещен с центром экрана. Стороны прямоугольника должны быть параллельны сторонам экрана. 5.С помощью рассмотренных графических операторов можно получать на экране изображения, состоящие не целиком из окружностей, а из их частей. Написать программу, выполняющую построение красного полумесяца, а также программы, выполняющие построение фигур, показанных на рисунке (фигуры закрашиваются зеленым цветом). 6.Дано 6 целых чисел, определяющих положение вершин треугольника, расположенного в левой половине экрана. Построить на экране этот треугольник, а также треугольник, симметричный данному относительно вертикальной прямой, проходящей через середину экрана. 7.Четыре целых числа задают положение концов отрезков на экране. Получить изображение этого отрезка и изображение отрезка, центрально-симметричного данному относительно точки, расположенной в центре экрана. 8.Получить в центре экрана изображение, состоящее из 9 вложенных квадратов и раскрасить его 3 цветами. 9.Построить 9 концентрических окружностей, окрашенных поочередно в зеленый, красный и коричневый цвета. 1.Транспонированием квадратной матрицы называется такое ее преобразование, при котором строки и столбцы меняются ролями: i-й столбец становится i-й строкой. Например, транспонирование матрицы: 0 1 2 0 3 6 3 4 5 дает матрицу 1 4 7 6 7 8 2 5 8 Дана квадратная матрица размера n*n. Получить транспонированную матрицу. 2.Таблица круга футбольного чемпионата, в котором участвовало n команд, задана своей верхней правой частью: первые n чисел данной последовательности С1,С2,... относятся к первой строке таблицы, следующие n-1 чисел - ко второй и т.д. Построить всю таблицу целиком. 3.Шахматную доску будем представлять символьной матрицей размера 8*8. Даны натуральные р и q (1<=p<=8,1<=q<=8)- но 8 мера вертикали и горизонтали, определяющие местоположение ферзя. Соответствующий элемент матрицы надо положить равными символу Ф. Поля, находящиеся под угрозой ферзя, надо положить равными символу *, а остальные поля - символу 0. Строки матрицы вывести одну под другой. Решить аналогичную задачу для коня. 1.Дана действительная матрица (xij) размера m*n; упорядочить (переставить) строки матрицы: а) по неубыванию сумм элементов строк, б) по неубыванию наименьших элементов строк, в) по невозрастанию наибольших элементов. УКАЗАНИЕ: Определить числовой массив: b1,...,bm, положив равным, соответственно, сумме элементов i-й строки, наименьшему элементу i-й строки, наибольшему элементу i-й строки. Можно вместо массива: b1,...,bm рассмотреть дополнительный столбец x1n+1, x2n+1,...,xmn+1. 2.В данной целочисленной квадратной матрице размером n*n (n-некоторая константа) указать индексы всех элементов, имеющих наибольшее значение. 3.Дано: натуральные x1,y1,...,x10,y10, целочисленная матрица (aij) (i=1,...,10,j=1,...,10). Последовательность x1,y1,...,x10, y10 задает положение 10 точек на экране. Матрица указывает, как точки соединены между собой: aij=1, или i-я точка соединена с j-й и aij=0 в противном случае (aij=aji). Получить на экране точки, заданные последовательностью x1,y1,...,x10,y10 и соединить их так, как указано в данной матрице. 4.Дана целочисленная квадратная матрица (aij) размера 7*7.. Получить b1,...,b7, где bi- это: а) наименьшее из значений элементов, находящихся в начале i-й строки матрицы до элемента aii включительно, б) значение 1 по порядку положительного элемента i-й строки ( если таких элементов нет, то принять bi=-1. ) 5.Дана действительная квадратная матрица размера n*n. Получить x1xn+x2xn- 1+...+xnx1, где xk- наибольшее значение элементов k-го столбца данной матрицы. 1.Написать программу, в ходе выполнения которой круг зеленого цвета, появившись в центре экрана и постепенно расширяясь, увеличивается в размерах в 3 раза, а затем сжимается до начальных размеров. 2.Даны 3 целых числа, определяющих положение центра окружности на экране и ее радиус. Если окружность не пересекает горизонтальную прямую, проходящую через середину экрана, то высветить данную окружность и окружность, симметричную данной относительно этой прямой. 3.Написать программу, в ходе выполнения которой зеленый квадрат, появившись в левом верхнем углу экрана, перемещается вправо вниз по диагонали. 4.Пропеллер состоит из 2 закрашенных треугольников. Получить на экране вращающийся пропеллер. 5.Дано 2 натуральных числа. Написать программу, в ходе выполнения которой отрезок, появившись в левом верхнем углу экрана, передвинется по экрану так, что его левый конец совместится с точкой, положение которой определяется данными числами. Весь путь отрезка должен состоять из 2 участков - горизонтального и вертикального. 6.Дано 8 натуральных чисел x1,y1,l1,h1 и x2,y2,l2,h2. Каждая четверка чисел задает положение на экране прямоугольника со сторонами, параллельными сторонам экрана. Значения x1,y1 определяет положение левого нижнего угла прямоугольника с номером i (i=1,2),li-длину основания, hi-высоту. Построить прямоугольник и закрасить 1-й зеленым цветом, второй- красным. Если прямоугольники пересекаются, то их общую часть закрасить коричневым цветом. 7.Дана последовательность, состоящая из 40 натуральных чисел x1,y1,l1,h1,...,x10,y10,l10,h10. Каждая 4-ка чисел xi,yi,li,hi задает положение прямоугольника на экране. Высветить все прямоугольники и закрасить их коричневым цветом. 8. Дано 6 целых чисел x1,y1,x2,y2,x3,y3. Каждая пара xi,yi(i=1,2,3) определяет положение одной из вершин треугольника на экране. Если данные числа определяют прямоугольный треугольник, высветить его на экране, в противном случае вывести сообшение_1 треугольник не прямоугольный. 1. Система 10 материальных точек на плоскости задана с помощью действительных чисел x1,y1,m1,...,x10,y10,m10, где xi,yi- координаты i-й точки, а mi- ее масса,i=1,...,10. Получить координаты центра масс (центра тяжести) системы, а также расстояния от центра масс до каждой из точек системы. Как изменится программа, если исходные данные будут расположены в следующем порядке: x1,...,x10,y1,...,y10,m1,...,m10 ? УКАЗАНИЕ: Координаты центра масс могут быть вычислены по следующим формулам: Хцм=[pic] ; Y=[pic]; 2. Даны действительные a1,...a18. Получить: а) а1,а10,а2,а11,...,а9,а18, б) а1,а18,а2,а17,...,а9,а10, в) а1+а18,а2+а17,...,а9+а10. 3.Даны символы s1,...s17. Получить: а) s17,s1,s2,...,s16; б) s11,s12,...,s17,s1,s2,...,s10; в) s12,s13,...,s17,s11,s10,...,s1. 4.Даны действительные x1,...,x11,y1,...,y11. Получить действительные x1,...,x11,y1,...,y11, преобразовав для получения xi,yi члены xi,yi по правилу: если они оба отрицательны, то каждый из них увеличить на 0.5, если отрицательно только одно число, то отрицательное число заменить его квадратом, если оба числа неотрицательны, то каждое из них заменить на среднее арифметическое исходных значений. 5.Даны символы s1,....,s80. Определить количество неравенств среди: а)s1=s41,s2=s42,...,s40=s80; б)s1=s80,s2=s79,...,s40=s41. СПИСОК ЛИТЕРАТУРЫ 1. М.Уэйт, С.Прата, Д.Мартин Язык Си: Пер с англ.-М.: Мир, 1988.-463 с.,ил. 2. Уинер Р. Язык Турбо Си: Пер с англ.-М.: Мир, 1991.-384 с.,ил. 3. Берри Р., Микинз Б. Язык Си: введение для программистов: Пер. с англ.- М.:Финансы и статистика, 1988.-с.,ил. 4. TURBO C++. Borland International. Inc. 1990. ----------------------- ...1. ...юю