Изучение базовых понятий программирования и технологии создания программ. Программирование ветвящихся и циклических алгоритмов

Характеристика среды разработки программ Visual Studio. Построение алгоритмов линейной структуры и простейшего диалогового интерфейса. Логические операторы и операторы отношения, а также операторы ветвления и выбора. Построение циклических алгоритмов.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 07.06.2016
Размер файла 187,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

Тема: Изучение базовых понятий программирования и технологии создания программ. Программирование ветвящихся и циклических алгоритмов

Цель работы:

1. Изучение среды разработки программ Visual Studio

2. Освоение построения алгоритмов линейной структуры и простейшего диалогового интерфейса.

3. Изучение логических операторов и операторов отношения, а также операторов ветвления и выбора. Получение навыков построения ветвящихся алгоритмов.

4. Получение навыков построения циклических алгоритмов.

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

1. Изучить теоретическую часть лабораторной работы :

· встроенные типы данных;

· операции языка Си

· оператор присваивания

· директивы препроцессора #include и #define

· этапы трансляции программы

· структура программы на языке Си.

· логические операции о операции отношения

· инструменты, позволяющие разветвить программу: условный оператор if, тернарная операция ветвления, оператор выбора swich

· Операторы цикла while, do-while, for

· Операторы break, continue и goto

· Изучить функции printf и scanf библиотеки stdio

2. Изучить среду программирования Visual Studio

· Основные пункты меню и их назначение

· Создание нового проекта.

3. Изучить примеры программирования и выполнить их на компьютере.

4. Выполнить три задания (номер варианта соответствует номеру компьютера).

· Разработать и записать алгоритмы решения

· Написать программы, реализующие разработанные алгоритмы, используя, операторы присваивания, if, switch, while, do-while, for и ввода-вывода данных.

Теоретические сведения

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

Алгоритм - это конечная последовательность точно определенных элементарных действий для решения поставленной задачи при всех допустимых вариантах исходных условий задачи.

Алгоритм, программа и данные - все три понятия тесно связаны между собой и играют в программировании важнейшую роль, упрощенно эту связь можно представить следующим образом : Программа = Алгоритм + Данные

Данные : переменные и константы.

Любой программе необходимо работать с данными, с объектами, которые несут в себе информацию. Некоторые данные устанавливаются равными определенным значениям еще до того, как программа начинает выполняться, а после ее запуска сохраняются неизменными на всем протяжении работы программ. Такие данные называются константами.

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

Кроме различия между переменными и константами существует различие между типами данных.

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

Проверка выполнения требований, накладываемых типом, осуществляется на этапе компиляции. Например, ошибочное присваивание арифметической переменной булевского (логического) значения можно выявить без выполнения программы. Другой пример: операция сложения определена для вещественных и целых типов, но не определена для логического типа. visual studio интерфейс циклический

В языке Си предусмотрено использование основных (встроенных) типов данных, для этой цели используется семь ключевых слов:

int , long, short, float, double, char, bool

и два модификатора:

signed (со знаком), unsigned (без знака)

Классификация типов данных представлена на рис. 1.3.

Рис. 1.3. Встроенные типы данных. Классификация.

При объявлении переменной задается тип данных, который определяет объем выделяемой памяти. На рис 1.4. представлена информация о диапазоне значений и размере занимаемой памяти для встроенных типов данных.

Тип

данных

Память

(в битах)

Диапазон

Значений

bool

8

True, false

сhar

8

-128…127

unsigned char

8

0…255

short

16

-32768…32767

unsigned short

16

0…65535

int, long

32

-2 147 483 648…2 147 483 647

unsigned int, long

32

0…4 294 967 295

float

32

3.4Е-38…3.4Е+38

double

64

1.7Е-308… 1.7Е+308

long double

80

3.4Е-4932…1.1Е+4932

Рис. 1.4. Встроенные типы данных. Размещение в памяти.

Обратите внимание на отличие типов short и unsigned short - данные занимают одинаковую область памяти, но имеют различные диапазоны значений.

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

Объявляя переменную, следует задать ее тип, при этом происходит выделение необходимого объема памяти (говорят, что переменная размещается в памяти). Например :

double var;// переменная var - вещественного типа

int rez;// переменная rez - целого типа

Язык Си позволяет одновременное объявление переменной и присваивание ей начального значения, в этом случае говорят, что переменная инициализирована.

При инициализации происходит одновременное выделение памяти и присваивание ей начального значения, в нашем примере запись нуля в память, выделенную для переменной r целого типа.

Пример :

int r = 0;// переменная r инициализирована,

double s;// переменная s- только объявлена (выделена память)

Для константы тип можно задать как явно, указав его при описании, так и неявно.

Явное описание констант:

const int B=10; целая константа

const double C=10; вещественная константа (10.0)

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

Напимер :

3. вещественная константа

3 целая константа.

Добавление после константы знака L (или l) заставляет компилятор выделять под переменную двойной размер памяти, например:

// определение константы двойной точности

3.141 592 653 589 793 2L

// определение константы обычной точности

3.141 592

Выражения

С точки зрения языка программирования выражение состоит из операндов (переменных, констант, функций), соединенных знаками операций.

