Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Язык Си

..pdf
Скачиваний:
6
Добавлен:
20.11.2023
Размер:
7.64 Mб
Скачать

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Пермский национальный исследовательский политехнический университет»

В.В. Пальчиковский, В.В. Павлоградский

языкси

Конспект лекций

Утверждено Редакционно-издательским советом университета

Издательство Пермского национального исследовательского

политехнического университета

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 г. это название было заменено на Си++. Автор языка создавал его с целью улучшить язык Си и под­ держать объектно ориентированное программирование, идея которого развивалась разными исследователями в течение многих лет.

Удобство Си основано на том, что он является языком высо­ кого уровня, поддерживающим модульность, блочную структуру программ, дает возможность раздельной компиляции модулей и одновременно имеет набор низкоуровневых средств, позволяющих осуществлять удобный доступ к аппаратным ресурсам компьюте­ ра, в частности добраться до каждого бита памяти. Таким образом, гибкость и универсальность языка Си обеспечивают его широкое распространение.