ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 01.03.2019

Просмотров: 1195

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

целые, например 125;

короткие целые, в конце записи которых добавляется буква (суффикс) H (или h), например 275h, 344H;

длинные целые, в конце записи которых добавляется буква (суффикс) L (или l), например 361327L;

беззнаковые, в конце записи которых добавляется буква U (или u), например 62125U;

восьмеричные, в которых перед первой значащей цифрой записывается нуль (0), например 071;

шестнадцатеричные, в которых перед первой значащей цифрой записывается пара символов нуль-икс (0x), например 0x5F;

символьные - единственный символ, заключенный в одинарные кавычки, например 'О', '2', '.' и т.п. Символы, не имеющие графического представления, можно записывать, используя специальные комбинации, например \n (код 10), \0 (код 0). Эти комбинации выглядят как два символа, хотя фактически это один символ. Так же можно представить любой двоичный образ одного байта: '\NNN', где NNN - от одной до трех восьмеричных цифр. Допускается и шестнадцатеричное задание кодов символов, которое представляется в виде: '\х2В', '\хЗ6' и т.п.;

строковые - последовательность из нуля символов и более, заключенная в двойные кавычки, например: "Это строковая константа". Кавычки не входят в строку, а лишь ограничивают ее. Строка представляет собой массив из перечисленных элементов, в конце которого помещается байт с символом '\0'. Таким образом, число байтов, необходимых для хранения строки, на единицу превышает число символов между двойными кавычками;

константное выражение, состоящее из одних констант, которое вычисляется во время трансляции (например: а=60+301);

типа long double, в конце записи которых добавляется буква L (или l), например: 1234567.89L.

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

Программа на языке Си состоит из одной или более подпрограмм, называемых функциями.

Язык Си является блочно-структурированным. Каждый блок заключается в фигурные скобки {}.

Основным блоком в программе консольного приложения на языке Си является главная функция, имеющая имя main().

Каждое действие в языке Си заканчивается символом "точка с запятой" - ;. В качестве действия может выступать вызов функции или осуществление некоторых операций.

Имя функции — это коллективное имя группы описаний и операторов,

заключенных в блок (фигурные скобки). За именем функции в круглых скобках указываются параметры функции.

Комментарии в языке Си

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

/* - начало комментария;

*/ - конец комментария.

Вся последовательность, заключенная между этими символами, является комментарием.

Это удобно для написания многострочных комментариев:

int a; /* целая

переменная */

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

В дополнение к этому, для написания коротких комментариев могут использоваться символы //. При этом комментарием является все, что расположено после символов // и до конца строки:


float b; // вещественная переменная

Главная функция

При выполнении консольного приложения, написанного на языке Си, операционная система компьютера передаёт управление функции с именем main(). Функцию main() нельзя вызывать из других функций программы, она является управляющей.

Следующие за именем функции круглые скобки предназначены для указания параметров (аргументов), которые передаются в функцию при обращении к ней. В данном случае операционная система не передаёт в функцию main() никаких аргументов, поэтому список аргументов в круглых скобках пустой.

Главную функцию можно записать по-разному:

int main()

void main().

Перед именем функции указывается тип возвращаемого значения. При обращении к главной функции значение возвращается операционной системе. Последняя запись не будет возвращать значения. Однако void main() - не совсем корректная запись, так как сообщает компилятору, что функция main() не возвращает никакого значения.

При этом запись int main() сообщает компилятору о возвращении целочисленного значения, которое необходимо операционной системе и сообщает ей о том, что программа завершилась корректно. Если же это значение не возвращено, то операционная система понимает, что программа завершилась в аварийном режиме.

Для возврата целочисленного значения перед завершением функции добавляется строка

return 0; // вещественная переменная

В фигурные скобки заключены описания и операторы.

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

9. Стандартные скалярные типы данных. Описание переменных.

Типы данных

Программы оперируют с различными данными, которые могут быть простыми и структурированными. Простые данные - это целые и вещественные числа, символы и указатели (адреса объектов в памяти). Целые числа не имеют, а вещественные имеют дробную часть. Структурированные данные - это массивы и структуры; они будут рассмотрены ниже.

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

char - символьный;

int - целый;

float - вещественный;

double - вещественный двойной точности;

void - не имеющий значения.

Дадим им краткую характеристику:

Переменная типа char имеет размер 1 байт, ее значениями являются различные символы из кодовой таблицы, например: 'ф', ':', 'j' (при записи в программе они заключаются в одинарные кавычки).

