Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Программирование на языке Си

Покупка
Основная коллекция
Артикул: 621792.01.99
Изложены основы языка программирования Си. Рассмотрены все аспекты его применения при программной реализации алгоритмов. Описаны такие типы данных, как массивы, структуры, файлы, и возможности языка Си по работе с ними. Приведены сведения о конструкциях циклов, существующих в языке Си. Показана работа с динамически выделяемой памятью и указателями. Изложение сопровождается примерами на языке Си.
Царев, Р. Ю. Программирование на языке Си : учеб. пособие / Р. Ю. Царев. - Красноярск : Сиб. федер. ун-т, 2014. - 108 с. - ISBN 978-5-7638-3006-4. - Текст : электронный. - URL: https://znanium.com/catalog/product/510946 (дата обращения: 07.05.2025). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов

                                    
Министерство образования и науки Российской Федерации 
Сибирский федеральный университет 
 
 
 
 
 
 
 
Р. Ю. Царев 
 
 
ПРОГРАММИРОВАНИЕ  
НА  ЯЗЫКЕ  СИ 
 
 
Рекомендовано УМО РАЕ по классическому университетскому 
и техническому образованию в качестве учебного пособия для 
студентов высших учебных заведений, обучающихся по направлениям подготовки: 090900.62 – «Безопасность компьютерных систем», 220100.62 – «Системный анализ и управление», 
220200.62 – «Автоматизация и управление», 220400.62 – «Управление в технических системах», 220700.62 – «Автоматизация 
технологических процессов и производств», 230100.62 – «Информатика и вычислительная техника», 230200.62 – «Информационные системы», 230400.62 – «Информационно-управляющие 
системы», 231000.62 – «Программная инженерия», 231300.62 – 
«Прикладная математика», 080801.62 – «Прикладная информатика (в экономике)» (рег. № 450 от 14.03.2014) 
 
 
 
 
 
 
 
 
 
 
Красноярск 
СФУ 
2014 

УДК 004.438Си(07) 
ББК 32.973.22я73 
        Ц181 
 
 
 
Р е ц е н з е н т ы: 
А. Н. Антамошкин, д-р техн. наук, проф. Красноярского государственного аграрного университета; 
С. И. Сенашов, д-р физ.-мат. наук, проф. Сибирского государственного аэрокосмического университета им. акад. М. Ф. Решетнёва 
 
 
 
 
 
 
 
 
 
Царев, Р. Ю. 
Ц181           Программирование на языке Си : учеб. пособие / Р. Ю. Царев. – 
Красноярск : Сиб. федер. ун-т, 2014. – 108 с. 
ISBN 978-5-7638-3006-4 
 
Изложены основы языка программирования Си. Рассмотрены все аспекты 
его применения при программной реализации алгоритмов. Описаны такие типы 
данных, как массивы, структуры, файлы, и возможности языка Си по работе с 
ними. Приведены сведения о конструкциях циклов, существующих в языке Си. 
Показана работа с динамически выделяемой памятью и указателями. Изложение 
сопровождается примерами на языке Си. 
Предназначено для студентов направлений подготовки бакалавров: 
090900.62 – «Безопасность компьютерных систем», 220100.62 – «Системный 
анализ и управление», 220200.62 – «Автоматизация и управление», 220400.62 – 
«Управление в технических системах», 220700.62 – «Автоматизация технологических процессов и производств», 230100.62 – «Информатика и вычислительная 
техника», 230200.62 – «Информационные системы», 230400.62 – «Информационноуправляющие системы», 231000.62 – «Программная инженерия», 231300.62 – 
«Прикладная математика», 080801.62 «Прикладная информатика (в экономике)». 
 
 
Электронный вариант издания см.: 
        http://catalog.sfu-kras.ru 
УДК 004.438Си(07) 
ББК 32.973.22я73
 
                                                                                                       © Сибирский федеральный  
ISBN 978-5-7638-3006-4                                                                  университет, 2014 

ВВЕДЕНИЕ 
 
