Смекни!
smekni.com

Язык программирования С (стр. 4 из 5)

Ò Оператор 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<<"функция не определена&bsol;n";

Ò goto metka;} // передача управление метке

Ò return 0;}

Ò - при попытке ввести 0 на экран будет выведено сообщение «функция не определена», после чего управление будет передано оператору, помеченному меткой, и программа повторно попросит ввести значение х.

Ò использование оператора goto затрудняет чтение больших по объему программ, поэтому использовать метки нужно только в крайних случаях.

Оператор выхода break

Ò Оператор break используется внутри операторов ветвления и цикла для обеспечения перехода в точку программы, находящуюся непосредственно за оператором, внутри которого находится break.

Ò Оператор break применяется также для выхода из оператора switch, аналогичным образом он может применяться для выхода из других операторов.

Оператор перехода к следующей итерации цикла continue

Ò Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации (повторение тела цикла).

Ò Рассмотрим оператор continue на примере:

Ò #include <iostream>

Ò using namespace std;

Ò int main()

Ò { for (int i=1; i<100; ++i) //перебираем все числа от 1 до 99
{if (i % 2) continue; //если число нечетное, то переходим к следующей итерации cout<<i<<"&bsol;t";} //выводим число на экран

Ò return 0;}

Ò В результате данной программы на экран будут выведены только четные числа из интервала от 1 до 100, т.к. для нечётныx чисел текущая итерация цикла прерывалась и команда cout<<i<<"&bsol;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&bsol;t b&bsol;n";

Ò cout «a <<"&bsol;t" «b«endl;

Ò a++; //1

Ò cout «a <<"&bsol;t" «=b«endl;

Ò b++; //2

Ò cout «a <<"&bsol;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 Исходные данные Ответ