Основные принципы составления блок-схем и алгоритомов

Автор работы: Пользователь скрыл имя, 29 Октября 2013 в 12:08, лекция

Описание работы

В спецификаторах формата функции printf после символа % можно указывать число, задающее минимальную ширину поля вывода, например, %5d – для целых, %4.2f – для вещественных (означает поле общей шириной 4 символа, две цифры после запятой). Недостающие позиции будут слева заполнены пробелами (если нужно заполнить их нулями, перед шириной поля надо поставить символ '0' , например: %05d ). Если, наоборот, указанных позиций не хватает для вывода целой части числа, то происходит автоматическое расширение поля до нужной ширины.

Файлы: 1 файл

Лекции ОАиП Гуревич (I сем.) №1.doc

— 185.00 Кб (Скачать файл)

Существует система обозначений  для восьмеричных и шестнадцатеричных констант.

Восьмеричные константы - последовательность цифр от 0 до 7, первая из которых должна быть 0, например: 020 = 16-десятичное.

Шестнадцатеричные константы - последовательность цифр от 0 до 9 и букв от A до F (a...f), начинающаяся символами 0Х (0х), например: 0X1F (0х1f) =  31-десятичное.

Восьмеричные и шестнадцатеричные константы могут также заканчиваться буквой L(l) - long, например, 020L или 0X20L.

Примеры целочисленных  констант:

1992   13  1000L  - десятичные;

0777  00033   01l   - восьмеричные;

0x123   0X00ff  0xb8000l  - шестнадцатеричные.

2.5. Константы  вещественного типа

Данные константы размещаются  в памяти по формату double, а во внешнем  представлении могут иметь две  формы:

1) с фиксированной десятичной  точкой, формат записи: ±n.m, где n, m - целая и дробная части числа;

2) с плавающей десятичной точкой (экспоненциальная форма): ±n.mE±p, где n, m - целая и дробная части числа, р - порядок, например, 1,25×10-8  записывается как 1.25E-8.

Примеры констант с фиксированной  и плавающей точками:

1.0    -3.125100е-10  0.12537е+13

 2.6. Символьные константы

Символьная константа - это символ, заключенный в одинарные  кавычки:  'A', 'х' (занимает 1 байт).

