- •Основы алгоритмизации и программирования, язык Си
- •Введение
- •Блок-схема алгоритма Общие требования к блок-схеме алгоритма
- •Линейные и разветвляющиеся процессы
- •Циклические процессы
- •Итерационные процессы
- •Комментарии
- •Типы данных
- •Данные целого типа
- •Данные вещественного типа
- •Модификатор const
- •Переменные перечисляемого типа
- •Константы
- •Описание переменных
- •Локальные переменные
- •Операции и выражения
- •Операция присваивания
- •Арифметические операции
- •Операции поразрядной арифметики
- •Логические операции
- •Операции отношения
- •Инкрементные и декрементные операции
- •Операция sizeof
- •Порядок выполнения операций
- •Приоритет операций
- •Преобразование типов
- •Операция приведения
- •Операция запятая
- •Ввод и вывод информации
- •Директивы препроцессора Директива #include
- •Директива #define
- •Понятие пустого и составного операторов
- •Условные операторы
- •Операторы организации цикла
- •Оператор цикла for
- •Оператор цикла while
- •Оператор цикла do … while
- •Вложенные циклы
- •Операторы перехода (break, continue, return, goto)
- •Примеры программ
- •Массивы Одномерные массивы
- •Примеры программ
- •Многомерные массивы (матрицы)
- •Примеры программ
- •Указатели Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Связь между указателями и массивами
- •Массивы указателей
- •Многоуровневые указатели
- •Примеры программ
- •Символьные строки
- •Ввод/вывод строк.
- •Функции работы со строками.
- •Примеры программ
- •Функции
- •Прототип функции.
- •Определение функции.
- •Параметры функции
- •Параметры по умолчанию
- •Передача массива в функцию
- •Inline функции
- •Класс памяти
- •Автоматические переменные
- •Статические переменные
- •Регистровые переменные
- •Блочная структура
- •Примеры программ
- •Указатели на функции
- •Примеры программ
- •Рекурсия
- •Примеры программ
- •Аргументы в командной строке
- •Функции с переменным числом параметров
- •Примеры программ
- •Сортировка
- •Пузырьковая сортировка.
- •Шейкер сортировка
- •Сортировка вставкой
- •Сортировка выбором
- •Метод Шелла
- •Метод Хора
- •Структуры
- •Доступ к элементам структуры
- •Инициализация структур
- •Указатели на структуры.
- •Структуры и функции
- •Примеры программ
- •Поля бит
- •Объединения
- •Переменные с изменяемой структурой
- •Примеры программ
- •Организация списков и их обработка
- •Операции со списками при связном хранении
- •Построение обратной польской записи
- •Односвязный линейный список, очередь
- •Двусвязный линейный список
- •Циклический список, кольцо
- •Двусвязный циклический список
- •Примеры программ
- •Деревья
- •Потоки и файлы
- •Файлы Основные сведения о файловой системе
- •Организация посимвольного ввода и вывода
- •Определение конца файла feof()
- •Организация ввода и вывода строк
- •Удаление файлов
- •Дозапись потока
- •Позиционирование в файле
- •Текстовые и двоичные файлы
- •Функции fread() и fwrite()
- •Примеры программ
- •Хеширование
- •Схемы хеширования
- •Метод открытой адресации с линейным опробыванием
- •Метод цепочек
- •Машинное представление графов
- •Примеры программ
- •Литература
Примеры программ
Пример . Написать программу выполняющую раскраску графа
#include<stdio.h>
#include<stdlib.h>
void input(int **graf,int n)
{ int i,j;
while(1)
{ printf("\nvvodite pary smegnyh vershin :");
scanf("%d%d",&i,&j);
if(!i || !j) break;
if(i>n || j>n)
{
puts("error");
continue;
}
*(*(graf+i-1)+j-1)=1;
*(*(graf+j-1)+i-1)=1;
}
}
void print(int **graf,int *color,int n)
{ int i,j;
for(i=0; i<n; i++)
printf("\nverhina : %d cvet : %d",i+1,*(color+i));
printf("\n");
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
printf("%2d",*(*(graf+i)+j));
printf("\n");
}
}
void raskr(int **graf,int *color,int n)
{ int i,ii,j,k,p;
int *vr,*cv;
vr=(int*) calloc(n,sizeof(int));
cv=(int*) calloc(n,sizeof(int));
for(i=0; i<n; i++)
{ k=0;
for(j=0; j<n; j++)
if(*(*(graf+i)+j)) k++;
*(vr+i)=k;
}
for(p=0; p<n; p++)
{
ii=0;
while(ii<n && *(color+ii)!=0) ii++;
for(i=0; i<n; i++)
if(*(color+i)==0 && *(vr+i) > *(vr+ii))
ii=i;
for(i=0; i<n; i++)
*(cv+i)=0;
for(j=0; j<n; j++)
if(*(*(graf+ii)+j)==1 && *(color+j)!=0)
*(cv+*(color+j)-1)=1;
for(i=0; i<n; i++)
if(*(cv+i)==0)
{ *(color+ii)=i+1;
break;
}
}
free(cv);
free(vr);
}
int main()
{ int **graf,*color; // матрица смежности графа и массив цветов
int n; // размерность графа
scanf("%d",&n); // ввод размерности графа
color=(int*) calloc(n,sizeof(int)); // выделение памяти
graf=(int**) calloc(n,sizeof(int*));
for(int i=0; i<n; i++)
*(graf+i)=(int*)calloc(n,sizeof(int));
input(graf,n); // ввод исходного графа
raskr(graf,color,n); // раскраска вершин графа
print(graf,color,n); // вывод результата окраски графа
free(color);
for(i=0;i<n;i++)
free(*(graf+i));
free(graf);
return 0;
}
Литература
1. Керниган Б., Ритчи Д. Язык программирования С. –М.: Финансы и статистика, 1992
2. Керниган Б., Ритчи Д. Язык программирования С. Спб.: Невский диалект, 2004.
4. Романовская Л.М., Русс Т.В., Свитковский С.Г. Программирование в среде С(С++) для ПЭВМ. М.: Финансы и статистика, 1992.
5. Герберт Шилд. Программирование на Borland C++. –Мн.: ООО "Попурри" 1998г. – 800с.
6. Подбельский, В.В., Фомин, С.С. Программирование на языке Си. – М.: Финансы и статистика, 2000.
7. Вирт Н. Алгоритмы и структуры данных. – СПб.: Невский Диалект, 2001.
8. Демидович, Е.М. Основы алгоритмизации и программирования. Язык Си. – БХВ-Петербург, 2006 г.
9. Б. С. Хусаинов. Структуры и алгоритмы обработки данных. Примеры на языке Си – М.: Финансы и статистика, 2004 г.
10. С. Кочан Программирование на языке С. – М: Издательский дом «Вильямс», 2007 г.
Содержание
Введение 3
Блок-схема алгоритма 3
Общие требования к блок-схеме алгоритма 3
Линейные и разветвляющиеся процессы 5
Циклические процессы 8
Итерационные процессы 12
Основные понятия языка С(С++) 14
Комментарии 16
Типы данных 16
Данные целого типа 17
Данные вещественного типа 18
Модификатор const 18
Переменные перечисляемого типа 19
Константы 20
Структура программы на языке С(С++) 22
Описание переменных 23
Локальные переменные 23
Операции и выражения 28
Операция присваивания 30
Арифметические операции 30
Операции поразрядной арифметики 32
Логические операции 33
Операции отношения 34
Инкрементные и декрементные операции 34
Операция sizeof 35
Порядок выполнения операций 35
Приоритет операций 36
Преобразование типов 36
Операция приведения 37
Операция запятая 38
Ввод и вывод информации 38
Директивы препроцессора 43
Директива #include 43
Директива #define 43
Операторы языка С(С++) 45
Понятие пустого и составного операторов 45
Условные операторы 45
Операторы организации цикла 49
Оператор цикла for 49
Оператор цикла while 51
Оператор цикла do … while 51
Вложенные циклы 52
Операторы перехода (break, continue, return, goto) 52
Примеры программ 54
Массивы 57
Одномерные массивы 57
Примеры программ 58
Многомерные массивы (матрицы) 63
Примеры программ 64
Указатели 69
Понятие указателя 69
Описание указателей 70
Операции с указателями 71
Связь между указателями и массивами 71
Массивы указателей 72
Многоуровневые указатели 72
Примеры программ 74
Символьные строки 84
Ввод/вывод строк. 85
Функции работы со строками. 87
Примеры программ 87
Функции 94
Прототип функции. 94
Определение функции. 95
Параметры функции 96
Параметры по умолчанию 98
Передача массива в функцию 99
inline функции 100
Класс памяти 100
Автоматические переменные 100
Статические переменные 100
Регистровые переменные 101
Блочная структура 101
Примеры программ 102
Указатели на функции 110
Примеры программ 111
Рекурсия 113
Примеры программ 113
Аргументы в командной строке 118
Функции с переменным числом параметров 119
Примеры программ 122
Сортировка 125
Пузырьковая сортировка. 125
Шейкер сортировка 125
Сортировка вставкой 126
Сортировка выбором 127
Метод Шелла 127
Метод Хора 128
Структуры 130
Доступ к элементам структуры 132
Инициализация структур 133
Указатели на структуры. 134
Структуры и функции 136
Примеры программ 137
Поля бит 140
Объединения 141
Переменные с изменяемой структурой 142
Примеры программ 144
Организация списков и их обработка 145
Операции со списками при связном хранении 146
Стек 148
Построение обратной польской записи 151
Односвязный линейный список, очередь 154
Двусвязный линейный список 158
Циклический список, кольцо 162
Двусвязный циклический список 162
Примеры программ 166
Деревья 167
Потоки и файлы 175
Файлы 175
Основные сведения о файловой системе 175
Действие 176
Организация посимвольного ввода и вывода 178
Определение конца файла feof() 178
Организация ввода и вывода строк 179
Удаление файлов 179
Дозапись потока 180
Позиционирование в файле 180
Текстовые и двоичные файлы 180
Функции fread() и fwrite() 181
Примеры программ 182
Хеширование 196
Схемы хеширования 198
Метод открытой адресации с линейным опробыванием 198
Метод цепочек 198
Графы 200
Машинное представление графов 201
Примеры программ 203
Литература 205
Св. план , поз.
Учебное издание
Луцик Юрий Александрович
МЕТОДИЧЕСКОЕ ПОСОБИЕ
по курсу
ОСНОВЫ АЛГОРИТМИЗАЦИИ И
ПРОГРАММИРОВАНИЯ
для студентов специальности
” Вычислительные машины системы и сети”
Редактор
Корректор
____________________________________________________________________
Подписано в печать . . . Формат 60х84 1/16.
Бумага Печать офсетная Усл. печ. л.
Уч.-изд. л. Тираж экз. Заказ
____________________________________________________________________
Белорусский государственный университет информатики и радиоэлектроники
Отпечатано в БГУИР. Лицензия ЛП № 156.22027, Минск, П Бровки, 6