- •4.1. Ведение
- •4.2. Состав языка
- •4.3. Типы данных
- •4.4. Описание переменных
- •4.5. Операции
- •Приоритеты (ранги) операций
- •Упражнения
- •4.6. Как вводить и выводить информацию
- •Упражнения
- •4.7. Программирование ветвлений
- •Упражнения
- •4.8. Программирование циклов
- •Упражнения
- •4.9. Функции
- •Упражнения
- •4.10. Массивы
- •Упражнения
- •4.11. Указатели
- •Упражнения
- •4.12. Символьные строки
- •Упражнения
- •4.13. Структуры
- •Упражнения
- •4.14. Оператор typedef
- •Упражнения
- •4.15. Файлы
- •Упражнения
ГЛАВА 4. ПРОГРАММИРОВАНИЕ НА СИ (СИ++)
4.1. Ведение
Язык СИ был разработан в 1972 году Денисом Ритчи при создании операционной системы UNIX. Язык был создан как инструмент для программистов-практиков.
Достоинства языка СИ:
Он включает в себя те управляющие структуры, которые рекомендуются теоретическим и практическим программированием. Его структура побуждает программиста использовать в своей работе нисходящее проектирование, структурное программирование и пошаговую разработку модулей. Результатом такого подхода является надёжная и читаемая программа.
Это эффективный язык. Программы на языке СИ отличаются компактностью и быстротой исполнения.
Переносимый язык.
Мощный и гибкий язык. На нём можно писать программы для решения задач вычислительного характера, экономических, создание ОС и трансляторов с языков программирования.
Структура программы. Любая программа на языке СИ/СИ++ представляет собой совокупность функций. Одна из функций является главной. Именно с главной функции начинается выполнение программы (см. рис. 1).
Пример программы.
//директивы препроцессора
#include <stdio.h>
#include <math.h>
// функция вычисления длины отрезка
float dl(float x1, float y1,float x2, float y2)
{ float l, a, b;
a=x1-x2; a=a*a;
b=y1-y2; b=b*b;
l=sqrt(a+b);
return l;
}
Рис. 4.1. Структура программы на СИ
//основная программа
void main( )
{
float xa, ya, xb, yb, xc, yc;
float ab, bc, ac, p, S;
printf(“/n Введите координаты вершин треугольника”);
scanf(“%f%f%f%f%f%f”,&xa,&ya,&xb,&yb,&xc,&yc);
ab=dl(xa,ya,xb,yb); bc=dl(xb,yb,xc,yc); ac=dl(xa,ya,xc,yc);
p=0.5*(ab+bc+ac);
S=sqrt(p*(p-ab)*(p-bc)*(p-ac));
printf(“/nПлощадь треугольника равна %6.2f”,S);
}
Этапы работы с программой в системе программирования (рис.2 — прямоугольниками изображены системные программы, а блоками овальной формы — файлы на входе и выходе этих программ).
Рис. 4.2. Этапы работы с программой
С помощью текстового редактора создаётся текст программы и сохраняется в файле с расширением .cpp. Этот файл называется исходным. Например, решение задачи нахождения площади треугольника, заданного координатами вершин, рассмотренного выше можно сохранить в файле primer.cpp. Затем этот файл обрабатывается препроцессором. В результате такой обработки происходят препроцессорные подстановки и подключения заголовочных файлов. В нашем примере подключаются стандартная библиотека ввода-вывода и математическая библиотека. После препроцессорной обработки расширенный текст программы поступает на компиляцию. В результате компиляции в тексте программы могут быть обнаружены синтаксические ошибки, которые должен устранить разработчик, а в случае успешной компиляции создаётся объектный код программы. В нашем примере будет создан файл primer.obj. Объектный код поступает на вход компоновщика (Linker) — этот этап еще называют редактированием связей. На данном этапе к программе подключаются библиотечные функции и создаётся исполняемая программ — файл с расширением .exe. В нашем примере будет создан файл primer.exe.
4.2. Состав языка
В естественных языках различают символы, из которых состоят слова. Слова составляют словосочетания, из слов и словосочетаний строятся предложения. В алгоритмических языках выделяют символы, лексемы, выражения, операторы.
Символы (алфавит) — это основные неделимые знаки, с помощью которых пишутся все тексты.
Лексема — минимальная единица языка, имеющая самостоятельный смысл.
Выражение задаёт правило вычисления некоторого значения.
Оператор задаёт законченное описание некоторого действия.
Группа операторов составляю блок или составной оператор. В этом случае эта группа операторов рассматривается как один оператор.
Все операторы делятся на исполнимые и неисполнимые. Исполнимые операторы задают действия над данными. Неисполнимые операторы — операторы описания.
Рис. 4.3. Структурные единицы программы
Алфавит. В алфавит языка СИ/С++ входят
большие и маленькие латинские буквы;
цифры;
специальные символы: “ { } , . | [ ] ( ) + - / % \ ; ‘ : ? < = > _ ! & # ~ ^ * пробел;
комбинация символов: ++ -- == || << >> <= >= += -= *= |= ?: |* */ // интерпретируется как один символ.
Из символов алфавита формируются лексемы. В языке 6 классов лексем:
идентификаторы — последовательность латинских букв, цифр, символов подчёркивания ( _ ), начинающаяся с буквы или символа подчёркивания, например: KOM_6, __abc, A_B_C, MAX, Max.
Заглавные и маленькие буквы различаются. Поэтому МАХ и Мах — это два различных идентификатора. Рекомендуется выбирать имя идентификатора так, чтобы оно несло смысловую нагрузку. Длина идентификатора может быть любой. Компилятор различает первые 31 символ (в некоторых реализациях только первые 8 символов).
служебные (ключевые) слова — это идентификаторы, зарезервированные в языке программирования. Полный список служебных слов зависит от реализации языка. Ядро служебных слов состоит более чем из 50 слов. Существуют служебные слова, начинающиеся с одного или двух знаков подчёркивания, поэтому программисту не рекомендуется начинатьсвои идентификаторы с это знака.Служебные слова нельзя использовать в качестве свободно выбираемых идентификаторов.
константы;
строковые константы;
операции (знаки операций);
разделители (знаки пунктуаций).