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

Основы программирования на языке С. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Министерство образования и науки Российской Федерации
Саратовский государственный технический университет
Т.Э. ШУЛЬГА
ОСНОВЫ ПРОГРАММИРОВАНИЯ
НА ЯЗЫКЕ С
Учебное пособие
Электронное издание сетевого и локального распространения
Саратов 2012
1
УДК 004.438 ББК 32.973.26-018.1 Ш 95
Рецензенты:
Кафедра математической экономики Саратовского государственного
университета имени Н.Г. Чернышевского,
(заведующий кафедрой доктор физико-математических наук,
профессор С.И. Дудов)
Доктор физико-математических наук, профессор, заведующий кафедрой
прикладной математики и информатики
Саратовского государственного социально-экономического
университета В.Н. Гусятников
Одобрено
редакционно-издательским советом
Саратовского государственного технического университета
Шульга Т.Э.
Ш 95 Основы программирования на языке С: учеб. пособие / Т.Э. Шульга –
Саратов: Сарат. гос. техню ун-т, 2012.– 83 с. ISBN 978-5-7433-2662-4
В пособии излагаются основы языка программирования С, приведены решения типо­вых задач и рекомендуемые задания по каждой теме. Описывается структура програм­мы, написанной на языке С, типы данных, используемые в языке, операции языка, кон­струкции выбора, циклов и передачи управления, даются основы процедурного про­граммирования и работы с динамическими структурами данных.
УДК 004.438
ББК 32.973.26-018.1
Редактор К.А. Кулагина
Компьютерная верстка Т.В. Семеновой
© Саратовский государственный
технический университет, 2012
ISBN 978-5-7433-2662-4 © Шульга Т.Н. 2012
2
СОДЕРЖАНИЕ
ВВЕДЕНИЕ .......................................................................................................... 4
1. Структура программы на языке С .................................................................. 5
Задание 1. Вывод строки на экран с использованием esp-
последовательности ............................................................................................. 7
2. Переменные. Основные типы данных ........................................................... 9
Задание 2. Описание переменных и преобразование типов .......................... 12
3. Ввод-вывод значений переменных .............................................................. 14
Задание 3. Форматирование вывода ................................................................ 21
4. Основные операции языка С ........................................................................ 23
Заданиe 4. Простейшие вычисления ................................................................ 24
5. Конструкции выбора ..................................................................................... 26
Задание 5. Обработка
введенного символа ..................................................... 28
Задание 6. Вычисление значения функции ..................................................... 29
Задание 7. Применение разветвляющихся алгоритмов при решении
простейших задач .............................................................................................. 29
Задание 8. Mультиветвление ............................................................................ 30
6. Конструкции цикла и передачи управления ............................................... 32
Задание 9. Детерминированные циклы. Простейшие задачи ....................... 38
Задание 10. Итерационные циклы. Простейшие задачи ................................ 40
Задание 11. Одномерные массивы ................................................................... 41
Задание 12. Вложенные циклы ......................................................................... 42
Задание 13. Двумерные массивы ...................................................................... 44
Задание 14. Посимвольная обработка строк ................................................... 46
Задание 15. Сортировка массива ...................................................................... 47
7. Функции .......................................................................................................... 50
Задание 16. Определение и вызов функций .................................................... 59
Задание 17. Рекурсивные функции .................................................................. 60
Задание 18. Использование библиотечных функций string.h........................ 61
Задание 19. Использование библиотечных функций stdio.h ......................... 62
8. Структуры ....................................................................................................... 64
Задание 20. Массив структур ............................................................................ 71
9. Динамические структуры данных ................................................................ 73
Задание 21. Динамический список ................................................................... 77
Задание 22. Использование стеков и очередей ............................................... 79
Список литературы ............................................................................................ 83
3
ВВЕДЕНИЕ
Учебное пособие «Основы программирования на языке С» предназна­чено для обучения основам структурного программирования в рамках дис­циплины «Информатика и программирования»
– одной из важнейших ком-
понентов федерального государственного стандарта по направлениям «При­кладная информатика», «Программная инженерия» и др. Компетенции, по­лучаемые в ходе изучения данной дисциплины, необходимы для освоения целого ряда дисциплин профессионального цикла. Компетенции, получае­мые в ходе изучения данной дисциплины, необходимы для изучения боль­шинства дисциплин профессионального цикла («Объектно-
ориентиро­ванное программирование», «Базы данных», «Программная инженерия»). Одними из основных задач дисциплины являются следующие задачи:
– изучение и применение на практике принципов структурного про-
граммирования, основных конструкций языков программирования, основ­ных и абстрактных типов данных, способов записи алгоритма на языке С;
– получение опыта составления, отладки, тестирования и документи-
рования программ, работы в интегрированной среде программирования MS Visual Studio 2010 с использованием библиотек функций языка С.
В качестве базового языка освоения основ структурного программи-
рования выбран язык С. Язык С
– стандартизированный процедурный язык
программирования, разработанный в начале 1970-х годов сотрудниками компании «Bell Labs» Кеном Томпсоном и Денисом Ритчи как развитие языка B. Язык С был создан для использования в операционной системе UNIX. С тех пор он был портирован на многие другие операционные си­стемы и стал одним из самых используемых языков программирования.
Для обучения
основам программирования в рамках курса «Информа-
тика и программирования» язык С выбран по следующим причинам:
– язык ясен для обучения основным концепциям программирования,
включает в себя стандартный набор конструкций управления, структур данных и обширный набор операций;
– язык эффективен и гибок при разработке как системного, так
и прикладного программного обеспечения;
– синтаксис языка С является основой для многих современных язы-
ков программирования, например, С++, C#, Java, изучение которых преду­смотрено учебным планом направлений «Прикладная информатика», «Программная инженерия».
В пособии излагаются основы языка С: описывается структура про­граммы, типы данных, используемые в языке, операции языка, конструкции ветвления, циклов и передачи управления, а также даются
основы процедур-
ного программирования и работы с динамическими структурами данных.
Каждая глава пособия содержит краткий теоретический материал, необходимый для выполнения практических заданий, примеры решения заданий, а также перечень заданий.
4
1. СТРУКТУРА ПРОГРАММЫ НА ЯЗЫКЕ С
Для того чтобы описать структуру программы, написанной на C, рас-
смотрим простейшую программу, выводящую на экран строку Hello, world.
// Program1.cpp #include <stdio.h> #include <conio.h>
void main() { printf("%s","\nHello, world\n"); getch(); }
В первой строке данной программы находится однострочный ком­ментарий. В приведенном комментарии указано имя файла, в котором хранится исходный текст программы. В языке С комментарии могут быть заданы двумя способами. Для однострочных комментариев ис­пользуют символы //, как в нашем примере. Для многострочных ком­ментариев можно использовать символы /* , */, между которыми и дол
-
жен находиться сам текст комментария. В тексте комментария могут со­держаться любые символы, а вся последовательность символов эквива­лентна символу пропуска (например, символу пробела). Комментарии одного типа не могут быть вложенными, однако можно использовать символы // для того, чтобы закомментировать символы /*… */, а симво­лами /*…*/можно закомментировать //.
Во второй и третьей строке
программы помещены команды препро­цессора (директивы) #include. Данная директива позволяет подключить стандартные библиотеки функций используемого компилятора или от­транслированные модули, написанные самим программистом. Директива
#include имеет два формата:
#include <имя_файла> #include “имя_файла”.
В первом случае имя_файла определяет текстовый (заголовочный) файл, содержащий прототипы (описания) той или иной группы стандартных для данного
компилятора функций. Например, в нашем случае директива #include <stdio.h> обеспечивает включение стандартных функций ввода данных с клавитуры и вывода на экран. Если программист хочет использо­вать в своей программе такие стандартные функции, как косинус (cos), си­нус (sin), степень числа (pow), то он должен использовать директиву #include <math.h>, для использования функции ожидания ввода любого символа с клавиатуры
без отображения на экране, то есть функции задерж­ки экрана (getch) – директиву #include <conio.h>, функцию конкатенации строк (strcat) – директиву #include <string.h>. Если в программе, например, используется функция cos (функция вычисления косинуса), но не указана
5
директива #include <math.h>, то на этапе компиляции возникнет ошибка. Ниже приведено функциональное значение основных заголовочных файлов:
math.h –математические функции; ctype.h – функции проверки и преобразования символов; stdio.h – функции ввода-вывода данных; string.h, stdlib.h – функции для работы со строками; alloc.h – функции для выделения и освобождения памяти; conio.h – функции для работы с терминалом в текстовом режиме; graphics.h – функции для работы
с графикой.
Если имя_файла после директивы #include указано в кавычках, это означает, что используется не стандартный заголовочный файл, а файл, со­зданный самим программистом.
Четвертая строка программы является заголовком функции с именем main. Каждая программа должна содержать функцию с именем main, и ра­бота программы начинается с выполнения этой функции. Перед
именем main помещено служебное слово void – спецификатор типа, указывающий, что функция main в данной программе не возвращает никакого значения. Круглые скобки после main требуются в связи с синтаксисом заголовка любой функции и содержат список параметров. В нашем примере пара­метры не нужны и этот список пуст.
Тело любой функции в
языке С – это заключенная в фигурные скоб­ки последовательность описаний и операторов. Каждое описание и опера­тор заканчивается символом ‘;’. В данном примере в теле функции main нет явных описаний, а есть только один оператор
printf ("\nHello, world\n");
В соответствии с информацией, содержащейся в файле stdio.h, printf является именем функции, который обеспечивает вывод информации на экран монитора. (Поэтому, если строка #include <stdio.h> будет отсутство­вать в программе, то имя printf будет воспринято как неизвестное на этапе компиляции программы). В нашем примере на экран будет выведена это строковая константа "\nHello, world\n". Строковая константа в языке С – это
последовательность символов, заключенная в двойные кавычки. В строке символ обратной косой черты ‘\’, за которым следует другой сим­вол, обозначает один специальный символ, в данном случае, ‘\n’ является символом новой строки. Таким образом, выводимые символы в данном случае состоят из символа перевода строки, символов Hello, world и еще одного символа перевода строки.
Отметим, что
обратная косая черта ‘\’ позволяет не только записы­вать символы, не имеющего графического изображения и некоторые дру­гие, но и выводить символьные константы, явно задавая их коды в восьме­ричном или шестнадцатеричном виде. Последовательность литер, начина­ющаяся с символа ‘\’ называют esc-последовательностями (ескейп­последовательностями). Их допустимые значения приведены в табл. 1.
6
Таблица 1
е
Допустимые ESC–последовательности
Изображение Смысл
\a Звуковой сигнал \b Возврат на шаг (забой) \n Перевод строки (новая строка)
\r Возврат каретки \t Табуляция горизонтальная \\ Обратная косая черта (\) \’ Апостроф (‘)
\” Двойная кавычка (“) \000 Восьмеричный код символа (000 – любые восьмеричные символы) \xhh Шестнадцатеричный код символа (hh – любые шестнадцатеричны
символы)
Методы организации вывода и ввода данных будут подробно рас-
смотрены в главе 3.
Последняя строка программы представляет собой вызов функции gecth() – функции задержки экрана до нажатия пользователем любой кла­виши.
Задание 1. Вывод строки на экран с использованием esp-последо­вательности
Каждому студенту рекомендуется выполнить хотя бы одно из упражнений 1-12.
Используя esc-последовательности, выведите на экран следующий текст.
1. Это строка, иначе – “стринг”, иначе – “строковый литерал”
2. Это звуковой сигнал! (Сопроводите вывод строки звуковым сигналом)
3. Это строка? “Да!”
4. Вывод очень- очень-очень
-очень-очень-очень-очень-очень-очень-
очень длиной строки можно обеспечить, используя символ \
5. “ – это двойные кавычки ‘ – это апостроф
6. Это “строка”? Это “строка”! (Используя символ возврата на шаг, во второй строке удалите восклица­тельный знак)
7
7. Это строка? Это строка! (Замените слово “Это” во второй строке словом “Да”, используя возврат каретки)
8. \\Это комментарий? //Нет, это комментарий
9. Используя шестнадцатеричные коды символов, выведите на экран текст: “Это строка”
10. Используя восьмеричные коды символов, выведите на экран текст: “Это строка”
11. Используя шестнадцатеричные коды символов, выведите на
экран
текст: “Hello, world”
12. Используя восьмеричные коды символов, выведите на экран текст: “Hello, world”
8
2. ПЕРЕМЕННЫЕ. ОСНОВНЫЕ ТИПЫ ДАННЫХ
Любая программа, суть которой не есть вывод на экран некоторой текстовой информации, содержит описание переменных. Переменная – это пара «имя» – «значение». Имени соответствует адрес участка памяти, вы­деленной переменной, а значением является содержимое этого участка. Именем переменной служит идентификатор. В языке С идентификатор – это последовательность из букв
латинского алфавита, десятичных цифр и символов подчеркивания, начинающаяся не с цифры. Прописные и строчные буквы различаются. Примеры идентификаторов:
i, i2, i_2, stroka, STROKA, F_I_O.
На длину различаемой части идентификатора конкретные реализа­ции компилятора накладывают свои собственные ограничения. Например, компилятор фирмы Borland различают не более 32 первых символов любо­го идентификатора.
Каждая переменная и каждое выражение в программе имеет тип, определяющий операции, которые могут над ними производиться. Все ти­пы языка С делят на основные и производные. Переменные
типизируются с помощью описаний. Для описания переменных основных типов исполь­зуют ключевые слова, содержащиеся в табл. 2.
Описание переменных заданного типа имеет следующий формат: тип имя1 [иницал._выражение1], имя2 [иницал._выражение2],…; где
тип – один из основных типов (табл. 2); имя – идентификатор; инициал._выражение – необязательный инициализатор, определя-
ющий начальное значение соответствующего объекта.
Синтаксис
инициализатора переменной: = инициал._выражение либо (инициал._выражение).
Таблица 2
Основные типы данных
Тип данных Диапазон значений
char (символьный) – 128…127 short (короткий целый) – 32768…32767 int (целый) – 32768…32767 long (длинный целый) – 2147483648…2147483647 unsigned char (беззнаковый символьный) 0…255 unsigned int (беззнаковый целый) 0…65535 unsigned long (беззнаковый длинный целый) 0…4294967295 float (вещественный) 3.4Е–38…3.4Е+38 double (вещественный с удвоенной точностью) 1.7Е–308…1.7Е+308 long double (длинный вещественный с удвоен- ной точностью)
3.4Е–4932…3.4Е+4932
9
Приведем несколько примеров.
int i,j,k,n=10;// Определены целые переменные i,j,k,n и
только n
//инициализирована значением 10; char simbol1= ‘\n’;// Определена символьная переменная sim-
bol1 co
// значением ‘\n’ double pi=3,1415926535897932385; // Определена вещественная //переменная pi с удвоенной точностью co //значением 3,1415926535897932385
К основному типу можно применять спецификатор const. Это дает тип, имеющий те же свойства, что и исходный тип, за исключением того, что значение переменных типа const не может изменяться после инициали­зации. Например,
const float pi = 3,14;
const char plus = '+';
В данном случае говорят, что описаны константы. Символ, заклю­ченный в одинарные кавычки, является символьной константой. Константа должна инициализироваться при описании. Для переменных инициализа­ция необязательна, но настоятельно рекомендуется. Оснований для введе­ния локальной переменной без ее инициализации очень немного.
Кроме типов, приведенных в табл. 2, к основным типам относят логический тип bool, перечислимый тип enum и тип void (отсутствие значения).
Логические переменные (типа bool) могут принимать одно из
двух значений: истина (true) или ложь (false). Логические переменные исполь- зуются для выражения результатов логических операций. Например,
bool c = a = = b; //= означает присваивание, = = проверка
равенства
Если а и b имеют одинаковые значения, то c будет равно true, в про­тивном случае – false. По определению true имеет значение 1 при преобра­зовании к целому типу, а false – 0. При преобразовании целочисленного значения к логическому типу 0 преобразуется в false, а число, отличное от нуля – в true.
Перечислимый
тип, который вводится с помощью служебного слова enum, по существу описывает целые константы (типа int), которым припи­саны уникальные и удобные для использования имена. Например,
enum {one=1,two=2,three=3};
Здесь one, two, three – произвольным образом выбранные програм­мистом идентификаторы для обозначения констант 1,2,3. После такого определения в программе наряду, например, с константой 2 можно исполь­зовать ее обозначение two. Если в определении перечислимых констант опустить знаки “=” и не указывать числовых значений, то они будут при-
10
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]