Язык Си: историческая справка, общая характеристика, основные достоинства. Подготовка к выполнению и вы­полнение программ в операционной среде ms dos и windows

Вид материалаЛекция
Подобный материал:
Лекция 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);

}

}