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

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

Покупка
Артикул: 824654.01.99
Доступ онлайн
350 ₽
В корзину
В пособии рассматривается язык Си и программирование на нем, рассмотрены основные алгоритмы линейной и циклической структуры, обработка одномерных и многомерных массивов, функции, списки, деревья, работа с динамической памятью, файлами и графикой. Применение алгоритмов иллюстрируется большим количеством примеров. Изложенные в пособии алгоритмы студенты реализуют в виде программ на практических занятиях и в курсовой работе по соответствующей дисциплине. Имеются вопросы для самопроверки. Пособие предназначено для студентов очной и заочной форм обучения, обучающихся по направлению 09.03.01 «Информатика и вычислительная техника», профиль «Программное обеспечение средств вычислительной техники и автоматизированных систем», и изучающих дисциплину «Программирование».
Перцев, И. В. Программирование на языке Си : учебно-методическое пособие / И. В. Перцев ; Сибирский государственный университет телекоммуникаций и информатики ; каф. прикладной математики и кибернетики. - Новосибирск : СибГУТИ, 2022. - 106 с. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2136515 (дата обращения: 07.10.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Министерство цифрового развития, связи и массовых коммуникаций 

Российской Федерации

Федеральное государственное бюджетное образовательное учреждение 

высшего образования

«Сибирский государственный университет телекоммуникаций и информатики»

(СибГУТИ)

И. В.  Перцев

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

Учебно-методическое пособие

Новосибирск

2022

УДК 004.43(075.8)

Утверждено редакционно-издательским советом СибГУТИ

Рецензент канд. техн. наук, доц. И.И.Резван

Перцев И.В. Программирование на языке Си : Учебно-методическое 

пособие / И. В. Перцев ; Сибирский государственный университет телекоммуникаций и информатики ; каф. прикладной математики и кибернетики. –
Новосибирск, 2022. – 106 с.

В пособии рассматривается язык Си и программирование на нем, 

рассмотрены основные алгоритмы линейной
и циклической структуры, 

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

Пособие предназначено для студентов очной и заочной форм обучения, 

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

«Программирование».

© Перцев И.В., 2022
© Сибирский государственный университет
телекоммуникаций и информатики, 2022

Оглавление

Введение....................................................................................................................... 4

1.
Структура программы на языке Си. ................................................................... 5

2.
Конструкции выбора языка ...............................................................................20

3.
Операторы цикла и передачи управления .......................................................24

4.
Массивы...............................................................................................................31

5.
Строки..................................................................................................................40

6.
Текстовый и графический режим .....................................................................44

7.
Функции и рекурсия...........................................................................................51

8.
Указатели и динамические массивы.................................................................57

9.
Структуры и объединения.................................................................................68

10.
Списки...............................................................................................................72

11.
Файловый ввод-вывод в языке Си .................................................................79

12.
Деревья..............................................................................................................88

13.
Создание проектов...........................................................................................91

14.
Дополнительные возможности языка С++....................................................93

ЛИТЕРАТУРА .........................................................................................................105

Введение

Язык программирования – это формализованный язык, предназначенный 

для описания программ и алгоритмов решения задач на ЭВМ. Языки 
программирования являются искусственными. В них синтаксис и семантика
строго определены. Поэтому они не допускают свободного толкования 
выражения, что характерно для естественного языка (например: да, да ну, ну да, 
да конечно, да ну конечно).

Программа – запись алгоритма на языке программирования.
Алгоритм – процесс перевода исходных данных в искомый результат.

Язык высокого уровня – средства такого языка обеспечивают описание 

алгоритма
в 
наглядном, 
легко 
воспринимаемом 
виде, 
удобном 
для 

программиста. Он не зависит от внутренних машинных кодов ЭВМ, 
программы, написанные на языках высокого уровня, требуют перевода в 
машинные коды программами транслятора либо интерпретатора.

Язык низкого уровня – программа, написанная на таком языке,

предназначена для определенного типа ЭВМ и отражает его внутренний 
машинный код.

Например, BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 

6C 6C 6F 2C 20 57 6F 72 6C 64 21 – машинный код вывода на экран стирки 
“Hello Word”.

Первые языки высокого уровня были разработаны в 50-х годах 20-го века 

(Алгол, Кобол, Фортран).

В данном пособии рассмотрен язык Си –
универсальный язык 

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

1. Структура программы на языке Си

Появление языка Си принято связывать с именем Мартина Ритчи, 

подготовившего в 1972 году первую версию этого языка в ходе работ над 
операционной системой UNIX для ЭВМ семейства  PDP.  Однако исторически
его возникновение следует связывать с во многом машинно-зависимым языком
B, созданным Кеном Томпсоном на основе языка BCPL.

Язык Си является языком программирования общего назначения, это 

язык структурного программирования. Он представляет собой универсальный, 
машинно-независимый, легко переносимый язык программирования, в равной 
степени подходящий как для системного программирования, так и для  
решения задач вычислительной математики, технических и коммерческих 
приложений. Популярный, много Си-подобных языков в настоящее время.

Язык Си – это алгоритмический язык "не очень высокого уровня".

Приведенная характеристика означает, что он дает возможность работы с 
такими типами объектов и позволяет выполнять такие операции, которые 
традиционно относят к машиноориентированным  языкам  "низкого   уровня", 
подобным языку ассемблера. Примером упомянутых объектов могут служить 
символы, числа (со знаком и без), адреса оперативной памяти и указатели, 
битовые цепочки и т.д., над которыми можно проделывать арифметические, 
логические и поразрядные операции.  В то же время, Си не обеспечивает 
возможности работы со строками, множествами, массивами или списками как с 
единым целым.

Основные свойства языка Си:

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


большой набор операторов и операций, многие из которых допускают 
прямую трансляцию в машинный код;


многообразие 
примитивных 
типов 
данных, 
включая 
возможность 

управления длиной целочисленных и вещественных переменных;


наличие средств для конструирования новых агрегатных   типов данных;


возможность непосредственной работы с машинными адресами через 
аппарат указателей;


наличие препроцессора, позволяющего вносить изменение в текст 
программы непосредственно перед ее компиляцией;

Язык Си относится к числу компилируемых языков программирования (в 

отличии от интерпретируемых). 

Подготовка к выполнению Си-программы включает в себя 

следующие этапы:


ввод исходного текста программы в файл при помощи какого-либо 
редактора
текстов (имя файла, как правило, имеет стандартное 

расширение "C" или “CPP”);


препроцессор, использующий такие директивы как #include (включение 
внешних файлов в текст программы) и  #define (подстановка выражения 
или константы);


