- •Часть 1. Структурное программирование
- •Екатеринбург
- •Введение
- •Состав языка Алфавит языка
- •Идентификаторы
- •Зарезервированные (ключевые) слова
- •Знаки операций
- •Константы
- •Комментарии
- •Типы данных
- •Основные типы данных
- •Структура программы
- •Переменные и выражения Переменные
- •Операции
- •Примеры операций
- •Выражения
- •Функции ввода-вывода Основные функции ввода-вывода в стиле с
- •Спецификации формата
- •Модификаторы формата
- •Операторы Оператор "выражение"
- •Условный оператор if
- •Оператор switch
- •Цикл с предусловием
- •Цикл с постусловием
- •Цикл с параметром for
- •Операторы передачи управления Оператор безусловного перехода
- •Инициализация указателей
- •Операции с указателями
- •Массивы Одномерные массивы
- •Динамические массивы
- •Многомерные массивы
- •Задание Написать программу, вычисляющую среднее арифметическое для каждого столбца и каждой строки двумерного числового массива a[4, 5]. Строки
- •Типы данных, определенные пользователем
- •Переименование типов
- •Перечисления
- •Структуры
- •БиблиогрАфичеСкий список
- •ОглавлеНие
- •Часть 1. Структурное программирование
- •620002, Екатеринбург, ул.Мира, 19
- •620002, Екатеринбург, ул.Мира, 19
Многомерные массивы
Многомерные массивы задаются указателем каждого измерения в квадратных скобках, например:
int matr [6] [8];
Здесь задается описание двумерного массива из 6 строк и 8 столбцов. В памяти такой массив располагается в последовательных ячейках построчно. Для доступа к элементу массива указываются все его индексы: matr [i] [j] или *(matr[i] + j)
или *(*matr + i ) +j).
!!! При обращении к элементам массива автоматический контроль выхода индекса за объявленные границы не производится.
При инициализации многомерного массива он представляется либо как массив массивов, при этом каждый массив заключается в фигурные скобки, либо задается общий список элементов (построчно):
int mass1 [3] [2] = {{1, 1}, {0, 1}, {1, 0}};
int mass2 [3] [2] = {1, 1, 0, 1, 0, 1};
Для создания динамического многомерного массива необходимо указать в операции new все его размерности (самая левая размерность может быть переменной), например:
int nstr = 5;
int **m = (int**) new int [nstr] [10];
Следующий пример показывает, как можно задать обе размерности массива на этапе выполнения программы:
…
int nstr, nstb;
cout << "Введите количество строк и столбцов";
cin >> nstr >> nstb;
int **a = new int *[nstr];
for (int i = 0; i < nstr; i + +)
a[i] = new int [nstb];
...
Задание Написать программу, вычисляющую среднее арифметическое для каждого столбца и каждой строки двумерного числового массива a[4, 5]. Строки
Строка представляет собой массив символов, заканчивающийся нуль-символом. Нуль-символ − это символ с кодом, равным нулю, что записывается в виде управляющей последовательности '\0'. По положению нуль-символа определяется фактическая длина строки. Строку можно инициализировать строковым литералом.
Пример
char str[10] = "Привет";
// выделено 10 элементов с номерами от 0 до 9
Если строка при определении инициализируется, ее размерность можно опускать:
char str[ ] = "Привет";
Оператор
char *str = "Привет";
создает не строковую переменную, а указатель на строковую константу, изменить которую невозможно в процессе выполнения программы.
Объявление:
сhar *str [10];
Задает массив из десяти строк.
Операция присваивания значения одной строки другой не определена и может выполняться с помощью цикла или функций стандартной библиотеки (см. раздел "Функции работы со строками и символами" методических указаний “Программирование на языке С++. Часть 2” ).
В стандартной библиотеке С++ определен класс string, который обеспечивает индексацию, присваивание, сравнение и ряд других операций со строками (см. раздел "Строки" в методических указаниях “Программирование на языке С++. Часть 4”).
!!! При вводе с клавиатуры с помощью стандартного потока cin ввод производится до первого пробела, все остальные символы игнорируются. Например:
char str [100];
cin >> str;
При вводе с клавиатуры строки "один два три" в переменную str поместится текст "один". При необходимости ввода строки целиком (т.е. до символа '\n') следует использовать методы потоковых классов get и getline (см. тему "Потоковые классы").
Пример. Программа, запрашивающая пароль у пользователя:
# include <stdio.h>
# include <string.h> //подключаем библиотеку работы со строками
int main ( ) {
char s[5], passw[ ] = "bond";
printf ( "Введите пароль: \n");
gets(s); // функция ввода строки
if (strcmp(s, passw) = = 0) printf ("\n Пароль верен \n");
// strcmp( ) − функция сравнивает две строки
else printf ("\n Пароль не верен \n");
return 0;
}
Задание
Написать программу, выполняющую частотный анализ строки, введенной пользователем (т. е. вычисляющей, сколько раз в строку входит данный символ). Рапорт по каждому символу выдавать только один раз (например, символ “a” встречается в строке несколько раз, рапорт должен быть выдан один раз).