- •В. А. Лучников программирование на языке си
- •Оглавление
- •Предисловие
- •Алфавит языка
- •Служебные слова
- •Константы
- •Комментарии
- •Переменные
- •Int I,j,k; //переменные I, j, k – целого типа
- •Математические функции
- •Математические константы
- •Выражения
- •Выражения целого типа
- •Примеры записи выражений целого типа
- •Примеры вычислений выражений целого типа
- •Выражения вещественного типа
- •Примеры записи выражений вещественного типа
- •Примеры вычислений выражений вещественного типа
- •Операторы присваивания
- •Примеры записи операторов присваивания:
- •Ввод и вывод данных
- •Стандартный ввод-вывод
- •Посимвольный ввод-вывод
- •Ввод-вывод строк
- •Форматированный вывод
- •Форматированный ввод
- •Scanf(“формат”, аргументы);
- •Int age, rost;
- •Vasja Pupkin
- •Vasja Pupkin
- •Структура программы
- •Void main()
- •Int main()
- •Int age, rost;
- •Директивы препроцессора
- •Включение файлов
- •Int main()
- •Int age, rost;
- •Int main()
- •Int age, rost;
- •Подстановка имен
- •Макросы
- •#Define vyvod puts(“Programma studenta Vasi Pupkina”)
- •Алгоритм и его свойства
- •Схемы алгоритмов
- •Базовые структуры
- •Цепочка
- •Ветвления
- •Альтернатива
- •If (условие)
- •Вариант 2 – с использованием операции конъюнкции
- •Int main()
- •Int c, y1, y2, kl, day, month, year;
- •Часто встречающиеся ошибки программирования
- •Int main()
- •Переключатель
- •Int main()
- •Int month;
- •Часто встречающиеся ошибки программирования
- •Бесконечные циклы
- •Циклы с предусловием
- •Int main()
- •Программа
- •Int main()
- •Программа
- •Int main()
- •Часто встречающиеся ошибки программирования
- •Циклы с постусловием
- •Программа
- •Int main()
- •Int main()
- •Программа
- •Int main()
- •Int main()
- •Int main()
- •Int month;
- •Циклы с параметром
- •Действия цикла:
- •Int main()
- •Int top, bottom;
- •Int main()
- •Int num, sum, factor;
- •Int main()
- •Int main()
- •Int main()
- •Структуры данных
- •Массивы
- •Int vect[5];
- •Int vect[count];
- •Vect[0] vect[1] vect[2] vect[3] vect[4]
- •Int main()
- •Int temp;
- •Int matr[row][col];
- •Int main()
- •Int I, m, vector_min, vector_max, temp;
- •Int vector[n];
- •Int main()
- •Int vector_min, vector_max, temp;
- •Int vector[n];
- •Текстовые файлы
- •Int vector[k];
- •Vector_1:
- •Vector_2:
- •Int ocenka;
- •Imja: Vasilij
- •Imja: Ivan
- •Int ocenka;
- •Бинарные файлы
- •Функции
- •Void main()
- •Int summa(int a, int b)
- •Int summa(int a, int b)
- •Void swap(int a, int b)
- •Int temp;
- •Void poplavok(int n, int vector[n])
- •5 * 4 * Factorial(3)
- •5 * 4 * 3 * Factorial(2)
- •5 * 4 * 3 * 2 * Factorial(1)
- •Int fibo(int n)
- •Int binom(int m, int n)
- •Int max_element(int k, int n, int vector[])
- •Int temp;
- •Void quick_sort(int left, int right, int vector[])
- •Адреса и указатели
- •Операции над указателями
- •Указатели и массивы
- •Int mass[5];
- •Int trio[5][2][3];
- •Указатели и функции
- •Int sloshenie(int a, int b);
- •Int sloshenie(int a, int b)
- •Int main()
- •Указатели и строки
- •Функции для работы со строками
- •Vtorokursnik
- •Vtorokursnik
- •Itoa(I, str, 16);
- •Лучников Владимир Александрович программирование на языке си
Макросы
Директива #define позволяет осуществлять более сложные подстановки, а именно определять функции, зависящие от нескольких аргументов, – макроопределения, илимакросы:
#define SUMMA(x,y) ((x)+(y))
При этом каждое вхождение в текст программы выражения SUMMA(a,b) заменяется препроцессором на выражение((a)+(b)), причем формальные аргументы макросаxиyзаменяются соответственно на фактические аргументы (константы, переменные, элементы массивов, выражения)aиb, для которых и вычисляется значение макроса:
r=SUMMA(2,3);
В этом случае значение переменной r будет равно5.
В общем виде эта директива записывается следующим образом:
#define ИМЯ (список аргументов) выражение
После слова define и передвыражениемдолжны стоять пробелы. Подставляемоевыражениеи каждый формальный аргумент в нем необходимовзять вскобки. Если оно не помещается на одной строке, то его можно продолжить на следующих, используяслэш:
#define SUMMA(x,y) ((x)+\
(y))
Макросы похожи на функции, но их обработка не приводит к вызову функций со связанными с этим расходами по передаче аргументов, распределению памяти, возврату значения, что имеет место, когда мы работаем с функциями. Макросы обрабатываются на этапе препроцессирования, а не во время выполнения, и поэтому они могут сократить время выполнения программы. Кроме того, они работают с любыми типами аргументов, в то время как для функции нужно или выполнять приведение типов аргументов, или иметь несколько вариантов функции для различных типов аргументов.
Директиву можно использовать и для обращения к стандартным функциям:
#Define vyvod puts(“Programma studenta Vasi Pupkina”)
Выполняя эту директиву, препроцессор заменит в программе все встретившиеся имена VYVODна функцию выводаputs(“Programma studenta Vasi Pupkina”).
По общепринятым правилам имена, используемые в директивах препроцессора, пишутся заглавнымибуквами, поэтому и в тексте программы они должны быть записаны так же.
Алгоритм и его свойства
Алгоритм– это последовательность предписаний (команд), точное выполнение которых приводит к решению поставленной задачи.
Правильно построенные алгоритмы должны обладать следующими свойствами:
дискретность– алгоритм разбит на отдельные элементарные этапы (шаги), возможность выполнения которых не вызывает сомнений;
однозначность– команды, входящие в алгоритм, должны быть точными и понятными, порядок их выполнения должен быть единственно возможным, любая неопределенность или двусмысленность недопустима;
детерминированность– повтор результатов при повторе исходных данных;
результативность– алгоритм должен приводить к результату за конечное число шагов;
массовость– алгоритм должен быть пригоден для решения всех задач данного класса.
Схемы алгоритмов
Любой алгоритм можно представить или записать тремя способами:
словесным (вербальным)– с использованием слов и предложений;
табличным (аналитическим) – с помощью формул и таблиц;
графическим– с помощью рисунков, геометрических фигур и символов.
Самым наглядным из них является графический способ – представление алгоритма схемой.
Схема алгоритма– это графическое изображение его структуры, отдельных составных частей и взаимосвязей между ними.
Схема алгоритма представляет собой совокупность специальных символов (блоков), соединенных между собой стрелками, которые указывают последовательность его выполнения. Внутри каждого блока может быть записан его номер и краткое содержание исполняемых им функций (операций).
Правила выполнения схем алгоритмов устанавливает Единая система программной документации (ЕСПД), в которую входят:
ГОСТ 19002-80 «Схемы алгоритмов и программ. Правила выполнения»;
ГОСТ 19003-80 «Схемы алгоритмов и программ. Обозначения условные графические».
Перечень, наименование, обозначение и размеры наиболее употребляемых символов и отображаемых ими функций:
процесс– выполнение операции или группы операций, в результате которых изменяется значение, форма представления или расположение данных,
решение– выбор направления выполнения программы или алгоритма в зависимости от некоторых переменных условий,
модификация– выполнение операций, меняющих команды или группу команд, изменяющих программу,
предопределенный процесс– использование ранее созданных или отдельно описанных алгоритмов или программ,
данные – преобразование данных в форму, пригодную для обработки (ввод) или регистрации результатов обработки (вывод),
дисплей– вывод данных на дисплей (монитор),
терминатор– начало, конец, прерывание процесса обработки данных при выполнении программы,
линии потока– линии, связывающие символы схемы: линии,
идущие справа налево или снизу вверх, должны иметь стрелки,
комментарий– добавление описательных комментариев или пояснительных записей.
Пример записи алгоритма
Для построения удобных в работе схем алгоритмов необходимо руководствоваться следующими правилами:
каждая схема должна иметь точку начала и точку конца,
от точки начала блоки располагаются сверху вниз и слева направо,
направление линий потока сверху вниз и слева направо принимается за основное, и если линия потока не имеет излома, то стрелками ее можно не обозначать,
расстояние между параллельными линиями потока должно быть не менее 3 мм, между остальными линями схемы – не менее 5 мм,
количество входящих в блок линий потока не ограничивается, но выходить из него может только одналиния (исключение – блок решения, из которого всегда выходятдвелинии),
запись в блоках должна быть словесной или математической, а не в виде операторов конкретного алгоритмического языка: нужно показать,чтоделается в блоке, а некакэто делается,
записи внутри блоков должны быть расположены так, чтобы их можно было читать слева направо и сверху вниз независимо от направления линий потока,
схема должна читаться без дополнительных пояснений автора,
используемые в некотором блоке переменные должны получать конкретные значения в предыдущих или в том же блоке,
входные и выходные блоки подпрограмм должны содержать перечень соответственно входных и выходных параметров,
блоки можно объединять в более крупные пунктирными линиями, при этом необходимо описать назначение объединенных блоков,
над левой частью блоков ставятся метки, которыми в программе будут помечены операторы, описанные в данном блоке, а в разрыве верхней левой линии ставится номер блока.