Размер переменной типа int в стандарте языка Си не определен. В большинстве систем программирования размер переменной типа int соответствует размеру целого машинного слова. Например, в компиляторах для 16-разрядных процессоров переменная типа int имеет размер 2 байта. В этом случае знаковые значения этой переменной могут лежать в диапазоне от -32768 до 32767.


Ключевое слово float позволяет определить переменные вещественного типа. Их значения имеют дробную часть, отделяемую точкой, например: -5.6, 31.28 и т.п. Вещественные числа могут быть записаны также в форме с плавающей точкой, например: -1.09e+4. Число перед символом "е" называется мантиссой, а после "е" - порядком. Переменная типа float занимает в памяти 32 бита. Она может принимать значения в диапазоне от 3.4е-38 до 3.4e+38.

Ключевое слово double позволяет определить вещественную переменную двойной точности. Она занимает в памяти в два раза больше места, чем переменная типа float (т.е. ее размер 64 бита). Переменная типа double может принимать значения в диапазоне от 1.7e-308 до 1.7e+308.

Ключевое слово void (не имеющий значения) используется для нейтрализации значения объекта, например, для объявления функции, не возвращающей никаких значений.

Объект некоторого базового типа может быть модифицирован. С этой целью используются специальные ключевые слова, называемые модификаторами. В стандарте ANSI языка Си имеются следующие модификаторы типа:

unsigned

signed

short

long

Модификаторы записываются перед спецификаторами типа, например: unsigned char. Если после модификатора опущен спецификатор, то компилятор предполагает, что этим спецификатором является int. Таким образом, следующие строки:

long а;

long int а;

являются идентичными и определяют объект а как длинный целый. Табл. 1 иллюстрирует возможные сочетания модификаторов (unsigned, signed, short, long) со спецификаторами (char, int, float и double), а также показывает размер и диапазон значений объекта (для 16-разрядных компиляторов).

Тип Размер в байтах (битах) Интервал изменения

char 1 (8) от -128 до 127

unsigned char 1 (8) от 0 до 255

signed char 1 (8) от -128 до 127

int 2 (16) от -32768 до 32767

unsigned int 2 (16) от 0 до 65535

signed int 2 (16) от -32768 до 32767

short int 2 (16) от -32768 до 32767

unsigned short int 2 (16) от 0 до 65535

signed short int 2 (16) от -32768 до 32767

long int 4 (32) от -2147483648 до 2147483647

unsigned long int 4 (32) от 0 до 4294967295

signed long int 4 (32) от -2147483648 до 2147483647

float 4 (32) от 3.4Е-38 до 3.4Е+38

double 8 (64) от 1.7Е-308 до 1.7Е+308

long double 10 (80) от 3.4Е-4932 до 3.4Е+4932

Переменные и константы


Все переменные до их использования должны быть определены (объявлены). При этом задается тип, а затем идет список из одной или более переменных этого типа, разделенных запятыми. Например:

int a, b, c;

char x, y;

В языке различают понятия объявления переменной и ее определения. Объявление устанавливает свойства объекта: его тип (например, целый), размер (например, 4 байта) и т.д. Определение наряду с этим вызывает выделение памяти (в приведенном примере дано определение переменных).

Переменные можно разделять по строкам произвольным образом, например:

float a;

float b;

Переменные в языке Си могут быть инициализированы при их определении:

int a = 25, h = 6;

char g = 'Q', k = 'm';

float r = 1.89;

long double n = r*123;

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



int a; /* Определение глобальной переменной */


int function (int b, char c); /* Объявление функции (т.е. описание

ее заголовка)*/


void main (void)

{ //Тело программы

int d, e; //Определение локальных переменных

float f; //Определение локальной переменной

...

}

int function (int b, char c) /* Определение функции и формальных

параметров (по существу - локальных

переменных) b и c */

{ //Тело функции

char g; //Определение локальной переменной

...

}

Отметим, что выполнение программы всегда начинается с вызова функции main( ), которая содержит тело программы. Тело программы, как и тело любой другой функции, помещается между открывающей и закрывающей фигурными скобками.

В языке Си все определения должны следовать перед операторами, составляющими тело функции. В языке Си++ это ограничение снято и определения могут находиться в любом месте программы. Если они сделаны в функции, то соответствующие объекты будут локальными, а если вне функций, то глобальными.

10 Операции отношения и Арифметические операции

Основные операции отношения:

== эквивалентно — проверка на равенство;

!= не равно — проверка на неравенство;

< меньше;

> больше;

<=меньше или равно;

