- •Основы программирования
- •Содержание
- •Лабораторная работа №1 Линейные и разветвляющиеся вычислительные процессы
- •Краткие теоретические сведения
- •Классификация данных
- •Декларирование объектов
- •Структура программы
- •Константы
- •Операции Операции выражения
- •Арифметические операции
- •Операция присваивания
- •Сокращенная запись операции присваивания
- •X##; - постфиксную.
- •Преобразование типов операндов арифметических операций
- •Операция приведения типа
- •Операции сравнения
- •Логические операции
- •Побитовые логические операции, операции над битами
- •Операция «,» (запятая)
- •Функции вывода информации
- •Функции ввода информации
- •Ввод - вывод потоками
- •Стандартные математические функции
- •Синтаксис операторов языка Си
- •Операция присваивания
- •Условные операторы
- •If (условие ) оператор1;
- •If (условие1) оператор1;
- •Условная операция "? :"
- •Оператор выбора switch
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Циклические операторы while и do–while
- •Вложенные циклы
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Строки, как одномерные массивы символов
- •Указатели и операции над адресами
- •Операции над указателями (адресная арифметика)
- •Связь указателей и массивов
- •Пример 1: Упорядочить по алфавиту массив строк (не более 20) длиной не более 10 символов в каждой:
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Лабораторная работа №4 Многомерные массивы, динамическое распределение памяти
- •Краткие теоретические сведения
- •Массивы указателей
- •Указатели на указатели
- •Динамическое размещение данных
- •Проверить, является ли введенная строка полиндромом (справа-налево читается также как и слева-направо).
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Вызов функции.
- •Изменение значений параметров.
- •Область действия переменных
- •Классы памяти.
- •Рекурсивные функции.
- •Операция typedef
- •Указатели на функции
- •Примеры работы с функциями
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Декларация структурного типа данных
- •Создание структурных переменных
- •Обращение к полям структур
- •Вложенные структуры
- •Использование typedef
- •Массивы структур
- •Размещение структурных переменных в памяти
- •Пример на использование структур
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Лабораторная работа № 7 Файлы в языке с
- •Краткие теоретические сведения
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Лабораторная работа № 8 Графический режим работы
- •Kраткие теоретические сведения
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Команды вставки и удаления (под блоком понимается выделенное подсветкой подмножество символов)
- •Команды работы с блоками
- •Набор текста программы
- •Компиляция, редактирование связей, запуск программы на выполнение
- •Многофайловая компиляция
- •Отладка программы
- •Использование глобальных переменных, объявленных вне файла
- •Литература
Контрольные вопросы
Укажите типы массивов, применяемых в языке С.
Формы (способы) работы с элементами массива.
Как описываются строки в языке С?
Чем отличаются функции scanf()иgets(),printf()иputs()?
Лабораторная работа №4 Многомерные массивы, динамическое распределение памяти
Цель работы:
Изучить работу с многомерными массивами, освоить возможности динамического размещения данных.
Краткие теоретические сведения
Кроме одномерных массивов возможна работа с многомерными массивами. Объявление многомерного массива:
<тип><имя>[<размер 1 >][<размер 2 >]…[<размер N>]={{список начальных значений}, {список начальных значений},…};
Наиболее быстро изменяется последний индекс элементов массива, поскольку многомерные массивы размещаются в памяти компьютера в последовательности столбцов.
Например, элементы двухмерного массива b[2][1] размещаются в памяти в следующем порядке:
b[0][0], b[0][1], b[1][0], b[1][1], b[2][0], b[2][1].
Следующий пример иллюстрирует определение массива целого типа, состоящего из трех строк и четырех столбцов, с инициализацией начальных значений:
int a[3][4] = {{0,1,2,0},{9,-2,0,0},{-7,1,6,8}};
Если в какой-то группе {…} отсутствует значение, то соответствующему элементу присваивается 0. Предыдущий оператор будет эквивалентен следующему определению:
int a[3][4] = {{0,1,2},{9,-2},{-7,1,6,8}};
Пример программы
Создать двумерный массив целых чисел NxM(NиMне более 50), используя функциюrandи вывести на экран в форме матрицы,N,Mввести с клавиатуры:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define rnd (rand()/ 32768.0) // rand - генератор случайных чисел от 0 до int, rnd – от 0 до 1
void main(void)
{ int i,j,n,m,a[50][50];
puts(“\n Input n, m:”); scanf(“%d %d”,&n,&m);
printf(“\n Array a \n”);
for(i=0; i<n; i++)
for(j=0; j<m; j++) {
a[i][j]=rnd*10-5; // диапазон от –5 до 5
printf(“%d%c“, a[i][j], (j= =m-1)?’\n’:’ ‘);
}
getch();
}
Массивы указателей
В языке С/C++ можно использовать массивы указателей, элементы которых содержат, как правило, указатели на строковые данные. Объявляется такой массив например так: char *m[5]. Здесь массив m[5] – массив, который может содержать пять адресов данных типа char.
Массив указателей можно при объявлении инициализировать, т.е. назначать его элементам конкретные адреса заданных строк.
В качестве примера приведена программа, формирующая массив указателей с одновременной инициализацией его элементов. Программа распечатывает номер строки, ее адрес и значение.
#include <stdio.h>
#include <conio.h>
void main(void)
{
int i,k;
char *m[]={"Winter","Spring","Summer","Automn"};
k=sizeof(m)/sizeof(*m);
printf("\n Количество строк = %d",k);
for(i=0; i<k; i++)
printf("\n Номер - %d; Адрес - %p; Строка: %s", i+1, m[i], m[i]);
getch();
}
В результате получим:
Количество строк = 4
Номер - 1; Адрес - 0042007C; Строка: Winter
Номер - 2; Адрес - 00420074; Строка: Spring
Номер - 3; Адрес - 0042006C; Строка: Summer
Номер - 4; Адрес - 00420064; Строка: Automn
Конкретные значения адресов зависят от ряда причин: архитектура компьютера, тип и размер оперативной памяти и т.д.