Ò Оператор goto передает управление на помеченный меткой оператор
Ò пример использования оператора goto:
Ò #indude <iostream>
using namespace std;
int main()
{float x;
metka: cout <<"x="; //оператор, помеченный меткой
Ò cin»x;
Ò if (x) cout<<“y=“<<1/x<<endl;
Ò else { соut<<"функция не определена\n";
Ò goto metka;} // передача управление метке
Ò return 0;}
Ò - при попытке ввести 0 на экран будет выведено сообщение «функция не определена», после чего управление будет передано оператору, помеченному меткой, и программа повторно попросит ввести значение х.
Ò использование оператора goto затрудняет чтение больших по объему программ, поэтому использовать метки нужно только в крайних случаях.
Ò Оператор break используется внутри операторов ветвления и цикла для обеспечения перехода в точку программы, находящуюся непосредственно за оператором, внутри которого находится break.
Ò Оператор break применяется также для выхода из оператора switch, аналогичным образом он может применяться для выхода из других операторов.
Ò Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации (повторение тела цикла).
Ò Рассмотрим оператор continue на примере:
Ò #include <iostream>
Ò using namespace std;
Ò int main()
Ò { for (int i=1; i<100; ++i) //перебираем все числа от 1 до 99
{if (i % 2) continue; //если число нечетное, то переходим к следующей итерации cout<<i<<"\t";} //выводим число на экран
Ò return 0;}
Ò В результате данной программы на экран будут выведены только четные числа из интервала от 1 до 100, т.к. для нечётныx чисел текущая итерация цикла прерывалась и команда cout<<i<<"\t" не выполнялась.
Ò Оператор возврата из функции return:
Ò Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова.
Ò Когда компилятор обрабатывает оператор определения переменной,
Ò например, int а =50; , то он выделяет память в соответствии с типом int и записывает в нее значение 50)
Ò Все обращения в программе к переменной по ее имени заменяются компилятором на адрес области памяти, в которой хранится значение переменной., такие переменные называются указателями.
Ò В C++ различают три вида указателей:
Ò - указатели на объект,
Ò - на функцию и на void;
Ò Указатель на объект содержит адрес области памяти, в которой хранятся
Ò данные определенного типа (простого или составного).
Ò Объявление указателя на объект имеет следующий вид:
<базовый тип> [<модификатор>] * <имя указателям
Ò базовый тип — имя типа переменной, адрес которой будет содержать переменная указатель;
Ò модификатор необязателен., может иметь значение: near, far или huge
Ò Указатель может быть переменной или константой, указывать на переменную или константу, а также быть указателем на указатель.
Ò Например:
Ò int i; //целочисленная переменная
Ò const int j=10; //целочисленная константа
Ò int *a; //указатель на целочисленное значение
Ò int **x; //указатель на указатель на целочисленное значение
Ò const int *b; //указатель на целочисленную константу
Ò int * const c=&i; //указатель-константа на целочисленную переменную
Ò const int 'const d=&j; //указатель константа на целую переменную
Ò Указатель типа void применяется в тех случаях, когда конкретный тип объекта,
Ò адрес которого нужно хранить, не определен.
Ò Указателю на void можно присвоить значение указателя любого типа, а также сравнить его с любым указателем, но перед выполнением каких-либо действий с областью памяти, на которую он ссылается, требуется преобразовать его к конкретному типу явным образом.
Ò Перед использованием указателя надо выполнить его инициализацию, т.е. присвоение нач.значения.
Ò Существуют следующие способы инициализации указателя:
Ò 1) присваивание указателю адреса существующего объекта:
Ò с помощью операции получения адреса:
Ò int а=50; //целая переменная
Ò int *x=&a; //указателю присваивается адрес целой переменной а
Ò int *y (&а); // указателю присваивается адрес целой переменной а
Ò с помощью значения другого инициализированного указателя
Ò int *z=x; //указателю присваивается адрес, хранящийся в х:
Ò с помощью имени массива или функции (рассмотрим позже).
Ò 2) присваивание указателю адреса области памяти в явном виде:
Ò int *p=(int *) 0xB8000000;
Ò где 0хВ8000000 - шестнадцатеричная константа, (int *) - операция явного приведения типа к типу указатель на целочисленное значение.
Ò 3) присваивание пустого значения:
Ò int *x=NULL; int *y=0;
Ò где NULL стандартная константа, определенная как указатель равный О
Ò 4) выделение участка динамической памяти и присваивание ее адреса указателю:
Ò int *a = new int; //1
Ò int *b = new int (50); //2
Ò 4) выделение участка динамической памяти и присваивание ее адреса указателю:
Ò int *a = new int; //1
Ò int *b = new int (50); //2
Ò // 1 операция new выполняет выделение достаточного для размещения величины типа int участка динамической памяти и записывает адрес начала этого участка в переменную а.
Ò Память под переменную а выделяется на этапе компиляции.
Ò //2, кроме действий описанных выше, производится инициализация выделенной динамической памяти значением 50.
Ò Освобождение памяти, выделенной с помощью операции new, должно выполняться с помощью операции delete.
Ò При этом переменная-указатель сохраняется и может инициализир-ся повторно.
Ò пример использования операции delete:
Ò delete a; delete []b;
Ò Ссылка представляет собой синоним имени, указанного при инициализации ссылки.
Ò Ссылку можно рассматривать как указатель, который разыменовывается неявным образом.
Ò Формат объявления ссылки: <базовый тип> & <имя ссылки>
Например:
int а; //целочисленная переменная
Ò int &b=a; //ссылка на целочисленную переменную а
Следующий пример:
Ò #include <iostream>
Ò using namespace std;
Ò int main()
Ò {int a=50; //целочисленная переменная а
Ò int &b=a; //ссылка b - альтернативное имя для переменной а
Ò cout <<"a\t b\n";
Ò cout «a <<"\t" «b«endl;
Ò a++; //1
Ò cout «a <<"\t" «=b«endl;
Ò b++; //2
Ò cout «a <<"\t" «b«endl;
Ò return 0;}
Ò Одномерный массив - это фиксированное количество элементов одного и того же типа, объединенных общим именем, где каждый элемент имеет свой номер.
Ò Нумерация элементов массива в C++ начинается с нулевого элемента, то есть, если массив состоит из 10 элементов, то его элементы будут иметь следующие номера: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
Ò Элементы массива могут быть любого типа, в том числе и структурированного (кроме файлового).
Ò Между указателями и массивами существует взаимосвязь: любое действие над элементами массивов, которое достигается индексированием, может быть выполнено и с помощью указателей.
Ò Вариант программы с указателями будет работать быстрее.
Ò Дан массив из 10 целых чисел. Написать программу, которая заменяет в данном массиве все отрицательные элементы нулями.
#include <iostream>
using namespace std;
int main()
{ int n; cout<<"n="; cin>>n; //ввели количество элементов массива
int a[n]; // объявляем статический массив размерностью n
for (int i=0;i<n; ++i) //ввод и обработка данных
{cout<<"a[“<<i<<"]="; cin>>a[ij); //ввод очередного элемента
if (a[i]<0) a[i]=0;} //если i-тый элемент массива отрицат., то заменяем его на 0
for (int i=0;i<10;++i) cout<<a[i]<<"M"; //вывод массива на экран
return 0;}
Ò Результат работы программы: Исходные данные Ответ
2 -4 1 2 -2 0 23 -12 1 -1 2 0 1 2 0 0 23 0 1 О
Ò Дан массив из n действительных чисел (n<100).
Ò Написать программу для подсчета суммы этих чисел.
Ò #include <iostream>
Ò using namespace std;
Ò int main()
Ò { int n; cout<<"n="; cin>>n;
Ò float a[n];
Ò float s=0;
Ò for (int i=0;i<n; ++i)
Ò {cout<<"a[“<<i<<"]="; cin>>a[i]; //ввод очередного элемента в массив
Ò s+=a[i];} //добавление значения элемента массива к сумме
Ò cout <<"s=“<<s<<endl;
Ò return 0;}
Ò Результат работы программы: n Исходные данные Ответ
Ò 5 23 0 2.5 1.7 -1.5 S = 5
Ò при подсчете суммы используется прием накопления суммы s+=a[i].
Ò Дан массив из n целых чисел (n<100). Написать программу для подсчета среднего
арифметического четных значений данного массива.
Ò #include <iosfream>
Ò using namespace std;
Ò int main()
Ò { int n; cout<<"n="; cin>>n;
Ò int a[n], k=0;
Ò float s=0;
Ò for (int i=0;i<n; ++i)
Ò { cout<<"a[“<<i<<"]="; cin>>a[i]; //ввод очередного элемента в массив
Ò if (!(a[i]%2)) //если остаток при делении элемента на 2 равен О
{s+=a[i]++k;} //то элемент четный - добавить его к сумме и увеличить
} // количество четных элементов на 1
if (k) //если к не нулевое, то четные числа в последовательности есть
Ò cout <<"sr=“<< s/k<<endl; //и можно вычислить их среднее арифметическое значение else cout<<" четных чисел в последовательности нет “<<endl;
return 0;}
Ò Результат работы n Исходные данные Ответ