>= больше или равно.

Операции отношения используются при организации условий и ветвлений. Результатом этих операций является 1 бит, значение которого равно 1, если результат выполнения операции - истина, и равно 0, если результат выполнения операции - ложь.


Арифметические операции

Основные бинарные операции, расположенные в порядке уменьшения приоритета:

* - умножение;

/ - деление;

+ - сложение;

- - вычитание;

% - остаток от целочисленного деления.

Основные унарные операции:

++ - инкрементирование (увеличение на 1);

-- - декрементирование (уменьшение на 1);

- - изменение знака.

Результат вычисления выражения, содержащего операции инкрементирования или декрементирования, зависит от того, где расположен знак операции (до объекта или после него). Если операция расположена до объекта, то сначала происходит изменение значения переменной на 1, а потом это значение используется для выполнения следующих операций. Если операция ++ или -- расположена после переменной, то сначала выполняется операция, а потом значение переменной изменяется на 1.

Пример:

6int a=2;

int b=3;

int c;

c = a*++b;

// c=8, поскольку в операции умножения

//уже b=4

6int a=2;

int b=3;

int d;

d = a*b++;

// d=6, поскольку в операции умножения b=3,

// следующим действием будет b=4

11 Логические операции

Логические операции делятся на две группы:

условные;

побитовые.

Условные логические операции чаще всего используются в операциях проверки условия if и могут выполняться над любыми объектами. Результат условной логической операции:

1 если выражение истинно;

0 если выражение ложно.

Вообще, все значения, отличные от нуля, интерпретируются условными логическими операциями как истинные.


Основные условные логические операции:

&& - И (бинарная) — требуется одновременное выполнение всех операций отношения;

|| - ИЛИ (бинарная) — требуется выполнение хотя бы одной операции отношения;

! - НЕ (унарная) — требуется невыполнение операции отношения.

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

Основные побитовые логические операции в языке Си:

& конъюнкция (логическое И) - бинарная операция, результат которой равен 1 только когда оба операнда единичны (в общем случае - когда все операнды единичны);

| дизъюнкция (логическое ИЛИ) - бинарная операция, результат которой равен 1 когда хотя бы один из операндов равен 1;

~ инверсия (логическое НЕ) - унарная операция, результат которой равен 0 если операнд единичный, и равен 1, если операнд нулевой;

^ исключающее ИЛИ - бинарная операция, результат которой равен 1, если только один из двух операндов равен 1 (в общем случае если во входном наборе операндов нечетное число единиц).

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

a b a & b a | b ~a a ^ b

0 0 0 0 1 0

0 1 0 1 1 1

1 0 0 1 0 1

1 1 1 1 0 0

12 Операция запятая

Операция запятая (,) позволяет объединить несколько выражений в одно выражение и, таким образом, в Си вводится понятие выражение с запятой, имеющее общий вид записи:

<выражение>, <выражение>, <выражение>, . . .

Пара выражений, разделенных запятой, вычисляется слева направо. Тип и значение результата выражения с запятой есть тип и значение самого правого выражения. Например: k=a+b,d=m+n,5.2+7 это выражение с запятой. Выражение вычисляется слева направо. Его значением является 12.2 типа double. В процессе вычисления этого выражения переменным k и d будут присвоены соответствующие значения.

Для выражения d=(k=5+2,5+3) значение переменной d будет 8, т.к. переменной d присваивается значение выражения с запятой, которое в свою очередь равно значению самого правого выражения-операнда. Запятая в Си используется в двух контекстах: как разделитель списка объектов, например, в операторе описания данных, и как операция, определяющая последовательное вычисление выражений. Поэтому допустимо, например, такое описание с инициализацией: int a,b,c=(1,2,5),d; где переменная c инициализируется константным выражением с запятой 1,2,5 и принимает значение 5. Контекст знака запятая (операция или разделитель) компилятор "чувствует" по скобкам. Внутри скобок – это операция запятая, вне скобок – разделитель.

Забегая вперед, отметим, что аналогичная ситуация может возникнуть в списке фактических аргументов при обращении к функции. Обращение к функции, содержащее три аргумента, причем второй имеет значение 5, может выглядеть так: f(a,(t=3,t+2),c).

Чаще всего операция запятая используется в заголовках циклов, в местах, где синтаксис разрешает записать только одно выражение, а надо записать несколько. Тогда выражения объединяются в одно при помощи операции запятая. Например, когда нужно проинициализировать перед началом цикла или увеличить в конце цикла несколько переменных: