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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!