- •Занятие 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; // количество страниц
- •Как объявить структурную переменную (структуру).
- •Как инициализировать структуру.
- •Как обращаться к полям структуры.
- •Практическое задание:
- •Автор||Название||Год издания||Прочитано||Количество страниц||Стоимость
I присвоить 0;
}
}
return (0);
}
И если вы думаете, что такой код не будет работать, то вы ошибаетесь. Хотя, конечно это все для забавы, и писать что-то серьезное так не следует. Но кому стало интересно - погуглите и найдете что-нибудь интересное для себя.
Занятие 21. Заголовочные файлы.
С заголовочными файлами мы уже сталкивались ранее. Буквально в каждой программе мы использовали заголовочный файл "stdio.h". Как вы, наверное, помните, в нем содержатся функции работы со стандартными потоками ввода и вывода (printf(), scanf()).
Нам уже известно, что заголовочные файлы подключаются директивой #include. Те, кто пытался выполнять задания и отправлять свои решения в комментарии, уже знают, что у этой директивы существуют два формата использования.
#include <stdio.h>
//и
#include "myfun.h"
Напомню, что различия между двумя этими директивами состоят в том, где компилятор будет искать подключаемый файл. Если используется первый вариант (с угловыми скобками), то компилятор ищет подключаемый файл в специальном каталоге, в котором хранятся основные подключаемые файлы. Это правило действует для компилятора Visual Studio и для компилятора Borland C++. У меня, например, это каталоги D:\Program Files\Microsoft Visual Studio 9.0\VC\include иC:\BC\INCLUDE соответственно.
Интереснее работает второй вариант этой директивы (с двойными кавычками). В этом случае компилятор прежде ищет подключаемый файл в рабочем каталоге программы. Если же подключаемый файл не обнаружен в рабочем каталоге, то поиск осуществляется в каталоге, предназначенном для хранения основных подключаемых файлов так, как будто мы использовали первый вариант с угловыми скобками. Именно на этом свойстве и было основано моё замечание, когда я просил вам писать в комментариях #include "stdio.h".
Стоит отметить, что описанные выше особенности работы директивы #include могут отличаться в различных компиляторах. Описанный выше способ тестировался в Visual Studio и Borland C++ 3.1. Я бы советовал каждому проверить, как работают эти директивы в его среде разработки.
Всё описанное выше, так или иначе, вам уже было известно. Теперь переходим непосредственно к основной теме урока. На самом деле каждый из вас может создать свой заголовочный файл. Сразу же встает вопрос, а зачем это вам может пригодиться. Например, вы можете написать свою библиотеку функций. Да-да, как самые настоящие крутые программисты. Добавите туда часто используемые функции, писать которые каждый раз лень, например, поиск максимального и минимального элемента в массиве, или вывод матрицы на экран, или сортировка массива методом «пузырька», или еще что-то. Теперь вам не нужно каждый раз писать эти функции заново, достаточно скопировать, добавить свой заголовочный файл в проект и всё готово. Пользуйтесь на здоровье тем, что уже писали раньше.
Как создать заголовочный файл.
Поступаем аналогично тому, как мы добавляли файл с исходным кодом в проект.
Рис.1 Меню «Проект»
В меню выбираем «Проект» -> «Добавить новый элемент» или нажимаем сочетание клавишCtrl+Shift+A.
Рис.2 Меню «Добавление нового элемента»
В появившемся окне выбираем тип файла «Заголовочный файл (.h)», вводим имя заголовочного файла и нажимаем кнопку «Добавить». После этого в окне основного проекта, во вкладке обозреватель решения у вас появится новый файл. В примере на рисунке это файл my_lib.h. Кроме того, появится дополнительная вкладка в редакторе.
Рис.3 Новый заголовочный файл my_lib.h
Теперь в этом файле вы можете объявлять и определять свои функции, переменные, именованные константы. Также в заголовочном файле можно подключать другие заголовочные файлы. Как это делается, мы разбирали выше.
К тому же, это очень удобно, когда в главном файле с кодом только лишь одна функции main(), в которой описана основная логика программы, а все остальное вынесено в отдельные файлы.
Давайте приведем небольшой пример использования заголовочного файла в нашей программе. Я воспользуюсь одной программой, которую я писал давным-давно для себя, в качестве тренировки. Здесь будет не весь её код, а только меню и графический интерфейс.
Итак, код основного файла source.cpp
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <string.h>
#include "struc_str.h"
#include "interface.h"
#include "my_lib.h"
int main(){
setlocale(0,"");
char key_pressed;
do {
system ("CLS");
shapka();
printf("введите команду: ");
key_pressed=getchar();
switch (key_pressed) {
case 'n': new_base(); break;
case 'a': add_pass(); break;
case 'v': view_base(); break;
case 'q': system("CLS"); break;
case 's': search_site_base(); break;
default: system ("CLS");
printf("Неизвестная команда!Попробуйте еще раз.\n");
system("pause");
}// switch
}while ( key_pressed != 'q');
shapka_exit();
return 0;
}
Псевдографический интерфейс программы, как вы, вероятно, уже догадались, описан в заголовочном фале interface.h. Ниже представлен его код.
/*****************************************************************/
/* модуль псевдографического интерфейса */
/*****************************************************************/
void shapka(void); //выводит основную шапку программы
void shapka_view(void); //выводит шапку таблицы поиска и
//просмотра базы данных
void shapka_exit(void); //выводит заключительный экран программы
//-----------------------------------------------------------------
/* Основная шапка программы */
void shapka(void){
printf("************************************************\n");
printf("* Программа для хранения паролей *\n");
printf("************************************************\n");
printf("* Команды используемые в программе *\n");
printf("************************************************\n");
printf("* q - выход a - добавить пароль в базу *\n");
printf("* n - создание новой базы паролей *\n");
printf("* v - просмотр всей базы паролей *\n");
printf("* s - поиск по сайту в базе *\n");
printf("************************************************\n");
return;
}
/* Шапка поиска и просмотра базы */
void shapka_view(void){
printf("************************************************\n");
printf("* Пароль для * Ник * Пароль *\n");
printf("************************************************\n");
printf("* * * *\n");
return;
}
void shapka_exit(void){
printf("************************************************\n");
printf("* Программа для хранения паролей. *\n");
printf("************************************************\n");
printf("* Спасибо за использование моей программы. *\n");
printf("************************************************\n");
printf("* Разработчик: KaDeaT *\n");
printf("* ICQ: 77***08 *\n");
printf("* Официальный сайт: http://maincode.wen.ru *\n");
printf("* E-mail: kadea*@**kep.ru *\n");
printf("************************************************\n");
system("PAUSE");
return;
}
Обратите внимание на оформление это файла. Естественно, оно необязательное, но мне кажется, что это хороший стиль. Вначале мы описываем прототипы функций и рядом с каждой пишем, что она должна делать. Ниже уже следует описание каждой из этих функций. Все основные синтаксические конструкции сохраняются.
Разберемся, как работает основная программа. Объявляется символьная переменнаяkey_pressed, в ней будет храниться код символа, введенного пользователем с клавиатуры. После этого запускается цикл с постусловием do-while. Выход из цикла осуществляется по нажатию клавиши «q», что соответствует завершению работы с программой. В теле цикла очищаем экран консоли (используя system("CLS");) и выводим главный экран программы. За него у нас отвечает функция shapka(), описанная в заголовочном файле interface.h. Этот файл у нас подключен, значит, и функция уже определена. Затем программа просит ввести пользователя символ с клавиатуры, и, в соответствии с этим символом, выполняется одна из ветвей оператора switch.
Функции new_base, add_pass(), view_base() и search_site_base() определены в заголовочном файле my_lib.h. Его код я здесь приводить не буду, но тем, кому интересно, к уроку я прикрепляю архив с готовой программой, инструкцией по её установке и исходными кодами. Можете посмотреть и попытаться разобраться, как она работает. После того, как пользователь нажимает клавишу «q», очищается экран консоли, программа выходит из цикла и вызывает функцию shapka_exit(), которая, как мы уже знаем, отвечает за прощальный экран приложения. Вот, в принципе, и вся программа. Как видите, вся основная структура получилась очень простой и понятной. Без использования заголовочных файлов добиться подобной четкости было бы гораздо сложнее.
