- •Основы алгоритмизации и программирования, язык Си
- •Введение
- •Блок-схема алгоритма Общие требования к блок-схеме алгоритма
- •Линейные и разветвляющиеся процессы
- •Циклические процессы
- •Итерационные процессы
- •Комментарии
- •Типы данных
- •Данные целого типа
- •Данные вещественного типа
- •Модификатор 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
Операции и выражения 22
Операция присваивания 25
Арифметические операции 25
Операции поразрядной арифметики 27
Логические операции 28
Операции отношения 28
Инкрементные и декрементные операции 29
Операция sizeof 29
Порядок выполнения операций 30
Приоритет операций 30
Преобразование типов 31
Операция приведения 32
Операция запятая 32
Ввод и вывод информации 33
Директивы препроцессора 37
Директива #include 38
Директива #define 38
Операторы языка С(С++) 39
Понятие пустого и составного операторов 40
Условные операторы 40
Операторы организации цикла 44
Оператор цикла for 44
Оператор цикла while 46
Оператор цикла do … while 46
Вложенные циклы 47
Операторы перехода (break, continue, return, goto) 47
Примеры программ 48
Массивы 52
Одномерные массивы 52
Примеры программ 53
Многомерные массивы (матрицы) 57
Примеры программ 59
Указатели 62
Понятие указателя 62
Описание указателей 63
Операции с указателями 64
Связь между указателями и массивами 64
Массивы указателей 65
Многоуровневые указатели 65
Примеры программ 67
Символьные строки 76
Ввод/вывод строк. 77
Функции работы со строками. 79
Примеры программ 80
Функции 86
Прототип функции. 87
Определение функции. 87
Параметры функции 89
Параметры по умолчанию 91
Передача массива в функцию 91
inline функции 92
Класс памяти 93
Автоматические переменные 93
Статические переменные 93
Регистровые переменные 93
Блочная структура 94
Примеры программ 95
Указатели на функции 102
Примеры программ 104
Рекурсия 105
Примеры программ 106
Аргументы в командной строке 110
Функции с переменным числом параметров 111
Примеры программ 115
Сортировка 117
Пузырьковая сортировка. 117
Шейкер сортировка 118
Сортировка вставкой 119
Сортировка выбором 120
Метод Шелла 120
Метод Хора 121
Структуры 123
Доступ к элементам структуры 124
Инициализация структур 125
Указатели на структуры. 127
Структуры и функции 128
Примеры программ 130
Поля бит 133
Объединения 134
Переменные с изменяемой структурой 135
Примеры программ 137
Организация списков и их обработка 138
Операции со списками при связном хранении 139
Стек 140
Построение обратной польской записи 144
Односвязный линейный список, очередь 146
Двусвязный линейный список 150
Циклический список, кольцо 155
Двусвязный циклический список 155
Примеры программ 159
Деревья 160
Потоки и файлы 167
Файлы 167
Основные сведения о файловой системе 168
Организация посимвольного ввода и вывода 170
Определение конца файла feof() 171
Организация ввода и вывода строк 171
Удаление файлов 172
Дозапись потока 172
Позиционирование в файле 172
Текстовые и двоичные файлы 173
Функции fread() и fwrite() 173
Примеры программ 175
Хеширование 189
Схемы хеширования 190
Метод открытой адресации с линейным опробыванием 191
Метод цепочек 191
Графы 193
Машинное представление графов 193
Примеры программ 196
Литература 198
Св. план , поз.
Учебное издание
Луцик Юрий Александрович
МЕТОДИЧЕСКОЕ ПОСОБИЕ
по курсу
ОСНОВЫ АЛГОРИТМИЗАЦИИ И
ПРОГРАММИРОВАНИЯ
для студентов специальности
” Вычислительные машины системы и сети”
Редактор
Корректор
____________________________________________________________________
Подписано в печать . . . Формат 60х84 1/16.
Бумага Печать офсетная Усл. печ. л.
Уч.-изд. л. Тираж экз. Заказ
____________________________________________________________________
Белорусский государственный университет информатики и радиоэлектроники
Отпечатано в БГУИР. Лицензия ЛП № 156.22027, Минск, П Бровки, 6