bmstu_iu6_Cpp1 (823967), страница 7

Файл №823967 bmstu_iu6_Cpp1 (Методические пособия по C++ Г.С.Иванова 3 части) 7 страницаbmstu_iu6_Cpp1 (823967) страница 72021-07-27СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 7)

Цикл выполняется дотех пор, пока результат выражения «Истина», т.е. отличен от нуля. Поскольку проверкапроисходит после выполнения тела цикла, даже если условие сразу нарушено, тело циклавыполняется один раз. Формат оператора:do <Оператор > while (<Выражение>) ; .Цикл с постусловием легко реализовать через цикл с предусловием (см. рисунок 2.8).Оглавление39ДействиеДействиеда⇒УсловиенетдаУсловиеДействиенетРисунок 2.8 – Организация цикла с пост условием через цикл с предусловиемПример. Разработать фрагмент программы, которая вводит только значения, входящие в заданный интервал.do {printf("Введите значение от %d до %d:",low,high);scanf_s("%d",&a);}while (a<low || a>high);2.4.3 Оператор счетного цикла forОператор реализует цикл, для которого известен диапазон и шаг параметра цикла:for ([<Выражение1>];[<Выражение2>];[<Выражение3>])[<Оператор>;]где <Выражение1> – инициализирующее выражение – выполняется один раз перед циклом и задает начальные значения переменным цикла.

Может отсутствовать, нопри этом точка с запятой остаются.<Выражение2> – выражение условия – определяет предельное значение параметрацикла. Может отсутствовать, при этом точка с запятой остается.<Выражение3> – выражение модификации – выполняется на каждой итерации послетела цикла, но до следующей проверки условия и обычно используется для изменения параметра(ов) цикла. Может отсутствовать;<Оператор> – тело цикла – может быть любым оператором С++, блоком операторовили может отсутствовать.Нетрудно заметить, что счетный цикл легко реализуется через цикл с предусловием(рисунок 2.9).Оглавление40Выражение 1Выражение 2нетдаОператорВыражение 3Рисунок 2.9 – Схема алгоритма оператора счетного цикла С++Примеры:а) for(int i=0,float s=0;i<n;i++)s+=i;б) for(int i=0,float s=0;i<n;i++,s+=i); // отсутствует тело циклав) int i=0;float s=0;for(;i<n;s+=i++);//отсутствует инициализирующее выражение и тело циклаг) for(;i<n;)s+=i++;// отсутствуют инициализирующее и модифицирующие//выраженияд) for(;;);// бесконечный цикл, который ничего не делает.Пример 2.4.

Найти сумму N натуральных чисел.На рисунке 2.10 приведена схема алгоритма программы.НачалоВводnS := 0i:= 1 ,n ,1S := S + iВыводSКонецРисунок 2.10 – Схема алгоритма программыТекст программы:Оглавление41#include <locale.h>#include <stdio.h>#include <conio.h>int main(int argc, char* argv[]){setlocale(0,"russian");int i,n,s;puts("Введите количество членов последовательности:");scanf_s("%d",&n);for (i=1,s=0;i<=n;i++) s+=i;printf("Сумма=%5dпри n=%3d\n",s,n);puts("Нажмите любую клавишу для завершения...");_getch();return 0;}2.5 Неструктурные операторы передачи управленияПомимо обычного набора операторов передачи управления С++ включает три оператора передачи управления, с точки зрения технологии структурного программирования нарушающие структурность программы. Использование этих операторов усложняет «чтение» программы и, возможно, свидетельствует о ее непродуманной структуре.Оператор goto.

Оператор безусловно передает управление в помеченную идентификатором точку:goto <Идентификатор>;Точка, в которую передается управление, отмечается меткой вида:<Идентификатор>:Например:again: ... // меткаgoto again;// оператор безусловной передачи управленияОператор break. Оператор используется в операторах циклов и выбора: for,while, do...while, switch для выхода из конструкции до ее завершения.

Он записывается в виде:break;Пример 2.5. Программа суммирования до 10 чисел вводимой последовательности.Завершение ввода и суммирования при получении отрицательного числа.Оглавление42#include <locale.h>#include <stdio.h>#include <conio.h>int main(){setlocale(0,"russian");int s=0,i,k;puts("Введите последовательность до 10 чисел.");for(i=0;i<10;i++){scanf_s("%d",&k);if (k<0) break; // по отрицательному числу - выход из циклаs+=k;}printf("Сумма чисел = %d\n",s);puts("Нажмите любую клавишу для завершения...");_getch();return 0;}Оператор continue.

Оператор используется для пропуска нескольких операторов доконца тела цикла и возврата в цикл. Он записывается в виде:continue;Пример 2.6. Программа суммирования 10 вводимых целых положительных чисел.При вводе отрицательного числа выводится предупреждающее сообщение.#include <locale.h>#include <stdio.h>#include <conio.h>int main(){setlocale(0,"russian");int s=0,i=0,k;puts("Введите последовательность до 10 чисел.");while(i<10){scanf_s("%d",&k);Оглавление43if (k<0)// при вводе отрицательного числа{puts("Будьте внимательны.");continue; // значение счетчика i и сумма не меняются}i++; s+=k;}printf("Cумма чисел = %d\n",s);puts("Нажмите любую клавишу для завершения...");_getch();return 0;}Контрольные вопросы к главе 21.