В языке Си используются и. специальные (управляющие) символы, не отображаемые на экране; их назначение - влиять на порядок изображения других символов.. Поскольку они не отображаются на экране, для их обозначения в тексте программы используется пара символов, первый из которых всегда - обратная косая черта (обратный слеш) ("\"). Основные их них:

\n

- новая строка;

\t

- горизонтальная табуляция;

\0

- нулевой символ (нуль-терминатор).


С помощью обратного  слеша в символьных и строковых (см. ниже) константах  представляются и некоторые обычные символы, чье написание там могло бы привести к двусмысленности:

\\

- сам обратный слеш;

\'

- апостроф;

\"

- кавычки.


При присваивании символьной переменной эти последовательности должны быть заключены в апострофы. Символьная константа '\0' (не путать с символом - цифрой '0' !) часто записывается вместо целой константы 0, чтобы подчеркнуть символьную природу некоторого выражения (см. тему "Строки").

Примеры символьных констант: 'А', '9', '$', '\n', '\"'.

2.7. Строковые  константы

Строковая константа  представляет собой последовательность символов кода ASCII, заключенная в кавычки (”)  . Во внутреннем представлении к строковым константам добавляется нулевой символ '\0', еще называемый нуль-терминатор, отмечающий конец строки. Кавычки не являются частью строки, а служат только для ее ограничения. Строка - это массив,  состоящий из символов. Внутреннее представление константы  "01234\0ABCDEF":

     '0','1','2','3','4','\0','A','B','C','D','E','F','\0'

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

     "Система", "\n\t Аргумент \n", "Состояние \"WAIT\""

В конец строковой  константы компилятор автоматически  помещает нуль-символ (нуль-терминатор).  Нуль-символ - это не цифра 0, он на печать не выводится и в таблице кода ASCII имеет код 0.

Например, строка "" - пустая строка, содержащая лишь нуль-терминатор.

 

2.8. Именованные константы

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

Объявление такой именованной константы пишется так же, как и объявление переменной, но перед ее типом указывается слово const :

 

const double pi=3.14159

 

Далее ее можно использовать в выражениях, указывая ее имя, например:

 

double x=2*pi;

 

Таким образом, именованная константа  выглядит, как переменная, но ее значение нельзя менять в процессе работы программы. Зато ее можно использовать там, где разрешается использовать только константы. В языке С++ в сложных программах, разбитых на модули, употребление именованных констант часто считается предпочтительнее, чем директива #define.

 

3. Обзор  операций

3.1. Операции, выражения

Операции языка Си предназначены для управления данными (более 40). Для их использования необходимо знать:

- синтаксис;

- приоритеты (15 уровней);

- порядок выполнения.

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

Операции, применяемые  к одному операнду, - унарные, к двум операндам – бинарные, есть операция с тремя операндами - тернарная. Операции выполняются в соответствии с приоритетами. Для изменения порядка выполнения операций используются круглые скобки.

Большинство операций  выполняются слева направо, например, a+b+c ® (a+b)+c. Исключение: унарные операции, операции присваивания и условная операция (?:) - справа налево.

Полный список операций в соответствии с их приоритетом  приводится ниже, в § 4.7.

Рассмотрим кратко основные операции языка Си.

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

Арифметические операции - бинарные. Перечень арифметических  операций и их обозначений:

+   - сложение;

- - вычитание (либо унарная операция - изменение знака);

/  - деление (для int операндов - с отбрасыванием остатка);

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

%  - остаток от деления целочисленных операндов, со знаком первого операнда (деление по модулю).

Операндами традиционных арифметических операций (+ - * /) могут  быть константы, переменные, элементы массивов, любые арифметические выражения.

Порядок выполнения операций:

    • выражения в круглых скобках;
    • функции (стандартные математические, функции пользователя);
    • *  /   выполняются слева направо;
    • +   ─  слева направо.

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

Унарные операции + и –  обладают самым высоким приоритетом, определены только для целых и вещественных операндов, «+» носит только информационный характер, «–» меняет знак значения операнда на противоположный (не адресная операция).

Таким образом, так как  операции  *, /, % обладают высшим приоритетом над операциями +, -, при записи сложных выражений нужно использовать общепринятые математические правила:

x+y*z-a/b     Û    x+(y*z)-(a/b)

 

3.3. Операции сравнения

       ==  -  равно или эквивалентно;

       !=  -  не равно;

       <   -  меньше;

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

       >   -  больше;

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

Пары символов соответствующих  операций разделять нельзя.

Общий вид операций отношений:

<выражение1> <знак_операции> <выражение2>

Общие правила:

- операндами могут   быть любые базовые (скалярные) типы;

    • значения операндов перед сравнением преобразуются к  одному типу;

- результат операции  отношения - целое значение 1, если  отношение истинно, или 0 в противном  случае. Следовательно, операция  отношения  может использоваться  в любых арифметических выражениях.

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

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

!   - отрицание (логическое НЕТ);

&&  - коньюнкция (логическое И);

       ||  - дизьюнкция (логическое ИЛИ).

Общий вид операции отрицания:

        !<выражение>

Общий вид операций коньюнкции и  дизьюнкции

<выражение1> <знак_операции> <выражение2>

Например:

y>0 && x==7 ® истина, если 1-е и 2-е выражения истинны;

e>0 || x==7 ® истина, если хотя бы одно выражение истинно.

Ненулевое значение операнда трактуется как "истина", а нулевое - "ложь". 

Например:

      !0   ® 1

            !5   ® 0

       x=10; y=10;

       !((x==y)>0)  ® 0

 

Пример правильной записи двойного неравенства:   

0<x<100    →       (0<x)&&(x<100)

 

Особенность операций коньюнкции и дизьюнкции – экономное последовательное вычисление выражений-операндов:

<выражение1> <операция><выражение2>,

- если выражение1 операции  коньюнкция ложно, то результат  операции - ноль и выражение2 может  не вычисляться;

      - если выражение1 операции дизьюнкция истинно,  то результат операции - единица и выражение2 может не вычисляться.

Таким образом, появляется возможность записью логического  выражения задать условную последовательность вычисления выражений в направлении слева направо:

scanf("%d",&i) && test1(i) && test2(i)  ® нулевой результат одной из функций может привести к игнорированию вызова остальных;

      search1(x) || search2(x) || search3(x)  ® только ненулевой результат одной из функций может привести к игнорированию вызова остальных.

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

 

4. Операции (продолжение).

 

4.1. Операция присваивания

Формат операции присваивания:

Операнд_1  =  Операнд_2

Операндом_1 может быть только переменная. Этот (левый) операнд операции присваивания получил название L–значение, (L–value, Left–value). Операндом_2 может быть любое выражение, составленное в соответствии с синтаксисом языка Си.  Этот (правый) операнд операции присваивания назвали R–значение, (R–value, Right–value).

Операция присваивания может быть как отдельным оператором (тогда после нее ставится знак ;   ), так и частью другого выражения (тогда ее результатом считается присвоенное значение). Если в выражении подряд без скобок идут несколько операций =  ,  то они выполняются справа налево, например:

int i, j, k;

float x, y, z;

...

i = j = k = 0;  «   k = 0, j = 0, i = 0;

x = i + (y = 3) – (z = 0);  «        z = 0, y = 3, x = i + y – z;

 

Примеры недопустимых выражений:

– присваивание константе:    2 = x + y;

– присваивание функции:        getch() = i;  

– присваивание результату операции:     (i + 1) = 2 + y;

 

4.2. Сокращенная запись  операции присваивания

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

1) вместо записи: 

v = v # e;  

где # – любая арифметическая или битовая операция, рекомендуется использовать запись  v #= e;

Например, 

i = i + 2;   « i += 2;   (+=      –  без пробелов);

2) вместо записи: 

x = x # 1;

где  #  означает   + либо - , x – переменная одного из целочисленных типов (или переменная-указатель), рекомендуется использовать запись:

      

##x; – префиксную,    или    x##;  – постфиксную.

 

Если эти  операции используются в отдельном  виде, то различий между постфиксной и префиксной формами нет. Если же они используются в выражении, то в префиксной форме (##x), сначала значение x изменится на 1, а затем будет использовано в выражении; в постфиксной форме (x##) – сначала значение используется в выражении, а затем изменяется на 1. (Операции над указателями будут рассмотрены позже.)

 

 

Рекомендации  использования сокращений обоснованы возможностью оптимизации программы (ускорение в работе программы), т.к. схема выражения вида v #= e соответствует схеме выполнения многих машинных команд типа "регистр-память".

 

4.3. Преобразование типов  операндов

бинарных операций

При выполнении операций могут встречаться операнды различных  типов. Но для выполнения операции оба операнда должны быть преобразованы к общему типу в соответствии с небольшим набором правил.

Информация о работе Основные принципы составления блок-схем и алгоритомов