Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основы программирования на языке С. Учебное пособие
.pdf
Министерство образования и науки Российской Федерации
Саратовский государственный технический университет
Т.Э. ШУЛЬГА
ОСНОВЫ ПРОГРАММИРОВАНИЯ
НА ЯЗЫКЕ С
Учебное пособие
Электронное издание сетевого и локального распространения
Саратов 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
