- •Занятие 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; // количество страниц
- •Как объявить структурную переменную (структуру).
- •Как инициализировать структуру.
- •Как обращаться к полям структуры.
- •Практическое задание:
- •Автор||Название||Год издания||Прочитано||Количество страниц||Стоимость
Как поделиться своей программой с друзьями.
Если вы попробуете открыть папку проекта и скопировать оттуда исполняемый файл (*.exe) вашей программы, то на другом компьютере этот файл работать не будет. Я просто покажу вам какие свойства проекта нужно поменять, не вдаваясь в нюансы, чтобы получившийся файл работал на другом компьютере.
Итак, открываем вкладку «Проект» -> «Свойства проекта» или используем комбинацию«Alt+F7». В левой части появившегося окна открываем вкладки «Свойства конфигурации» -> «С/С++» -> «Создание кода». В правой части в поле «Библиотека времени выполнения» выбираем параметр «Многопоточная (/MT)», после чего последовательно нажимаем кнопки «Применить» и«Ок».
Рис.4 Окно «Свойства прокета»
Теперь в главном окне в маленьком поле «Конфигурация решения» выбираем тип «Release».
Рис.5 Изменение конфигурации решения.
Осталось лишь заново скомпилировать наш проект. Вслед за этим в папке проекта появится папка, в которой будет находиться исполняемый файл, работающий на чужих компьютерах.
Практическое задание.
Написать программу-калькулятор комплексных чисел. Предусмотреть простенькое меню, возможность выполнения следющих действий: сложение, вычитание, умножение, деление двух комплексных чисел, нахождение модуля и аргумента комплексного числа. Кроме того, реализовать возможность сохранения результата в "памяти" (одна ячейка), на время выполнения программы. В программе рационально использовать возможности заголовочных файлов.
Дополнительные материалы к уроку.
Текст урока в формате pdf.
Архив с программой ConsolPassMan. Исходные коды, рабочая версия, инструкция по установке.
Занятие 22. Препроцессор. Директивы препроцессора.
Еще в самом первом уроке, я говорил вам, что когда компилятор встречает команду #include <stdio.h> он подставляет в это место содержимое файла stdio.h. На самом деле все немножко не так. Настал час, когда вас можно посвятить в эти тонкости, раньше они были излишними.
На самом деле, компилятор никакой строчки #include <stdio.h>никогда не встретит. Я уже упоминал, что процесс преобразования кода программы в исполняемый файл не так прост. Прежде чем передать код попадет к компилятору, его обрабатывает другая программа – препроцессор.
Препроцессор - это специальная программа, которая обрабатывает исходный код, прежде чем передать его компилятору.
Чем занимается препроцессор?
удаляет комментарии из кода
обрабатывает директивы препроцессора
Директивы препроцессора - это все те команды, которые начинаются с символа «#».
На данный момент вы знаете как минимум две такие команды#include и #define, хотя есть и другие.
Данный список неполный. Есть и другие действия, которые выполняет препроцессор, но я о них пока рассказывать не буду.
Как работает препроцессор?
В работе препроцессора важно понимать две вещи:
Препроцессор работает строго до компилятора
Препроцессор просто заменяет один текст – другим
Ему вообще наплевать на синтаксис и всякие условности. Он просматривает текст, и заменяет одни его кусочки другими.
Что и на что заменяется, вы уже должны знать, но я на всякий случай напомню.
В случае директивы #include <stdio.h> сама эта строка будет заменена препроцессором на содержимое файла stdio.h.
В случае директивы #define FJ 11 все вхождения FJ заменяются на11. Кстати, это тоже не единственный вариант использования директивы #define. Но мы пока что коснемся только этого варианта.
Стоит отметить, что если FJ встретиться внутри имени какой-нибудь переменной или в названии оператора, то она естественно ни на что не заменится. Например, если есть переменная с именем kFJ, то она так и останется kFJ а не станет после обработки препроцессоромk11.
Теперь разберем пример, который был в тесте в нашей группе во Вконтакте.
Сразу же скажу правильный ответ. Да, эта программа скомпилируется и будет работать.
Теперь разберемся, почему же она будет скомпилирована.
Как я понял, большинство смутило то, что переменная s89 не объявлена, что и должно было бы привести к ошибке компиляции. Но, теперь вооружившись знаниями о работе препроцессора, разберемся, что же, на самом деле, получает компилятор для обработки. Итак, сначала запускается препроцессор, который получает для обработки следующий код:
#include <stdio.h>
#define G s89
int main (){
char G =10;
s89=12;
// комментарий
printf("%d %d\n", s89, G);
return 0;
}
Препроцессор начинает обрабатывать этот код и буквально сразу же встречает директиву #include <stdio.h>. Для него, как мы уже знаем, это команда на то, чтобы вставить вместо этой строчки содержимое файла stdio.h. Вставляем. Получившийся код я сюда выписывать не буду, иначе это займет очень много места.
Препроцессор продолжает обработку файла и встречает команду#define G s89. Это как мы знаем, команда на то, чтобы заменить G наs89.
После замены получим следующий код. (ниже приведен код только для функции main)
int main (){
char s89 =10;
s89=12;
printf("%d %d\n", s89, s89);
return 0;
}
Ну и походу дела, препроцессор удалит комментарий из программы, а точнее заменит его пустой строчкой.
Вот, в принципе, мы и ответили на вопрос: «Почему программа компилируется?»
Хоть многих и смутило, что в ней отсутствует переменная s89, разобравшись обстоятельно, видим, что она-то как раз есть, а вот переменной G нет. Именно такой код поступит на компиляцию. Нетрудно видеть, что он корректный.
