- •Занятие 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; // количество страниц
- •Как объявить структурную переменную (структуру).
- •Как инициализировать структуру.
- •Как обращаться к полям структуры.
- •Практическое задание:
- •Автор||Название||Год издания||Прочитано||Количество страниц||Стоимость
Зацикливание.
Теперь поговорим немного о такой пренеприятнейшей вещи как зацикливание. Зацикливание - это когда программа постоянно выполняет тело цикла и не может из него выйти. Причиной зацикливания всегда является программист. Надо всегда внимательно следить за тем, чтобы работа операторов как-то влияла на условие.
Напоследок напишем одну маленькую программку.С использованием циклов do-while и while.
Пусть требуется написать программу которая принимает на входе положительное натуральное число, а на выходе выдает сумму цифр этого числа. При этом, надо запретить пользователю вводить отрицательные числа. (защита от дурака).
Сначала напишем основную часть программы.
Считаем число и посчитаем сумму его цифр.
Листинг 9.4
#include <stdio.h>
int main()
{
int A, sum=0;
printf("Vvedite chislo:");
scanf("%d",&A); //считываем число
//начинаем последовательно получать каждую последнюю цифру числа.
while (A>0)
{
sum=sum+A%10;
A= A/10;
}
printf("summa chifr etogo chisla: %d\n", sum);
return(0);
}
Эта программа работает. Теперь добавим в неё так называемую "защиту от дурка". Чтобы пока не введешь правильные данные,программа не будет работать. Для этого используем цикл do-while.И будем повторить ввести ввод до тех пор, пока не будет введено положительное число.
Получим следующий код.
Листинг9.5
#include <stdio.h>
int main()
{
int A, sum=0;
do {
printf("Vvedite chislo:");
scanf("%d",&A); //считываем число
} while(A<=0);
while (A>0){
sum=sum+A%10;
A= A/10;
}
printf("summa chifr etogo chisla: %d\n", sum);
return(0);
}
На этом сегодня всё. Домашнего задания к этому уроку не будет. Так как мне надо разобраться с той кучей вопросов, которые накопились за это время в комментариях.
Задание для практической работы.
Дано целое число N (вводится с клавиатуры), причем N<30000. По заданному N вывести через пробел все (натуральные, т.е. 0, 1, 2, 3, ... ) степени числа 2, которые меньше N.
Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон.с шагом dх.
Функция
F должна принимать действительное
значение, если выражение (Ац^Вц)|(Ац^Сц)
не равно нулю, и целое значение в
противном случае. Через Ац, Вц и Сц
обозначены целые части значений a,b,c.
Значения a,b,c, Хнач., Хкон., dx ввести с
клавиатуры. Пока что не обязательно к
выполнению.!Дано натуральное число N. Напишите программу которая считает сумму цифр этого числа.
Дано натуральное число N. Выведите его представление в двоичном виде в обратном порядке.
Занятие 10. Функции определяемые пользователем.
Сегодняшний наш урок будет посвящен пользовательским функциям, который программист пишет самостоятельно. Когда я отвечал на ваши комментарии к прошлым урокам, нашел хороший пример для иллюстрации использования функций в Си. Про полезность хороший примеров я уже говорил. Итак начнем.
В домашнем задании к уроку №5 я просил вас, написать программу, которая решает уравнение ах=b в целых числах относительно х. Что многие успешно сделали. Разберем теперь другую сторону вопроса. Пусть нам надо проверить одну такую программу. Вот её код.
Листинг 10.1
#include <stdio.h>
int main(void)
{
int a,b;
scanf("%d %d",&a,&b);
if((a==0)&&(b!=0)) printf("no solution\n");
else {
if((a==0)&&(b==0)) printf("many solution\n");
else {
if (b%a!=0) printf("no solution\n");
else {
printf("%d\n",b/a);
}
}
}
return(0);
}
Теперь подумаем как вообще должно решаться такое уравнение и подберем к нему набор тестов.
ах=b следовательно х=b/a. Так как решение в целых числах, то при делении b на a не должно получаться остатка.
Получаем несколько вариантов решения.
1) а=0 и b=0 х любое число.т.е. программа должна вывести many solution.
2) a=0 и b!=0 решений нет. Программа должна ответить no solution
3) b делится на а без остатка, то это и b/a решение.
4) b делится на а с остатком. Программа должна вывести no solution
Теперь подберем проверочные значения для каждого случая.
1. а=0, b=0
2. a=0, b=3
3. a=3, b=9
4. a=3, b=7
Теперь нам надо проверить нашу программу на всех этих данных и если в ответе получается
1.many solution
2. no solution
3.3
4.no solution
то программа написана верно.
Разберемся как можно сделать это используя те знания, которые у нас уже есть за 9 уроков.
1 способ.
Мы можем запустить нашу программу несколько раз и подставить в неё эти данные, но это слишком долго. Отметаем этот способ.
2 способ.
Можем переписать программу добавив в неё цикл на 4 шага и каждый раз вводить значения и смотреть ответы. Программа будет выглядеть следующим образом.
Листинг 10.2
#include <stdio.h>
int main(void)
{
for(int i=0;i<4;i++) {
int a,b;
scanf("%d %d",&a,&b);
if((a==0)&&(b!=0)) printf("no solution\n");
else {
if((a==0)&&(b==0)) printf("many solution\n");
else {
if (b%a!=0) printf("no solution\n");
else {
printf("%d\n",b/a);
}
}
}
}
return(0);
}
Вот так будет выглядеть окно программы.
Вроде бы хороший способ. Конечно теперь полегче, не надо каждый раз запускать заново программу. Но всё равно, нам самим приходится постоянно вводить данные. Отметаем и этот способ.
3 способ.
Можно немного извратиться и сделать так, чтобы в при каждой итерации цикла в программу передавались новые значения. Но мы этого делать не будем, а займемся более интересными вещами.
4 способ.
Хорошо было бы написать так программу, чтобы мы туда один раз скопировали текст своей программы, запустили её и она нам сразу выдала бы, правильно работает программа или нет.
Вот здесь-то нам и придут на помощь подпрограммы. Подпрограмма это отдельная программа которая может выполняться внутри основной программы.
Подпрограммы в различных языках программирования делят на два вида. Функции и процедуры. Различие между двумя этими названиями лишь в том, что
функция это подпрограмма, которая после своего выполнения возвращает в программу какое-то значение, а процедура это подпрограмма, которая после своего выполнения не возвращает в программу ничего.
Функция main, которая есть в каждой нашей программе является именно функцией, так как после того как она выполнится она возвращает в программу которое её вызвала, а в данном случае операционная система, некоторое значение.
В некоторых языках программирования функции и процедуры разграничены синтаксисом языка. Например, в языке программирования Pascal. В языке Си, процедура это любая функция которая возвращает значение типа void. Поэтому, здесь и далее я буду использовать название функция как для функций, так и для процедур.
