Учебно-методическое пособие Волгоград 2008 Печатается по решению Учебно-методической комиссии физического факультета Волгу (протокол №1 от 12. 02 2008 г.) Рецензент icon

Учебно-методическое пособие Волгоград 2008 Печатается по решению Учебно-методической комиссии физического факультета Волгу (протокол №1 от 12. 02 2008 г.) Рецензент


Смотрите также:
Учебно-методическое пособие публикуется по решению учебно-методической комиссии факультета...
Учебно-методическое пособие Иркутск 2009 Печатается по решению учебно-методической комиссии...
Учебно-методическое пособие Иркутск 2009 Печатается по решению учебно-методической комиссии...
Учебно-методическое пособие Иркутск 2007 Печатается по решению учебно-методической комиссии...
Учебно-методическое пособие Казань 2010 удк 372. 83: 124...
Учебно-методическое пособие Тобольск, 2008 Печатается по решению кафедры психологии...
Методическое пособие для студентов специальности (направления) "Журналистика"...
Учебно-методическое пособие для студентов экономических специальностей Волгоград 2008...
Методическое указание по написанию курсовой работы по курсу «Защита растений» для студентов...
Учебное-методическое пособие омск 2008 Печатается по решению...
Учебное-методическое пособие омск 2008 Печатается по решению...
Учебно-методическое пособие Казань 2009 Печатается по решению заседания кафедры этнографии и...



Загрузка...
страницы:   1   2   3   4
скачать
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ
РОССИЙСКОЙ ФЕДЕРАЦИИ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«ВОЛГОГРАДСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»


С. В. Феськов


ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ C/C++


Учебно-методическое пособие


Волгоград 2008


Печатается по решению Учебно-методической комиссии
физического факультета ВолГУ
(протокол № 1 от 12.02 2008 г.)


Рецензент

канд. физ.-мат. наук, доц. каф. вычислительных методов
и программирования ВолГУ ^ И. В. Чернышев


Феськов, С. В.

Программирование на языке C/C++ [Текст] : учеб.-метод. пособие
/ С. В. Феськов ; ГОУ ВПО «ВолГУ». – Волгоград : Изд. ВолГУ, 2008. – 84 с., ил.

Настоящее пособие содержит курс лекций и лабораторных работ по программированию для студентов начальных курсов физического факультета ВолГУ. Пособие ориентировано на изучение базовых конструкций языка С/C++ и обретение навыков алгоритмизации расчетных задач. Курс ограничен описанием структурных возможностей языка, не затрагивает вопросов объектно-ориентированной разработки и может рассматриваться как начальный этап обучения дисциплинам программирования. Пособие предполагает знание студентом основ информатики в объеме школьной программы и небольшой опыт работы с персональным компьютером в операционной системе Windows.







© С. В. Феськов, 2008

© Оформление. Издательство

Волгоградского государственного

университета, 2008




СОДЕРЖАНИЕ

ВВЕДЕНИЕ. Turbo C++ 2006 Explorer и консольные приложения 5

1. Программа, язык 5

2. Создание консольного приложения в Turbo C++ 2006 6

3. Компиляция, компоновка и запуск программы 10

4. Общая структура программы на языке C/C++.
Использование библиотек 11

5. Объявления и инициализация переменных.
Стандартные типы данных 12

Лабораторная работа № 1. ОПЕРАЦИИ ВВОДА-ВЫВОДА.
^ АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ 15

1. Консольный ввод-вывод 15

2. Потоковый ввод-вывод 18

3. Арифметические операции и математические функции 20

Типичные ошибки программирования 23

Контрольные вопросы 23

Лабораторные задания 25

Лабораторная работа № 2. ОПЕРАТОР УСЛОВИЯ if-else 27

1. Назначение и синтаксис 27

2. Сокращенные варианты записи 29

3. Вложенные операторы 30

4. Составные логические выражения 32

Типичные ошибки программирования 34

Контрольные вопросы 34

Лабораторные задания 36

Лабораторная работа № 3. ОПЕРАТОР ЦИКЛА for 38

1. Назначение и синтаксис 38

2. Сокращенные варианты записи 41

3. Вложенные операторы цикла 44

Типичные ошибки программирования 45

Контрольные вопросы 46

Лабораторные задания 47


Лабораторная работа № 4. МАССИВЫ I. Поэлементные операции 50

1. Одномерные (линейные) массивы 50

2. Многомерные массивы 52

3. Типизированные константы 54

4. Инициализация элементов массива 55

Типичные ошибки программирования 57

Контрольные вопросы 58

Лабораторные задания 59

Лабораторная работа № 5. МАССИВЫ II.
Алгоритмы поиска и сортировки 61

1. Линейный поиск по условию 61

2. Поиск максимального (минимального) элемента 62

3. Сортировка методом «прямого выбора» 64

4. Сортировка методом «пузырька» 65

Типичные ошибки программирования 66

Контрольные вопросы 67

Лабораторные задания 68

Лабораторная работа № 6. ФУНКЦИИ 71

1. Определение функции 71

2. Вызов функции. Формальные и фактические параметры 73

3. Прототипы функций 75

Типичные ошибки программирования 77

Контрольные вопросы 77

Лабораторные задания 79

^ ПРИЛОЖЕНИЕ А.

Порядок выполнения лабораторных работ. Требования к отчету 81

ПРИЛОЖЕНИЕ Б.

Образец оформления отчета по лабораторной работе 82

^ СПИСОК ЛИТЕРАТУРЫ 83

ВВЕДЕНИЕ

Turbo C++ 2006 Explorer и консольные приложения

1. Программа, язык программирования.

Компьютерной программой будем называть набор инструкций или команд, которые человек (программист) дает компьютеру на выполнение. Среди этих инструкций могут быть как простейшие (например, выполнение арифметической операции), так и более сложные (вывод информации на экран, запись файла на жесткий диск и т.д.). Язык, с помощью которого программист общается с компьютером, называется языком программирования.

Для компьютерного процессора «родным» является машинный язык, содержащий в качестве команд специальные числовые коды. В силу понятных трудностей, связанных с написанием программ в машинных кодах, в настоящее время разработано множество языков высокого уровня, облегчающих процесс программирования, тестирования, отладки и т.д. Основными доводами в пользу использования того или иного языка являются простота и логичность его конструкций; широта его возможностей; наличие удобных библиотек, и т.д. В рамках настоящего курса мы будем использовать язык C, и его более современную модификацию – язык С++, которые получили широкое распространение в прикладном и системном программировании, а также в компьютерном моделировании.

Обычно программа на языке С/C++ представляет собой дисковый файл с расшире­нием CPP (*.cpp). Процесс создания этого файла называют редак­тированием, он, как пра­ви­ло, выполняется с помощью редактора кода (code editor).

По завершении редакти­рования исходный код про­граммы переводится на машин­ный язык. Этот процесс называ­ют компиляцией, он про­изво­дится т.н. компилятором языка (compiler).

Результат этой ста­дии – объектный файл с рас­ши­рением OBJ (*.obj). Завершает разработку программы фаза компоновки, в результате которой создается исполнимый файл с расширением EXE (*.exe), готовый к работе. На схеме указаны все основные стадии созда­ния исполнимого файла.

Современные системы программирования часто объединяют в себе большую часть компонентов, необходимых для создания исполнимого файла, а именно, выполняют одновременно функции редактора кода, компилятора, компоновщика, а также некоторые другие – библиотекаря (librarian), отладчика (debugger), профайлера (profiler), и т.д. Такие системы называют интегрированными средами разработки (IDE, integrated development environment).

Программный пакет Turbo C++ 2006 компании Borland Software является примером такой IDE, которую мы будем использовать в рамках настоящего курса. Explorer-версия этого продукта бесплатна, и может быть загружена с Интернет-сайта разработчика (http://www.turboexplorer.com).

Следует отметить, что Turbo C++ 2006 является прямым наследником популярного программного пакета Borland C++ Builder, а также более современной мульти-язычной системы Borland Developer Studio. Несмотря на ограниченную функциональность Explorer-версии продукта по сравнению с Professional-версией и даже с более ранними версиями C++ Builder, его возможности вполне достаточны для решения большинства задач, возникающих перед начинающим программистом, каким (увы, как правило) является студент начальных курсов физического факультета ВолГУ.

^ 2. Создание консольного приложения в Turbo C++ Explorer.

Далее мы предполагаем, что читатель имеет в своем распоряжении компьютер с операционной системой Windows, на котором установлен пакет Turbo C++ Explorer.

Найдите на Рабочем столе Windows иконку Turbo C++ и запустите программу (альтернативный вариант в случае отсутствия иконки на Рабочем столе – последовательно выберите кнопки Пуск | Все программы | Borland Developer Studio | Turbo C++). Перед вами появится окно приветствия, изображенное на рисунке снизу. Отметим, что здесь и далее возможны незначительные несоответствия тем изображениям, которые вы видите на своем экране, что определяется настройками Вашей системы и версией Turbo C++.




В верхней части окна приветствия (Welcome page, центральная часть экрана) нажмите кнопку New Project (можно поступить иначе, и выбрать в Главном меню последовательно пункты File | New | Other…). Перед вами откроется диалоговое окно New Items, изображенное на следующем рисунке.

Нашей ближайшей задачей является соз­дание консоль­ного приложе­ния, для этого Вам необходимо выбрать иконку Console Application (выде­лена на рис. справа) и нажать кнопку ОК. Далее снимите все флажки в появив­шемся окне New Console Application за исклю­чением флажка Console Application (см. рис. внизу). В качестве языка выберите C++, и снова нажмите OK.

Открывшееся вслед за этим окно (см. следующий по порядку рисунок) представляет собой среду разработки консольного приложения Turbo C++. Она состоит из нескольких компонентов, из которых Вами пока будет использоваться только небольшая часть.

Центральную область открывшегося окна занимает редактор кода. Здесь пользователь набирает исходный текст программы. На рисунке видно, что модуль редактора уже содержит некоторый код – это шаблон консольной программы на языке C++. Отметим, что предоставляемый на начальном этапе работы шаблон не содержит никаких полезных инструкций, и наполнение его осознанным кодом – Ваша основная задача, как программиста и студента ФФ.

В левой части экрана расположены модули Structure и Object Inspector. Мы не будем использовать их при разработке консольных приложений, и поэтому не останавливаемся на их описании. В верхней части экрана, непосредственно под Главным меню, располагается Панель быстрых кнопок, основное назначение которой состоит в дублировании основных пунктов Главного меню. В правой части показанного на рисунке окна расположены модули Менеджера Проекта (Project Manager) и Палитры инструментов (Tool Palette). Последние оказываются полезными только при разработке сложных оконных приложений, и поэтому нами в рамках данного вводного курса также не рассматриваются.

Теперь перейдите в окно редактора, и добавьте в код программы несколько строк в соответствии с приведенным ниже листингом (эти строки выделены полужирным шрифтом)


//--------- Традиционная Hell-программа -----------


#pragma hdrstop

#include

#include


#pragma argsused

int main(int argc, char* argv[])

{

cout << ”Hello, world!”;

getch();

return 0;

}

//-------------------------------------------------

Когда текст програм­мы набран, сохраните на жестком диске. Для этого в Глав­ном меню выберите по­сле­довательно пункты File | Save As… В поя­вившемся диалоговом окне (показано справа) найдите свой подкаталог в папке STUDY (этот подкаталог должен быть пред­варительно создан), вой­дите в него, введите имя файла, на­пример hello, в соответствующее поле и нажмите кнопку Сохранить.

Перед вами появится еще одно диалоговое окно, в котором потребуется ввести также название проекта. В поле Имя файла введите, например, hello1, и снова нажмите кнопку Сохранить.

^ 3. Компиляция, компоновка и запуск программы.

Теперь исходный код программы hello1 набран и записан на диск, и он может быть откомпилирован и скомпонован. Фаза компиляции сопровождается проверкой синтаксиса программы, все найденные при этом ошибки сообщаются пользователю.

Выберите в Главном меню последовательно пункты Project | Compile Unit, или, иначе, одновременно нажмите клавиши Alt и F9. Это действие запустит компиляцию, ее ход будет отражаться в открывшемся окне Compiling. По окончании процесса в окне будет в частности содержаться информация о количестве программных ошибок Errors и предупреждений Warnings, если таковые были зафиксированы компилятором в написанной Вами программе.

Ошибки ^ Errors означают нарушения синтаксиса С/C++, которые делают невозможной дальнейшую компоновку программы. Все ошибки должны быть устранены, для чего можно воспользоваться сообщениями компилятора, в которых указывается номер строки и краткое описание ошибки.

Предупреждения Warnings означают подозрительные конст­рукции, которые могут функционировать неправильно – не так, как это задумано программистом. Наличие предупреждений не приводит к останову процессов компиляции и компоновки. Однако к ним также следует относиться очень внимательно, так как в большинстве случаев они суть следствия логических ошибок в про­грамме, которые трудно поддаются обнаружению.

Будем считать, что код набранной Вами программы не содержит ошибок и предупреждений, в противном случае еще раз проверьте его на соответствие тому листингу, который приведен выше. Выберите Project | Build hello1 в главном меню. Будет запущен процесс последовательной компиляции и компоновки исполнимого файла. В отсутствие ошибок компоновки, в Вашем подкаталоге будет создан файл hello1.exe (проверьте!). Это – возможно, Ваша первая работающая программа на языке C++.

Остается запустить разработанную программу (Windows-приложение, хотя и консольное) на выполнение. Это можно сделать, дважды щелкнув на иконке hello1.exe.

Подчеркнем, однако, что существует более удобный способ компиляции/запуска программы, использующий возможности IDE. Выберите меню Run | Run, или, иначе, просто нажмите клавишу F9. Turbo C++ откомпилирует, скомпонует и запустит вашу программу одним действием. На следующей картинке изображено открывшееся окно приложения (показано в негативе)




Так как нами создано консольное приложение, вся его информация выводится в это окно в виде простого текста. Приложение пока не делает ничего более полезного, чем просто выводит на экран «Hello, world!». Нажмите любую клавишу, при этом программа завершит свою работу, и окно приложения будет закрыто.

^ 4. Общая структура программы на языке С/C++.

Использование библиотек.

Приведенный выше листинг показывает структуру программы hello1, которая является общей для любой программы на С/C++, в том числе написанной в Turbo C++ Explorer.

Программа начинается с конструкций #pragma и #include –директив препроцессора. Запись #include означает включение в код программы заголовочного файла библиотеки iostream.h – стандартной библиотеки потокового ввода/вывода (input/output stream). Аналогичная запись #include включает библиотеку консольного ввода/вывода (console input/output). Эти действия делают возможным вывод на экран текстовой строки с помощью оператора cout << из состава библиотеки iostream.h (см. код программы ниже), а также использование функции getch из состава библиотеки conio.h для задержки завершения работы приложения до нажатия любой клавиши.

В общем случае, программная библиотека представляет собой набор функций, облегчающих работу пользователя. Функции задействуются путем их вызова. В таблицах ниже приведены некоторые из функций библиотек stdio.h и conio.h. Более подробную информацию об этих и других библиотеках C++ можно найти в литературе, или в справке Turbo C++ (доступна через меню Help)

frame4

frame5

Вслед за препроцессорными директивами, программа содержит заголовок функции с именем main. Функция с таким именем является обязательной в любой программе на C++, так как она служит той точкой, с которой программа начинает свою работу. Фигурные скобки задают тело функции, которое состоит из набора объявлений, определений и операторов. Каждое из них завершается символом точки с запятой «;». В приведенном выше листинге тело функции main завершается оператором return 0, который в данном случае является оператором успешного завершения программы.

Выполнение программы начинается с первого оператора внутри main, и продолжается последовательно, шаг за шагом, до тех пор, пока управление не достигнет строки с оператором return. В этот момент программа завершает работу. В листинге hello1 тело функции содержит всего два оператора – оператор вывода на экран текстовой строки и оператор ожидания нажатой клавиши.

Отметим также в листинге строки, начинающиеся двойным символом слэша «//» – это комментарии к программе, то есть текст, который не компилируется и используется для улучшения «читаемости» программы.

^ 5. Объявления и инициализация переменных.

Стандартные типы данных.

При ближайшем рассмотрении, основной задачей большинства компьютерных программ является быстрое выполнение огромного количества простейших вычислительных операций, таких, например, как сложение, вычитание, ­и т.д. В целях увеличения производительности этих операций, промежуточ­ные результаты расчетов хранятся в оперативной памяти (RAM). Для размещения своих данных в RAM программы используют переменные.

В языке C++ имеется несколько встроенных (стандартных) типов переменных: целочисленные, вещественные, символьные, строковые, логические (булевы) и др. Тип переменной означает вид информации, которая может храниться в этой переменной. Ниже приведена таблица наиболее употребительных типов

специфи-катор

название типа

число байт

диапазон возможных значений

int

целый

4

от -231 до 231

float

вещественный

4

от 3.4•10-38 до 3.4•10+38

double

вещественный двойной точности

8

от 1.7•10-308 до 1.7•10+308

bool

логический

1

true и false, всего – 2

char

символьный

1

символы ASCII, всего – 256

Перед использованием любая переменная должна быть объявлена, что означает указание ее типа и имени. В качестве имени может использоваться почти любая буквенно-цифровая комбинация. Основные требования к имени: оно должно начинаться с буквы, должно быть уникальным, и не должно повторять ключевые языковые конструкции языка C++.

При объявлении переменная также может быть инициализирована некоторой величиной из диапазона допустимых значений. Для этой цели используется операция присваивания «=». Общая форма объявления переменной:

тип имя [= начальное_значение];

В квадратных скобках здесь указано необязательное выражение. В большинстве случаев неинициализированная переменная не имеет определенного значения (точнее, ее значение непредсказуемо).

Объявление переменной может размещаться почти в любом месте внутри программы. Однако оно всегда должно предшествовать первому обращению к этой переменной. Нарушение этого правила является синтаксической ошибкой, на которую компилятор прореагирует сообщением вида «Error: Undefined symbol …».

Рассмотрим несколько примеров объявления и инициализации переменных:

int x = 10; // переменная целого типа с именем x, и начальным значением 10

float a, b, c; // вещественные переменные a, b и c, их значения не определены

char sym = ’a’; // символьная переменная sym, инициализирована символом ‘a’

char string[20]; // пустая текстовая строка из 20 символов с именем string

Обратите внимание на использование запятой при одновременном объявлении нескольких переменных, и квадратных скобок при указании размера текстовой строки.

Создайте новое консольное приложение со следующим исходным кодом

//------------- Расчет роста в дюймах -------------


#pragma hdrstop

#include

#include


#pragma argsused

int main(int argc, char* argv[])

{

char name[20];

float cm, inch;


cout << "Enter your name - "; // введите свое имя

cin >> name;

cout << "Enter your height - "; // введите свой рост в см

cin >> cm;

inch = cm/2.54;

cout << "Hello, " << name << "!" <

cout << "Your height is " << inch << " in";

getch();

return 0;

}

//-------------------------------------------------

Запишите набранную программу в свой дисковый каталог под любым именем. Запустите программу на выполнение и протестируйте ее работу. Проанализируйте листинг исходного кода и объясните, для каких целей здесь использованы переменные name, cm, inch. Сформулируйте для себя алгоритм работы этой программы.

Лабораторная работа №1

^ ОПЕРАЦИИ ВВОДА-ВЫВОДА.

АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ.

Удобная компьютерная программа – это всегда программа, корректно взаимодействующая с пользователем, даже если пользователем является сам программист. Такая программа запрашивает все необходимые для ее работы данные, используя операции ввода, и выдает результаты работы с помощью операций вывода. Стандартным устройством ввода в ПК считается клавиатура, устройством вывода – экран монитора (точнее, окно приложения на экране). Совокупность клавиатуры и монитора часто называют консолью.

С/C++ дает пользователю различные возможности для программирования ввода-вывода. Эти возможности реализуются с помощью функций, входящих в состав различных библиотек. Далее мы рассмотрим две из них – консольный и потоковый ввод-ввод.

^ 1. Консольный ввод-вывод.

Консольный ввод-вывод организуется с помощью стандартных библиотек stdio.h и conio.h, что предполагает наличие директив #include и/или #include в заголовочной части программы.

Функция printf используется для вывода информации на экран. С ее помощью в окне приложения можно распечатать как строку простого текста, так и значения переменных различных типов. Общая форма записи соответствующего оператора

printf(”форматная_строка”[, перем1][, перем2][, ...]);

Здесь в круглых скобках указаны параметры (или аргументы) функции printf, причем первый из них, форматная строка в двойных кавычках, является обязательным. Остальные параметры, переменные различного типа, указываются по необходимости. Форматная строка может содержать

  • обычные текстовые символы, которые выводятся на экран в том же виде, как они записаны в форматной строке,

  • управляющие символы, в частности символы перевода строки «\n», табуляции «\t», и некоторые другие (начинаются со знака обратной косой черты «\»),

  • символы форматного преобразования, которые используются для вывода значений переменных (начинаются со знака процента «%»).

Вслед за форматной строкой, в функции printf через запятую может быть указан список всех переменных, значения которых выводятся на экран. При этом внутри форматной строки должны быть разме­щены соответствующие символы форматного преобразования. Численное значение переменной будет выведено в ту позицию, в которой указан соответствующий символ. Символы преобразова­ния для стандартных типов данных указаны в следующей таблице

переменная

тип данных С/C++

символ преобразования

целое число

int

%d

вещественное число

float, double

%f

текстовый символ

char

%c

текстовая строка

char *, char [ ]

%s

К примеру, запись printf(”Hello!”) означает вывод на экран простой текстовой строки «Hello!». Запись printf(”%d”, x) выводит на экран значение целочисленной переменной x. Случай, когда на экран выводятся сразу две переменные, иллюстрируется следующим примером



Здесь верхние стрелки указывают позиции внутри форматной строки, куда будут выведены значения переменных i и x. Остальной текст форматной строки будет отображен без изменения. К примеру, если переменная i к моменту выполнения этого оператора имела значение 5, а переменная x была равна 1.5, на экран будет выведено: «Значение 5-й переменной равно 1.500000».

Важным является соответствие символа форматного преобразования (%d, %f, и т.д.) действительному типу переменной (int, float, double и т.д.). Несоблюдение этого правила ведет к непредсказуемому результату на экране. Поэтому использованная в примере переменная i должна быть объявлена ранее как целочисленная (int), а x – как вещественная (float или double).

Функция printf также дает возможности управления выводом с помощью эскейп-последовательностей, начинающихся с символа ESC (обратный слэш «\»). Некоторые из них приведены в таблице

управляющий символ

название

действие

\n

lf (line feed)

перевод строки

\t

ht (horizontal tab)

горизонтальная табуляция

\v

vt (vertical tab)

вертикальная табуляция

\a

bel (audible bell)

звуковой сигнал

\b

bs (backspace)

возврат на шаг (забой)

\’

‘ (single quote)

одинарная кавычка

\”

“ (double quote)

двойная кавычка

Консольный ввод может быть организован с помощью функции scanf. Вводимая при этом информация помещается в некоторую переменную. Общая форма записи этого оператора

scanf(“форматная_строка”, &перем1[, &перем2][, ...]);

Аргументы функции scanf во многом аналогичны соответствующим аргументам printf, за исключением того, что в качестве дополнительных параметров scanf принимает не имена переменных, а их адреса. В силу этого перед именем каждой переменной в scanf должен стоять знак операции взятия адреса «&» (амперсанд).

В момент передачи управления функции scanf выполнение программы приостанавливается в ожидании ввода от пользователя. Вся вводимая с клавиатуры информация отображается на экране (эхо-вывод). Во время ввода пользователю доступны простейшие возможности редактирования, в частности клавиша забоя Backspace. Выполнение оператора завершается, как только пользователь нажимает клавишу Enter. Введенная информация при этом будет приведена к соответствующему типу и записана в переменную.

Функция getch из библиотеки conio.h не имеет параметров и используется для ввода с клавиатуры отдельного символа нажатой клавиши. В отличие от scanf, эта функция не требует нажатия Enter для подтверждения конца ввода. Оператор завершает работу сразу после того, как нажата любая клавиша. Ваша программа может анализировать возвращаемое этой функцией значение с тем, чтобы немедленно на него реагировать. Мы будем также использовать эту функцию в конце программы для того, чтобы приостановить закрытие окна на время ознакомления с результатами работы.

Рассмотрим следующий пример работы с функциями консольного ввода-вывода.

Пример 1. Напишите программу, выводящую на экран символы звездочки «*» в форме ромба, как это показано на рисунке справа.

Решение. Задача может быть решена несколькими способами. Ниже приводится один из вариантов.

//----------- Консольный вывод ----------

#pragma hdrstop

#include // Подключаем библиотеки

#include // консольного ввода-вывода


#pragma argsused

int main(int argc, char* argv[])

{

printf(" *\n"); // В программе используем несколько

printf(" * *\n"); // последовательных вызовов функции

printf(" * *\n"); // printf для вывода на экран

printf("* *\n"); // отдельных строк рисунка.

printf(" * *\n"); // Каждую строку заканчиваем

printf(" * *\n"); // управляющим символом ‘\n’.

printf(" *\n"); //

getch(); // Задержка до нажатия любой клавиши

return 0; // Завершение программы

}

//---------------------------------------

^ 2. Потоковый ввод-вывод.

Потоковый ввод-вывод организуется с помощью библиотеки iostream.h, что предполагает наличие директивы #include в заголовочной части программы. В библиотеке определены два потоковых объекта с именами cin и cout, которые связаны с клавиатурой и экраном компьютера соответственно. Эти объекты используются как источник входящей информации (поток cin) и контейнер исходящей информации (поток cout). Для них определены следующие операции

  • извлечение из потока cin (знак операции «>>»),

  • размещение в потоке cout (знак операции «<<»).

Общая форма записи этих операций

cin >> переменная;

cout << текстовая строка_или_переменная;

Здесь первая строка означает извлечение числового значения из потока cin (т.е. ввод с клавиатуры) и его запись в переменную. Вторая строка – размещение простой текстовой стоки или числового значения переменной в потоке cout (т.е. вывод на экран).

Примеры:

cout << index; // выводит на экран значение index

cin >> x; // вводит значение x с клавиатуры

cout << ”Enter your name”; // выводит текстовую строку

cin >> name; // вводит переменную name

В отличие от соответствующих конструкций консольного ввода-вывода, потоковые операторы нигде не требуют явного указания типа переменных. В приведенных выше примерах index, x, name могут быть переменными любого типа (int, float, char и т.д.), и во всех случаях представленные операторы будут работать корректно. Это происходит за счет автоматического определения типа переменной в потоковых операциях. Программист получает дополнительные удобства в связи с исключением ошибок приведения типов, которые характерны для консольных операций. Начинающим программистам C++ часто рекомендуется использовать именно потоковые операции, как более надежную (и современную) технику программирования.

Поток cout допускает наличие в выводимой текстовой строке управляющих символов или ESC-последовательностей (`\n`, `\t`, `\b` и др., см. таблицу выше), действие которых аналогично их действию в операторе printf. Кроме того, вывод в cout может управляться с помощью специальных потоковых манипуляторов. Например, манипулятор endl (end line) приводит к завершению текущей строки и переводу курсора на новую экранную строку. Запись cout << endl, таким образом, приводит к тому же результату, что и кон­струкция cout << ”\n”.

Решение сформулированной выше задачи о выводе на экран фигуры в форме ромба средствами потокового ввода-вывода показано в следующем листинге

//----------- Потоковый вывод ----------

#pragma hdrstop

#include // для потокового вывода в cout

#include // для использования getch


#pragma argsused

int main(int argc, char* argv[])

{

cout << " *\n";

cout << " * *\n";

cout << " * *\n";

cout << "* *\n";

cout << " * *\n";

cout << " * *\n";

cout << " *\n";

getch();

return 0;

}

//--------------------------------------

Откомпилируйте код этой программы, запустите на выполнение и проверьте результат.

^ 3. Арифметические операции

и математические функции.

Выполнение вычислений составляют основу подавляющего большинства компьютерных программ. Для этой цели C++ использует множество арифметических операций, каждая из которых имеет свой знак. Ниже приведена таблица наиболее употребительных бинарных операций, то есть операций c двумя аргументами, с примерами их программной записи

название операции

знак в С/C++

алгебраическое выражение

запись на С/C++

сложение

+

f + 7

f + 7

вычитание

-

p - c

p – c

умножение

*

bm

b*m

деление

/

x/y

x/y

остаток от деления

%

r mod s

r % s

Круглые скобки в арифметических выражениях C++ исполь­зуются так же, как в алгебре. При определении порядка вычисле­ний сложных выражений C++ придерживается стандартных правил старшинства операций: первыми выполняются операции в скобках; затем операции умножения, деления, и вычисления остатка; в завершение – операции сложения и вычитания. Пример:

алгебра:  запись на С/C++: .

В последнем выражении скобки необходимы для сохранения правильного порядка операций – сначала суммирование, затем деление.

Кроме арифметических операций, язык C++ дает удобные возможности использования математических функций. Большая их часть содержится в библиотеке math.h, и для пользования ими требуется соответствующая директива #include . Наиболее употребительные математические функции приведены в таблице

название функции

обозначение

запись в С/С++

синус



sin(x)

косинус



cos(x)

тангенс



tan(x)

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



sqrt(x)

возведение в степень



pow(x,y)

экспонента



exp(x)

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



log(x)

модуль



fabs(x)

арксинус



asin(x)

арккосинус



acos(x)

арктангенс



atan(x)

Все перечисленные функции принимают в качестве аргумента вещественную переменную (или константу) и возвращают вещественный результат. Использовать функции можно путем их вызова, аналогично вызову функций ввода-вывода. Например, в результате выполнения следующего набора операторов переменная y получит значение квадратного корня из 2:

float x = 2.0; float y = sqrt(x);

В библиотеке math.h также определены некоторые часто используемые математические константы, часть из которых приведена ниже

константа

запись в С/С++



M_PI



M_E



M_LN2



M_LN10




Пример 2. Напишите программу, запраши­ваю­щую у пользователя длины сторон тре­уголь­ника a, b, c и выводящую на экран углы , , .

Решение. Воспользуемся известной формулой косинусов, которую последовательно применим для нахождения всех углов треугольника. Рассчитанные значения , ,  переведем из радианов в градусы, помножив их на 180/.

//----------- Расчет углов треугольника -----------

#pragma hdrstop

#include // для потокового ввода-вывода

#include // для getch()

#include // для acos(x) и M_PI


#pragma argsused

int main(int argc, char* argv[])

{

float a, b, c; // объявляем переменные a,b,c

cout << "input a - "; // выводим на экран приглашение

cin >> a; // вводим значение a, и т.д.

cout << "input b - ";

cin >> b;

cout << "input c - ";

cin >> c;


float alpha, betta, gamma; // объявляем переменные

alpha = acos((b*b + c*c - a*a)/(2*b*c)); // считаем alpha

betta = acos((a*a + c*c - b*b)/(2*a*c)); // считаем betta

gamma = acos((a*a + b*b - c*c)/(2*a*b)); // считаем gamma


cout << "\n alpha = " << alpha/M_PI*180; // выводим все

cout << "\n betta = " << betta/M_PI*180; // углы на экран

cout << "\n gamma = " << gamma/M_PI*180; // (в градусах)

cout << "\n " << alpha + betta + gamma; // сумма углов=pi?

getch(); // задержка

return 0; // завершение

}

//----------------------------------------------

Наберите и откомпилируйте этот код. Сделайте несколько расчетов с различными входными данными. Проверьте правильность результатов в характерных случаях равностороннего, прямоугольного треугольника и т.д. Убедитесь, что сумма  +  +  в рамках вычислительной погрешности всегда равняется .

^ Типичные ошибки программирования

  1. Отсутствует директива #include, подключающая необходимую библиотеку ввода-вывода. На этапе компиляции ошибка приводит к сообщениям вида “Error: Undefined symbol cout, cin, printf, scanf”.

  2. Отсутствует точка с запятой в конце оператора. Последствия этой ошибки могут быть разнообразны, но весьма часто это сообщения вида “Error: Statement missing ;”, “Error: Declaration syntax”, “Error: Undefined symbol …”.

  3. Использование операции >> при работе с потоком вывода cout, и операции << при работе с потоком ввода cin. Сообщение – “Error: operator not implemented …”.

  4. Несоответствие символа форматного преобразования (%d, %f и т.д.) типу переменной (int, float, и т.д.) в операторах консольного ввода-вывода printf и scanf. Ошибка не распознается компилятором, однако приводит к неправильной работе соответствующих функций.

  5. Используемая в программе переменная не объявлена. Такая ошибка приводит к сообщению “Error: Undefined symbol …”.

  6. Нарушена парность скобок в записи сложного алгебраического выражения.

Контрольные вопросы

  1. Общая форма записи основных операторов консольного ввода-вывода. Назначение их аргументов. Управляющие символы и символы форматного преобразования. Примеры.

  2. Стандартные объекты потокового ввода-вывода cin и cout. Общая форма записи основных операций. Потоковые манипуляторы. Примеры.

  3. Бинарные арифметические операции. Правила старшинства операций. Математические функции и константы.

  4. Найдите синтаксические и логические ошибки в приведенных ниже конструкциях

    а) int a; b; c;

    double x,


    б) int i;

    i > 0;

    в) int k = 3;

    3 = k;


    г) int a, b, c;

    float a, b, c;

    д) int i = 0;

    j = 0;

    int j;


    е) double x, y = 1.

    x = sin(y).

    y = sin(x).

    ж) float x = 2;

    printf(”%d”, x);


    з) float x;

    scanf(”%f”, x);

    и) int a, b;

    cout >> b;

    cin << a;


    к) float x, y, z;

    z = pow(xy);

    л) float x, y, z;

    z = sin(x,y);


    м) int a = 1;

    int b = cos(a);


    н) float x = -0.5;

    float y = |х|;


    о) float x = 1.5;

    float i = 2*exp(x));

  5. Определите, что будет выведено на экран в результате выполнения приведенных ниже листингов. Предполагайте, что переменные n, m, x, y объявлены следующим образом:

