Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Лекция 8. Операторы передачи управления
Операторы передачи управления. Массивы.
8. Операторы передачи управления. goto - безусловная передача управления return - возврат из функции break - выход из цикла или переключателя continue - переход к следующей итерации.
8.1.Оператор goto
1.Синтаксис: goto <идентификатор>;
Здесь <идентификатор> - это имя метки, расположенной в той же функции, где используется оператор goto.
2.Семантика: Передает управление оператору, помеченному меткой.
Следует заметить, что в программировании вполне можно обойтись без этого оператора. Но иногда можно упростить программный код с его помощью. Например:
... for (...) { for (...) { while (...) { if (...) goto stop; ... } } } stop: cout << “Error \n”; ….
Чтобы заменить инструкцию goto, нужно выполнить ряд дополнительных проверок. Ограничения:
Например: ... goto label; // ошибка float x = 0.0; goto label; // правильно { int n = 0; x = (n+1)*x+x; } label: count << “\nx=” << x; .... 3.Можно передавать управление из внешних блоков во внутренние, однако при этом нельзя обходить инициализацию внутри блока. 8.2.Оператор return
Выполняет выход их функции. Синтаксис: return < выражение>; или return; Здесь < выражение> скалярного типа. Если возвращаемое функцией значение имеет тип void,то < выражение > не указывается. float cub (float z) // вычислить куб числа { return z*z*z;} void cub_print (float z) // вывести на экран куб числа { cout << “\ cub = “ << z*z*z; return; } 8.3.Оператор break Оператор break прекращает выполнение оператора цикла или переключателя и осуществляет переход к следующему за циклом или переключателем оператору, который не должен быть помечен. Например: void main () { int t; for (t = 0; t < 100; t++) { if (t == 10) break; cout << t << “ “; } return; } Результат: 0 1 2 3 4 5 6 7 8 9 При использовании вложенных циклов оператор break обеспечивает выход только из самого внутреннего цикла. Оператор break используется в переключателях, когда нужно организовать ветвление. Например:
#include <iostream.h> void main() { int ic; // восьмеричная цифра cin >> ic; cout << “\n” << ic; switch (ic) { case 0: cout << “- нуль”; break; …. case 7: cout << “- семь”; break; default: cout << “ –это не восьмеричная цифра”; } } 8.4.Оператор continue Этот оператор используется в операторах цикла для организации “досрочного ” выхода из текущей итерации. Он выполняет принудительный переход к следующей итерации, опуская выполнение оставшегося программного кода. Например: void main() { int x; for (x=0; x<=100; x++) { if (x % 2) continue; cout << x << “ “; } } Здесь выводятся только четные числа. В циклах while и do-while оператор continue передает управление непосредственно инструкции, проверяющей условное выражение, после чего цикл выполняется как обычно. А в цикле for после выполнения оператора continue сначала вычисляется инкрементное выражение, а затем условное. И только после этого цикл будет продолжен.
Массивы
Массив – это структура данных, состоящая из фиксированного числа элементов одного типа. Определение одномерного массива имеет следующий синтаксис:
<тип> <имя массива> [<размеры> ];
Здесь <тип> - базовый тип элементов массива; <имя массива >- идентификатор; <размер> - целое выражение, которое определяет количество элементов массива. Например: int mas[5]; // массив из пяти целых чисел float A[10]; // массив из десяти вещественных чисел.
Для доступа к элементу одномерного массива используется конструкция <имя массива> [<индекс>] Индекс определяет позицию элемента внутри массива. || В языке С++ индекс первого элемента массива равен 0 В памяти компьютера элементы одномерного массива располагаются последовательно. Пример. Разместить целые числа 0…5 в массиве ARRAY
#include <iostream.h> void main () { int ARRAY [6]; int i; for (i = 0; i < 6; i++) ARRAY[i] = i; // вывод на экран элементов массива for (i = 0; i < 6; i++) cout << “ARRAY[“ << i<<“]: “ << ARRAY[i] << ‘\n’; }
Результат: ARRAY [0]: 0 ARRAY [1]: 1 ………………. ARRAY [5]: 5
Замечание: в С++ нельзя присваивать один массив другому. Например: float x[7], y[7]; …… x = y; // ошибка Для того, чтобы реализовать такое присваивание, нужно использовать цикл, например: for (i = 0; i < 7; i++) x[i] = y[i]; Замечание: компилятор С++ не контролирует выход за границы массива. Программист сам должен следить за значениями индексов, иначе программа будет нарушена. Пример: Вычислить математическое ожидание дискретной случайной величины x = { x0, x1, …. xk-1 }
В данном примере длина массива К- переменная величина. Прежде, чем решать эту задачу, рассмотрим способы определения массива с переменной длиной. I способ const int k = 10; float x[k];
II способ int k; float x[100]; cin >> k;
III способ #define k 10; float x[k];
#include <iostream.h> void main() { const int k = 10; float x[k], mo; int i; for (i = 0; i < k; i++) cin >>x[i]; mo = 0; for (i = 0; i < k; i++) mo +=x[i]; mo /= k; cout << “ \n Математическое ожидание = “ << mo << ‘\n’; } Вопросы 1. Возврат из функции осуществляет оператор: 1. continue; 2. goto; 3. break; 4. return. 2. Укажите конструкции, которые определяют одномерный массив: 1. int a[5]; 2. char s[]=”abcd”; 3. float f[3][4]; 4. a[i]; 5. double c[m][n][k];
лекция 9
Многомерные массивы и строки
В С++ можно использовать многомерные массивы. Определение многомерного массива: <тип> <имя массива> [<размер1>][<размер2>] … [<размерn>];
Например: int MATRIC[2][3]; // матрица целых чисел размерностью 2х3
Для доступа к элементу многомерного массива используется конструкция
<имя массива> [<индекс1>][<индекс2>] … [<индексn>];
Пример. Задана матрица A[n x n] целых чисел. Написать программу транспонирования этой матрицы. #include <iostream.h> #include <stdlib.h> #include <conio.h> #define n 4 void main() { clrscr(); int A[n][n]; int i, j; randomize(); // инициализация генератора случайных чисел. // создание матрицы for (i = 0; i < n; i++) for (j = 0; j < n; j++) A[i][j] = random(); int S; // для обмена элементов for (i = 0; i < n; i++) for (j = i+1; j < n; j++) { S = A[i][j]; A[i][j] = A[j][i]; A[j][i] = S; } // Вывод матрицы на экран cout << “n транспонированная матрица:” << ‘\n’; for (i = 0; i < n; i++) for (j = 0; j < n; j++) cout << “\n” << A[i][j]; } Чаще всего одномерные массивы используются для создания символьных строк. Строки.
В С++ поддерживается два типа строк. Первый предполагает, что строка – это символьный массив, который завершается символом с нулевым кодом (‘\0’). Компилятор автоматически добавляет этот символ в конец строки. Другой тип заключается в применении объектов класса string, который является частью библиотеки классов, но используется он редко. Пример: char buffer[10]; // определение строки из 9 символов и нулевого байта. В памяти компьютера символы строки размещаются в последовательных байтах. Рассмотрим особенности вода и вывода строк с помощью операций >> и << соответственно. При вводе строки с клавиатуры с помощью операции >> набираются любые символы до нажатия клавиши Enter Например:
char line[255]; cin >> line; _______________. fbcdef Однако применение оператора >> иногда приводит к ошибке. Например: …… { char str[80]; cin >> str; cout << str; } ____________. abcd efgh
Результат: abcd Дело в том, что оператор cin >> прекращает считывание строки, как только встречает символ пробела. Вместо пробела он заносит в строку ‘\0’, тем самым завершая строку. Для решения этой проблемы можно использовать библиотечную функцию gets(): gets(<имя массива>); Эта функция считывает все вводимые символы до нажатия клавиши enter. Для вызова этой функции необходимо подключить библиотеку <stdio>. Пример: #include <iostream.h> #include <stdio.h> void main() { char str[80]; cout << “Введите строку: “; gets(str); cout << str; } Результат: Введите строку: abcd efgh abcd efgh
Замечание: Если при вводе строки с помощью функции gets() или оператора >> число выводимых символов превышает допустимую длину строки, то на экран выводится сообщение об ошибке. Например: …. { char str[5]; cin >> str; cout << str; …. } ___________. abcdefgh - ошибка
Наряду с функцией gets() можно использовать для ввода строк функцию getline(). Формат обращения к функции getline(): getline(<имя массива>,<число символов>); Пример: #include <iostream.h> void main() { char myString[4]; // 3 символа +’\0’ cout << “\n Введите строку: “ << ‘\n’; cin.getline(myString,4); cout << myString; }
Результат: Введите строку: abc abc
Оператор вывода << переносит на экран строку до нулевого байта ‘\0’. Вопросы 1.Cтрока abcdef занимает в памяти компьютера 1.6 байтов; 2.7 байтов. 2.Ввод элементов матрицы А размерностью n организован так: 1.for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>A[i][j]; 2. for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>A[i][j]; Date: 2015-12-12; view: 476; Нарушение авторских прав |