Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
m_pos_5.doc
Скачиваний:
10
Добавлен:
01.07.2025
Размер:
353 Кб
Скачать
☆

14. Оператор выбора (переключатель)

Формат оператора выбора:

switch (целочисленное_выражение)

{ case константа1: список_операторов;

case константа2 : список_операторов;

. . . . . . . . . . . . . . . . . .

default: список_операторов; }

  1. Вычисляется выражение.

  2. Полученное значение последовательно сравнивается с кон­стантами, при пер­вом совпадении значений выполняются операторы, стоящие пос­ле двоеточия.

  3. Если ни с одной из констант совпадения не произошло, то выполнятся операторы после слова default.

Для того чтобы «обойти» выполнение операторов на последу­ющих ветвях, нужно принять специальные меры, используя опе­раторы выхода или перехода.

Рассмотрим фрагмент программы, который переводит число­вую оценку знаний ученика в ее словесный эквивалент. Согласно вузовской системе: 5 — «отлично», 4 — «хорошо», 3 — «удовлет­ворительно», 2 — «неудовлетворительно».

Пример .

#include <iostream.h>

void main ()

{int ball;

cout<<"\nBBeдите оценку: ";

cin>>ball;

switch (ball)

{ case 2: cout<<" \tЭтo неудовлетворительно ! \n"; break;

case 3: cout<<" \tЭTO удовлетворительно ! \n"; break;

case 4: cout<<"\t Это хорошо !\n"; break;

case 5: cout<<" \tЭTO отлично !\n"; break;

default: cout<<"\tHeт такой оценки! \n";

}

}

Два варианта ре­зультатов выполнения этой программы:

Введите оценку: 3 Это удовлетворительно!

Введите оценку: 7 Нет такой оценки!

Если на всех ветвях убрать оператор break, то результат может выглядеть следующим образом:

Введите оценку: 3 Это удовлетворительно!

Это хорошо! Это отлично! Нет такой оценки!

15. Указатели

Понятие указателя знакомо читателю из разд. 3.21, в котором описывается ссылочный тип данных в Паскале. Смысл этого по­нятия в Си/Си++ остается тем же: указатель — это адрес поля памяти, занимаемого программным объектом.

Операция & — адрес. Применение этой операции к имени пе­ременной дает в результате ее адрес в памяти.

Описание указателей. Для хранения адресов используются пе­ременные типа «указатель». Формат описания таких переменных следующий:

тип *имя_переменной

Примеры описания указателей:

int *pti; char *ptc; float *ptf;

После такого описания переменная pti может принимать зна­чение указателя на величину целого типа; переменная ptc пред­назначена для хранения указателя на величину типа char; пере­менная ptf — на величину типа float.

Указателям могут присваиваться значения адресов объектов только того типа, с которым они описаны. В нашем примере допу­стимы операторы

pti=&a; ptc=&c; ptf=&r; В результате указатели примут следующие значения:

pti - FFCO, ptc - FFC2, ptf - FFC3.

Как и для других типов данных, значения указателей могут инициализироваться при описании. Например:

int a=5; int *pti=&a; char c='G'; char *ptc=&c; float r=1.2E8; float *ptf=&r;

В заголовочном файле stdio. h определена константа — нуле­вой указатель с именем null. Ее значение можно присваивать ука­зателю. Например:

ptf=NULL;

Не надо думать, что после этого указатель ptf будет ссылаться на нулевой байт памяти. Нулевой указатель обозначает отсутствие конкретного адреса ссылки.

Использованный в описаниях указателей символ * (звездоч­ка) в данном контексте является знаком операции разадресацш. С ее помощью можно сослаться через указатель на соответствую­щую переменную.

После приведенных выше описаний в записи выражений этой программы взаимозаменяемыми становятся а и *pti, с и *ptc, г и *ptf. Например, два оператора

х=а+2; И x=*pti+2; тождественны друг другу. В результате выполнения оператора

cout«*pti«a;

на экран выведется 55.

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

Использование указателей для передачи параметров функции. Рас­сматривая ранее правила использования функций, мы обращали внимание на то, что в языке Си возможна только односторонняя передача значений фактических параметров из вызывающей про­граммы к формальным параметрам вызываемой функции. Возвра­щаемое значение несет сама функция, используемая в качестве операнда в выражении. Отсюда, казалось бы, следует неукосни­тельное правило: в процессе выполнения функции не могут изме­няться значения переменных в вызывающей программе. Однако это правило можно обойти, если в качестве параметров функции использовать указатели.

В следующем примере функция swap ( ) производит обмен зна­чениями двух переменных величин, заданных своими указателя­ми в аргументах.

void swap(int *a,int *b)

{ int с ;

Если в основной программе имеется следующий фрагмент:

int x=l,y=2; swap (&x, &у) ; printf("x=%d y=%d",x,y) ;

то на экран будет выведено:

х=2 у=1 т. е. переменные х и у поменялись значениями.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]