int n = 1, m = 2;

float x = 2.5, y = 5;


а) cout << ”x = x”;



б) cout << ”x = ” << x;

в) cout << x <<”=”<< x;


г) cout << x+y << ”!”;

д) printf(”%d!”, n+m);


е) printf(”%d%d”, n, 5);

ж) float z = n + m * x;

printf(”z = %f”, z);


з) cout << ”xx\nxx\nxx”;

  1. Запишите оператор или набор операторов, печатающих на экране заданную фигуру


а)

frame7

б)

frame8

в)

frame9



Лабораторные задания

  1. Напишите программу, рассчитывающую значение заданной функции и выводящую его на экран. Значения аргументов должны вводиться с клавиатуры.

а) ;


б) ;

в) ;

г) ;

д) ;

е) ;

ж) ;

з) ;

и) ;

к) .




  1. Напишите программу, запрашивающую у пользователя радиус круга и выводящую на экран диаметр, длину окружности и площадь этого круга.

  2. Напишите программу, запрашивающую длину основания и высоту равнобедренного треугольника и вычисляющую длины всех его сторон.

  3. Напишите программу, вычисляющую объем и площадь поверхности шара по заданному с клавиатуры значению радиуса.

  4. Напишите программу, вычисляющую радиус окружности, вписанной в правильный n-угольник, по известной длине его стороны a. Значения n и a вводятся с клавиатуры.

  5. Напишите программу, вычисляющую радиус окружности, описанной вокруг правильного n-угольника, по известной длине его стороны a. Значения n и a вводятся с клавиатуры.

  6. Даны координаты трех точек на плоскости A(x1,y1), B(x2,y2) и C(x3,y3). Напишите программу, вычисляющую величину угла ABC (в градусах).

  7. Напишите программу, вычисляющую период обращения вокруг Земли спутника, находящегося на круговой орбите на расстоянии R (км) от поверхности.

  8. Напишите программу, вычисляющую угол преломления луча света, падающего под углом из воздуха на поверхность вещества с показателем преломления n.

  9. На депозит в банке была внесена сумма S0 (тыс. руб.) на срок R (месяцев). Напишите программу, вычисляющую сумму вклада S по истечении срока, если процентная ставка по данному виду вклада составляет d% годовых.

  10. Напишите программу, вычисляющую массу атомов ^ M (г) радиоактивного вещества в образце по истечении времени t (ч), если в начальный момент она равняется M0. Период полураспада задан – T (ч). M0 , T, t вводятся с клавиатуры.

  11. Напишите программу, вычисляющую сумму бесконечной геометрической прогрессии b1, b2, b3, b4, если известны b1 и знаменатель прогрессии q. Значения b1 и q вводятся с клавиатуры.

