- •Занятие 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; // количество страниц
- •Как объявить структурную переменную (структуру).
- •Как инициализировать структуру.
- •Как обращаться к полям структуры.
- •Практическое задание:
- •Автор||Название||Год издания||Прочитано||Количество страниц||Стоимость
Управляющие последовательности
И на последок, помните мы говорили об управляющих последовательностях (например, \n) , их еще называют escape последовательности. Вот вам список некоторых из этих последовательностей:
\а сигнал-звонок
\f перевод-страницы
\n новая-строка
\t горизонтальная-табуляция
\v вертикальная-табуляция
\\ обратная наклонная черта
\? знак вопроса
\' одиночная кавычка
\" двойная кавычка
//UPD (5 июля 2012):
И еще один небольшой, но важный комментарий. Рассмотрим простой пример.
Листинг3.7
#include <stdio.h>
int main(){
int a;
a=getchar();
printf("a=%d",a);
return(0);
}
Ниже представлен результат её работы.
Как видите, ввели мы f, а на выходе получили 102. Чудеса, да и только.
На самом деле все просто. Когда функция getchar считывает символ входного потока, она возвращает значение int этого символа, равное коду символа в таблице кодов ASCII.
Каждому символу в этой таблице ставится в соответствие его порядковый номер. Например, символу f соответствует номер 102, а цифре 1, номер 49. Т.е. если вы введете 1, то в переменную сохранится не 1, а 49. Таблицу кодов ASCII вы легко найдете в интернете.
А как же быть, спросите вы.
Да легко, можно воспользоваться для вывода символов функцией putchar, как мы уже это делали выше, а можно в спецификаторе формата использовать не %d, а %c. Тогда всё встанет на свои места.
Резюме урока:
Научились работать со справочниками функций
Изучили функции посимвольного ввода и вывода
Изучили спецификаторы и модификаторы формата для функции printf
Немножко поговорили о потоках в программировании
Задание для практической работы:
Поэкспериментируйте с модификаторами формата для спецификатора %e.
Напишите программу которая будет использовать различные escape-последовательности.Посмотрите и на сколько символов вправо сдвигает курсор последовательность \t, посмотрите на сколько строчек вниз сдвигает курсор последовательность \v.
Напишите программу которая считывает с клавиатуры 6 чисел, записанных через пробел. (1 2 64.3 0.624 25.07 43900) причем первые два числа считываются с помощью функции getchar. Для вывода запрещено использовать пробелы, все сдвиги оформляйте через табуляцию и с помощью модификаторов формата. Программа выводит данные на экран в виде такой таблицы:
Занятие 4. Арифметические выражения и стандартные математические функции. Приоритет операций. Инкремент. Декремент.
Как всем, наверное, известно, компьютеры изначально придумывались, чтобы производить на них вычисления. И это было их основное назначение. Именно этим мы сегодня и займемся, в сегодняшнем уроке программирования для начинающих. Т.е. затронем такую важную тему как арифметические выражения и операторы в языке программирования Си. Поговорим об операторе присваивания, приоритете операций, операциях инкремента и декремента. Итак, приступим.
Оператор присваивания. Арифметические выражения.
В языке программирования Си, существуют различные операторы. Самым главным является оператор присваивания, который обозначается символом =. Он используется в любой программе, кроме простейших, типа нашей первой программы, выводящей на экран Hello world. Как вы уже помните из урока программирования посвященного типам данных, с помощью него мы присваиваем переменной находящейся слева от оператора присваивания, значение выражения находящегося справа от него. Например:
Листинг 4.1
int a,b;
a=7;// переменной a присвоить значение 7
b=2;// переменной b присвоить значение 2
Также есть операторы, отвечающие за простейшие арифметические действия, такие как сложение, вычитание, умножение и деление.
«+» - сложение
«-» - вычитание
«*» - умножение
«/» - деление
Кроме четырех основных есть еще такая операция как получение остатка от деления «%».
Их можно использовать совместно с оператором присваивания. Например:
Листинг 4.2.
int a;
a=7+3;// переменной a присвоить результат выражения 7+3, т.е.в неё запишется 10
a=a-2;// переменной a присвоить результат выражения a-2
Обратите внимание на последнюю строчку. С точки зрения математики такая запись не имеет смысла. Это надо понимать следующим образом. Сначала берется значение переменной a, из него вычитается 2 и после этого результат этого выражения записывается снова в переменную a. В результате работы программы Листинг 4.2, в переменной a будет значение 8. ( Во второй строке мы присвоили её значение 10. Потом, в третей строке, мы берем 10 вычитаем 2, получаем 8, и записываем этот результат снова в переменную а.)
Кстати, очень важное замечание.
После того как мы объявили переменную, её значение не определено, в ней содержится какой-то мусор, не стоит считать, что её значение после объявления равно 0.
Т.е. пока мы в переменную a не сохранили значение 10, там был непонятный мусор.
Еще один важный момент. Посмотрите на листинг 4.3
Листинг 4.3
int a,b;
a=10;// переменной a 10
b=a-2;// переменной b присвоить результат выражения a-2
Когда мы используем переменную в каком-то выражении мы работаем не с самой переменной, а только со значением, которое в ней сохранено. Т.е. когда мы переменной b присваиваем значение выражения a-2, в переменной a так и остается значение 10. Оно на 2 не уменьшается. Компьютер в выражение a-2 подставляет значение переменной a, т.е. он заменяет a-2, на 10-2.
Теперь рассмотрим простейшую программу
Листинг 4.4
#include <stdio.h>
int main(){
int a,b;
float c;
a=7;
b=2;
c=a+b; // в переменную с записать сумму переменных a и b
printf("summa %f\n", c);
c=a-b;
printf("raznozt' %f\n", c);
c=a*b;
printf("proizvedenie %f\n", c);
c=a/b;
printf("delenie %f\n", c);
c=a%b;
printf("ostatok ot deleniya %f\n", c);
return (0);
}
Вот результат её работы:
|
Программа иллюстрирующая работу стандартных арифметических операторов. |
Если вы были внимательны, то заметили, наверное, что при делении получился неправильный ответ. 7 поделить на 2 равняется 3.5.
Это одна из особенностей языка программирования Си.
При делении целочисленной переменной на целочисленную переменную остаток от деления теряется. Поэтому 7/2 получилось 3.
Чтобы получить правильный ответ нужно делитель или делимое преобразовать к вещественному типу float. Для этого, перед переменной в скобочках нужно написать тип, к которому она преобразуется.
Листинг 4.5
c=(float)a/b;
c=a/(float)b;
Такая операция называется явным преобразованием типа.Таким образом можно привести и переменную типа float к типу int. Но тогда мы потеряем всю дробную часть, которая стоит после точки. О преобразовании типов в языке Си, мы ещё будем говорить в следующих уроках.