Процесс развития компьютеров тесно связан с совершенствованием 
языков программирования. Они предназначены для формализации описания математических и иных методов, при помощи которых достигается 
решение вычислительных задач. 
Существует несколько подходов к программированию. Наибольшее 
распространение получило так называемое алгоритмическое программирование, основой которого является подробное описание процесса решения задачи. Алгоритмическое программирование, чаще всего, является первым шагом 
в освоении компьютера, когда целью человека становится переход от простого пользователя к активному участнику взаимодействия с компьютерами.  
Наряду с алгоритмическим программированием используются и другие подходы. В частности, языки декларативного программирования подразумевают описание цели вычислений. Процесс в данном случае отходит 
на второй план и остается скрытым не только от пользователя, но и от программиста. Этот подход удобен, однако требует большего опыта и знаний, 
используемых для описания цели решения. 
Поскольку функционирование ЭВМ на аппаратном уровне близко по 
идеологии к алгоритмическим принципам, можно утверждать, что среды 
программирования на неалгоритмических языках являются надстройками, 
в какой-либо форме преобразующими текст выполняемой программы в алгоритмические инструкции микропроцессора. 
 В процессе эволюции алгоритмических языков был разработан 
принцип структурного программирования. Программы, выполненные            
в соответствии с этим принципом, обладают удобочитаемостью, легкостью 
отладки и дополнения. Современные алгоритмические языки программирования поддерживают данный принцип, чем обеспечивается простота переноса программ с одного языка на другой без существенного изменения 
синтаксиса и пересмотра алгоритма. 
В данном учебном пособии описан язык программирования высокого 
уровня – язык Си. Это достаточно выразительный язык, предназначенный 
для широкого круга задач и содержащий современные механизмы управления вычислительным процессом и работы с данными. В то же время язык Си 
достаточно прост, что определяет его популярность среди программистов. 
Язык Си включает в себя те управляющие конструкции, которые рекомендуются теоретическим и практическим программированием. Его 
структура предполагает использование программистами нисходящего проектирования, структурного программирования и пошаговую разработку 
модулей. Результатом такого подхода является надежная и читабельная 
программа. Структура языка Си позволяет наилучшим образом использовать возможности современных компьютеров, а программы на языке Си 
отличаются компактностью и быстротой исполнения. 

1.  АЛГОРИТМИЧЕСКИЙ  ПОДХОД  
К  ПРОГРАММИРОВАНИЮ 
 
 
Алгоритм является наиболее важной составляющей процесса создания программы, записанной на алгоритмическом языке, в частности,             
на языке Си. Алгоритм – одно из основных понятий математики и кибернетики. Всякая попытка использования компьютера для решения каких-либо 
задач начинается с построения алгоритма. 
Строго говоря, алгоритм – это конечный набор предписаний, определяющий решение задачи посредством конечного количества операций. 
Также алгоритм можно определить, как способ решения вычислительных  
и других задач, точно предписывающий, как и в какой последовательности 
получить результат, однозначно определяемый исходными данными. 
С точки зрения программирования, алгоритм – это средство описания абстракции вычислительного процесса. В процессе эволюции различных языков программирования были выявлены общие черты и элементы, 
присущие многим языкам. На самом высоком уровне абстракции можно 
говорить, что элементами алгоритма являются: 
операторы присвоения;  
вызовы вспомогательных алгоритмов и функций; 
операторы условного ветвления; 
операторы циклов. 
На основе элементов перечисленных выше типов можно сконструировать большинство последовательностей операций, направленных на решение 
практических задач.  
Однако часто построение алгоритма является очень сложной задачей, 
требующей оригинальных решений. Проблема в том, что при обычном 
описании на естественном языке многие детали как очевидные остаются  
за кадром. Однако если мы формулируем формальное предписание, которое должно быть истолковано компьютером однозначно и не содержать 
неопределенности, нужно предусмотреть все возможные варианты развития 
событий, все варианты возможных данных и правильно на них реагировать. А для этого необходимо иметь адекватные средства для описания 
элементарных шагов алгоритма и его структуры. 
Алгоритмы удобно изображать в форме блок-схем. Блок-схема представляет собой изображение на бумаге. Элементарное действие алгоритма 
изображается текстом в одном блоке схемы, а линии, соединяющие блоки, 
указывают последовательность работы блоков. Поскольку реально выбор 
того или иного продолжения работы зачастую зависит от данных, поступивших на обработку, очередной блок может иметь не одно, а несколько 
продолжений, и для него необходимо указывать, каким условиям соответ
ствует то или иное продолжение. Принято проверки такого рода выделять 
в отдельный блок специального типа (условный блок). Обычный блок имеет 
одно продолжение, условный блок – несколько продолжений, соответствующих различным вариантам проверки условия. Иногда для удобства  
условный блок заключается в ромбовидные рамки. Тем или иным образом 
зачастую выделяют и другие типы блоков: овальные – начало и конец алгоритма, косые – ввод данных, прямоугольные – операции присваивания. 
 
