Программирование
на языках высокого уровня. Язык программирования Си |
|
Введение
Язык программирования Си создан в 1972 г. Деннисом Ритчи при разработке операционной системы UNIX. Язык проектировался как инструмент для системного программирования с ориентацией на разработку хорошо структурированных программ. Первоначально он появился в операционной системе UNIX, и развивался как основной язык систем, совместимых с ОС UNIX. Сам язык, однако, не связан с какой-либо одной операционной системой или машиной; и хотя его называют языком системного программирования, так как он удобен для написания операционных систем, он может использоваться для написания любых больших вычислительных программ, программ для обработки текстов и баз данных. Компиляторы языка Си работают почти на всех типах современных ЭВМ в операционных системах UNIX, MS-DOS, OS/2, Windows, Windows NT и т.д.
Алфавит. В алфавит языка Си входят: - прописные и строчные буквы латинского алфавита; - цифры; - специальные знаки “ , {} | [ ] ( ) + - / % \ ; ‘ . : ? < = > _ ! & * # ~ ^ - неизображаемые символы, например, пробел, табуляция. Идентификатор. Последовательность букв, цифр, символов подчеркивания, начинающаяся с буквы или символа подчёркивания, считается идентификатором языка Си. Например, Lab_1, size22, _min, TIME, time. Прописные и строчные буквы различаются, т.е. два последних идентификатора различны. Идентификаторы могут иметь различную длину, но компилятор учитывает не более 31-го символа.
Переменная – это именованная область памяти. Отличительная особенность переменной – возможность связывать с её именем различные значения, совокупность которых определяется типом переменной. Каждая переменная перед её использованием в программе должна быть определена, т.е. для неё должна быть выделена память. Размер участка памяти зависит от типа переменной. Основные типы переменных и их предельно допустимые значения: char -128…127 1 байт unsigned char 0…255 1 байт int -32768…32767 2 байта unsigned int 0…65535 2 байта long -2147483648…2147483647 4 байта unsigned long 0…4294967295 4 байта float 3.4E-38…3.4E+38 4 байта double 1.7E-308…1.7E+308 8 байт long double 3.4E-4932…1.1E+4932 10 байт
1). Операция присваивания : “=”. 2). Аддитивные операции : “ +”,”-“; 3). Мультипликативные : “*”,”/”,”%”; % - получение остатка от деления, “/” - целочисленное деление (остаток отбрасывается); 4). Логические операции : && (and), || (or), ! (not); 5). Операции отношения : == (равно), != (не равно), < (меньше), > (больше), <= (меньше или равно), >= (больше или равно); 6). Операции модификации : *= присваивание после умножения (p *= 2; эквивалентно p=p*2;) /= присваивание после деления (p /= 2; эквивалентно p=p/2; ) += присваивание после суммирования (a += b; эквивалентно a=a+b;) -= присваивание после вычитания (a -= b; эквивалентно a=a-b;) %= присваивание после деления по модулю (n %= 3; эквивалентно n=n % 3;) a++ (--) постфиксное изменение (a++; эквивалентно a=a+1; значение а сначала используется, затем изменяется) ++(--)a префиксное изменение (++a; эквивалентно a=a+1; значение а сначала изменяется, затем используется).
1). Оператор вывода : printf(<форматная строка>, переменные); Форматная строка может включать текст для вывода на экран, спецификаторы формата, управляющие символы. Список переменных должен быть согласован со спецификаторами формата по типу и количеству. Спецификатор формата: %[флаг] [ширина] [. точность] [l] [флаг] : “-“ или “+” ; ”-“ выравнивает текст вывода по левому краю; “+” выводит знак для положительных и отрицательных значений; [ширина] : минимальный размер поля вывода; [.точность] : для вещественных чисел количество знаков после десятичной точки; [l] : для вывода целых чисел типа long; При выводе переменных различных типов используются следующие форматы: %c – char; %d – целое десятичное: %u – беззнаковое целое; %o – целое восьмеричное; %x – целое шестнадцатеричное; %s – строка; %f – вещественное число с фиксированной точкой; %e – вещественное число в экспоненциальной форме; %g – вещественное число ( выводится в формате %f или %e , что более компактно). Управляющие символы: \n – перевод строки; \t – табуляция; \v – вертикальная табуляция; \b – возврат на 1 символ; \r – возврат на начало строки; \a – звуковой сигнал. 2). Оператор ввода : scanf(<форматная строка>, адреса переменных); В отличие от printf () форматная строка должна включать в себя только форматы (если их несколько, они разделяются пробелами). Количество форматов определяется количеством переменных. Форматы при вводе переменных различных типов такие же, как и при выводе. Перед именами строк и массивов операция взятия адреса & не ставится, т.к. имя строки или массива само определяет их адрес. Чаще всего линейные алгоритмы используются для программирования вычислений по формулам. В этом случае удобно использовать набор стандартных функций Си, содержащихся в библиотеке и доступных при подключении заголовочного файла math.h : sin (x) - sin x; cos (x) – cos x ; tan(x) - tg х ; log (x) - ln x; log10(x) – lg x; exp(x) - показательная функция ex ; sqrt (x)- корень квадратный от х; роw(x, y) – x в степени y; abs(x)- модуль x.; acos(x) – arccos x; asin(x) – arcsin x; atan(x)- arctg x; sinh(x)- sh x; cosh (x) – ch x; tanh(x)-th x. Для тригонометрических функций аргумент х измеряется в радианах и имеет тип double, как и значения функций. Пример программы линейной структуры: Вычислить площадь и стороны прямоугольного треугольника, если известны гипотенуза c и угол x. Для вычислений воспользуемся формулами : a=c• sin x; b=c• cos x; S=ab; Программа вычислений имеет вид:
// вычисление сторон и площади треугольника #include <stdio.h> //заголовочный файл для организации ввода-вывода #include <math.h> //заголовочный файл математических функций main() //главная функция {float a,b,c,x, S; //описание переменных вещественного типа printf (“\n Введите гипотенузу и угол треугольника ”); scanf (“%f%f “,&c,&x); // ввод значений вещественного типа a=c*sin(x); b=c*cos(x); S=a*b; printf (“\n Результаты: a=%7.2f b=%7.2f S=%7.2f “,a, b, S); return 0; }
Комментарий в программе не влияет на компиляцию программы, а служит для разъяснения действий основных блоков текста и программы в целом. Однострочный комментарий действует от двух символов // до конца строки. Многострочный комментарий заключается в пары символов /* и */. Вторая строка программы #include <stdio.h> является директивой компилятора для включения заголовочного файла stdio.h для доступа к средствам ввода-вывода (связи с внешними устройствами), отсутствующими в самом языке Си. Третья строка - #include<math.h> является директивой компилятора для включения заголовочного файла math.h, обеспечивающего выполнение математических функций. Программа на языке Си состоит из ряда функций, из которых функция main (главная) является обязательной и служит точкой входа в программу. В круглые скобки заключаются параметры функции, причем наличие круглых скобок обязательно, если даже список параметров пуст. В фигурные скобки заключаются составной оператор (несколько операторов). Для придания тексту программы наглядности открывающая и соответствующая ей закрывающая фигурные скобки печатаются на одном уровне, а заключенный между ними текст сдвигается на 1-2 символа вправо, вложенный блок также сдвигается вправо и т.д. Образуется иерархия вложенных блоков, придающая программе на Си характерный вид. В программе описаны переменные a, b, c, х, S вещественного типа (float). В отличие от других языков в Си учитывается регистр при определении имени переменной, т.е. s и S – разные переменные. Функции printf и scanf доступны при подключении заголовочного файла stdio.h и служат для вывода на экран и ввода с клавиатуры соответственно. Управляющие символы \n в функции printf служат для перевода на новую строку. Символ & в функции scanf указывает на адрес вводимой переменной. Ввод и вывод переменных вещественного типа производится в формате f. Признаком форматного вывода в функции printf является %. При выводе между знаком процента и форматной переменной f можно включить общую ширину поля вывода и число позиций после десятичной точки. Оператор return 0; служит для выхода из функции main , 0 является признаком успешного окончания программы. Завершает текст программы закрывающая фигурная скобка, означающая конец функции main.
Экран интегрированной среды содержит 4 основные части: главное меню, окно редактирования, окно сообщений, строку состояния. Главное меню содержит пункты: File (Файл), Edit (Редактирование), Search (Поиск), Run (Исполнить), Compile (Компиляция), Debug (Отладка), Project (Проект), Options (Параметры), Window (Окно), Help (Помощь). Рассмотрим основные. Меню File содержит команды: Open (Открыть существующий программный файл), New (Создать новый файл), Save (Сохранить редактируемый файл), Save as (Сохранить как - файл сохраняется под новым именем), Change dir (Изменить каталог - задаются входные и выходные каталоги, где хранятся тексты программ), Quit (Выход из Среды). В меню File приведены также соответствующие “горячие “ клавиши для этих команд. Меню Edit содержит команды Cut (Вырезать), Copy (Копировать), Paste (Вставить), Clear (Очистить). Меню Compile содержит команды Compile (Компиляция) - клавиши [Alt]+[F9]. Меню Run содержит пункт Run (Исполнить) - клавиши [Ctrl] +[F9]. Меню Help позволяет обратиться к справочной системе, содержащей пункты Contents (Содержание), Index (Предметный указатель), Topic search (Тематический поиск). Клавиша [F1] приводит к открытию окна подсказки. Для получения справки о конкретной функции надо установить курсор на любой символ имени функции и нажать [CTRL]+[F1]. Для запуска Си можно использовать меню программы Far ([F2]). Входим в меню File ([F10] - File - Change dir) и устанавливаем в пункте Input Directory (Входной каталог) имя рабочего каталога, например С:\temp\P_64. Затем набираем программу lab1.c, которая находит стороны и площадь треугольника. Расширение .c является для компилятора признаком того, что программа составлена на языке Си, расширение .cpp - признак программы на языке Си++, объектно-ориентированном расширении языка Си. Набрав текст программы, сохраните ее, нажав F2 и указав имя программы. Компилируем программу, нажав ALT+F9. После исправления ошибок запустим программу на выполнение, нажав CTRL+F9. Будет выдано сообщение: “Введите гипотенузу и угол треугольника ”. Вводим числа через пробел, на экране появляется результат. Для просмотра экрана пользователя с результатами нажимаем ALT+F5. После просмотра нажимаем любую клавишу для возврата в Интегрированную Среду.
1.8.1. Понятие идентификатора. 1.8.2. Определение переменной. Основные типы переменных. 1.8.3. Типы операций в языке Си. 1.8.4. Структура программы на языке Си. 1.8.5. Для чего используются заголовочные файлы? 1.8.6. Как откомпилировать программу? 1.8.7. Как выполнить программу? 1.8.8. Как просмотреть результат выполнения? |