Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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, нужно выполнить ряд дополнительных проверок.

Ограничения:

  1. запрещено обходить описания с инициализацией объектов.
  2. блоки можно обходить целиком.

Например:

...

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; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.04 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию