
- •Максимов м.Н.
- •3. Скалярные типы и выражения 51
- •5. Адреса, указатели, массивы, память 95
- •6. Функции, указатели, ссылки 132
- •7 Структуры, объединения и классы 170
- •Введение
- •Модуль 1
- •1.2. Этапы подготовки исполняемой программы
- •1.3. Системы счисления
- •Представление чисел от 0 до 16 в разных системах счисления
- •2.1. Общие сведения о программах, лексемах и алфавите
- •2.2. Идентификаторы и служебные слова
- •2.3. Типы данных
- •2.4. Константы
- •Типы, выбираемые компилятором по умолчанию для целых констант
- •Данные вещественного типа
- •2.5. Операции
- •2.6. Разделители
- •3. Скалярные типы и выражения
- •3.1. Определение и описание переменных
- •3.2. Явное и неявное преобразование типа
- •Проектные задания
- •Тесты рубежного контроля
- •Квалиметрическая оценка
- •Список литературы
- •Модуль 2
- •4.1. Последовательно выполняемые операторы
- •4.2. Операторы выбора
- •If( выражение) оператор_1 else оператор_2
- •If( выражение) оператор_1
- •4.3. Операторы цикла
- •4.4. Операторы передачи управления
- •If (условие) break;
- •4.5. Примеры численного моделирования цепей первого порядка
- •5. Адреса, указатели, массивы, память
- •5.1. Указатели и адреса объектов
- •5.2. Адресная арифметика, типы указателей и операции над ними
- •5.3. Свойства указателя типа void*
- •5.4. Свойства объекта cout
- •5.5. Массивы и указатели
- •5.6. Многомерные массивы, массивы указателей, динамические массивы
- •Проектные задания к модулю
- •Тесты рубежного контроля
- •6.2. Функции с переменным количеством параметров
- •6.3. Рекурсивные функции
- •6.4. Подставляемые (инлайн-) функции
- •6.5. Функции и массивы
- •6.6. Указатели на функции
- •Void f3(float) (...) // Определение функции
- •Int* f4(char *){...} // Определение функции
- •Проектные задания
- •Тесты рубежного контроля
- •Квалиметрическая оценка
- •Модуль 4
- •7 Структуры, объединения и классы
- •7.1 Структура как тип и совокупность данных
- •7.3 Объединения разнотипных данных
- •7.4 Деревья
- •7.5 Битовые поля структур и объединений
- •7.6 Компонентные функции структурированных объектов
- •7.7 Расширение действия (перегрузка) стандартных операций
- •7.8 Доступ к компонентам структурированного объекта
- •7.9 Классы и шаблоны
- •Проектные задания
- •Тесты рубежного контроля
- •Квалиметрическая оценка
- •Список литературы
- •Приложение 1
- •Приложение 2 Стандартная библиотека функций языка Си
If (условие) break;
операторы
}
Например, если начальные значения целых переменных i, j таковы, что i < j, то следующий цикл определяет наименьшее целое, не меньшее их среднего арифметического:
while(i<j){
i++;
if (i == j) break;
j--;
}
Оператор break практически незаменим в переключателях, когда с их помощью надо организовать разветвление. Например, следующая программа печатает название любой, но только одной, восьмеричной цифры:
//Программа 4.4
#include "stdafx.h"
#include <iostream>
void main(){
int ic;
std::cout<<"\n Input octuple number: ";
std::cin>>ic;
std::cout << "\n" << ic;
switch(ic){
case 0: std::cout << " - zero"; break;
case 1: std::cout << " - one"; break;
case 2: std::cout << " - two"; break;
case 3: std::cout << " - three"; break;
case 4: std::cout << " - four"; break;
case 5: std::cout << " - five"; break;
case 6: std::cout << " - six"; break;
case 7: std::cout << " - seven"; break;
default: std::cout << " - this is not octuple number!";
}
getchar();
}
Программа напечатает название только одной введенной цифры и прекратит работу. Если в ней удалить операторы break, то в переключателе будут последовательно выполнены все операторы, начиная с помеченного нужным (введенным) значением.
Циклы и переключатели могут быть многократно вложенными. Однако следует помнить, что оператор break позволяет выйти только из самого внутреннего цикла или переключателя. Например, в следующей программе, которая в символьном массиве подсчитывает количество нулей (ko) и единиц (kl), в цикл вложен переключатель:
//Программа 4.5
#include "stdafx.h"
#include <iostream>
void main(void){
char c[] = "ABC100111";
int k0 = 0, kl = 0;
for (int i = 0; c[i] != '\0'; i++)
switch (c[i]){
case '0': k0++; break;
case '1': kl++; break;
default: break;
}
std::cout<< "\n In string " <<k0 << " zero, " <<kl << " units ";
getchar();
}
Результат выполнения программы:
В строке 2 нуля, 4 единицы
Оператор break в данном примере передает управление из переключателя, но не за пределы цикла. Цикл продолжается до естественного завершения.
При многократном вложении циклов и переключателей оператор break не может вызвать передачу управления из самого внутреннего уровня непосредственно на самый внешний. Поэтому удобнее всего для этого пользоваться не оператором break, а оператором безусловной передачи управления (goto).
Оператор continue употребляется только в операторах цикла. С его помощью завершается текущая итерация и начинается проверка условия дальнейшего продолжения цикла, т.е. условий начала следующей итерации.
Типичный пример использования оператора continue: подсчитать среднее значение только положительных элементов одномерного массива:
for (s=0.0, k=0, i = 0; i<n; i++) {
if(x[i] <= 0.0) continue;
k++; //-Количество положительных элементов в массиве
s += x[i]; // Сумма положительных элементов массива
}
if (k > 0) s = s/k; // Среднее значение
Выполнение оператора continue эквивалентно окончанию текущей итерации цикла и началу проверки для принятия решения о начале новой итерации.