- •Категории типов данных
- •Базовые типы данных С
- •Виды переменных С
- •Массивы
- •Структурирование обработки данныхВозможности выбора
- •Возможности выбора:
- •eof, feof – конец файла
- •Ошибки открытия файлов и ввода вывода
- •Типичные ошибки программирования
- •Внимательно относитесь к типам функций!!!!
- •2 варианта – if … else и (или) условная операция Много вариантов -
- •(выражение)
- •!!!!! Если в теле цикла всего один оператор, то операторные скобки можно не
- •После того как массив определен, в него можно вводить информацию. Начальные значения элементам
- •Фрагмент, запрашивающий у пользователя 10 целых чисел,
- •Доступ к элементам многомерного массива в
- •Типичные ошибки программирования
- •Определение переменной в дополнении к ее имени и
- •В соответствии с реализуемой целью, функция может
- •Функция, выбирающая наименьшее из трех вещественных чисел.
- •Существуют функции, не требующие для своей работы
- •Типичные ошибки программирования
- •Типичные ошибки программирования
!!!!! Если в теле цикла всего один оператор, то операторные скобки можно не ставить!!!!!
printf(“#”);
После того как массив определен, в него можно вводить информацию. Начальные значения элементам массива можно присвоить при его определении:
int temps[5] = {45, 56, 12, 98, 12};
Значения элементов массива можно менять в цикле Элемент массива можно использовать в любых инструкциях, где используется
переменная: в процедурах ввода, вывода и в выражениях. К элементу массива всегда обращаются через его индекс.
Фрагмент, запрашивающий у пользователя 10 целых чисел, |
|
и вычисляющий их сумму |
|
. . . |
|
int A[10]; // объявляем массив из 10 целых |
|
for(int i=0; i<10; i++)// организуем цикл по i от 0 до 9 |
|
{ |
// приглашение |
printf(“\n A[%d]=“, i); |
|
scanf(“%d”,&(A[i])); |
// вводим A[i] |
} |
|
int sum = 0;// объявляем переменную |
|
for(int i=0; i<10; i++) // организуем цикл |
|
sum = sum + A[i]; |
// в цикле суммируем элементы |
. . . |
|
использование итерационных циклов for. С их помощью организуется выполнение однотипных операций со всеми элементами массива, в частности, поэлементный ввод-вывод, поэлементные арифметические операции и др.
Массивы в программах C++ могут быть не только
линейными. Довольно частым является использование двух - (и более) -мерных структур. К примеру, прямоугольная матрица – типичная структура, представимая с помощью двумерного массива; а 3D- тензор может быть записан как соответствующий трехмерный массив.
«массиваG[0][0] |
5 |
21 |
0 |
12 |
G[0][3] |
|
тип |
G[1][0] |
8 |
-3 |
14 |
23 |
|
Здесь |
|
|||||
|
|
55 |
-1 |
0 |
78 |
|
44 4 0 9
G[4][0] |
33 |
0 |
-2 |
0 |
G[4][3] |
|
|
|
|
|
|
Доступ к элементам многомерного массива в
программе производится так же, как и в одномерном случае, то есть путем указания имени массива и набора индексов в квадратных скобках.
G[4][3] = 0.
При работе с многомерными массивами удобно испо- льзовать вложенные циклы for. С их помощью можно выполнить заданное действие с каждым из элемен-тов массива путем перебора всех значений индексов.
типизированные константы - для указания размеров массива. Так же, как и переменная, имеет уникальное имя и тип, однако ее значение не может быть изменено по ходу выполнения программы - можно использовать ее в объявлении массива.
должна быть объявлена с ключевым словом const, вслед за которым указывается ее тип (int, float, double, char, и т.д.), далее, через пробел, – ее имя и инициализирующее выражение
const тип имя = выражение;
|
Произведение 2х квадратных матриц |
|
|
|
const int N = 3;// используем константу N=3 |
|
|
. . . |
}; |
||
тип |
|
float A[N][N] = { {1, 1, 1}, |
|
float |
{2, 2, 2}, |
|
|
{3, 3, 3} }; // исходная матрица A |
|
||
int |
|
float B[N][N] = { {1, 2, 3}, |
|
|
{1, 2, 3}, |
|
|
|
|
{1, 2, 3} }; // исходная матрица B |
|
float C[N][N]; // матрица произведения С
for(int i=0; i<N; i++) // цикл по строкам С
{
for(int j=0; j<N; j++) // цикл по столбцам С
{
float s = 0.0; // вспомогательная переменная
for(int k=0; k<N; k++) |
// цикл суммирования по k |
s += A[i][k]*B[k][j]; |
// добавляем к s новое слаг-ое |
C[i][j] = s; // записываем s в C[i][j]
}
} . . .
Типичные ошибки программирования
1.Выход за пределы массива в цикле for. Возникает при обращении к несуществующему элементу (с отрицательным индексом или индексом, большим настоящего размера массива минус 1). Не определяется компилятором. Может иметь разнообразные последствия – от некорректных результатов работы программы до зависания ПК.
2.Для размера статического массива вместо константного выражения используется имя переменной. Сопровождается сообщением “Error: Constant expression required”.
3.Неправильное объявление двумерного массива m[x][y] как m[x,y]. Аналогичная ошибка – ссылка на элемент m[x,y]. Вызывают сообщения: “Error: Array bounds missing ]” и “Error: Illegal use of …”. 4.Количество начальных значений в списке инициализации массива превышает его размер. Ошибка распознается на этапе компиляции и сопровождается сообщением “Error: Too many initializers”. 5.Попытка изменить значение типизированной константы после ее объявления. Приводит к сообщению “Error: Cannot modify a const object ”.
Определение переменной в дополнении к ее имени и
типу задает начальное значение объявленной переменной. Кроме того, определение предполагает распределение памяти для переменной.
Определение функции специфицирует ее структуру, которая представляет собой смесь из объявлений и
операторов, которые образуют саму функцию. Определение функции также задает имя функции, ее формальные параметры и тип возвращаемой величины.
Исходная программа может содержать любое число директив, указаний компилятору, объявлений и определений.
Понятие функции в C++ аналогично понятиям под-
программы или процедуры, которые имеются в большинстве языков программирования высокого уровня. Их использование связано с принципами модульного программирования, в основе которого лежит разделение программы на автономные фраг-менты, или модули. Такое разделение становится необходимым в случае, когда объем программы выхо-дит за рамки нескольких строчек исходного кода.
Функция в C++ – это автономный программный модуль, решающий некоторую задачу и служащий определенной цели (все рассмотренные ранее функции станд. библиотек stdio.h, conio.h ...). math.h.
Можно создавать собственные функции.
Более того, несколько функций пользователя могут быть впоследствии объединены в библиотеку. Написанная и протестированная один раз, функция может быть использована много-кратно, в том числе в других программах (при условии ее корректного подключения).