Знак операции - это символ или группа символов, сообщающих компилятору о необходимости выполнения арифметических, логических или других действий.

Например: a+b, a*10, a / sin(x)

a, b,10, sin(x)- операнды

+ * /- операции

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

Все операции делятся на три группы:

· арифметические,

· логические и операции отношения.

· операции с битами.

Бинарными арифметическими операциями являются :

+сложение

-вычитание

*умножение

/деление

%деление по модулю (остаток от деления)

Унарными арифметическими операциями являются :

++инкремент (увеличение)

--декремент (уменьшение)

-изменение знака операнда

Примеры арифметических выражений :

X = A + B

W = (D*10+C)/(K+1)

A = sin(b)+10

X = 5 + 3 * 2

Выражение X = 5 + 3 * 2 включает три операции *, + и = (операции перечислены в соответствии с их приоритетами). Сначала вычисляется выражение в правой части (3*2)+5, а затем результат присваивается переменной в левой части ( X=11).

Оператор присваивания

Для работы с переменными, нужно научиться заносить в них различные значения. Как это делается при создании переменных с помощью знака «=» (инициализация), мы уже знаем. Но часто в уже созданную переменную нужно занести или поменять её значение.

Пример:

int p1, p2, p3;

p1=5; // занести в переменную p1 константу 5

p2=p1; // занести в переменную p2 значение из p1

p3 = p1+10;// занести в переменную p3 результат вычислений

В последнем примере сначала вычисляется значение выражение p1+10, а затем результат присваивается операнду p3.

Следует отметить, что левый операнд оператора присваивания всегда должен быть адресным выражением, то есть объектом, размещенным в памяти компьютера. Примером адресного выражения является имя переменной. Примером не адресного выражения является, выражение a+b, а также константы, которые могут стоять только справа от символа присваивания.

Примеры неправильного использования оператора присваивания :

5 = p1;

p1 + p2 = p3;

Язык Си позволяет выполнять множественное присваивание, например можно написать такую конструкцию: var = p3 = 7;

Операторы присваивания обрабатываются справа налево, читать эту строку следует так: "занести в p3 значение 7, затем занести в var значение из p3".

Существует так называемая комбинированная операция присваивания, которая позволяет вместо выражения x =x+a, записать x += a

Вместо операции «+» может стоять любая их следующих бинарных операций:

+ - * / % >> << & | ^ && ||

Примеры :

a += 2означаетa = a+2

s *= aозначаетs = s*a

Преобразование типов.

Язык Си допускает выражения с операндами различных типов. Например, можно делить переменную типа float на константу типа int, прибавлять константу типа int к переменной типа char и тому подобное. Если выражение имеет операнды различных типов, более низкий тип всегда преобразуется к более высокому. Один тип ниже другого, если он занимает меньше памяти, например, целый тип ниже вещественного.

Пример:

double x,y;

char ch;

long in;

int i;

....

y = x*(i+ch/in);

В выражении y = x*(i+ch/in) преобразования типов данных будут выполняться в следующей последовательности:

· Операнд ch преобразуется к типу long ( к большему операнду выражения ch/in), по этой же причине i преобразуется к long

· Результат операции, заключенной в круглые скобки будет иметь тип long.

· Затем он преобразуется к типу double , к большему операнду выражения x*(i+ch/in)

· Результат всего выражения будет иметь тип double

До сих пор преобразование типов выполнялось неявно, то есть по определенным правилам, заданным языком Си и реализованным в компиляторе. Но можно и явно указать какое преобразование мужно выполнить.

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

Формат операции приведения типа: (имя_типа) операнд

Операндом может быть :

· Переменная

· Константа

· Выражение в круглых скобках

Примеры явного преобразования переменных:

int a,b,c;

double x;

/* результат правой части выражения - целое, поэтому результат будет округлен до ближайшего целого*/

x=(a+b)/c;

/* Следующие действия позволяют избежать потери результата */

x = ( (double)a + b) / c;

x = (double)(a+b) / c;

x = (a+b) / (double)c;

Алгоритм решения задачи

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

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

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

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

Рис. 1.1. Элементы блок-схемы.

Препроцессор языка Си

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

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

