- •Занятие 1.Выбор среды программирования. Первая программа!
- •Резюме урока:
- •Задание для практической работы .
- •Занятие 2.Стандартные типы данных. Переменные. Основы ввода и вывода данных.
- •Стандартные функции ввода/вывода данных языка Си.
- •Резюме урока:
- •Задание для практической работы.
- •Переменные и типы данных.
- •Как объявить переменную?
- •Проверь себя:
- •Проверь себя:
- •Как сохранить что-то в перменной?
- •Домашнее Задание
- •Занятие 3. Ввод и вывод данных. Справочники функций.
- •Символьный ввод и вывод данных.
- •Функция putchar.
- •Функции форматного ввода и вывода данных printf и scanf.
- •Спецификаторы формата:
- •Модификаторы формата
- •Управляющие последовательности
- •Резюме урока:
- •Задание для практической работы:
- •Занятие 4. Арифметические выражения и стандартные математические функции. Приоритет операций. Инкремент. Декремент.
- •Оператор присваивания. Арифметические выражения.
- •Операторы инкремента и декримента.
- •Сокращенный вид записи арифметических выражений.
- •Стандартная бибиотека математических функций math.H.
- •Приоритет операций.
- •Резюме урока:
- •Задание для практической работы
- •Занятие 5.Управляющая конструкция if-else. Логические операторы и выражения.
- •Операторы соотношений и логические выражения.
- •Управляющая конструкция if - else.
- •Логические операторы. Сложные условия.
- •Приоритет логических операций.
- •Задание для практической работы:
- •Занятие 6. Оператор множественного выбора switch.
- •Инструкция switch.
- •Резюме урока:
- •Задание для практической работы:
- •Занятие 7.Циклические конструкции. Цикл со счетчиком for.
- •Циклическая конструкция for. (Цикл for)
- •Первое выражение - инициализация счетчика.
- •Второе выражение - условие.
- •Третье выражение - изменение счетчика.
- •Занятие 8.Оформление кода программы на Си.Уроки программирования для чайников.Язык Си.
- •Имена и способы описания переменных.
- •Оформление логических блоков и запись лесенкой.
- •Оформление арифметических выражений и сложных условий.
- •Использование комментариев.
- •Резюме урока:
- •Занятие 9.Циклические конструкции. Циклы while и do-while.
- •Цикл while.
- •Цикл do-while.
- •Зацикливание.
- •Задание для практической работы.
- •Занятие 10. Функции определяемые пользователем.
- •Как задать функцию.
- •Заголовок функции.
- •Тело функции.
- •Резюме урока:
- •Задание для практической работы.
- •Занятие 11. Одномерные массивы.
- •Резюме урока:
- •Задание для практической работы:
- •Занятие 12. Простейшие алгоритмы для работы с одномерными массивами.
- •Поиск минимального элемента в массиве.
- •Сортировка массива.
- •Задание для практической работы.
- •Занятие 13. Азы работы с файлами и потоками. Случайные числа.
- •Занятие 14. Строки и символьные массивы в языке Си.
- •Объявление и инициализация строк.
- •Ввод и вывод строк.
- •Функция gets().
- •Функция fgets().
- •Функции puts(), fputs().
- •Задания для самостоятельной практической работы.
- •Урок 15. Некоторые стандартные функции работы со строками.
- •Функция strlen().
- •Функции сравнения строк.
- •Функции изменения регистра строки.
- •Функции объединения строк.
- •Занятие 16. Указатели.
- •Перевод числа из шестнадцатеричной системы счисления в десятичную.
- •Перевод числа из десятичной в шестнадцатеричную систему счисления.
- •Переменные и их адреса.
- •Указатели.
- •Объявление указателя.
- •Присвоение указателю адреса.
- •Получение значения переменной.
- •Урок 17. Создание динамического массива. Указатели и практическое применение.
- •Занятие 18. Передача одномерных массивов в функцию. Возвращение массива из функции.
- •Первый случай. Передача в функцию статического массива.
- •Второй случай. Передача в функцию динамического массива.
- •Задание для практической работы:
- •Занятие 18. Передача одномерных массивов в функцию. Возвращение массива из функции.
- •Первый случай. Передача в функцию статического массива.
- •Второй случай. Передача в функцию динамического массива.
- •Задание для практической работы:
- •Занятие 19. Двумерные массивы.
- •Что такое двумерный массив?
- •Как работать с двумерным массивом?
- •Как работать с отдельным элементом массива.
- •Зачем нужны двумерные массивы?
- •Практическое задание.
- •Занятие №20. Некоторые особенности цикла for. Оператор последовательного вычисления.
- •I присвоить 0;
- •Занятие 21. Заголовочные файлы.
- •Как создать заголовочный файл.
- •Как поделиться своей программой с друзьями.
- •Практическое задание.
- •Дополнительные материалы к уроку.
- •Занятие 22. Препроцессор. Директивы препроцессора.
- •Чем занимается препроцессор?
- •Как работает препроцессор?
- •Как посмотреть код программы, после обработки препроцессором.
- •Урок 23. Структуры в языке Си.
- •Int book_date[100]; // дата издания
- •Int book_pages[100]; // количество страниц
- •Что такое структура.
- •Int date; // дата издания
- •Int pages; // количество страниц
- •Как объявить структурную переменную (структуру).
- •Как инициализировать структуру.
- •Как обращаться к полям структуры.
- •Практическое задание:
- •Автор||Название||Год издания||Прочитано||Количество страниц||Стоимость
Сортировка массива.
Теперь пускай нам необходимо отсортировать массив, например, по возрастанию. То есть в начале стоит самый маленький элемент, а в конце самый большой. Будем рассматривать самый простой алгоритм сортировки – сортировка обменом. Другое название этой сортировки - сортировка «пузырьком».
Рассмотрим, как говорит мой преподаватель по курсу «методы оптимизации», философию метода.
Для определенности будем считать, что имеем дело с целочисленным массивом. Начиная с первого элемента, поочередно сравниваем соседние элементы, т.е. первый и второй, второй и третий, третий и четвертый и так до конца массива. Если упорядоченность массива нарушена, то меняем эти элементы местами. Так как мы упорядочиваем массив по возрастанию, в нашем случае первый элемент должен быть меньше следующего.
Давайте рассмотрим иллюстрирующую этот шаг алгоритма картинку.
|
Рис. 3. Пример первого шага сортировки одномерного массива методом обмена. |
Как видите, самый тяжелый элемент – тонет, то есть опускается на самый низ. А более легкие элементы, как бы всплывают, как пузырьки в воде. Отсюда и название алгоритма. После одного прохода алгоритма, на последнее место. Получается, после одного шага алгоритма один элемент уже точно занимает свое место, и при следующем проходе, нам нет необходимости сравнивать предпоследний и последний элемент, так как последний элемент уже на своем месте и ничего менять не надо, так зачем лишнее действие?
Повторяя описанную процедуру n-1 раз (здесь n – размерность массива) получим полностью отсортированный массив.
На следующем рисунке проиллюстрирована работа алгоритма, на примере небольшого массива.
|
Рис. 4. Иллюстрация сортировки массива методом "пузырька". |
Приведем код реализации алгоритма сортировки пузырьком, на языке Си. Обратите внимание на поясняющие комментарии.
Листинг 12.2
#include <stdio.h>
int main(){
int n=6, // размерность массива
arr[6]={5,14,7,4,11,2}; // массив для сортировки
for (int i=n-1;i>0;i--)
for (int j=0;j<i;j++)
if(arr[j]>arr[j+1]){ // если порядок нарушен
//меняем j и j+1 элементы массива местами
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
//выводим массив на экран
for (int i=0;i<n; i++)
printf("%d\n", arr[i]);
return(0);
}
Помните, мы говорили, что на каждом шаге нам нужно сокращать длину основного цикла? Т.е. сначала проходим все элементы до n-1, на следующем шаге до n-2 и т.д. В приведенном выше алгоритме это реализовано внешним циклом. Обратите внимание, что мы впервые используем направление цикла «сверху вниз». Т.е. движемся не от единицы к n, а наоборот, от n-1 к 1.
Задание для практической работы.
Задан целочисленный массив a. Написать программу, которая ищет максимальный элемент в массиве и выводит на экран его номер. Обратите внимание не значение, а номер элемента в массиве.
Задан целочисленный массив arr[1000], в котором существует минимум 10 различных значений. Найти 10 по величине элемент массива.
Задан целочисленный массив arr[40] . Найти количество элементов массива, которые по модулю меньше произвольного наперед заданного числа. Вывести количество таких элементов в массиве.
Составьте функцию, которая по заданному массиву определяет, есть ли в массиве хотя бы один отрицательный элемент.
В уроке был приведен кусок кода, в котором с помощью дополнительной переменной меняются местами два элемента массива. Подумайте, как можно обменять значения двух переменных, не используя дополнительной переменной. Т.е. например, int a=3, b=5; должно стать a=5,b=3; Помните, что использовать дополнительные переменные нельзя.
При выполнении заданий, помните о нашей договоренности, код программы оформлять в виде отдельных функций.
