Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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




Оператор goto передает управление программой оператору, помеченному меткой, которая задана в операторе goto.

goto метка;... метка: оператор

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

Пример:

for (int i=0; i<100; i++) { for (int j=0; j<10; j + +) { for (int k=0; k<20; k++) { cout << i << j << k << endl; if (i*j*k == 259) goto done; // переход на метку done } } } done: cout << "i*j*k=259 – стоп";

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

Лабораторная работа № 2. Операторы языка С.

Продолжительность – 4 часа.

Максимальный рейтинг – 8 баллов.

Цель работы

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

Задание на лабораторную работу

1. Преобразовать индивидуальное задание из мнемонического описания в последовательность операторов языка С++, построить блок-схему алгоритма и доказать его адекватность текстовому заданию.

2. Создать проект на Visual C++, написать программу на языке С++ в соответствии с разработанным алгоритмом, отладить ее и запустить на выполнение. Продемонстрировать преподавателю выполнение программы.

3. Все числовые константы по заданию вводить с клавиатуры. Ввод данных организовать в диалоговом интерактивном режиме.

4. Выводить на экран не только конечные значения переменных, но и их текущие значения в процессе расчета.

5. Произвести тестирование программы, задавая, по-возможности, нереальные и не предусмотренные заданием значения переменных. На этапе тестирования программы произвести проверку на зацикливание – предусмотреть невозможность попадания программы в «вечный цикл».

6. Составить отчет, в котором отразить листинг программного кода с комментариями, привести блок-схему алгоритма и скриншоты с результатами работы программы.

Таблица 2. Варианты индивидуальных заданий

1. задать переменную i равную -10. задать переменную j равную 28. пока i меньше 23, повторять седующие действия: ( если i равно j, то i увеличить вдвое, иначе j уменьшить на 1. увеличить i на 2). 2. задать переменную q равную -30. задать переменную r равную 6. пока q меньше или равно 20, повторять седующие действия: ( если q равно r, то q увеличить втрое, иначе r уменьшить на 2. увеличить q на 3).
3. задать переменную M равную 28. задать переменную L равную 10. пока L меньше 19, повторять седующие действия: ( если L не равно M, то M уменьшить на 4, иначе L увеличить вдвое. увеличить L на 1). 4. задать переменную D равную -6. задать переменную W равную 8. пока D не станет равно 12, повторять седующие действия: ( если D не равно W, то W увеличить втрое, иначе W уменьшить на 5. увеличить D на 3).
5. задать переменную I равную 10. задать переменную Y равную 8. пока I больше -3, повторять седующие действия: ( если Y равно I, то I уменьшить вдвое, иначе Y уменьшить на 10. уменьшить I на 3). 6. задать переменную U равную 13. задать переменную V равную 6. пока U больше или равно -13, повторять седующие действия: ( если U равно V, то V увеличить втрое, иначе U уменьшить на 2. уменьшить U на 3).
7. задать переменную P равную 28. задать переменную Q равную 10. пока P больше 1, повторять седующие действия: ( если P не равно Q, то Q уменьшить на 4, иначе P уменьшить вдвое. уменьшить P на 1). 8. задать переменную D равную 6. задать переменную W равную 18. пока D не станет равно -12, повторять седующие действия: ( если D не равно W, то W увеличить втрое, иначе W уменьшить на 5. уменьшить D на 3).
9. задать переменную A равную -10.234. задать переменную B равную 0.28. пока A меньше 2.3, повторять седующие действия: ( если A равно B, то A возвести в квадрат, иначе B уменьшить на 1.3. увеличить A на 2.5). 10. задать переменную x равную -3.14. задать переменную y равную 6.28. пока x меньше или равно 20.34, повторять седующие действия: ( если x равно y, то x увеличить втрое, иначе y уменьшить на 2.36. увеличить x на 3.14).
11. задать переменную m равную 28.6. задать переменную k равную 10.7. пока k меньше 1.9, повторять седующие действия: ( если m не равно k, то m уменьшить на 4, иначе k увеличить вдвое. увеличить k на 0.1). 12. задать переменную f равную -6.0. задать переменную g равную 8.4. пока f не станет равно 12.0, повторять седующие действия: ( если f не равно g, то g увеличить втрое, иначе g уменьшить на 5.7. увеличить f на 3.0).
13. задать переменную H равную 10.5. задать переменную h равную 8.6. пока H больше -3.5, повторять седующие действия: ( если h равно H, то H уменьшить вдвое, иначе h уменьшить на 10.3. уменьшить H на 3.5). 14. задать переменную z равную 13.2. задать переменную s равную 6.3. пока z больше или равно -13.1, повторять седующие действия: ( если z равно s, то s увеличить втрое, иначе z уменьшить на 2.2. уменьшить z на 3.7).
15. задать переменную P равную 2.8. задать переменную Q равную 10.1. пока P больше 1.13, повторять седующие действия: ( если P не равно Q, то Q уменьшить на 0.4, иначе P уменьшить вдвое. уменьшить P на 1.1). 16. задать переменную j равную 7.2. задать переменную i равную 1.8. пока j не станет равно -1.2, повторять седующие действия: ( если j не равно i, то i увеличить втрое, иначе i уменьшить на 5.1. уменьшить j на 1.2).
17. задать переменную A равную -10. задать переменную B равную 8. повторять седующие действия: ( если A равно B, то A поделить пополам, иначе B уменьшить на 3. увеличить A на 5), пока A меньше 3. 18. задать переменную x равную -3. задать переменную y равную 6. повторять седующие действия: ( если x равно y, то x увеличить втрое, иначе y уменьшить на 2. увеличить x на 3), пока x меньше или равно 20.
19. задать переменную m равную 26. задать переменную k равную 17. повторять седующие действия: ( если m не равно k, то m уменьшить на 4, иначе k увеличить вдвое. увеличить k на 1), пока k меньше 1. 20. задать переменную f равную -6. задать переменную g равную 14. повторять седующие действия: ( если f не равно g, то g увеличить втрое, иначе g уменьшить на 5. увеличить f на 3), пока f не станет равно 12.
21. задать переменную H равную 11.51. задать переменную h равную 7.6. повторять седующие действия: ( если h равно H, то H уменьшить вдвое, иначе h уменьшить на 1.3. уменьшить H на 3.5), пока H больше -13.5. 22. задать переменную z равную 17.2. задать переменную s равную 2.3. повторять седующие действия: ( если z равно s, то s увеличить втрое, иначе z уменьшить на 0.2. уменьшить z на 0.7), пока z больше или равно -3.1.
23. задать переменную P равную 2.81. задать переменную Q равную 10.11. повторять седующие действия: ( если P не равно Q, то Q уменьшить на 0.43, иначе P уменьшить вдвое. уменьшить P на 1.17), пока P больше 1.73. 24. задать переменную j равную 11.2. задать переменную i равную 1.18. повторять седующие действия: ( если j не равно i, то i увеличить втрое, иначе i уменьшить на 5.11. уменьшить j на 1.12), пока j не станет равно -1.12.

 

Указатели

— Зайди сюда, сынок!
— Отсутствует ссылка.
— НА КУХНЮ ЗАЙДИ!!!

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

Указатель описывается при помощи символа "*":

тип_данных * имя_переменной_указателя; // типизированный указатель void * имя_переменной_указателя; // нетипизированный указатель

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

int x= 101; // задать переменную x целого типа и присвоить ей значение 101 int* y; // задать переменную y – указатель на переменную целого типа y= &x; // присвоить переменной-указателю y адрес переменной х int z = *у; // переменной z присвоить значение, хранящееся в ячейке с адресом y

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

Указатели можно использовать как операнды в арифметических операциях. Над указателями можно выполнять унарные операции: инкремент и декремент. При выполнении операций "++" и "--" значение указателя увеличивается или уменьшается на 1. Но не на 1 байт, а на 1 ячейку того типа, на который он указывает.

Спецификация "%p" функции printf() в С++ позволяет вывести на экран адрес памяти в шестнадцатеричной форме.

Пример:

int x= 101; void *v= &x; // нетипизированному указателю v присвоен адрес переменной х printf(" x= %d, v= %p \n", x, v); int *pw= (int*)v; // явное преобразование типа void* к типу int* printf(" x= %d, v= %p, pw= %p\n", x, v, pw); pw++; printf(" v= %p, pw= %p\n", v, pw);

Рис. 9. Результаты выполнения программы

Из рисунка (Рис. 9) можно видеть, что адрес указателя pw после операции pw++ изменился на 4 – на sizeof(int) - размер ячейки памяти типа int. Указатели и целые числа можно складывать. Конструкция pw+3 задает адрес объекта, сдвинутый на 3 ячейки относительно той, на которую указывает pw. Это справедливо для любых объектов (int*, char*, float* и др.); транслятор будет масштабировать приращение адреса в соответствии с типом, указанным в определении объекта.

Значения двух указателей на одинаковые типы можно сравнивать в операциях ==,!=, <, <=, >, >= при этом значения указателей рассматриваются просто как целые числа, а результат сравнения равен 0 (false) или 1 (true).

int *ptr1, *ptr2, a=10; ptr1= &a+5; ptr2= &a+7; if (prt1>ptr2) cout << "ptr1>ptr2"; // не будет выполнено

Для задания несуществующего адреса заведена константа-указатель NULL. Любой адрес можно проверить на равенство (==) или неравенство (!=) со специальным значением NULL, которое позволяет определить ничего не адресующий указатель.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...