Лабораторная работа №2

ОПЕРАТОР УСЛОВИЯ if-else

^ 1. Назначение и синтаксис.

Оператор условия if-else служит для выбора направления работы программы в зависимости от условий, сложившихся в данной точке программы на момент ее выполнения.

Общая форма записи условного оператора

if(<условие>)

{

<блок операторов 1>;

}

else

{

<блок операторов 2>;

}

Если на момент выполнения <условие> истинно, программа передает управление <блоку операторов 1> и, далее, первому оператору за пределами конструкции if-else. При этом <блок операторов 2> не выполняется. Иначе, если <условие> ложно, выполняется <блок операторов 2>, а <блок операторов 1> пропускается. Соответствующая блок-схема



Фигурные скобки в синтаксисе оператора if-else используются для выделения в тексте блоков 1 и 2. Старайтесь располагать закрывающую скобку под открывающей для улучшения читаемости программного кода. Для этой же цели текст внутри фигурных скобок необходимо смещать вправо на несколько позиций.

В качестве условия в операторах if-else могут использоваться любые логические выражения, принимающие значения «истинно» или «ложно» (true – false). Ниже приведена таблица с указанием простейших операций сравнения целых и вещественных чисел


операция

знак операции

пример записи на C/С++

больше

>

A > B

меньше

<

C < 2

больше либо равно

>=

k >= 0

меньше либо равно

<=

i <= 10

равно

==

x == y

не равно

!=

D != 0



Пример 1. Требуется написать программу, переводящую температуру по шкале Цельсия TC (°С) в температуру по Кельвину TK (К). Значение TC вводится пользователем с клавиатуры.

Решение. Используем известную формулу преобразования –TK = TC – T0, где T0 = –273 °С – температура абсолютного нуля. Будем считать введенное TC некорректным, если оно меньше T0.

//--------------- Kelvin vs Celsius -----------

#pragma hdrstop

#include // для потокового В/В

#include // для консольного В/В (getch)


#pragma argsused

int main(int argc, char* argv[])

{

float T0 = -273; // объявляем и инициализируем T0

float Tc, Tk; // объявляем вещественные Tc и Tk


cout<<" Vvedite Tc = "; // выводим приглашение

cin>>Tc; // запрашиваем Tc


if(Tc// проверяем условие Tc
{

cout<<" Tc < T0!"; // условие истинно, выводим на

} // экран сообщение об ошибке

else

{

Tk = Tc-T0; // условие ложно, рассчитываем

cout << " Tk = " << Tk; // Tk и выводим на экран

}

getch(); // задержка до нажатия на клавишу

return 0; // завершение программы

}

//---------------------------------------------

Наберите приведенный выше код, откомпилируйте его и запустите программу на выполнение. Исследуйте результаты работы при различных значениях TC.

^ 2. Сокращенные варианты записи.

При программировании обыденной является ситуация, когда требуются некоторое действие в ответ на сложившиеся условия (например, если получены неверные исходные данные от пользователя, то выдать сообщение об ошибке и выйти из программы). В таких случаях в программах на C++ может использоваться сокращенная запись оператора условия с отсутствующим блоком else. Общая форма такой записи

if(<условие>)

{

<блок операторов>;

}

Здесь в случае истинности условия управление передается блоку операторов в фигурных скобках. В случае ложности условия этот блок пропускается. Соответствующая блок-схема отличается от предыдущей отсутствием одного «плеча»




Другой вариант сокращения применяется в случае, когда какой-либо из блоков if или else состоит только из одного оператора. В этом случае допускается отсутствие фигурных скобок, ограничивающих этот блок.

if(<условие>)

оператор 1;

else

оператор 2;

Здесь в качестве операторов 1 и 2 могут быть не только простые однострочные арифметические действия или операторы ввода-вывода, но и сложные многострочные конструкции, например другие (вложенные) операторы условия или операторы цикла, которые будут рассмотрены ниже.

^ 3. Вложенные операторы.

Операторы условия могут быть вложенными друг в друга, в соответствии с тем программным алгоритмом, который они реализуют. Допускается произвольная степень их «вложенности».

Если один оператор if-else вложен в другой, то первый оператор входит во второй полностью, а не только какой-либо одной своей частью if или else. Недопустимым является частичное перекрывание между собой их отдельных блоков.


A) правильная запись


