- •Глава 2 36
- •1 Задание 1 62
- •Лабораторная работа №1
- •Краткие теоретические сведения
- •1.1Создание консольного приложения
- •1.2Отладка программы
- •1.2.1Установка точек останова (Add breakpoint)
- •2.2Идентификаторы
- •2.3Ключевые слова
- •2.4Знаки операций
- •2.5Константы
- •2.6Комментарии
- •2.7.1Понятие типа данных
- •2.7.2Основные типы данных
- •2.7.3Целый тип (int).
- •2.7.4Символьный тип (char).
- •2.7.5Логический тип (bool).
- •2.7.6Вещественный тип (float, double и long double).
- •2.8Переменные
- •2.9Функции и объекты ввода/вывода
- •2.9.1Основные функции ввода/вывода в стиле с:
- •2.10Операции
- •2.10.2Операция определения размера sizeof
- •2.10.4Деление (/) и остаток от деления (%).
- •2.10.8Логические операции (&& и ||).
- •2.10.10 Условная операция (?:).
- •2.11Выражения
- •2.11.1Преобразование типов в выражении.
- •Задание к лабораторной работе №1
- •Контрольные вопросы к лабораторной работе №1
- •1.1Оператор «выражение»
- •1.2Операторы ветвления
- •1.2.1Условный оператор if... Else
- •1.2.2Об условиях в операторе if
- •1.2.3Оператор выбора switch
- •1.3Операторы передачи управления
- •1.3.1Оператор goto
- •1.3.2Оператор break
- •2 Тестирование программ
- •Домашнее Задание
- •Задание к лабораторной работе №2
- •1Задание 1
- •2Задание 2
- •Содержание отчета
- •2Операторы цикла
- •2.1Цикл с предусловием (while)
- •2.2Цикл с постусловием (do … while)
- •2.3Цикл с параметром for
- •3Дополнительные операторы передачи управления
- •3.1Оператор break
- •3.2Оператор continue
- •4Вложенные циклы
- •Домашнее Задание
- •Задание к лабораторной работе №3
- •1Задание 1
- •2Задание 2
- •Содержание отчета
- •Контрольные вопросы к лабораторной работе №3
- •4Программа пузырьковой сортировки
- •Домашнее Задание
- •Задание к лабораторной работе №4
- •Содержание отчета
- •Контрольные вопросы к лабораторной работе №4
- •0 Строка
- •1 Строка
- •5 Строка
- •2Ввод и вывод многомерных массивов
- •Домашнее Задание
- •Задание к лабораторной работе №5
- •4Ссылки
- •5Динамическое распределение памяти
- •5.1Использование стандартных функций malloc и free
- •5.2Использование операторов new и delete
- •Домашнее Задание
- •Задание к лабораторной работе № 6
- •Содержание отчета
- •Контрольные вопросы к лабораторной работе №6
- •Лабораторная работа №7 отладка программы краткие теоретические сведения
- •6Отладочные пункты меню
- •7Элементы отладки
- •7.1Контрольные точки
- •7.1.1Контрольные точки в исходном коде
- •7.1.2Адресные контрольные точки
- •7.1.3Контрольные точки данных
- •7.2Команда Run to Cursor
- •7.3Команда Pause
- •8Наблюдение за переменными
- •8.1Быстрый просмотр данных
- •9Инспектор отладки
- •9.1Инспекция локальных переменных
- •10Другие инструменты отладки
- •10.1Диалог Evaluate/Modify
- •10.2Окно cpu
- •10.3Стек вызовов
- •10.4Команда Go to Address
- •10.5Команда Program Reset
- •Задание на лабораторную работу №7
- •Контрольные вопросы к лабораторной работе №7
- •Приложение I
- •Приложение II Блоки схем алгоритмов согласно гост 19.002 – 80 и 19.003 – 80
- •Приложение III Оформление алгоритма программы в виде блок-схемы
- •Приложение IV Базовая программа для выполнения лабораторных работ
- •Приложение V
- •Приложение VI
- •Список используемых источников
Содержание отчета
Отчет выполняется по выбору преподавателя либо в редакторе Word, либо в черновом варианте в лекционной тетради. Отчет должен содержать:
Листинг программы на языке Си, решающей задачи в соответствии с вариантом (номером компьютера) задания;
Результаты тестирования программы.
Контрольные вопросы к лабораторной работе №4
Может ли массив содержать переменные разного типа, например, целого (int) и целого типа без знака (unsigned int) ?
Запишите цикл ввода с клавиатуры массива A[7].
Почему программа сортировки массива называтся пузырьковой ?
Модифицируйте алгоритм пузырьковой сортировки так чтобы, упорядочение было по убыванию, а перемещение элемента производилось в начало массива.
ЛАБОРАТОРНАЯ РАБОТА №5
многомерные массивы
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
1Многомерные массивы
Многомерные массивы задаются указанием каждого измерения в квадратных скобках, например, оператор
int matr [6][8];
задает описание двумерного массива из 6 строк и 8 столбцов. Массив состоит из 48 элементов. В памяти такой массив располагается в последовательных ячейках построчно.
00 Строка
1 Строка
5 Строка
7 0 7 0 7 – смещение от начала строки
…
0 7 8 15 40 47 – смещение от начала массива
Трехмерный массив будет описан как:
double mass[4][3][2];
Многомерные массивы размещаются так, что при переходе к следующему элементу быстрее всего изменяется последний индекс.
Для доступа к элементу многомерного массива указываются все его индексы, например,
matr[2][3]=4;
элементу матрицы matr2,3 присвоено значение 4;
x= matr[2][3];
переменной x присвоено значение элемента матрицы matr2,3.
При инициализации многомерного массива он представляется как массив из массивов, при этом каждый массив заключается в свои фигурные скобки (в этом случае величину первой размерности при описании можно не указывать),
int mass2 [][2]={ {1, 1}, {0, 2}, {1, 0} };
В этом примере инициализирован массив матрицы:
Можно задать общий список элементов в том порядке, в котором элементы располагаются в памяти (тогда все размерности указываются):
int mass2 [3][2]={1, 1, 0, 2, 1, 0};
Обнулить весь массив можно так:
int mass2 [3][2]={0};
2Ввод и вывод многомерных массивов
В программе осуществляется ввод/вывод массива massiv типа int, состоящего из трех строк и двух столбцов. При вводе массива во внешнем цикле изменяются строки, а во внутреннем – столбцы. В результате массив вводится по строкам. Вывод массива организован так же. Для удобного чтения, перед выводом каждой строки осуществляется перевод строки оператором cout<<”\n” и вставляются пробелы между элементами с помощью оператора cout<<' '.
int i,j,massiv[3][2]; //описание массива
cout<<RUS("Введите massiv[3][2]\n");
for(i=0;i<3;i++) //ввод массива
for(j=0;j<2;j++) cin>>massiv[i][j];
cout<<"massiv[3][2]\n";
for(i=0;i<3;i++) //вывод массива
{cout<<"\n"; for(j=0;j<2;j++) cout<<' '<<massiv[i][j];}
Такой вывод, однако, недостаточно хорошо выравнивает элементы на экране. Функция cout имеет дополнительные средства, которые позволяют сделать вывод более точным. Для этого задаются поля структуры cout и задается формат выводимых данных.
int i,j;
float massiv[3][2]; //описание массива
cout<<RUS("Введите massiv[3][2]\n");
for(i=0;i<3;i++) //ввод массива
for(j=0;j<2;j++) cin>>massiv[i][j];
cout<<"massiv[3][2]\n\n";
cout<<fixed;
for(i=0;i<3;i++) //вывод массива
{
for(j=0;j<2;j++)
{cout.width(10); cout.precision(3); cout<<massiv[i][j];}
cout<<"\n";
}
Строка cout.width(10); задает число символов полей вывода. После нее каждый элемент массива, не зависимо от значения, будет занимать ровно 10 символов (т.е. число символов вывода задается в круглых скобках).
Для данных различных типов может быть задан формат вывода, например, для вещественных чисел задается число символов после запятой:
cout.precision(3);
и тип формата:
cout<<fixed;//вывод последующих элементов в десятичном формате;
cout<< scientific;//вывод последующих элементов в экспоненциальном формате.
Полный перечень настроек приводится в приложении I I.