Long int char, short, enum
ЭЛЕМЕНТЫ ЯЗЫКА СИ
Под элементами языка понимается набор его базовых конструкций, используемых при написании программ.
Элементы языка Си:
1. АЛФАВИТ - это набор допустимых символов языка:
ü прописные и строчные латинские буквы (a-z, А-Z);
ü арабские цифры (0-9);
ü знаки пунктуации (. , , , ! , ‘ , “ , ; , ? );
ü специальные символы ( #, \, /, +, -, *, _, % и др.);
ü скобки: ( ), { }, [ ].
При формировании строковых и символьных данных можно использовать буквы русского алфавита. В текстах программ допускаются комментарии и пробелы.
Комментарии - это текст, поясняющий назначение переменных и действия программы. Комментарий ограничивается одним из двух способов:
а) /*Это комментарий*/ - может занимать несколько строк
б) // Это тоже комментарий - одна строка
Комментарии воспринимаются компилятором языка, как пробельные символы и игнорируются. Внутри комментариев нельзя использовать сочетание символов */, т.е. комментарии не могут быть вложенными.
Комментарии могут быть следующих видов:
1) после заголовка главной функции – общая информация о программе: ее назначение, входные данные и результаты, метод решения задачи, ФИО программиста, дата написания программы и т.д.;
2) если есть несколько функций, то комментарий должен быть для каждой из них; он может также определять начало и завершение определенной функционально законченной программы;
3) при объявлении данных функции – пояснения назначения используемых в ней переменных;
|
|
4) пояснения логически сложных частей программы, содержащих разветвления, циклы.
Однако количество комментариев не должно быть чрезмерным.
Буквы и цифры используются при формировании констант, меток, идентификаторов и ключевых слов.
2. ИДЕНТИФИКАТОРЫ - это последовательность латинских букв, цифр и символа подчеркивания, начинающаяся с буквы или символа подчеркивания. Идентификаторы могут иметь произвольную длину, но используются в программе только первые 32. В идентификаторе прописные и строчные буквы различаются, т.е. name, Name и NAME являются различными. Как правило, в языке Си в именах переменных используется только строчные буквы, а для именованных констант - заглавные.
3. КЛЮЧЕВЫЕ (служебные, зарезервированные) СЛОВА - это идентификаторы, которые имеют специальное значение для компилятора и не могут быть идентификаторами переменных и данных пользователя.
auto | автоматический | int | целое |
break | завершить | long | длинное |
case | вариант | register | регистровый |
char | символьный | return | возврат |
const | константа | short | короткий |
continue | продолжить | signed | знаковый |
default | по умолчанию | sizeof | размер |
do | выполнить | static | статический |
double | двойной точности | struct | структура |
else | иначе | switch | переключатель |
enum | перечисляемый | typedef | определение типа |
extern | внешний | union | объединение |
float | плавающее | unsigned | беззнаковый |
for | для | void | пустой |
goto | перейти | volatile | изменчивый |
if | если | while | пока |
|
|
4. МЕТКИ. Любой оператор в программе может быть помечен меткой. Метка ставится перед оператором и отделяется от него двоеточием. Метка в Си – это идентификатор. Метки, использованные в теле функции, локальны в ней. Область действия метки - функция. Поэтому в разных функциях можно использовать одинаковые метки.
Примеры меток: vvod, vivod, vhod
СТРУКТУРА ПРОГРАММЫ НА ЯЗЫКЕ СИ
Программа |
Операторы |
main( ) |
#Заголовок |
Операторы |
Функция А( ) |
Операторы |
Функция В( ) |
Директивы препроцессора и указания компилятору |
Любая программа на языке Си начинается с инструкций подключения к программе заголовочных файлов, обеспечивающих подключение библиотечных функций. Эти инструкции имеют вид:
#include <имя заголовочного файла>
Все заголовочные файлы имеют расширение .h(от англ. header – заголовок). Поэтому файлы с расширением .h называются файловыми заголовками. Использование символов < > дает указание компилятору, что поиск этого файла будет осуществлен в системном каталоге. Если нужно подключить файл из текущего каталога, то вместо символа < > используются " ".
|
|
Символ # означает, что строка должна быть обработана препроцессором языка Си. Препроцессор - это программа, выполняющая предварительную обработку исходного текста программы перед началом компиляции.
Каждая инструкция include (директива препроцессора) записывается с новой строки. В конце инструкции никакие разделительные знаки не используются.
После всех инструкций подключения заголовочных файлов обычно помещают описание главной функции программы. Оно начинается с заголовка функции main (), за которым никакие знаки не ставятся. Главная функция определяет действия выполняемые программой и вызывает на выполнение другие функции. Слово void перед mainобозначает, что главная функция не возвращает никаких значений в результате своего выполнения. Пустые скобки обозначают отсутствие аргументов.
За заголовком следует тело этой функции, заключенное в фигурные скобки {}. Вначале записываются объявления и определения переменных. Объявление переменных - это описание переменных, которое задает им имена и атрибуты, также это приводит к выделению под переменные области памяти. Определение (инициализация) переменных задает им начальное значение.
|
|
Далее следует последовательность выполняемых операторов. Каждый оператор завершается символом «;». Обычно каждый оператор записывается с новой строки, что обеспечивает хороший обзор программы.
Если программа содержит несколько функций, то они располагаются последовательно одна за другой, причем функция main( ) может занимать в этой последовательности произвольное место. Выполнение программы в любом случае начинается с выполнения функции main( ).
#include <stdio.h> /* подключение функций ввода-вывода при работе с экраном
main( ) и файлами*/
{
int num=1;
printf ("Я простая");
printf ("вычислительная ЭВМ. \n ");
printf ("Мое любимое число %d, потому что оно самое первое. \n ", num);
}
ВЫРАЖЕНИЯ
Основное назначение программы состоит в выполнении действий, необходимых для решения поставленной задачи. Решение любой задачи представляет собой процесс формирования результатов из заданных исходных данных. Правила формирования новых значений задаются с помощью выражений.
Во всех языках программирования под выражением подразумевается конструкция, составленная из операндов (констант, переменных, функций), операций и круглых скобок, с помощью которых можно задать требуемый порядок выполнения операций. Выражение определяет порядок вычисления некоторого значения.
В языке Си используются следующие типы выражений: арифметические, логические, условные и над адресами. Тип выражения определяется типом результата, то есть значением, которое формируется при выполнении последней операции выражения. Результатом выполнения выражения может быть значение одного из допустимых типов: арифметического (целого или вещественного) или символьного. Тип результата определяется как типом операндов, так и типом операций, выполненных над операндами.
Если есть вложенные скобки, то вычисление выражения начинается с самых внутренних скобок. Внутри скобок и если в выражении не используются круглые скобки, последовательность выполнения операций определяется с учетом относительного приоритета операций.
Все операции в Си разделены по приоритетам на 16 категорий. Операции одной категории имеют один и тот же приоритет.
Приоритет | Операция | Комментарий | Порядок выполнения |
1 | (), [] | Скобки | |
Все унарные (кроме постфиксных) | |||
2 | ++ | Увеличение операнда на единицу | ← |
- - | Уменьшение операнда на единицу | ← | |
- | Изменение знака | ← | |
* | Определение значения по адресу | ← | |
& | Определение адреса | ← | |
! | Логическое отрицание | ← | |
~ | Поразрядное логическое отрицание** | ← | |
(тип) | Явное преобразование типа | ← | |
sizeof | Определение размера | ← | |
Бинарные арифметические | |||
3 | * | Умножение | → |
/ | Деление | → | |
% | Остаток от деления** | → | |
4 | + | Сложение | → |
- | Вычитание | → | |
5 | << | Сдвиг влево** | → |
>> | Сдвиг вправо** | → | |
6 | < | Меньше | → |
< = | Меньше или равно | → | |
> | Больше | → | |
> = | Больше или равно | → | |
7 | == != | Равно Не равно | → → |
Поразрядные операции | |||
8 | & | Поразрядное И** | → |
9 | ^ | Поразрядное исключающее ИЛИ** | → |
10 | | | Поразрядное ИЛИ** | → |
Логические | |||
11 | && | Логическое И | → |
12 | || | Логическое ИЛИ | ← |
Условная | |||
13 | ? | Условная | → |
Присваивание и постиксные бинарные | |||
14 | = | Простое присваивание | ← |
* = | Умножение с присваиванием | ← | |
/ = | Деление с присваиванием | ← | |
% = | Остаток от деления с присваиванием** | ← | |
+ = | Суммирование с присваиванием | ← | |
- = | Вычитание с присваиванием | ← | |
<< = | Сдвиг влево с присваиванием | ← | |
>> = | Сдвиг вправо с присваиванием | ← | |
Постфиксные унарные | |||
15 | ++ | Увеличение операнда на единицу | ← |
- - | Уменьшение операнда на единицу | ← | |
Операция Запятая | |||
16 | , | Последовательность выполнения | ← |
П р и м е ч а н и я:
** -операция определена только для данных целого типа;
→ - порядок выполнения операции одного приоритета слева направо;
← -порядок выполнения одного приоритета справа налево
Последовательность вычисления функций в выражениях Си не задана.
Порядок вычисления выражения всегда можно отрегулировать скобками, их можно ставить сколько угодно, но здесь важно соблюдать золотую середину. При большом количестве скобок снижается наглядность выражения и легко ошибиться. Если выражение со скобками выглядит корректно, то компилятор может отследить только парность скобок, но не правильность их расстановки.
При рассмотрении выражений различных типов определяют по каждому типу:
- допустимые операции;
- стандартные функции, допустимые для данных определенного типа.
Арифметические выражения
Арифметические выражения – аналог алгебраических выражений математики. Они используются:
1) в операторах присваивания;
2) в качестве фактических параметров функций;
3) в операторах заголовка цикла.
Арифметические операции:
Операция | Назначение | Тип операнда | Тип результата |
+ | Плюс (сложение) | Целый, вещественный | Совпадает с типом операнда |
- | Унарный минус (вычитание) | Целый, вещественный | Совпадает с типом операнда |
* | Умножение | Целый, вещественный | В соответствии с иерархией типов |
/ | Деление | Целый, вещественный | В соответствии с иерархией типов |
% | Остаток от деления (деление по модулю) | Целый | Целый |
++ | Инкремент (увеличение на 1) | Целый, вещественный | Совпадает с типом операнда |
-- | Декремент (уменьшение на 1) | Целый, вещественный | Совпадает с типом операнда |
Приоритет: 1) ++, -- 2) – 3) *, /, % 4) +, -
Сложение, вычитание и умножение значений выполняются как обычно.
Операция «деление по модулю» применяется только к данным целого типа, знак совпадает со знаком первого из операндов.
Операция деления дает результат с плавающей точкой, если хотя бы один из операндов является вещественным, если оба операнда целые, то результат тоже будет целым - произойдет отбрасывание дробной части (аналогично функции DIV в Паскале).
Например:
5/2= 2 5/2.0=2.5 5.0/2=2.5 (13+6)/2*3=27
Пример:
Пусть дан фрагмент программы. Определить значения переменных.
int i=5,j=3,k,k1,k2;
float f1=2.5,f2=0.5,q,q1;
k=i+j;
k1=i/j;
k2=-i%j;
q=f1/f2;
q1=f1/i;
В одном выражении могут быть операнды различных типов. Если арифметическая операция выполняется над двумя операндами различных типов, то они сначала преобразуются к одному и тому же общему типу в соответствии со схемой иерархии типов, и результат выполнения операции будет того же типа. Схема иерархии типов определяет тип результата: это более высокий тип одного из двух операндов. Самый высокий тип операнда – double.
В арифметических выражениях операндами могут быть переменные целого типа и типа char, так как на машинном уровне и те, и другие имеют одинаковое целое представление. Поэтому для данных типа char применимы все операции, операндами которых могут быть целые int.
Double float
long int char, short, enum
Дата добавления: 2018-08-06; просмотров: 276; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!