if(a<=b)

{

if(x!=0)

cout<<”x!=0”;

else

{

x = 1;

y = 0;

}

}

else

{

a = b;

cout<
}


Б) ошибочная запись


if(a<=b)

{

if(x!=0)

cout<<”x!=0”;

else

{ // начало else

x = 1;

y = 0;

}

else

{

} // конец else

a = b;

cout<
}


В приведенном примере один из операторов (выделен полужирным шрифтом) вложен в другой. Запись Б) является ошибочной в силу того, что блок else внутреннего оператора условия частично пересекается с обоими блоками if и else внешнего оператора.

Пример 2. Пользователь вводит с клавиатуры три целых числа a, b, c. Необходимо вывести на экран наибольшее из этих чисел.

Решение. Один из возможных алгоритмов решения этой задачи показан на следующей блок-схеме.




Схема может быть реализована программно с помощью вложенных операторов if-else

//-------- Выбор наибольшего из 3 чисел ---------

#pragma hdrstop

#include

#include


#pragma argsused

int main(int argc, char* argv[])

{

float a, b, c; // объявляем три переменные


cout<<"Vvedite a - "; // вводим значения a, b, c

cin>>a;

cout<<"Vvedite b - ";

cin>>b;

cout<<"Vvedite c - ";

cin>>c;


if(a>b) // если a > b

if(a>c) // и если a > c

cout<<" max = "<
else // иначе, т.е. если a <= с

cout<<" max = "<
else // иначе, т.е. если a <= b

if(b>c) // и если b > c

cout<<" max = "<
else // иначе, т.е. если b <= а

cout<<" max = "<

getch(); // задержка до нажатия любой клавиши

return 0;

}