компиляция программы, т.е.
преобразование ее описания на входном

языке в семантический эквивалент на машинном языке, называемый 
объектным модулем (имя файла, в который помещается результат
компиляции, обычно имеет расширение "OBJ");


построение готового к выполнению загрузочного модуля из объектных
модулей, включая модули из внешних библиотек (файл, содержащий 
готовую программу, имеет имя с расширением "EXE");


выполнение программы.

Программа на языке Си включает в себя:


команды препроцессора (#define, #include);


определение типов;


описание переменных;


прототипы функций;


функции.

Программа состоит только из функций (нет процедур как в паскале), но 

результат любой функции можно игнорировать. Кроме того, тип любой 
функции может быть void – пустой тип, не имеющий значений.

Одна из функций в языке Си должна иметь имя main, с нее и начинается 

выполнение программы.

Первая программа

Текст программы набирается в редакторе – например Dev-Cpp.
Основная программа, с которой начинается выполнение, имеет имя main.

Простейшая программа, не выполняющая никаких действий:

main() {}

Все стандартные функции находятся в библиотеках, при использовании 

которых 
необходимо 
подключить
с 
помощью 
директивы 
#include

соответствующий заголовочный файл <имя файла>.h. Каждый оператор 
заканчивается точкой с запятой.

Программа вывода на консоль с использованием стандартной библиотеки 
ввода-вывода stdio.h:
#include <stdio.h>
main(){

printf("программа номер 1”);

}

Программа,
вычисляющая площадь и длину окружности, используется 

вещественный тип float:
#include <stdio.h>
const float PI=3.14159265;
float r, s, l;
main(){

printf("Введите радиус ");
scanf("%d",&r);
s=PI*r*r;
l=2*PI*r;
printf("\n r=%d s=%f l=%f \n",r,s,l);

}

Типы данных в языке Си

Важнейшей  характеристикой  любого элемента данных является его  тип. 

Понятие типа включает в себя следующую информацию  об  элементе    
данных:


допустимый  набор  значений, которые объект этого типа может 
принимать в ходе работы программы;


состав  операций,  которые разрешено выполнять над объектами  данного 
типа;


способ представления и размер элемента данных рассматриваемого типа  
в   памяти компьютера.

Описания в языке Си – это строки программы,  определяющие  имена  и  

характеристики элементов данных, участвующих в работе алгоритма. В 
простейшем случае инструкция  описания данных в Си-программе имеет 
следующий формат:

type id <, id ...>;

где       type – описатель типа;  id  – имя (идентификатор) переменной.

Размеры типов для 32-битного компилятора указаны в таблице 1.1.

Таблица 1.1 – Скалярные типы данных в языке Си

тип
Описание и размер
диапазон
точность

Целые типы

char  
байт со знаком     
(1)
от -128 до 127  

int            
Целая                    
(4)
от -2 147 483 648 
до 2 147 483 647   

short
Короткая целая         
(2)
от-32768 до 
32767       

long
Длинная целая         
(4)
от-2 147 483 648 
до 2 147 483 647    

long 
long 

(C99)

Двойное длинное целое
(8)
-9 1018 +9 1018

unsigned 
char  

байт без знака     
(1)
от 0 до 255     

unsigned
Целая без знака          
(4)
от 0 
до 4 294 967 295

unsigned 
short

Короткая целая без знака (2)
от 0 до 65535   

unsigned 
long  

Длинная целая без знака  (4)
от 0 
до 4 294 967 295

unsigned 
long 
long 

(C99)

Двойное длинное целое  без 
знака 
(8) 

от 0 до 18*1018

Вещественные типы

float
Вещественная           
(4)
10-45 до 10+38
7 дес. цифр

double  
Вещественная двойной 
точности
(8)

10-324 до 10+308
15 дес. 
цифр

Логический тип –вместо него используется целый (в C99 есть тип bool).
0 – false
1 – true
В логических выражениях любое ненулевое значение трактуется как 

истина.

Внимание: 0 <  3
< 2 – верно синтаксически и результатом данного 

выражения будет 1 (истина) так как 0 < 3 результат 1, далее 1 < 2 результат 1.

Символьный тип отсутствует как таковой, тип char – содержит целые 

значения, которые могут трактоваться как коды символов.

void – пустой тип.

Целые числа в памяти компьютера хранятся в двоичной системе

счисления. Для представления отрицательных
чисел используется так 

называемый дополнительный код числа. При записи числа в дополнительном 
коде старший разряд является знаковым. Если его значение равно 0, то в 
остальных разрядах записано положительное двоичное число, совпадающее с 
прямым кодом. Если же знаковый разряд равен 1, то в остальных разрядах 
записано отрицательное двоичное число, преобразованное в дополнительный 
код. Для получения значения, которое противоположно по знаку, все разряды, 
включая знаковый, инвертируются, а затем к результату добавляется единица.

0 
00000000

1 
00000001

127 
01111111

-1 
11111111

-2 
11111110

-127 
10000001

-128 
10000000

Дополнительный код позволяет сделать операции сложения и вычитания 

одинаковыми для знаковых и без знаковых чисел, чем упрощает архитектуру 
ЭВМ.

Действительные числа представляются в виде чисел с плавающей 

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

Число с плавающей запятой представляется в виде последовательности 

битов, часть из которых кодирует собой мантиссу числа, другая часть —
показатель степени, и ещё один бит используется для указания знака числа.

В десятичном виде X=m*10e где m – мантисса  0.1<m<=1 а e – порядок
В двоичном виде   X=m*2e
0.5 < m < 1 – мантисса, a e – двоичный  

порядок

Точность и диапазон определяются тем, сколько бит выделено на m и e.
Число хранится как z-e-m.

У float – 1-8-23
У double – 1-11-52

Пример 
программы
определения 
машинной 
точности 
вычислений

вещественных чисел

#include <stdio.h>
main() {

double f=1, x; // или float f=1, x;
int i=0;
do {

f/=2; i++;
printf("%d %e\n",i,f);
x=1+f;

} while(x>1);

}

Пример программы вычисления диапазона вещественных чисел

#include <stdio.h>
main() {

float f=1;// double  f=1;
int i=0;
do {

f/=2; i++;
printf("%d %e\n",i,f);

} while(f>0);

}

Операторы ввода вывода
Используем #include <stdio.h>

Оператор вывода
printf(“форматная строка”, переменные)
Форматная строка – текст для вывода на экран, форматы, управляющие
символы.
Список переменных должен быть согласован с форматами по количеству и 
типу.
формат
% [флаг] [ширина .точность] формат
флаг + или –
- выравнивает по левому краю поля
+ знак для пол чисел
ширина – минимальный размер поля вывода
точность – для вещественных чисел – количество знаков после запятой, для 
целых – количество цифр.
форматы

Доступ онлайн
350 ₽
В корзину