Понятие о программах и программировании 
Компьютер ничего не делает сам, все его действия обусловлены заложенными в него инструкциями. Если не вдаваться в детали, то компьютер знает, какие вычисления ему нужно делать при тех данных, которые 
получены им из внешней среды. Набор инструкций, задающих эти действия, называются программами.  
Программа – это набор машинных команд, которые следует выполнить компьютеру для реализации того или иного алгоритма. То есть 
программа – это форма представления алгоритма для выполнения его 
машиной. 
Программировать в широком смысле значит составить такое предписание для компьютера, чтобы он совершил то целенаправленное действие, 
которое от него ожидается. Причем обязателен один важный аспект этого 
процесса – повторяемость (составленная программа может выполняться 
неоднократно).  
Современные программы дискретны и состоят из отдельных элементарных операций – команд. Команда позволяет компьютеру в каждой ситуации однозначно и правильно выполнить определенное действие. Весь 
процесс программирования в общем случае подразумевает, прежде всего, 
формулировку цели программы, затем анализ содержания задачи и, наконец, создание программы для компьютера. Для этого программист должен 
уметь учитывать все случаи, которые могут встретиться в процессе работы 
программы, и предусмотреть для них правильное действие. 
 
Стадии разработки программ 
Многие начинающие программисты ошибочно полагают, что процесс решения задачи на ЭВМ состоит только в написании текста программы. 
Такая иллюзия возникает во многом из-за простоты учебных задач, когда 
метод решения давно известен и не вызывает сомнений в правильности. 
Если же речь идет об иных задачах, требуется строгая и детальная разработка вычислительного процесса (рис. 1). 
Работа над решением начинается с постановки задачи. На данном 
этапе происходит анализ входных данных (исходной информации), а также 
характеристик, входящих в состав результата вычислений. 

На следующем этапе, называемом методом решения, проводится построение последовательности математических формул, обеспечивающих 
вычисление требуемых характеристик на основе исходных данных. 
Параллельно происходит разработка взаимодействия вычислительного процесса с пользователем. Целью данного этапа является описание 
пользовательского интерфейса программы. 
 

 
Рис. 1. Стадии разработки программ 
 
Следующий этап резюмирует проведенные ранее формализации             
и является основой для будущей программы. Результат этого этапа заключается в составлении алгоритма на специальном абстрактном языке программирования. Такой алгоритм затем можно преобразовать в программу 
на любом алгоритмическом языке.  
После формализации алгоритма следует этап разработки программы 
на выбранном языке программирования. В нашем случае таким языком  
является язык программирования Си. 
Если сложность выполняемой задачи невелика и заранее известен 
язык, на котором будет реализована программа, этапы разработки алгоритма и программы могут быть объединены. В этом случае сразу за разработкой математического метода и интерфейса пользователя программист 
может приступить к написанию программы.  
Однако для начинающих программистов настоятельно рекомендуется предварительное написание алгоритма или, по крайней мере, его четкое 
представление. Необходимо ясно представлять себе последовательность 
шагов, направленных на решение какой-либо задачи. И уже после формирования алгоритма приступать к написанию кода. 
Этап отладки обязательно следует за этапом написания программы. 
Ошибки, допущенные в ходе разработки программы, должны быть диагностированы и исправлены. 
 
Пример простой программы на языке Си 
Единственный способ освоить новый язык программирования – писать на нем программы. Рассмотрим пример первой программы, которая 
по традиции должна напечатать слова: hello, world. Программа вывода на 
экран строки "hello, world" на языке Си имеет вид:  

Постановка 
задачи 

Метод  
решения 

Интерфейс 
пользователя 

Алгоритм 
решения 
Программа 
Отладка 

#include <stdio.h> 
main() 
{ 
printf("hello, world"); 
} 
 
В первой строке программы находится директива include, которая 
указывает компилятору, что необходимо подключить библиотеку stdio.h.  
Библиотека stdio.h представляет собой файл, в котором описаны функции 
ввода/вывода, в том числе используемая в нашей программе функция вывода на экран printf. Все программы на языке Си начинаются с того, что 
подключаются библиотеки, содержащие функции, используемые в программе. 
Вторая строка содержит вызов функции main(). Работа любой программы на языке Си начинается с выполнения этой функции. Ее название 
зарезервировано специально для этой цели. Следом, в фигурных скобках {}, 
идет тело функции main, содержащее собственно программу, написанную 
программистом. В нашем примере это вызов функции вывода на экран. 
Таким образом, данную программу можно рассматривать как канву 
для написания всех других программ в дальнейшем. И подобно этой программе они будут состоять из: 
1. директивы подключения библиотеки (или библиотек); 
2. "главной" функции программ языка Си – main(); 
3. тела функции main(), содержащей текст программы. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

