Язык Си: историческая справка, общая характеристика, основные достоинства. Подготовка к выполнению и выполнение программ в операционной среде ms dos и windows
Вид материала | Лекция |
- Общая характеристика операционных систем современных пвэм, 224.37kb.
- Составить и отладить прикладные программы на алгоритмическом языке Бейсик, размещающиеся, 296.57kb.
- Пошаговое руководство по использованию служб развертывания операционной системы Windows, 625.55kb.
- Знакомство с пк. Работа в среде операционной системы Windows, 263.2kb.
- История операционных систем семейства Windows, 588.09kb.
- Профессор, Dr. Sc. Habil., 1206.7kb.
- Лекция: Азы системы Windows, 228.87kb.
- Для фирмы Microsoft. Ms-dos самая известная ос из семейства, 206.93kb.
- Программирование под Windows, 39.13kb.
- Dos navigator, Windows Commander и другие программные оболочки, 69.06kb.
Лекция 1.
Язык Си: историческая справка, общая характеристика, основные достоинства. Подготовка к выполнению и выполнение программ в операционной среде MS DOS и WINDOWS. Элементы языка Си: множество символов, ключевые слова, константы и переменные, операции и операторы, управляющие конструкции. Примеры простейших программ: разбор элементов языка.
$ 1. ЯЗЫК СИ: ОБЩАЯ ХАРАКТЕРИСТИКА, ИСТОРИЧЕСКАЯ СПРАВКА И ОСНОВНЫЕ ДОСТОИНСТВА.
Язык Си является языком программирования общего назначения. Появление его тесно связано с созданием операционной системы UNIX, так как он разрабатывался специально для этой системы и на нем написана большая часть системного программного обеспечения UNIXа. Однако язык Си не ориентирован на работу только лишь в одной операционной системе или на какой-либо конкретной машине. Он представляет собой универсальный, машиннонезависимый, легко переносимый язык программирования, в равной степени подходящий как для системного программирования, так и для решения задач вычислительной математики, технических и коммерческих приложений.
Язык Си - это алгоритмический язык "не очень высокого уровня". Данная характеристика означает, что он дает возможность работы с такими типами объектов и позволяет выполнять такие операции, которые традиционно относят к машинноориентированным языкам "низкого уровня", подобным языку ассемблера. Примером упомянутых объектов могут служить символы, числа (со знаком и без), адреса оперативной памяти и указатели, битовые цепочки и т.д., над которыми можно выполнять арифметические, логические и поразрядные операции. В то же время, Си не обеспечивает возможности работы со строками, множествами, массивами или списками как с единым целым.
В зыке СИ имеется большой набор управляющих конструкций для реализации циклических и разветвленных алгоритмов, средства для блочного и модульного программирования, а также возможность гибкого управления процессом выполнения программы. Все это позволяет охарактеризовать Си как язык структурного программирования.
Однако сам по себе язык Си не обеспечивает возможности управления вводом/ выводом и в нем нет операторов, подобных операторам READ и WRITE в FORTRANe. Все действия по обмену информацией с периферийными устройствами выполняются при помощи явным образом вызываемых внешних функций, входящих в состав стандартных библиотек Си.
Появление Си принято связывать с именем Мартина Ритчи, подготовившего в 1972 году первую версию этого языка в ходе работ над операционной системой UNIX для ЭВМ семейства PDP. Однако исторически его возникновение следует связывать с , во многом машинно зависимым, языком В, созданным Кеном Томпсоном на основе языка BCPL. В настоящее время из 13000 строк системного кода UNIXa лишь 800 строк, выполняющих работу наиболее низкго уровня, написаны на языке ассемблера. Остальная же часть этой операционной системы и множество ее программных утилит написаны на Си. Можно отметить также, что практически вся графическая операционная оболочка Microsoft WINDOWS для персональных компьютеров создана на Си.
В заключение перечислим некоторые основные свойства языка Си:
- широкий набор управляющих конструкций для организации циклов и условных переходов, обеспечивающих возможность написания гибких и хорошо структурированных программ;
- большой набор операторов и операций, многие из которых допускают прямую трансляцию в машинный код;
- многообразие примитивных типов данных, включая возможность управления длиной целочисленных и вещественных переменных; наличие средств для конструирования новых агрегатированных типов данных;
- возможность непосредственной работы с машинными адресами через аппарат указателей;
- наличие препроцессора, позволяющего вносить изменение в текст программы непосредственно перед ее компиляцией;
- блочная структура программного кода, возможность работы с различными классами памяти и средства для модульного программирования.
$2. ЭЛЕМЕНТЫ ЯЗЫКА СИ
3.1. Алфавит
Большие буквы латинского алфавита - А -- Z.
Малые буквы латинского алфавита - а -- z.
Десятичные цифры - 0 -- 9.
Специальные символы:
пробел ! " # % & ' ( ) * + , - . / : ;
< = > ? [ \ ] _ | ~
3.2. Имена объектов программы (идентификаторы)
Идентификаторами в языке Си являются последовательности букв и цифр, начинающиеся с буквы. Символ подчеркивания ( _ ) рассматривается компилятором как буква. Большие и малые буквы латинского алфавита считаются различными. В операционной среде MS DOS длина идентификатора формально может быть произвольной, однако только лишь первые 31 символ являются значимыми для компилятора Microsoft C/2.
*) Не рекомендуется в прикладных программах использовать идентификаторы, начинающиеся с подчеркивания, так как в среде MS DOS это может привести к конфликту с именами создаваемых компилятором служебных переменных или констант.
В программах на языке Си идентификаторы служат именами переменных, символических констант, функций, типов данных и меток.
3.3. Ключевые слова
Ключевые слова - это предопределенные идентификаторы, имеющие специальные значения. Имена никаких объектов не должны совпадать со следующими зарезервированными ключевыми словами:
- типы данных
char double enum float int long short signed
struct typedef union unsigned void
- классы памяти
auto extern register static
- операторы
break case continue default do else for goto
if return sizeof switch while
- специальные
const cdecl far fortran huge pascal ( volatile )
3.4. Комментарии
Под комментариями понимаются последовательности символов, игнорируемые компилятором. Комментарии имеют следующую форму:
/* Произвольная комбинация любых печатаемых символов ASCII */
3.5. Константы
Константами в языке Си могут быть числа (целые и вещественные), символы и строки символов, которые допустимо использовать в программе в смысле их значений. Значение никакой константы не может быть изменено в процессе работы программы. Специальные директивы языка дают возможность присваивать константам любого типа символические имена (#define PI 3.14159 )
3.6. Операции и выражения
Под операциями следует понимать действия, выполняемые программой над определенными в ней объектами. Для обозначения операций используются некоторые стандартные комбинации специальных символов из алфавита языка. Объекты программы, участвующие в операции, называются операндами. Всякая комбинация одного или большего числа операндов и символов операций, дающая единственное значение, образует выражение. Любое выражение, заканчивающееся точкой с запятой, является оператором.
В языке Си принято различать следующие группы операций:
- арифметические операции
+ - * / % ++ --
- операции отношения
== != < > <= >=
- логические операции
! || &&
- побитовые операции
~ << >> & |
- операции присваивания
= += -= *= /= %= <<= >>= &= = |=
- операции над массивами
[]
- операции над структурами и объединениями
. ->
- другие операции
? : , syzeof (type specifier) ( )
3.7. Операторы
Простейшим оператором языка Си является всякое выражение, заканчивающееся точкой с запятой. В частности, отдельно стоящая точка
с запятой интерпретируется компилятором как нуль-оператор.
Наиболее значительную группу операторов образуют операторы управления процессом выполнения программы. К ним относятся:
- операторы цикла
а). for(выражение1;выражение2;выражение3) оператор;
б). while (выражение ) оператор;
в). do
оператор; while(выражение);
- условный оператор и переключатель
а). if(выражение) оператор;
[else оператор;]
б). switch(выражение)
[case константа: [операторы]
[break;]
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
[default: [операторы]
- операторы передачи управления goto break continue return
Операторы управления могут быть вложены друг в друга. Один или несколько операторов, заключенных в фигурные скобки, образуют составной оператор или блок. Точка с запятой после закрывающей скобки при этом не ставится.
3.8. Описания
Описания в языке Си - это строки программы, определяющие имена и характеристики функций, переменных, типов и символических констант, используемых в программе.
3.9. Общая структура программы
Всякая программа в языке Си представляет собой совокупность функций, выполняющих основную работу по реализации некоторого алгоритма. Каждая из этих функций, в свою очередь, есть независимый набор описаний и операторов, заключенных между заголовком функции и ее концом. Головная (главная) функция, с которой начинается выполнение программы, должна иметь предопределенное имя main().
Пример 1.
/* Вычисление площади круга радиуса R и длины его окружности */
/* Включаемые файлы */
#include
/* Определение константы */
#define PI 3.1415927
main()
{ float len, radius, sqr;
printf("\n Задайте радиус окружности ...\n");
scanf("%f",&radius);
sqr = PI*radius*radius; /* Вычисление площади круга */
len = 2.0*PI*radius; /* Вычисление длины окружности */
printf("\n Длина окружности радиуса %.3 равна %f ",
radius,sqr);
printf("\n Длина его окружности равна %f",len);
}
Пример 2.
/* Решение квадратного уравнения вида A*X**2 + B*X + C = 0 */
#include
#include
void main()
{ float a, b, c, dis;
printf("\n Введите коэффициенты А, В, С\n");
scanf("%f%f%f",&a,&b,&c);
dis = b*b - 4.0*a*c;
if(dis < 0)
printf("\n\n Уравнение не имеет вещественных корней"); else if(dis == 0)
printf("\n\n Корень уравнения = %.3f",-b/(2.*a));
else
printf("\nПервый корень = %7.3f",(-b+sqrt(dis))/(2.0*a));
printf("\n Второй корень = %7.3f", -(b+sqrt(dis))/(2.*a));
}
Пример 3.
/* Печать таблицы квадратов целых чисел */
#include
#define STARTNUM 1 /* Минимальное целое число */
#define ENDNUM 20 /* Максимальное целое число */
void main()
{
int number, square;
for(namber=STARTNUM; nаmber<=ENDNUM; namber=namber + 1)
/* namber++ */
{ square = namber * namber;
printf("\n Квадрат числа %2d равен %3d\n",namber,square);
}
}