//------------------------------------------------

Разберите блок-схему этого алгоритма и его программную реализацию. Модифицируйте алгоритм и программный код для поиска наименьшего из трех чисел.

^ 4. Составные логические выражения.

Условие в операторе if-else может быть выражено не только в виде простого сравнения двух числовых значений. Например, весьма распространены двойные условия, которые в математике записываются в виде «a < b < c». Запись означает, что значение b лежит в диапазоне между значениями a и c. В программе такие условия должны быть переформулированы с использованием простых операций сравнения и логических операций «И», «ИЛИ», «НЕ»


логическая операция

знак в С++

наименование знака

И

&&

двойной амперсанд

ИЛИ

||

двойная вертикальная черта

НЕ

~

тильда



В частности, выражение «a < b < c» сформулируем как «a меньше b, и b меньше c». На С++ это будет записано как (a
if((a
{

… … …;

}

Пример 3. На пустой шахматной доске в позиции (n,m) находится белая пешка, в позиции (k,l) – черный слон. Здесь первая координата есть номер столбца шахматной доски, вторая – номер строки (обе изменяются в диапазоне от 1 до 8). Оцените текущую ситуацию в соответствии с тремя вариантами

  • пешка находится под ударом,

  • слон находится под ударом,

  • слон и пешка в «безопасности».

Решение. Примем во внимание, что пешка может атаковать две ближайшие к себе позиции по диагонали вперед, а слон атакует обе свои диагонали полностью. Отсюда могут быть сформулированы условия

  • «((k = n+1) ИЛИ (k = n-1)) И (l = m+1)» – атака пешки на слона,

  • «(k+l = n+m) ИЛИ (k-l = n-m)» – атака слона на пешку,

  • иначе фигуры в безопасности.

//------------- Шахматная композиция ------------

#pragma hdrstop

#include

#include


int main(int argc, char* argv[])

{

int n,m,k,l;


cout<<"Koordinaty beloi peshki:"<
cout<<" vvedite n - ";

cin>>n;

cout<<" vvedite m - ";

cin>>m;

cout<<"Koordinaty chernogo slona:"<
cout<<" vvedite k - ";

cin>>k;

cout<<" vvedite l - ";

cin>>l;


if(((k==n+1)||(k==n-1))&&(l==m+1)) // атакован слон

cout<
else

if((k+l==n+m)||(k-l==n-m)) // атакована пешка

cout<
else // нет атаки

cout<

getch();

return 0;

}

//-----------------------------------------------

Откомпилируйте и запустите программу на выполнение. Проверьте результаты ее работы при различных положениях пешки и слона.

^ Типичные ошибки программирования

  1. Отсутствуют круглые скобки в записи условия. Эта ошибка распознается на этапе компиляции и сопровождается сообщением – «Error: If statement missing ...».

  2. Сразу после круглых скобок с записью условия стоит лишняя точка с запятой. При отсутствии блока else такая ошибка не будет распознана компилятором и будет воспринята как пустой оператор if. Точка с запятой после ключевого слова else также является синтаксической ошибкой.

  3. Проверка на равенство двух переменных записано с помощью одиночного знака «=» вместо двойного знака «==». Компилятор посчитает такую запись операцией присваивания, что приведет к неправильной работе программы. Сообщения об ошибке в этом случае не выдается, однако появляется предупреждение «Warning: Possibly incorrect assignment».

  4. Частично перекрываются блоки if и/или else двух вложенных друг в друга условных операторов. Последствия этой ошибки обычно трудно предсказуемы. Иногда это приводит к сообщению вида «Error: Misplaced else».

  5. Неправильная запись составного условия. Возможные варианты ошибок – нарушение парности скобок, ошибки в знаках логических операций И, ИЛИ, НЕ.

Контрольные вопросы


  1. Общая форма записи оператора if-else и назначение его функциональных блоков. Блок-схема и алгоритм работы.

  2. Сокращенные формы оператора if-else. Привести примеры.

  3. Вложенные операторы условия. Привести примеры.

  4. Составные логические выражения и их использование в операторах if-else. Привести примеры.

  5. Найдите синтаксические ошибки в приведенных ниже языковых конструкциях. Учтите, что переменные a,b,c объявлены как целые (int), а x,y – как вещественные (float).

    а) if(a > b);

    b = 5;

    else;

    x = y;


    б) if(5 > b)

    {

    a = 25*x + y;

    5 = b;

    }

    else

    cout<<”oshibka!”;


    в) if(a = b)

    cout<<”a ravno b!”;

    else

    {

    cout<<”a i b ne ravny”;

    }


    г) if(a > b)

    a > b;

    else

    a < b;



    д) if(x > 0)

    {

    y = 2*sin(x)*exp(-x);

    a = sqrt(x*x);

    else

    }

    y = 0;


    е) if(x > 0)

    {

    y = 2*sin(x)*exp(-x);

    }

    a = sqrt(x*x);

    else

    y = 0;

    ж) if(5 > b > c)

    cout<<”OK!”;


    з) if((5 > b)(b > c))

    cout<<”OK!”;

  6. Определите, что будет выведено на экран в результате выполнения приведенных ниже фрагментов кода. Считайте, что переменные a, b, c объявлены как целочисленные (int) и инициализированы значениями 1, 5 и 10, соответственно.

    а) if(a > b)

    a = b + 1;

    else

    b = a - 1;

    cout<

    б) if(5 > b)

    {

    a = b + 1;

    b = a - 1;

    }

    else

    cout<

    в) if(a < 0)

    a = 10;

    cout<

    г) if(a > 0)

    cout<<”Ok!”;

    else

    b = a;

    cout<

    д) if((a < b)||(b > c))

    a = b;

    else

    b = a;

    cout<

    е) if((a < b)&&(b > c))

    a = b;

    else

    b = a;

    cout<

    ж) if(c>a)

    if(c>0)

    printf(”$$$”);

    else

    printf(”###”);

    printf(”@@@”);


    з) if(c>a)

    if(c>10)

    printf(”===”);

    else

    printf(”<<<”);

    printf(”>>>”);

  7. Нарисуйте блок-схемы примеров, приведенных в предыдущем задании.