2.  ФУНКЦИИ  ВВОДА  И  ВЫВОДА 
 
 
Для организации интерфейса с пользователем предусмотрены базовые возможности потокового (консольного) ввода/вывода. Наиболее универсальными функциями ввода/вывода являются функции printf() и scanf(), 
входящие в библиотеку stdio.h. Формат этих функций во многом схож.  
Рассмотрим функцию printf(). Эта функция использует "управляющую строку" и набор "аргументов". Инструкции, передаваемые функции 
printf() в управляющей строке, зависят от типа данных аргумента. Например, при выводе на экран целого числа применяется формат %d, в то время 
как для переменных с плавающей точкой используется формат %f. Если же 
на экран выводится только текст, то кроме строки, заключенной в кавычки 
других аргументов нет. Результатом выполнения следующей программы: 
 
#include <stdio.h> 
main() 
{ 
int i;      // объявление i, как переменной целого типа 
float x;  // объявление x, как переменной с плавающей точкой 
 
i = 10; 
x = 3.75; 
printf("Пример вывода на экран\n"); 
printf("целого числа i = %d\n", i); 
printf("и числа с плавающей точкой x = %f\n ", x); 
} 
 
будет следующий текст, выведенный на экран дисплея: 
 
Пример вывода на экран 
целого числа i = 10 
и числа с плавающей точкой x = 3.75 
 
В данной программе сначала объявляются переменные, которые будут использоваться в дальнейшем, имеющие целый тип (int) и десятичный 
с плавающей точкой (float). Это же отмечено в комментариях, которые 
идут после двойной косой черты (//). Комментарии используются для записи каких-либо заметок, полезных самому программисту. Здесь можно оставлять любые пояснения, в процессе работы программы они игнорируются. 
После того, как переменным присвоены значения, выполняется вывод на экран. При первом вызове функции printf() на экран выводится 

только текст "Пример вывода на экран". Также в этой строке программы 
содержится управляющий символ "\n", он отвечает за переход на следующую строку и возврат в крайнее левое положение. Без этого символа весь 
текст выводился бы на экран в одну строку. 
Две заключительные строки программы выводят на экран текст         
и значения переменных. Можно сказать, что при выводе на экран символы 
формата заменяются значениями переменных. Так, %d заменяется значением переменной i, равным 10, а %f – значением переменной x, т. е. 3.75.  
В одном вызове функции printf() может быть несколько символов форматирования. Например, последние две строчки можно заменить одной: 
 
printf("целого числа i=%d\n и числа с плавающей точкой x=%f\n ", i, x); 
 
Результат выполнения программы был бы тем же.  
В общем виде формат, указываемый при обращении к функции 
printf(), выглядит следующим образом: 
 
printf(управляющая строка, аргумент1, аргумент2, …); 
 
Аргумент1, аргумент2 и т. д. – это печатаемые параметры, которые 
могут быть переменными (i, x), константами (25, 3.14159) или даже выражениями, которые будут вычислены перед выводом на экран (2*3, i+5). 
Управляющая строка – это строка символов, показывающая, как 
должны быть напечатаны параметры. Таким образом, можно заключить, 
что управляющая строка содержит информацию двух различных видов: 
1. Символы, печатаемые текстуально. 
2. Идентификаторы данных, называемые также "спецификациями 
преобразования". 
Каждому аргументу из списка, следующего за управляющей строкой, должна соответствовать одна спецификация преобразования. Ниже 
приводятся спецификациями преобразования и тип выводимой информации:  
 
%d – десятичное целое число (int); 
%f – число с плавающей точкой (float или double); 
%c – отдельный символ (char); 
%s – строка символов; 
%e – число с плавающей точкой (float или double), экспоненциальная 
запись;  
%g – используется вместо %e или %f, если он короче (float или 
double); 
%o – восьмеричное число без знака (int);  
%x – шестнадцатеричное число без знака (int); 
%u – десятичное число без знака (int). 

Похожие