· включение файлов в текст программы (директива #include);

· изменение текста программы с помощью макроподстановок (директива #define).

Для того, чтобы обратиться к препроцессору, необходимо включить в текст программы специальные команды, или директивы препроцессора, начинающиеся со знака #. После директив препроцессора точка с запятой не ставятся.

Директива #include.

#include - директива включения файла в исходный текст программы.

Имеется две её формы:

#include "имя файла"

#include <имя файла>

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

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

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

Например #include <stdio.h> включает в программу пользователя заголовочный файл стандартной библиотеки ввода-вывода языка С.

Директива # define.

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

Формат директивы:

#define идентификатор текст

Эта директива заменяет все вхождения идентификатора на «текст». Текст может представлять собой любой фрагмент программы на С, а также может и отсутствовать. В последнем случае все экземпляры идентификатора удаляются из программы. Проводя аналогию с текстовым редактором, действия директивы #define аналогичны «поиску с заменой».

Пример:

#define QU 40

#define WEWQ (QU+15)

Эти директивы изменят в тексте программы каждое слово QU на число 40, а каждое слово WEWQ на выражение (40+15) вместе с окружающими его скобками. При выполнении данной директивы препроцессора исключение составляют текстовые константы, заключенные в двойные кавычки, внутри которых подстановки не производятся. Например, внутри строки "В данной строке QU записано один раз" слово QU изменяться не будет.

Этапы трансляции программы

Превращение текста на языке высокого уровня в машинный код проходит в несколько этапов:

На первом этапе происходит препроцессорная обработка текста.

На втором этапе создается промежуточный (объектный) файл.

На третьем этапе несколько объектных файлов компонуются в единый исполняемый файл, который может быть загружен в память компьютера и выполнен.

Библиотечные файлы хранятся в объектном виде и присоединяются к программе пользователя на этапе компоновки. Ход трансляции приведен на рис. 1.5.

После того, как программа оттранслирована, её можно выполнить, для чего используется специальная программа, называемая загрузчиком.

Структура программы на языке Си

Любая программа на языке Си состоит из одной или более функций.

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

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

Рис. 1.5. Этапы трансляции текста программы.

Область директив препроцессора находится перед функцией main()

Пример :

/* Простейшая программа, выводящая приветствие на экран дисплея */

#include <stdio.h>// директива препроцессора

void main()

{

printf("Hello, world\n");

}

Строки :

/* Простейшая программа, выводящая приветствие на экран дисплея */

являются комментарием, который в данном случае кратко объясняет, что делает программа. Все символы, помещенные между /* и */, игнорируются компилятором, и этим можно свободно пользоваться, чтобы сделать программу более понятной.

Инструкция printf("Hello, world\n"); - это вызов функции printf, которая выполняет печать своего первого аргумента - текстовой строки. Функция printf находится в стандартной библиотеке stdio.h

Результатом работы программа явится сообщение :

Hello, world

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

Приведем наиболее часто используемые комбинации:

%s- печать текстовой строки

%c- печать отдельного символа

%d, %i- печать целого числа

%f, %e, %l- печать вещественного числа

Например, запишем инструкцию, которая выводит в одной строке значения переменных a, b и с целого типа (int), в качестве разделителя между переменными будем использовать знак «:»printf(" %d:%d:%d",a,c,b);

Этот оператор имеет 4 параметра, разделенных запятыми, первый определяет формат (форму) и типы данных, выводимых на экран, 2,3 и 4 параметры - имена переменных.

если значения переменных a,b и c соответственно равны 5,10,25, то результат на экране дисплея выглядит следующим образом:

5:25:10

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

Например, предыдущий пример можно отформатировать следующим образом:

printf("\na= %d:\tb= %d:\tc= %d\n",a,b,c);

Результат на экране дисплея выглядит следующим образом:

a=5:b=10:c=25

Функция printf() «перевела строку» (символ \n), перед выводом числа поставила комментарий «а=», после каждого числа вывела знак «табуляции» (символ \t).

Логические операции и операции отношения.

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

Результат сравнения имеет логический тип (bool) - TRUE (истина или 1) либо FALSE (ложь или 0).

Рассмотрим подробнее операции отношения, к ним относятся:

>больше;

<меньше;

>=больше или равно;

<=меньше или равно;

= =равно (проверка на равенство)

!= не равно.

Операции отношения по рангу младше арифметических операций, так что выражения типа :

i < lim+3 понимаются как i < (lim+3)

Приведем примеры проверки простых логических условий :

if (i>7)результат 1(true,да) если i больше 7, и 0 (нет) - в противном случае

if (i==j)результат 1 если i равно j

if (x+1 != k)результат 1 если x+1 не равно k

Чаще всего ошибки совершают при проверке на равенство, обратите внимание, что в этом случае необходимо ставить два знака «=»,

выражение подобное if (i=j) неверно!

но компилятор подобные ошибки не диагностирует , так как интерпретирует данное выражение следующим образом :if ((i=j)!=0), то есть сначала заносит значение j в переменную i, а затем сравнивает результат с нулем.

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

К логическим операциям относятся:

&&логическое И(конъюнкция), бинарная операция;

|| логическое ИЛИ(дизъюнкция), бинарная операция.

! логическое НЕ(отрицание), унарная операция;

Так же как и у операций отношения, у логических операций результат логический (бинарный), либо 1 (TRUE) либо 0 (FALSE).

Примеры применения логических связок (сложных условий) :

Если а <b, то :

Чтобы записать логическое условие, соответствующее следующей математической записи a<i<b, потребуется логическая связка && :

if ( i>a && i< b)

Чтобы записать логическое условие, соответствующее следующей математической записи a>i>b, потребуется логическая связка || :

if ( i<a || i> b)

Условный оператор if

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

Оператор if позволяет разветвить вычислительный процесс на два варианта в зависимости от значения некоторого условия.

Имеется две формы условного оператора:

· Полная схема выполнения : if (выражение) оператор1 else оператор2;

· Сокращенная схема выполнения : if (выражение) оператор1 ;

Выполнение оператора if начинается с вычисления выражения.

Далее выполнение осуществляется по следующей схеме:

1. если выражение имеет значение TRUE, то есть истинно (отлично от 0), то выполняется оператор1.

2. если выражение имеет значение FALSE, то есть ложно ( равно 0),то выполняется оператор2.

3. если выражение имеет значение FALSE и отсутствует конструкция со словом else, то выполнение оператора if завершается.

Полная блок-схема оператора if

Сокращенная блок-схема оператора if

Примеры:

if (a > b) c = a - b;// выполняется, если a больше b

else c = b - a;// выполняется, если a меньше b

… …

if (i < j) i++;

else {j = i - 3; i ++;} // блок операторов выполняется, если i больше j

Оператор выбора switch.

Если в программе используются больше трех возможных вариантов, то следует использовать оператор switch. Его часто называют селективным оператором, переключателем или оператором выбора. Оператор switch передает управление одному из нескольких помеченных специальными метками операторов в зависимости от значения целочисленного выражения. Специальные метки начинаются с ключевого слова case и являются целочисленными константами.

Оператор имеет следующий вид:

switch (целое_выражение )

{[объявления]

[case константное_выражение1:]

[операторы группы_1]

[case константное_выражение2: ]

[операторы группы_2]

[case константное_выражение n:]

[операторы группы_n]

[default:] [операторы default]

}

Выражение в круглых скобках, может быть любым допустимым выражением языка С, значение которого должно быть целым. Оператор switch рассматривает значение выражения не как логический результат TRUE или FALSE, а как "шаблон" для выбора подходящего варианта из заданного вами списка.

Схема выполнения оператора switch:

· Вычисляется выражение в круглых скобках (назовем его селектором).

· Значение селектора последовательно сравнивается с метками константных выражений, записанных после ключевого слова case , если селектор и метка равны, то управление передается оператору, помеченному данной меткой

· Если селектор не совпадает ни с одной меткой, то управление передается на оператор, помеченный словом default.

· Если default отсутствует, то управление передается следующему за switch оператору.

Блок-схема селективного оператора.

Пример: В качестве селектора выступает переменная x
int x;

switch (x)

{case 4:printf("x равно 4\n");

break;

case 2:

case 10:printf("x равно или 2, или 10");

break;

default:printf("x не равно 4, 2, 10\n");

}

В примере анализируется значение переменной x, и в зависимости от результата, передается управление на одну из ветвей оператора switch. Два варианта (x=2 и x=10) объединены, если x не равен 2, 4 или 10, то выполняется ветка default.

У всех вариантов выбора, кроме case 2: наборы операторов заканчиваются ключевым словом breakcase 2: вообще нет "своих" операторов). Дело в том, что оператор switch, выбрав один из своих вариантов, не заканчивает своё выполнение автоматически, дойдя до следующего варианта - он исполняет все операторы, идущие дальше, вплоть до конца всего блока, заканчивающегося закрывающейся «фигурной скобкой». Наличие ключевого слова break принудительно заканчивает каждую альтернативу и передает управление за пределы оператора swich. Если мы уберем, например, первый break, то при х==4 увидим сначала сообщение от первого printf(), а затем и от второго.

Тернарная операция ветвления.

Тернарная операция имеет три операнда, её форма :

выражение1 ? выражение2 : выражение3

Последовательность выполнения операции следующая:

· выражение1 сравнивается с нулем ;

· если выражение1 не равно нулю, то вычисляется выражение2 и его значение является результатом операции.

· если выражение1 равно нулю, то вычисляется выражение3, и его значение является результатом операции.

Заметим, что вычисляется один из операндов после знака ?, но не оба.

Блок-схема тернарного (условного) оператора.

Пример: Переменной max присваивается максимальное значение из двух переменных а и b.

max = a<=b ? b : a;

Согласно общим правилам языка Си сначала будет выполняться выражение справа от знака присваивания, то есть тернарный оператор a<=b ? b : a Результатом этого оператора будет максимальное значение из b, a, которое и будет занесено в переменную max.

Если в условной операции выражение2 и выражение 3 являются адресными выражениями, то тернарная операция может стоять слева от знака присваивания:

Пример:

a< b? a:b = c*x+d;

В данном примере значение выражения c*x+d присваивается меньшей из переменных a , b, если a<b, то вычисляется выражение a = c*x+d, иначе b = c*x+d

В заключении приведем таблицу приоритетов операций языка С. Операции расположены по убыванию их приоритетов, таким образом, самый высокий приоритет имеют операции ( ) [ ] -> . , а самый низкий - операция «запятая»

Вид операции

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

Ассоциативность

Первичные

( ) [ ] -> .

слева направо

Унарные

! ~ - + ++ -- (type) * & sizeof

справа налево

Мультипликативные

* / %

слева направо

Аддитивные

+ -

слева направо

Сдвиги

<< >>

слева направо

Отношения

< <= > >= == !=

слева направо

Побитовые

& ^ |

слева направо

Логические

&& ||

слева направо

Тернарная (условная)

? :

справа налево

Присваивание

=

справа налево

Запятая

,

слева направо

Операторы цикла

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

В языке Си имеются три оператора цикла - это while, do-while и for. Кроме того, специально для расширения возможностей этих трех операторов, предусмотрены еще 2 специальных оператора - continue и break.

Оператор continue прерывает текущую и передает управление на следующую итерацию цикла, отсекая операторы, следующими за ним (досрочный переход на следующую итерацию). Оператор break используется для прерывания текущей итерации и выхода из цикла (досрочный выход из цикла).

break также применяется в операторе switch, но суть действия его одинакова в обоих случаях.

Цикл с предусловием (оператор while)

Оператор цикла while называется циклом с предусловием, поскольку условие выполнения цикла проверяется перед входом в него, он имеет следующий формат: while (выражение) тело цикла ;

В качестве выражения допускается использовать любое выражение языка Си, а в качестве тела любой оператор, в том числе пустой или составной. Схема выполнения оператора while следующая:

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

2. Если выражение ложно, то выполнение оператора while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполняется блок операторов (тело цикла while).

3. Процесс повторяется с пункта 1.

Блок-схема цикла с предусловием.

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

Рассмотрим следующий фрагмент программы:

int x=0;

while (x<10)

{ printf("%d\n",x);

x++;

}

printf("The end ");

Такой цикл выполнится 10 раз, напечатав значения х от 0 до 9, и только после этого управление перейдет на второй, стоящий за циклом printf().

Цикл с постусловием (Оператор do … while)

По поведению он очень похож на предыдущий цикл while(), за тем исключением, что условие проверяется после выполнения тела цикла. Если условие окажется ложным, цикл на этом заканчивается, в противном случае - выполняется очередная итерация цикла. Этот тип цикла используется в тех случаях, когда необходимо выполнить тело цикла хотя бы один раз. Формат оператора имеет следующий вид: do тело цикла while (выражение);

Блок-схема цикла с постусловием.

Чтобы прервать выполнение цикла до того, как условие станет ложным, можно использовать оператор break. Напечатаем значения х от 0 до 9 с использованием цикла do … while

int x=0;

do

{ printf("%d\n", x);

x++;

} while (x<10);

printf("The end");

Пример: Этот цикл выполнится один раз, прежде чем определит, что х равно нулю.

int x=0;

do

{

printf("х=%d\n", x);

} while (x!=0);

Цикл со счетчиком (оператор for)

Оператор for - это наиболее общий способ организации цикла. Он имеет следующий формат:

for ( выражение 1 ; выражение 2 ; выражение 3 ) тело цикла

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

Выражение 2 определяет условие, при котором тело цикла будет выполняться.

Выражение 3 определяет регулярные изменения переменных после каждого прохода тела цикла («блок модификации»).

Блок-схема пошагового цикла.

Схема выполнения оператора for:

1. Вычисляется выражение 1 ,один раз перед входом в цикл .

2. Вычисляется выражение 2 (перед каждым проходом цикла), если оно отлично от нуля -true (истина), то выполняется тело цикла, иначе (если выражение ложно) - цикл прекращается и управление передается оператору, следующему за оператором for.

3. Вычисляется выражение 3 (модификация данных после каждой итерации цикла), переход к пункту 2.

Существенно то, что проверка условия выполняется в начале цикла, а это значит, что тело цикла может ни разу не выполниться, если первый результат проверки будет false.

Пример : Эта программа, как и две предыдущие напечатает цифры от 0 до 9

int x;

for (x=0; x<10; x++)

printf("%d\n",x);

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

Пример: Вот как будет выглядеть тот же алгоритм с отсутствующими частями инициализации и модификации в цикле for:

int x;

x=0;

for ( ; x<10 ; )

{printf("%d\n",x);

x++;

}

Как видите, x=0 теперь стоит перед циклом, а оператор x++ стал последним в теле цикла.

Можно опустить и условие выхода, тогда программа будет считать, что условие всегда истинно и будет печатать строку "hello" до бесконечности.

for (;;)

printf("hello\n");

аналогичный бесконечный цикл while будет выглядеть так :

while (1)

printf("hello\n");

while (1) - это короткая запись оператора while (1!=0), то есть проверка условия 1!=0 всегда будет давать результат - true

Бесконечные циклы применяются, когда условие выхода из цикла не известно заранее, для выхода из такого цикла требуется проверка дополнительного условия в теле цикла и оператор break.

Пример: Вычислять квадраты натуральных чисел от 0 до k, где k вводится с клавиатуры.

#include <iostream>

using namespace std;

void main()

{ int i=0,b,k;

cout<<"k=";// вывод текста "k=" на экран дисплея

cin>>k;// ввод данных с клавиатуры в переменную k

cout<<endl;// перевод строки (вывод «конец строки» на экран)

for (;;)

{i=i+1;

b=i*i;

cout<<endl<<"x="<<i<<"\t"<<"x*x="<<b<<endl;

if (i==k) break;// выход из цикла по условию

}

}

Усложним условие задачи, пусть необходимо в начале цикла задать начальные значения не одной, а двум переменным (допустим x и y), а в цикле изменить значения их обеих. Можно сделать эту работу следующим образом:

int y, x=0;

for (y=10; x<y; x+=2 )

{ printf("x=%d\ty=%d\n", x, y);

y--;

}

Благодаря оператору « , » (запятая) можно поступить проще:

int y, x;

for ( x=0, y=10; x<y; x+=2, y-- )

{ printf("x=%d\ty=%d\n", x, y);

}

Операторы break и continue.

Оператор break используется для прерывания текущей итерации и выхода из цикла, break передает управление оператору, следующему за последним оператором тела цикла. Если циклы вложенные, то он обеспечивает прекращение выполнения самого внутреннего из них. Подчеркнем, что break нельзя использовать для выхода из нескольких вложенных циклов, а составной оператор, состоящий из двух операторов break, эквивалентен одному break. Для выхода из вложенных циклов используйте оператор goto.

Оператор break также может быть использован для прерывания оператора switch.

Оператор continue прерывает текущую и передает управление на следующую итерацию цикла, отсекая операторы, следующими за ним. Также как и оператор break, он прерывает самый внутренний из вложенных циклов.

Пример: В примере проводится подсчет суммы нечетных значений, начиная от 1 до k.

Оператор % (деление по модулю) дает остаток от деления двух операндов, таким образом, результат равный 0 всегда получается, если первый операнд кратен второму. В примере оператор проверяет число a на четность, если число четное, то оно без остатка делится на 2, управление передается на очередной проход цикла, в противном случае подсчитывается сумма.

#define k 5

#include <iostream>// подключение библиотеки потокового ввода-вывода

using namespace std;// для С++

int main()

{ int a,sum=0;

for (a=1; a<=k; a++)

{ if (a%2==0) continue;

sum=sum+a;// или sum += a;

}

cout<<"sum="<<sum<<endl;

return 0;

}

Оператор безусловного перехода goto

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

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

Знакомство со средой программирования Visual Studio

Microsoft Visual Studio (MVS) представляет собой интегрированную среду разработки, в которой можно создавать, открывать, просматривать, редактировать, сохранять, компилировать и отлаживать программы, написанные на языке С или C++.

MVS включает в себя:

· редактор текста;

· компилятор;

· компоновщик;

· загрузчик

· отладчик.

Запустить оболочку MVS можно из режима ПУСК, выбрав соответствующий ярлык. После запуска MVS на экране компьютера появится окно в верхней части которого располагается строка - меню и панель клавиш быстрого доступа. Вся остальная часть экрана - поле для текста программы.

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

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

Второй способ заключается в использовании клавиш быстрого вызова, которые выделяются подчеркиванием в названиях команд. Так, меню File можно раскрыть, нажав одновременно [Alt+F].

Третий способ вызова команд заключается в использовании предварительно заданных "горячих" клавиш. Например, в меню File есть команда New..., которую можно вызвать, нажав [Ctrl+N]. Сочетание "горячих" клавиш указано в меню справа от соответствующего пункта меню.

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

Основные пункты меню и их назначение

Меню File содержит команды для манипулирования файлами.

Режим

Кнопка на панели

«Горячие» клавиши

Назначение

New

Ctrl+N

Создать новый проект или текстовый файл

Open

Ctrl+O

Открыть созданный ранее файл (поместить его в окно редактирования)

Save

Ctrl+S

Сохранить на диске файл из текущего окна редактирования

Save All

-

Сохранить все файлы проекта.

Exit

-

Выйти из MVS

Меню Edit позволяет редактировать текст. Работа этих команд аналогична командам в большинстве текстовых редакторов. Ниже приведены наиболее часто используемые команды.

Режим

Кнопка на панели

«Горячие» клавиши

Назначение

Copy

Ctrl+C

Копирование выделенного блока текста в буфер обмена

Cut

Ctrl+Z

Перемещение выделенного блока текста в буфер обмена

Paste

Ctrl+V

Извлечение блока текста из буфера обмена

Delete

Del

Удаление выделенного блока текста

Меню Build содержит команды, предназначенные для трансляции текста программы, а также отладки и запуска созданной вами программы.

Режим

Кнопка на панели

«Горячие» клавиши

Назначение

Go

F5

Компиляция и запуск программы на выполнение

Execute

Ctrl+F5

Запуск программы на выполнение

Compile

Ctrl+F7

Компиляция текущего файла проекта (создание .obj файла)

Build

F7

Сборка программы из файлов проекта (создание .exe файла)

Step into

F11

Пошаговое выполнение программы с "заходом" в функции

Меню View содержит команды, позволяющие настроить внешний вид рабочего пространства MVC.

Меню Insert содержит команды, позволяющие вставлять в проект новые файлы, ресурсы, объекты и тому подобное.

Меню Project. Команды меню Project позволяют управлять открытыми проектами.

Меню Tools содержит команды вызова вспомогательных утилит, программирования макросов и настройки среды MVS.

Создание нового проекта.

Приступая к работе над новой программой необходимо создать новый проект. Для этого выполните следующие действия :

1. В меню File задайте команду New...

2. В открывшемся диалоговом окне New выберите вкладку Projects

· Укажите тип проекта. В нашем случае это будет простое консольное приложение -- Win32 ConsoleApplication.

· Введите имя файла проекта в поле Project name, например Лаб1 , а в поле Location - путь к папке, в которой будут храниться файлы проекта.

3. Нажмете кнопку ОК, отобразится окно с набором опций:

· An empty project

· A simple application

· A “hellow, world!” application

· An application, that supports MFS

Следует выбрать режим A simple application. После нажатия кнопки «Finish» новый проект будет создан.

4. Рассмотрим окно нового проекта - оно состоит из двух частей: слева располагается панель управления проектом, а справа окно для создания текста программы. Панель управления проектом вызывается командой View/Workspace и состоит из двух закладок:

· «Class view» отображает информацию о функциях и переменных проекта. Двойной щелчок по названию функции открывает в рабочем файле место с объявлением этой функции.

· «File view» отображает информацию о рабочих файлах проекта. Двойной щелчок по названию файла откроет окно редактирования этого файла.

Написание и компиляция простейшей программы.

После того как проект создан, можно приступать к написанию текста программы. На панели управления проектом выбираем режим «File view» и открываем файл Лаб1.cpp в папке Source Files.

В окне редактирования появляется автоматически созданный текст

#include "stdafx.h"

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

{

return 0;

}

Напишем программу вывода приветствия на экран дисплея.

#include "stdafx.h"

#include <stdio.h>

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

{

printf("Hello, world\n");

return 0;

}

Написанный текст следует оттранслировать, нажав кнопку (или вызвав команду Build). Для запуска программы используйте кнопку

Вызов функции printf можно видоизменить следующим образом :

printf("%s, worl%c\n", "Hello",'d');

При этом работа программы остается прежней.

Теперь давайте поменяем одну букву в названии функции на заглавную, вместо printf поставим Printf

После трансляции получим сообщение :

error C2065: 'Printf' : undeclared identifier ,

которое означает, что компилятор не смог отыскать функцию Printf.

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

Примеры программирования

Объявление переменных.

Повторим, что при объявлении переменной ей присваивается имя, тип и выделяется память

Пример 1: Объявление 3-х переменных вещественного типа (дробные числа), необходимых для вычисления площади прямоугольника.

float a, b; // ширина и длина прямоугольника

float s; // площадь прямоугольника

Пример 2: Объявление переменных, необходимых для вычисления площади кольца.

float rl, ri; // внешний радиус и радиус отверстия

float s; // площадь кольца

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

// переменные целого типа

int Kol_book;// количество книг

int Kol_pen;// количество ручек

// переменные вещественного типа одинарной точности

float C_book; // цена одной книги

float C_pen; // цена одной ручки

float C_notebook; // цена блокнота

float Summa; // стоимость всей покупки

Присваивания и вычисления

Пример 4: Запишите инструкции, которые:

· присваивают переменной summa нулевое значение,

summa = 0;

· увеличивают на единицу значение переменной p.

p++;

· увеличивают значение переменной x на величину dx

х = х + dx; или х += dx;

· пересчет расстояния из километров в версты (одна верста -- это 1066,8 м).

versta = km*1066.8;

Ввод данных с клавиатуры и вывод на экран дисплея

Пример 5.

Написать инструкцию вывода значений целых переменных a, b и с. Значение каждой переменной должно быть выведено в отдельной строке, в начале вывода разместить заголовок.

printf ("\nВывод переменных a,b и c: \n a=%d\n b=%d\n c=%d\n",a,b,c);

Допустим a,b и c равны соответственно 1,2 и 3, тогда на экране увидим:

Вывод переменных a, b и c:

a=1

b=2

c=3

Пример 8. Написать инструкцию вывода дробных значений переменных, которые определяют высоту (h) и длину (l) прямоугольника. Перед значением переменных должен быть пояснительный текст (h=, l=), а после -- единица измерения - сантиметры (sm), между переменными поставить знак табуляции.

printf("\nH=%f sm\tL=%f sm\n",h,l);

Допустим h и l равны соответственно 3,5 и 9,12. На экране увидим:

H=3.5 smL=9.12 sm

Пример 9.

Написать инструкцию, обеспечивающую ввод с клавиатуры значения вещественной переменной rad (тип float или double).

double rad;

scanf ("%le",&rad);

Пример 10.

Написать инструкции, которые обеспечивают ввод и последующий вывод значений дробных переменных r и d. Предполагается, что пользователь после набора каждого числа будет нажимать какой-либо разделитель (<пробел>,<табуляцию> или <Enter>), а оканчивать ввод клавишей <Enter>.

...

Подобные документы

  • Описание особенностей программирования циклических алгоритмов на С/С++. Использование операторов цикла для организации повтора в программе определенных действий. Создание и реализация программы приближенного вычисления интеграла методом трапеций.

    лабораторная работа [86,3 K], добавлен 25.03.2019

  • Характеристика базовых конструкций языков программирования. Изучение истории их развития и классификации. Определение основных понятий языков программирования. Описание основных операторов, которые используются в языках программирования высокого уровня.

    курсовая работа [400,6 K], добавлен 10.11.2016

  • Понятие, свойства и базовые структуры циклических алгоритмов. Средства создания программ, сущность объектно-ориентированного программирования. Бухгалтерские автоматизированные информационные технологии. Автоматизация бухгалтерского учета в России.

    контрольная работа [182,8 K], добавлен 24.05.2013

  • Изучение особенностей создания алгоритмов вычислительных задач. Визуальное программирование стандартных компонентов среды программирования Delphi. Технология создания компонента Delphi для решения производственной задачи. Выполнение блок-схемы алгоритма.

    курсовая работа [638,0 K], добавлен 30.01.2015

  • Программирование линейных алгоритмов. Процедуры ввода READ и READLN и вывода WRITE и WRITELN. Примеры решения задач на языке Паскаль. Оператор присваивания и выражения. Основные способы формирования структурных операторов. Операторы вызова процедур.

    курсовая работа [44,3 K], добавлен 18.03.2013

  • Составление алгоритмов и программ для вычисления значений неизвестных: программирование формул; операторы ввода и вывода; условный оператор; цикл с предусловием и с постусловием, с заданным числом повторений; графические средства; тестирование программы.

    курсовая работа [1,5 M], добавлен 13.03.2011

  • Изучение приемов использования операторов ветвления и операторов циклов в С. Управляющие структуры или операторы управления: их значение для управления последовательностью вычислений в программе. Блоки и составные операторы. Универсальный оператор цикла.

    лабораторная работа [17,7 K], добавлен 06.08.2010

  • Разработка и анализ алгоритмов с использованием электронных таблиц и прикладных программ Smath Studio, Microsoft Excel. Проверка алгоритма ветвления или выбора. Реализация циклов на примере вычисления определённого интеграла с заданной точностью.

    контрольная работа [1,0 M], добавлен 19.03.2016

  • Особенности разработки программ для ЭВМ. Этапы планирования программы. Понятие и особенности алгоритмов. Средства, используемые для создания программ. Виды и классификация языков программирования. Структурное и объектно-ориентированное программирование.

    реферат [59,7 K], добавлен 19.08.2010

  • Изучение функций и возможностей среды разработки языка программирования Pascal. Рассмотрение работы с одномерными и двумерными массивами, со строками и числами. Математическая формулировка задач. Разработка алгоритмов, описание структуры программ.

    курсовая работа [879,8 K], добавлен 11.02.2016

  • Разработка простейших линейных алгоритмов (составление логических выражений), программ с ветвлениями, циклических программ и составление их блок-схем. Практическое выполнение обработки массивов на примере вычисления элементов квадратной матрицы.

    контрольная работа [173,3 K], добавлен 01.03.2010

  • Средства интегрированной среды Microsoft Visual Studio, предоставляемые программисту для реализации программ на языке С++. Особенности стиля написания программ. Типовые приемы и методы создания и отладки программ. Листинги программ и их тестирование.

    лабораторная работа [814,3 K], добавлен 26.05.2013

  • Модульная структура программного продукта и типовые управляющие структуры алгоритмов обработки данных различных программных модулей в основе структурного программирования. Особенности пошаговой разработки программ. Основные типы базовых конструкций.

    контрольная работа [163,7 K], добавлен 04.06.2013

  • Изучение принципов построения линейных алгоритмов и простых расчетных программ на языке программирования C. Разработка программы расчета математических выражений на основе вводимых данных. Создание консольных приложений в среде Microsoft Visual Studio.

    лабораторная работа [254,4 K], добавлен 23.11.2014

  • Исследование особенностей разработки линейных алгоритмов и их реализации в среде Delphi. Составление тестов для проверки программы. Характеристика основных элементов интерфейса, компонентов, значения их свойств. Построение графической схемы алгоритма.

    лабораторная работа [316,6 K], добавлен 08.11.2012

  • Аппроксимация эмпирических данных линейной и квадратичной зависимостью. Теория корреляции: расчет коэффициентов детерминированности. Построение алгоритма и вычисление приближённых функций методом наименьших квадратов в среде программирования Turbo Pascal.

    курсовая работа [766,6 K], добавлен 26.12.2011

  • Проектирование игры "Жизнь" и ее реализация в среде разработки Visual Studio 2010, версия .Net Framework 4.0. Особенности языка программирования C#, основных принципов ООП на языке C#. Проектирование пользовательского интерфейса. Описание алгоритмов.

    курсовая работа [990,0 K], добавлен 18.04.2013

  • Основные этапы решения задач на ЭВМ. Элементы управления и пользовательская форма VBA. Ввод и вывод информации. Открытие и закрытие файла. Операторы цикла и подпрограммы. Реализация разветвляющихся алгоритмов в VBA. Типы данных, переменные и константы.

    учебное пособие [1,4 M], добавлен 21.05.2009

  • Изучение некоторых аспектов языка Ассемблера и ЭВМ в целом. Построение алгоритмов решения поставленной задачи на языках программирования Си, Ассемблер УМ и IBM PC. Составление блок-схем решений и написание программ на каждом из перечисленных языков.

    курсовая работа [691,5 K], добавлен 20.10.2014

  • Объектно-ориентированная технология создания программ. Среда разработки Visual Studio.NET. Особенности среды Microsoft Visual Studio 2010. Приложения C# для расчетов по формулам, консольный ввод-вывод. Форматирование значений данных. Программы с циклами.

    методичка [2,1 M], добавлен 11.09.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.