Лабораторные задания

  1. Даны три вещественных числа a, b, c. Напишите программу, определяющую, могут ли данные числа являться длинами сторон треугольника. Значения a, b, c вводятся с клавиатуры.

  2. Даны три вещественных числа a, b, c. Напишите программу, определяющую, могут ли данные числа являться длинами сторон прямоугольного треугольника. Значения a, b, c вводятся с клавиатуры.

  3. Даны две окружности радиусами r и R, расстояние между центрами которых D. Напишите программу, определяющую, имеют ли данные окружности общие точки. Значения r, R и D вводятся с клавиатуры.

  4. Даны стороны треугольника a, b, c. Напишите программу, определяющую, является ли треугольник остроугольным. Значения a, b, c вводятся с клавиатуры.

  5. Напишите программу, определяющую количество вещественных корней квадратного уравнения ax2 + bx + c = 0. Значения a, b, c вводятся с клавиатуры. На экран выводится количество корней и их значения.

  6. В точке (x0, y0) находится центр круга радиуса R. Напишите программу, определяющую, находится ли точка с заданными координатами (x,y) внутри, или за пределами круга. Вещественные числа x0, y0, R, x, y вводятся с клавиатуры.

  7. На плоскости проведена прямая y = kx + b, где k и b – вещественные константы. Напишите программу, определяющую положение точки с заданными координатами (x,y) относительно прямой. Варианты ответа: 1) точка над прямой, 2) под прямой, 3) на прямой. Вещественные числа k, b, x, y вводятся с клавиатуры.

  8. Даны точка на плоскости с координатами (x,y) и квадрат с центром в точке (xc, yc) и стороной a. Напишите программу, определяющую, находится ли точка внутри, или за пределами квадрата. Значения xс, yс, a, x, y вводятся с клавиатуры.

  9. Даны треугольник со сторонами a, b, c и окружность радиуса r. Напишите программу, определяющую, может ли: а) треугольник быть целиком помещен в окружность; б) окружность быть целиком помещена в треугольник. Значения a, b, c, r вводятся с клавиатуры.

  10. На шахматной доске находятся две заданные фигуры (черная и белая) в позициях (n,m) и (k,l), где 1 ≤ n,m,k,l ≤ 8. Напишите программу, оценивающую ситуацию и выводящую соответствующие сообщения

  • фигура 1 атакует фигуру 2,

  • фигура 2 атакует фигуру 1,

  • обе фигуры «в безопасности».

В программе учтите возможность обоюдной атаки. Значения n, m, k, l вводятся с клавиатуры. Варианты сочетаний фигур:

а) два короля;

б) две пешки;

в) ладья и пешка;

г) король и конь;

д) ладья и конь;

е) пешка и конь.

ж) ферзь и король;

з) ферзь и слон;

и) два слона.

  1. Напишите программу, запрашивающую 3 вещественных числа и выводящую их на экран в упорядоченном виде

    а) по возрастанию;

    б) по убыванию.

  2. По надежным данным военной разведки, штаб противника находится на расстоянии R (км) от артиллерийской батареи. Из орудия в сторону цели производится выстрел под углом  к горизонту. Скорость вылета снаряда из ствола – V (м/с), радиус зоны поражения разорвавшегося снаряда – S (м). Напишите программу, определяющую, будет ли данным выстрелом поражена цель. Трением воздуха пренебречь. Значения R,V, S,  вводятся с клавиатуры.

Лабораторная работа №3

ОПЕРАТОР ЦИКЛА for

^ 1. Назначение и синтаксис.

В компьютерных программах часто возникает необходимость выполнения определенного набора операторов заданное число раз, (или, иначе, до тех пор, пока выполнено некоторое условие). Такие алгоритмы реализуются с помощью циклов. Под циклом будем понимать повторяющееся действие (или набор действий), организованное с помощью структуры, управляемой счетчиком. Рассмотрим это на следующем простом примере.

Пример 1. Напишите программу, выводящую на экран все целые числа от 0 до 99, включительно.

Решение. Используя известные нам функции ввода-вывода, можно предложить по крайней мере два следующих алгоритма решения задачи.


Вариант 1

  1. Объявляем целочисленную переменную k и инициали­зируем ее значением 0.

  2. Выводим на экран k.

  3. Увеличиваем k на единицу.

  4. Если k меньше 100, возвра­щаемся к пункту 2.

  5. Завершаем програм­му.




Вариант 2

  1. Объявляем целочисленную переменную k и инициали­зируем ее значением 0.

  2. Если k меньше 100, перехо­дим к следующему пункту, иначе завершаем програм­му.

  3. Выводим на экран k.

  4. Увеличиваем k на единицу.

  5. Возвращаемся к пункту 2.




Блок-схемы этих алгоритмов изображены ниже.



frame12frame13




оставить комментарий
страница1/4
Дата17.10.2011
Размер1.05 Mb.
ТипУчебно-методическое пособие, Образовательные материалы
Добавить документ в свой блог или на сайт

страницы:   1   2   3   4
Ваша оценка этого документа будет первой.
Ваша оценка:
Разместите кнопку на своём сайте или блоге:
rudocs.exdat.com

Загрузка...
База данных защищена авторским правом ©exdat 2000-2017
При копировании материала укажите ссылку
обратиться к администрации
Анализ
Справочники
Сценарии
Рефераты
Курсовые работы
Авторефераты
Программы
Методички
Документы
Понятия

опубликовать
Загрузка...
Документы

Рейтинг@Mail.ru
наверх