книги / Язык Си
..pdfМинистерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Пермский национальный исследовательский политехнический университет»
В.В. Пальчиковский, В.В. Павлоградский
языкси
Конспект лекций
Утверждено Редакционно-издательским советом университета
Издательство Пермского национального исследовательского
политехнического университета
2014
УДК 004.438 (075.8) П14
Рецензенты:
д-р техн. наук, проф. Н.Н. Зайцев (Пермский национальный исследовательский политехнический университет);
канд. физ.-мат. наук, ген. директор Я.В. Егоров (ОАО «Инжениум», г. Пермь)
Пальчиковский, В.В.
П14 Язьнс С и : конспект лекций / В.В. Пальчиковский, В.В. Павлоградский. - Пермь : Изд-во Перм. нац. исслед. по литехи. ун-та, 2014. - 260 с.
ISBN 978-5-398-01186-1
Рассматриваются основы языка программирования Си. Мате риал составлен на основе аудиторного изложения в рамках лекций. Теоретические вопросы излагаются кратко, по возможности про стым языком, приведено много примеров и решений задач с пояс нением. Особое внимание при изучении тем обращается на ошибки, свойственные начинающим программистам.
Предназначено для студентов, обучающихся по специально стям машиностроительного профиля. Может использоваться в рамках дисциплин «Информатика», «Компьютерные технологии» и т.п.
УДК 004.438 (075.8)
ISBN 978-5-398-01186-1 |
©ПНИПУ,2014 |
ВВЕДЕНИЕ................................................................................................ |
7 |
ЛЕКЦИЯ 1. Структура и этапы выполнения |
|
программы на Си..................................................................................... |
10 |
1.1. Знакомство с языком Си........................................................... |
10 |
1.2. Структура программы............................................................... |
11 |
1.3. Этапы создания программы..................................................... |
13 |
1.4. Стандартные заголовочные файлы......................................... |
14 |
1.5. Алфавит, идентификаторы, служебные слова...................... |
15 |
1.6. Базовые типы данных............................................................... |
17 |
1.7. Переменные: объявление, инициализация............................ |
18 |
РЕШЕНИЕ ЗАДАЧ................................................................................. |
21 |
ДОМАШНЕЕ ЗАДАНИЕ...................................................................... |
24 |
ЛЕКЦИЯ 2. Арифметические операции и математические |
|
функции.................................................................................................... |
25 |
2.1. Арифметические операции...................................................... |
25 |
2.2. Операции присваивания........................................................... |
28 |
2.3. Математические функции....................................................... |
29 |
2.4. Генерация случайных чисел.................................................... |
33 |
РЕШЕНИЕ ЗАДАЧ................................................................................. |
36 |
ДОМАШНЕЕ ЗАДАНИЕ...................................................................... |
40 |
ЛЕКЦИЯ 3. Консольный ввод-вывод................................................ |
41 |
3.1. Форматированный вывод......................................................... |
41 |
3.2. Форматированный ввод............................................................ |
45 |
3.3. Другие функции консольного ввода-вывода........................ |
47 |
РЕШЕНИЕ ЗАДАЧ..... ........................................................................... |
49 |
ДОМАШНЕЕ ЗАДАНИЕ....................................................................... |
51 |
ЛЕКЦИЯ 4. Условные операторы и оператор выбора................... |
52 |
4.1. Условный оператор if-else........................................................ |
52 |
4.2. Операции отношения и логические операции...................... |
63 |
4.3. Операция «условие» ?: ............................................................ |
66 |
4.4. Оператор выбора switch............................................................ |
67 |
|
РЕШЕНИЕ ЗАДАЧ.................................................................................. |
72 |
|
ДОМАШНЕЕ ЗАДАНИЕ........................................................................ |
75 |
|
ЛЕКЦИЯ 5. Циклы................................................................................. |
76 |
|
5.1. Оператор цикла while (цикл с предусловием)...................... |
76 |
|
5.2. Оператор цикла do-while (циклс постусловием).................. |
82 |
|
5.3. Оператор щдага/br (цикл с параметрами)............................. |
85 |
|
5.4. Вложенные циклы....................................................................... |
89 |
|
РЕШЕНИЕ ЗАДАЧ.................................................................................. |
93 |
|
ДОМАШНЕЕ ЗАДАНИЕ........................................................................ |
99 |
|
ЛЕКЦИЯ 6. Операторы перехода...................................................... |
101 |
|
6.1. Оператор |
continue .................................................................... |
101 |
6.2. Оператор |
break ........................................................................ |
105 |
6.3. Оператор goto (безусловный переход)................................. |
109 |
|
6.4. Оператор return......................................................................... |
I l l |
|
РЕШЕНИЕ ЗАДАЧ................................................................................. |
113 |
|
ДОМАШНЕЕ ЗАДАНИЕ...................................................................... |
115 |
|
ЛЕКЦИЯ 7. Массивы........................................................................... |
117 |
|
7.1. Объявление массивов.............................................................. |
117 |
|
7.2. Инициализация массивов........................................................ |
119 |
|
7.3. Обработка массивов................................................................. |
122 |
|
РЕШЕНИЕ ЗАДАЧ................................................................................. |
126 |
|
ДОМАШНЕЕ ЗАДАНИЕ...................................................................... |
137 |
|
ЛЕКЦИЯ 8. Макросы, константы, строки........................................ |
138 |
|
8.1. Макросы |
...................................................................................... |
138 |
8.1.1. Задание ..............................................................макросов |
138 |
|
8.1.2. Макросы ..................................................с параметрами |
140 |
|
8.2. Константы................................................................................... |
141 |
|
8.2.1. Неименованные .............................................константы |
141 |
|
8.2.2. Именованные .................................................константы |
142 |
|
8.3. Строки......................................................................................... |
|
144 |
8.3.1. Объявление .............................................................строк |
144 |
|
8.3.2. Функции .........................................работы со строками |
146 |
РЕШЕНИЕ ЗАДАЧ............................................................................... |
150 |
ДОМАШНЕЕ ЗАДАНИЕ.................................................................... |
155 |
ЛЕКЦИЯ 9. Функции.......................................................................... |
156 |
9.1. Задание функций..................................................................... |
156 |
9.2. Прототипы функций............................................................... |
160 |
9.3. Фактические и формальные параметры............................... |
162 |
9.4. Передача в функцию массивов............................................. |
164 |
9.5. Аргументы по умолчанию...................................................... |
165 |
9.6. Рекурсивные функции............................................................ |
167 |
РЕШЕНИЕ ЗАДАЧ............................................................................... |
171 |
ДОМАШНЕЕ ЗАДАНИЕ.................................................................... |
181 |
ЛЕКЦИЯ 10. Указатели и ссылки..................................................... |
182 |
10.1. Объявление и инициализация указателей......................... |
182 |
10.2. Операции с указателями....................................................... |
184 |
10.3. Связь указателей и массивов................................................ |
187 |
10.4. Указатель на функцию.......................................................... |
190 |
10.5. Ссылки..................................................................................... |
195 |
10.6. Динамическое выделение памяти....................................... |
196 |
10.6.1. Библиотечные функции распределения памяти...... |
197 |
10.6.2. Операторы new, delete................................................... |
201 |
РЕШЕНИЕ ЗАДАЧ............................................................................... |
204 |
ДОМАШНЕЕ ЗАДАНИЕ.................................................................... |
208 |
ЛЕКЦИЯ 11. Структуры, объединения, битовые поля............... |
209 |
11.1. Структуры............................................................................... |
209 |
11.1.1. Массивы структур.......................................................... |
212 |
11.1.2. Передача структур функциям...................................... |
214 |
11.2. Объединения........................................................................... |
220 |
11.3. Поля битов.............................................................................. |
223 |
11.4. Перечисления.......................................................................... |
225 |
11.5. Переименование типов - typedef......................................... |
228 |
РЕШЕНИЕ ЗАДАЧ............................................................................... |
229 |
ДОМАШНЕЕ ЗАДАНИЕ..................................................................... |
235 |
ЛЕКЦИЯ 12. Работа с файлами......................................................... |
236 |
РЕШЕНИЕ ЗАДАЧ.............................................................................. |
252 |
ДОМАШНЕЕ ЗАДАНИЕ.................................................................... |
258 |
СПИСОК ЛИТЕРАТУРЫ |
259 |
Повседневная жизнь современного человека, технические науки, производство неотъемлемо связаны с использованием ком пьютеров. Современные научные задачи уже невозможно решить без применения компьютерных технологий. Например, моделиро вание поведения микро- и наноструктур в различных условиях; моделирование технологических процессов: литье, сварка; моде лирование контактных взаимодействий: столкновение пули и бро нежилета, авиационного двигателя и птицы, автомобиля и прегра ды; моделирование всевозможных течений газа и жидкости; расче ты на прочность, усталость, устойчивость и т.п. Если раньше для решения подобных задач требовалось создавать целые научные группы, то сейчас инженер один может это выполнить. Например, спроектировать раздвижное сопло: инженер сам может придумать конструкцию, построить на компьютере ее трехмерную модель, выбрать материалы сопла, провести газодинамический, тепловой, прочностной расчеты, смоделировать кинематику раздвижки со пла, создать все необходимые чертежи, разработать технологию производства деталей и изготовить их на станках с программным числовым управлением. Все это стало возможно благодаря мощ ному развитию компьютерных технологий.
Тем не менее разные задачи имеют разные методы решения: где-то нужно применять тяжелые системы автоматизированного проектирования (САПР), где-то более простые численные методы решения инженерных задач. Однако процессы, протекающие во многих агрегатах и установках, из-за своей сложности не попада ют под категорию так называемых стандартных инженерных за дач. В этих случаях требуется умение самостоятельно найти сред ство для решения поставленной задачи, и этим средством, как пра вило, является программный продукт. Таким образом, если инженер владеет программированием, то его возможности суще ственно возрастают.
Чтобы научиться программировать хотя бы на одном языке, нужно потратить много времени (как игра на музыкальном инст рументе или иностранный язык требуют постоянных занятий). К сожалению, многие инженерные специальности на изучение программирования отводят мало времени, поэтому справедливо возникают вопросы: какому языку программирования отдать предпочтение и как в короткие сроки освоить язык на необходи мом для решения инженерных задач уровне.
Языки высокого уровня схожи по своей логике. Наиболее распространенные из них: Фортран (Fortran), Паскаль (Pascal), Си (С), Бейсик (Basic). Язык Ассемблер (Assembler), относящийся к языку низкого уровня, имеет уже другую логику. Таким образом, хорошо изучив один из языков программирования высокого уров ня, можно уже довольно быстро изучить любой другой язык высо кого уровня, поскольку основная сложность в изучении языка про граммирования вызвана не запоминанием его лексических и син таксических структур, а пониманием логики языка. Практика показывает, что лексику (обозначение операторов, название опера ций и ключевых слов и т.п.) и синтаксис (правила образования блоков, процедур, составных операторов) языка программирова ния студенты осваивают гораздо быстрее, чем вопросы: как рабо тает цикл, условие, указатель или функция, и особенно тяжело приходит «видение» использования тех или иных средств языка при решении определенной задачи: какую часть задачи описать циклом, где поставить условие, какую часть задачи оформить в функцию и т.п.
Из множества языков программирования высокого уровня Си оказался настолько удобен, что на его основе появились другие языки программирования: Ява (Java), Си шарп (С#) и, конечно, Си++ (C++), на котором пишется большинство программ для пер сональных компьютеров, начиная от операционных систем (Unix, Windows, Linux) до современных компьютерных игр. Таким обра зом, язык Си является наиболее популярным из всех языков про граммирования высокого уровня (основные его достоинства пере числены в лекции 1).
Для овладения базовыми навыками программирования на языке Си в короткие сроки (учитывая малое количество аудитор ных часов) студентам предлагается данное учебное пособие, со ставленное на основе курса лекций, который авторы читали в рам ках дисциплин «Информатика» и «Компьютерные технологии» для студентов специальностей «Летательные аппараты», «Ракет ные двигатели», «Энергомашиностроение». Теоретические вопро сы излагаются кратко, по возможности простым языком. [Пособие содержит много простых примеров, демонстрирующих использо вание рассматриваемых по ходу лекции элементов языка Си, а также примеров решения «типовых» задач (т.е. задач, часто ис пользуемых для написания более крупных программ, например накопление суммы или произведения ряда, поиск в массиве мак симального или минимального элемента, сортировка массива и т.п.), связанных именно с рассматриваемой темой. Также в конце каждой лекции разбираются задачи, при решении которых исполь зуются знания по наиболее важным вопросам, рассмотренным в лекции^Уровень используемого материала в задачах растет с ка ждой темой, примеры, рассмотренные и объясненные ранее, ак тивно используются в решении новых задач, поэтому лекции про пускать не рекомендуется.'Особое внимание при изучении мате риала уделяется разбору "ошибок, свойственных начинающим программистам^ ряде случаев даются рекомендации, выполнение которых позволит в дальнейшем быстро закрепить правильное ис пользование изученных лексем языка Си.
Таким образом, в учебном пособии представлены только ос новы языка Си. Для более полного ознакомления авторы рекомен дуют изучить представленную в конце работы литературу. В це лом пособие ориентировано на студентов, обучающихся по специ альностям машиностроительного профиля.
ЛЕКЦИЯ 1. СТРУКТУРА И ЭТАПЫ ВЫПОЛНЕНИЯ ПРОГРАММЫ НА СИ
1.1. Знакомство с языком Си
Язык программирования Си был создан в 1972 г. сотрудником фирмы Bell Laboratories Деннисом Ритчи. Первоначально язык Си задумывался как заменитель языка Ассемблер для написания опе рационных систем. Поскольку Си - это язык высокого уровня, не зависящий от конкретной архитектуры компьютера, текст опера ционной системы оказался легко переносимым с одной платформы на другую. Первой операционной системой, написанной практиче ски целиком на Си, была система Unix. В настоящее время боль шинство кодов всех операционных систем написаны на Си/Си++. Кроме того, средства программирования, которые операционная система Windows предоставляет разработчикам прикладных про грамм (так называемый API - Application Program Interface), - это наборы системных функций на языке Си.
Со временем задачи проектирования компьютерных систем усложнялись, что привело к модификации языка Си, появлению таких понятий, как объекты. В начале 80-х в той же фирме Bell Laboratories Бьерном Страуструпом в результате дополнения и расширения языка Си был создан, по сути, новый язык, получив ший название Си с классами. В 1983 г. это название было заменено на Си++. Автор языка создавал его с целью улучшить язык Си и под держать объектно ориентированное программирование, идея которого развивалась разными исследователями в течение многих лет.
Удобство Си основано на том, что он является языком высо кого уровня, поддерживающим модульность, блочную структуру программ, дает возможность раздельной компиляции модулей и одновременно имеет набор низкоуровневых средств, позволяющих осуществлять удобный доступ к аппаратным ресурсам компьюте ра, в частности добраться до каждого бита памяти. Таким образом, гибкость и универсальность языка Си обеспечивают его широкое распространение.