Какие операторы С++ называют управляющими?Ответ.2. Что такое блок операторов и его особенности?Ответ.3. В чем заключается правило вложенности при использовании оператора ветвления?Ответ.4. Каковы особенности выполнения оператора выбора switch?Ответ.5. Дайте определение итерационного цикла.Ответ.6. Какие циклические процессы называются счетными и почему?Ответ.7. В чем заключается особенность поискового цикла?Ответ.8. Назовите операторы реализации циклов в С++?Ответ.9. Чем оператор цикла с постусловием отличается от оператора цикла с предусловием?Ответ.10. Перечислитеосновныенеструктурныеоператорыназначение и особенности применения.Ответ.Оглавлениепередачиуправления.Их443СЛОЖНЫЕ СТРУКТУРЫ ДАННЫХ.

АДРЕСНАЯ АРИФМЕТИКАВ С++ не существует развитой системы структур данных, как, например, в Паскале.Единственным действительно структурным типом данных являются структуры. Остальные сложные данные моделируются с использованием средств адресной арифметики, воснове которой лежит понятие адреса и операций над ним.3.1 Указатели и ссылкиДля хранения адресов в С++ используются специальные типы данных – указатели иссылки. Существует несколько причин, по которым практически невозможно написать хорошую программу на языке С++ без использования указателей или ссылок, например:а) использование указателей или ссылок позволяют функциям возвращать измененные значения в вызывающую программу;б) с помощью указателей осуществляется доступ к динамически распределенной памяти;в) применение указателей повышает эффективность функций обработки строк.3.1.1 Определение указателя.

Типизированные и нетипизированные указателии операции над нимиУказатель – это переменная, в которой хранится адрес некоторого объекта программы: другой переменной, поименованной константы, подпрограммы и т.п. Формат объявления указателя выглядит так:[<И1>][<Тип данных>][<Тип указателя>] [И2]*<Имя>[=<Значение>];где<И1> – возможность изменения содержимого по адресу, записанному в указатель:если ничего не указано, то содержимое можно менять, если указано const, то нельзя;<И2> – возможность изменения адреса, записанного в указатель: если ничего не указано, то адрес можно менять, если указано const, то нельзя;<Тип данных> – тип данных, адрес которых хранит указатель, может быть любойтип, определенный в С++, в том числе void;<Тип указателя> – определяется используемой моделью памяти, может быть far(дальний) или near (ближний).

В настоящее время данный описатель не упоОглавление45требляют, по умолчанию принимается near, что соответствует модели памятибольшинства приложений Windows, которая называется flat.Примеры объявления указателей:1) short a,*ptrs=&a; // указатель ptrs инициализирован адресом переменной а;2) const short *ptrs; // неизменяемое значение,// можно изменить адрес, например ptrs=&b,// но нельзя изменить содержимое *ptrs=10;3) short *const ptrs=&a; // неизменяемый указатель,// можно менять содержимое *ptrs=10,// но нельзя изменить адрес ptrs = &b.Различают указатели:• типизированные – адресующие данные конкретного типа, например:int *b,*c ;// указатели, хранящие адреса целых чиселlong double *l; // указатели, хранящие адреса вещественных чисел• нетипизированные – не связанные с данными определенного типа, например:void * p;// просто адрес области памятиТипизированные указатели несут в себе сведения о размере памяти, адресуемой этимуказателем.

Нетипизированные – создаются как бы «на все случаи жизни». Они отличаются от типизированных указателей отсутствием сведений о размере соответствующегоучастка памяти, поэтому в них легко копировать адреса из указателей других типов.В С++ определена адресная константа NULL. Эта константа означает адрес, которыйникуда не указывает или «нулевой адрес». Такой адрес используется как маркер «Пустойадрес», когда надо отметить, что адрес в указатель не записан и может быть присвоен указателю любого типа, например:int *pi=NULL;void *b=NULL;Операции над указателями. Над указателями, как над переменной любого типа,определены операции, которые можно над ними выполнять.1.

Присваивание. Допускается присваивать указателю значение другого указателятого же типа или нулевого указателя, например:int *p1,*p2;float *p3,*p4;void *p;...Оглавление46// допустимые операцииp1=p2; p4=p3; p1=NULL; p=NULL;...// недопустимые операцииp3=p2; p1=p3; …Однако при необходимости выполнить запрещенную операцию присваивания можноиспользовать явное переопределение типа для приведения указателя одного типа к другому, например:p1=(int*)p3; .p3=(float*)p2;2.

Получение адреса (&). Результат операции – адрес некоторой области памяти, который можно присвоить указателю. Это можно сделать:a) при помощи операции присваивания:int *pi,i=10;...pi=&i;б) во время инициализации указателя при его объявлении:float b=5.7,*pf=&b;.3. Доступ к данным по указателю (операция разыменования). Тип значений, получаемых при разыменовании указателя, совпадает с базовым типом данных указателя.Например:short c, a=5,*ptri=&a;float d,p=2.4563;void *b=&a;…c=*ptri;// в результате с=5*ptri=125;// вместо 5 в память переменной а теперь записано число 125Нетипизированные указатели разыменовывать нельзя. При необходимости разыменовать нетипизированный указатель требуется явно указать тип данных, например:*b=6; ⇒ *(int*)b=6;b=&p;d=*b=> d=*(float *)b4. Операции отношения.

Из шести операций отношений над указателями определены только две: проверка равенства (==) и неравенства (!=).Например:int sign = (p1 == p2);if (p1!=NULL) {….}Оглавление475. Арифметические операции. В С++ над указателями разрешены следующие арифметические операции: сложение (+), вычитание (-), инкремент (++) и декремент (--).Совокупность указанных операций и правила выполнения этих операций над указателями получили название адресной арифметики (см. раздел 3.2).При необходимости указатель может содержать адрес другого указателя, который, всвою очередь, содержит адрес обычной переменной.

Характеристики

Тип файла
PDF-файл
Размер
1009,74 Kb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6376
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее