Главная страница
Навигация по странице:

  • Пример 1.5. целочисленное деление n t n= 7,m= 2;i n t k1=n/m;// результат 3double

  • Пример 1.6. Деление вещественных чисел n t n= 7,m= 2;double x1= (double )n/m;// результат 3.5double

  • Стандартные математические функции.

  • Листинг 1.6: Вычисление математического выражения i n c l u d e 2 i n c l u d e 3 i n c l u d e 4 5i n t

  • 2. Потоки ввода-вывода, условные операторы, циклы 2.1. Потоки ввода-вывода

  • Листинг 2.1: Использование потоков ввода-вывода C++ (вариант 1) i n c l u d e ¬ i n c l u d e ­i n t main() {double

  • i n c l u d e i n c l u d e — 44 —using namespace std;i n t main() {double

  • СИ. Программирование на языке CC Часть Структурное программирование


    Скачать 1.65 Mb.
    НазваниеПрограммирование на языке CC Часть Структурное программирование
    Дата11.02.2022
    Размер1.65 Mb.
    Формат файлаpdf
    Имя файлаAlgLangCpp.pdf
    ТипУчебное пособие
    #359040
    страница3 из 11
    1   2   3   4   5   6   7   8   9   10   11

    Операция
    Описание
    Пример
    1 Унарные операции

    ++
    Инкремент (увеличение на Декремент (уменьшение на Поразрядная инверсия a
    = Логическое отрицание x
    = Унарный минус z
    = - см. продолжение наследующей странице

    — 30 Продолжение таблицы 1
    2 Унарный плюс z
    = +Бинарные операции

    *
    Умножение Деление Остаток то деления Сложение Вычитание a
    =
    x
    - Сдвиг вправо a
    =
    x
    >> Сдвиг влево a
    =
    x
    << Меньше Меньше или равно Больше Больше или равно Равно Неравно Поразрядная конъюнкция (И)
    a
    =
    x
    &
    y
    ;
    ^
    Поразрядное исключающее ИЛИ
    a
    =
    x
    ^
    y
    ;
    |
    Поразрядная дизъюнкция (ИЛИ)
    a
    =
    x
    |
    y
    ;
    &&
    Логическое И
    a
    =
    x
    &&
    y
    ;
    ||
    Логическое ИЛИ
    a
    =
    x
    ||
    y
    ;
    =
    Присваивание Умножение с присваиванием Деление с присваиванием Остаток отделения с присваиванием Сложение с присваиванием Вычитание с присваиванием Сдвиг вправо с присваиванием a
    >>= Сдвиг влево с присваиванием a
    <<= Поразрядное И с присваиванием Поразрядное ИЛИ с присваиванием Поразрядное исключающее ИЛИ с присваиванием см. продолжение наследующей странице

    — 31 Продолжение таблицы 1
    2 Операции с указателями
    &
    Взятие адреса p
    = Разыменование указателя a
    = Выделение памяти Освобождение памяти delete Приведение типов.
    При выполнении операции присваивания значение,
    получившееся при вычислении правого операнда, автоматически приводится к тому типу, который имеет левый операнд. Например l o a t
    x
    = 5;
    i n t
    y
    =
    x
    / Впервой строке целая константа преобразуется в вещественное значение
    5.0
    Во второй строке вещественный результат деления
    2.5
    преобразуется к целому числу путём отсечения дробной части (получается. Поскольку неявные преобразования служат причиной многочисленных ошибок, во втором случае лучше использовать явное приведение типов n t
    y
    = (
    i n t
    )(
    x
    / В общем случае явное преобразование типа записывается в виде:
    (
    тип
    )
    выражение
    Арифметические операции.
    Для обозначения четырёх арифметических операций используются символы
    +
    ,
    -
    ,
    *
    и
    /
    . Результат арифметической операции будет целым, если целыми являются оба операнда. Результат деления двух целых операндов будет округлён до целого значения. Если хотя бы один из операндов вещественный, то результат также будет вещественным.
    Пример 1.5. целочисленное деление n t
    n
    = 7,
    m
    = 2;
    i n t
    k1
    =
    n
    /
    m
    ;
    // результат 3
    double
    k2
    =
    n
    /
    m
    ;
    // результат 3.0

    — 32 —
    i n t
    k
    =
    n
    %
    m
    ;
    // остаток то деления, результат 1
    double
    x
    = 5 / 2;
    // результат 2.0, т.к. оба операнда целые
    Пример 1.6. Деление вещественных чисел n t
    n
    = 7,
    m
    = 2;
    double
    x1
    = (
    double
    )
    n
    /
    m
    ;
    // результат 3.5
    double
    x2
    =
    n
    / (
    double
    )
    m
    ;
    // результат 3.5
    double
    x3
    = 5.0 / 2;
    // результат 2.5
    double
    x4
    = 5 / 2.0;
    // результат 2.5
    double
    x5
    = 5.0 / 2.0;
    // результат Составное присваивание.
    Операция присваивания может быть совмещена с бинарными операциями эквивалентно x = x + y;
    x
    -=
    y
    ;
    // эквивалентно x = x - y;
    x
    *=
    y
    ;
    // эквивалентно x = x * y;
    x
    /=
    y
    ;
    // эквивалентно x = x / y;
    x
    %=
    y
    ;
    // эквивалентно x = x % y; (остаток отделения эквивалентно x = x << y; (сдвиг влево эквивалентно x = x << y; (сдвиг вправо эквивалентно x = x & y; (побитное И эквивалентно x = x | y; (побитное ИЛИ эквивалентно x = x ^ y; (побитное Инкремент и декремент.
    Часто используемые операции увеличения и уменьшения на 1 в языке C/C++ можно записывать в сокращённом виде. Ин- кремент:
    i
    ++;
    //эквивалентно i = i + 1;
    Декремент:
    i
    --;
    //эквивалентно i = i - Когда эти операции являются частью более сложного выражения, имеет значение, доили после идентификатора переменной (в префиксной или в
    постфиксной форме) указана операция инкремента или декремента

    — 33 —
    Постинкремент и постдекремент (значение переменной участвует в вычислении выражения, а затем изменяется+ эквивалентно k = i*j; i = i+1; j = j-1;
    Преинкремент и предекремент (значение переменной изменяется, после чего участвует в вычислении выражения ++
    i
    * -- эквивалентно i = i+1; j = j-1; k = Операции инкремента и декремента могут быть применены только к
    L-значению. Например, нельзя написать:
    5++
    Операции сдвига
    >>
    (вправо) и
    <<
    (влево) применяются только к целочисленным операндам. Они сдвигают двоичное представление левого операнда на количество двоичных разрядов, заданное правым операндом. Пример = 0b00000101 << 1 = 0b00001010 = При сдвиге вправо на один разряд самый младший
    (нулевой)
    бит теряется самый старший бит принимает нулевое значение для беззнаковых
    (unsigned)
    типов,
    а для знаковых

    принимает значение для отрицательного числа и 0 для положительного. Пример >> 1 = 0b11111110 >> 1 = 0b11111111 = -При сдвиге влево на один разряд теряется самый старший бит младший бит принимает нулевое значение.
    Приоритет операций.
    Для указания порядка выполнения операций в сложных выражениях используются скобки, например (
    b
    - с
    /
    d
    );
    Когда скобки отсутствуют, порядок выполнения операций зависит от их
    приоритета. В приведённом примере при вычислении выражения внутри скобок сначала будет выполнена операция деления c / d
    , т. к. её приоритет выше, чему операции вычитания.
    В табл.
    1.2
    операции расположены в порядке уменьшения приоритета.
    Операции, имеющие одинаковый приоритет, расположены водной группе;
    группы разделяются горизонтальной чертой

    — 34 —
    Стандартные
    математические
    функции.
    В
    таблице
    1.3
    указаны некоторые математические функции,
    описанные в
    за- головочном файле или Более полный список можно найти в
    указанном файле,
    он находится в
    каталоге
    C:

    Program Files

    Microsoft Visual Studio Если таили иная функция в языке отсутствует, то используют известные соотношения) для логарифмов = log
    𝑐
    𝑏 · log
    𝑎
    𝑐 =
    log
    𝑐
    𝑏
    log
    𝑐
    𝑎
    ;
    (1.1a)
    log
    𝑎
    𝑏 Таблица 1.3. Математические функции
    Обозначение
    Функция
    Тип результата
    Пример sqrt квадратный корень double y
    =
    sqrt
    (
    x
    /2.0);
    pow степень double y
    =
    pow
    (
    x
    ,
    a
    /3.0);
    abs модуль int k
    =
    abs
    (
    i
    );
    labs модуль long int j
    =
    labs
    (
    i
    );
    fabs модуль double y
    =
    abs
    (
    x
    );
    ceil округление вверх double y
    =
    ceil
    (
    x
    );
    floor округление вниз double y
    =
    floor
    (
    x
    );
    sin синус double y
    =
    sin
    (
    x
    );
    cos косинус double y
    =
    cos
    (
    x
    *5);
    tan тангенс double y
    =
    tan
    (
    x
    );
    atan арктангенс double y
    =
    atan
    (
    x
    );
    exp экспонента 𝑒
    𝑥
    double y
    =
    exp
    (
    x
    );
    log натуральный логарифм ln double десятичный логарифм log
    10
    double y
    =
    log10
    (
    x
    );

    — 35 —
    2) для показательных функций и корней 𝑎
    −𝑚
    ;
    𝑎
    𝑛
    𝑎
    𝑚
    = 𝑎
    𝑛−𝑚
    ;
    (1.2a)
    𝑚

    𝑎
    𝑛
    =
    (︀
    𝑚

    𝑎
    )︀
    𝑛
    = 𝑎
    𝑛/𝑚
    ;
    (1.2b)
    𝑚
    √︁
    𝑛

    𝑎 = 𝑎
    1
    𝑛𝑚
    =
    𝑛𝑚

    𝑎;
    (1.2c)
    𝑎
    𝑛
    · 𝑎
    𝑚
    = 𝑎
    𝑛+𝑚
    ;
    (1.2d)
    3) для тригонометрических функций 𝑥 =
    sin 𝑥
    cos 𝑥
    =
    1
    ctg 𝑥
    ;
    (1.3a)
    arcsin 𝑥 = arctg
    (︂
    𝑥

    1 − 𝑥
    2
    )︂
    ;
    (1.3b)
    arccos 𝑥 =
    𝜋
    2
    − arcsin 𝑥;
    (1.3c)
    arcctg 𝑥 =
    𝜋
    2
    − arctg Обращаем внимание на то, что во всех случаях использования тригонометрических функций углы измеряются в радианах.
    Пример 1.7. Вычисление математического выражения. Вычислим значение выражения −
    2 3
    +
    3
    √︂ 𝑥
    2.7


    𝑒
    −3𝑥
    )︂
    · |sin при заданном значении (вводится с клавиатуры).
    В листинге
    1.6
    показан пример решения данной задачи. На рис.
    1.5
    показан результат работы программы.
    Листинг 1.6: Вычисление математического выражения i n c l u d e

    2
    # i n c l u d e

    3
    # i n c l u d e

    4 5
    i n t
    main
    (){
    6
    double
    x
    ,
    y
    ;
    ¬
    7
    SetConsoleCP
    (1251);

    — 36 —
    8
    SetConsoleOutputCP
    (1251);
    9
    printf
    ("\nВычисления␣по␣формулам\n");
    10
    printf
    ("Введите␣x␣=␣");
    ­
    11
    scanf
    ("%lg", &
    x
    );
    ®
    12
    y
    = ( 2.0 - 2.0/3 +
    pow
    (
    x
    /2.7, 1.0/3) - sqrt
    (
    exp
    (-3*
    x
    )) Ответ — описали две вещественные переменные — вывели на экран приглашение — ввели с клавиатуры значение переменной x
    ;
    ¯ — вычислили значение выражения (выражения можно разрывать — вывели ответ на экран — ждём нажатие клавиши в конце программы.
    Рис. 1.5. Экран программы из листинга
    1.6
    Рис. 1.6. Пример вычисления выражений в программе MathCAD

    — 37 Обращаем ваше внимание на то, что следует избегать использования в нецелочисленных выражениях целых констант вместо вещественных, т.к. при делении целых операндов результат округляется до целого. Проверьте самостоятельно, что получается, например, если написать - вместо -
    2.0 / или pow(x / 2.7, вместо pow(x / 2.7, 1.0 / Использование программы MathCAD. На рис.
    1.6
    показан пример вычисления того же самого выражения в среде MathCAD. Для ввода специальных операций и функций предназначена панель Арифметические инструменты Для того, чтобы присвоить значение переменной, надо нажать на клавиатуре, при этом на экране отобразится символ присваивания
    :=
    Для ввода степени используется комбинация клавиш
    Shift+6
    (символ "При вводе дробей и других сложных выражений приходится использовать клавишу пробел, чтобы задать, к какой части уже введённого выражения будет применён очередной оператор.
    Чтобы узнать значение выражения, надо нажать знак равенства и клавишу. После этого двойным щелчком по ответу левой кнопкой мыши можно вызвать диалоговое окно и задать количество отображаемых цифр. Контрольные вопросы. Дать определения следующий понятий, привести примеры а) алгоритм;
    б) алгоритмический язык в) язык программирования г) синтаксическое правило д) семантика е) машинный код ж) ассемблер и язык ассемблера з) язык высокого уровня и) парадигма программирования;
    к) декларативный язык л) императивный язык м) структурное программирование н) подпрограмма (функция о) компилятор п) интерпретатор р) лексема с) алфавит языкат) идентификатору) ключевое слово;
    ф) числовая константах) комментарий ц) переменная ч) именованная константа ш) инициализаторы) тип данных э) интегрированная среда разработки ю) форматная строка я) значение

    — 38 —
    2. Как в языке C/C++ записываются числовые константы а) десятичные;
    б) восьмеричные в) шестнадцатеричные. Переведите указанные шестнадцатеричные числа в десятичный вида) 0xC5; б) 0xA2; в) 0x7B; где ж) 0xD3.
    4. Переведите указанные десятичные числа в шестнадцатеричный вида) 37; б) 54; в) 29; где ж) 48.
    5. Запишите указанные десятичные числа в нормализованном виде. Примера б) 540; в) 0.29; где ж) 0.0048.
    6. Можно ли в программе на языке C/C++ записать десятичное число
    13
    в виде константы. С каких символов может начинаться идентификатор в программе. Из каких символов может состоять идентификатор. Как описать вещественную переменную двойной точности с именем и инициализировать её значением 3.1415?
    10. Как описать целую константу с именем и инициализировать её значением. В программе имеется строка:
    const
    k
    ;
    Какие две ошибки допустил программист. Из каких трёх этапов состоит процесс построения (build) приложения,
    написанного на языке C/C++?
    13. Зачем вначале программы используют директиву. Какая функция предназначена для вывода информации на экран. Какая функция используется для ввода информации с клавиатуры. В каком заголовочном файле описаны функции ввода-вывода?
    17. Какое расширение имеют заголовочные файлы. Какое расширение имеют файлы с исходными текстами программ на языке C и C++.

    — 39 —
    19. Объясните понятие кодировка символов. Какие функции C/C++ используются для установки кодировки при вводе и выводе В каком заголовочном файле они описаны. Что делать, если в тексте программы правильно установлена кодировка, но русские символы в консольном окне всё равно не отображаются. Какой смысл имеет значение, которое пишется в операторе return в
    конце функции main()
    ?
    22. Какая функция предназначена для ввода кода нажатой клавиши В каком заголовочном файле она описана. Как в программе на языке C/C++ выполнить команду операционной системы. Что произойдёт, если в функции перед вторым параметром не указать операцию взятия адреса & ?
    25. Допустим, в тексте программы первоначально использовалась переменная типа float
    , а соответствующая функция вывода имела вид:
    printf
    ("Результат␣=␣%7.2f");
    Потребовалось производить вычисления с большей точностью, поэтому тип переменной изменили на double
    . Какие изменения потребуются в функции вывода. Чем отличаются спецификаторы формата "и "%g"
    ?
    27. Расшифруйте следующую запись:
    а)
    x
    +=
    y
    ;
    б)
    x
    *=
    y
    ;
    в)
    x
    /=
    y
    ;
    г)
    x
    %=
    y
    ;
    28. Каким будет результат вычисления выражения:
    а)
    9 / б / в / г / 2.0;
    29. Каким будет результата 021 << б 0
    x3B
    << 2;

    — 40 в 13 >> 3;
    30. Найдите результат вычисления логического выражения:
    а)
    bool x
    = (3 < 1)|| !(2 <= б у (3 >= 1)&& !(

    2 & 7);
    31. Что будет выведено на экран в результате выполнения данного фрагмента программы:
    а)
    i n t
    x
    = б n t

    x
    = 0
    x14
    ;
    printf
    ("%d",
    x
    );
    32. Сколько байт отводится компилятором для хранения переменных следующих типов а int
    ; б int
    ; в где ж з double
    ?
    33. В чём отличие типа int от unsigned int
    ?
    34. С какого символа начинаются директивы препроцессора. Чем область действия идентификатора отличается от области видимости. Как описать глобальную переменную Локальную. Зачем используются статические переменные. Как обозначается операция сравнения на равенство. Чем поразрядные операции
    &
    и
    |
    отличаются от логических операций
    &&
    и
    ||
    ?
    40. Какое число будет выведено в результате выполнения следующего фрагмента программы:
    а)
    i n t
    a
    = 5,
    b
    = 12;
    i n б n t
    a
    = 5,
    b
    = 12;
    i n t
    x
    =
    a
    ^
    b
    ;
    printf
    ("%d",
    x
    );

    — 41 в n t

    a
    = 13,
    b
    = 5;
    i n где ж n t
    i
    = 5,
    j
    = 9,
    k
    ;
    k
    =
    i
    ++ * -- з n t
    i
    = 5,
    j
    = 9,
    k
    ;
    k
    = ++
    i
    *
    j
    --;
    printf
    ("%d%d%d",
    i
    ,
    j
    ,
    k
    );

    — 42 —
    2. Потоки ввода-вывода, условные операторы,
    циклы
    2.1. Потоки ввода-вывода
    Вместо функций ив программах на C++ можно использовать специальные объекты — поток ввода cin и поток вывода Они описаны в заголовочном файле или iostream
    ), в пространстве имён std
    . Подробнее о них мы будем говорить в следующей части,
    при изучении объектно-ориентированного программирования (ООП), а пока нам достаточно уметь правильно их использовать.
    Для ввода с клавиатуры значения переменной (символьного, целого или вещественного типа) следует писать:
    std
    ::
    cin
    >>
    x
    ;
    Для вывода на экран текстовой строки и значения переменной "Ответ" Как видим, спецификаторы формата здесь не используются. Заметим, что операции иимеют в языке C другой смысл поразрядный сдвиг вправо и влево соответственно, но язык C++ позволяет произвольным образом переопределять (перегружать) операции для классов, описанных программистом.
    В данном случае эти две операции переопределены для потоков ввода ивы- вода. Пример программы приведён в листинге
    2.1
    Листинг 2.1: Использование потоков ввода-вывода C++ (вариант 1)
    # i n c l u d e

    ¬
    # i n c l u d e

    ­
    i n t
    main
    () {
    double
    x
    ,
    y
    ;
    const double
    pi
    = 3.14159265358979323846;
    ®
    system
    ("chcp␣1251");

    — 43 —
    std
    ::
    cout
    << "\nx␣=␣:␣";
    ¯
    std
    ::
    cin
    >>
    x
    ;
    °
    y
    =
    cos
    (2 *
    pi
    *
    x
    );
    ±
    std
    ::
    cout
    << "y␣=␣" <<
    y
    <<
    std
    ::
    endl
    ;
    ²
    system
    ("pause");
    return
    0;
    }
    ¬ — подключили заголовочный файл, в котором определены потоки ввода-вывода (в старых программах можно встретить iostream.h
    );
    ­ — вместо math.h в новых программах используют cmath
    ;
    ® — определили константу 𝜋;
    ¯ — вывели на экран приглашение с помощью потока вывода cout
    ;
    ° — ввели с клавиатуры значение переменной с помощью потока ввода cin
    ;
    ± — вычислили значение выражения — вывели на экран ответ с помощью потока вывода cout и перешли на новую строку (endl — end of line — конец строки).
    Файл с исходным текстом программы должен иметь расширение Чтобы каждый раз не указывать название пространства имён std
    , можно вначале программы написать В этом случае операции ввода и вывода примут вид "Ответа программа, приведённая в листинге, изменится, как показано в листинге Листинг 2.2: Использование потоков ввода-вывода C++ (вариант 2)
    # i n c l u d e

    # i n c l u d e


    — 44 —
    using namespace std
    ;
    i n t
    main
    () {
    double
    x
    ,
    y
    ;
    const double
    pi
    = 3.14159265358979323846;
    system
    ("chcp␣1251");
    cout
    << "\nx␣=␣";
    cin
    >>
    x
    ;
    y
    =
    cos
    (2 *
    pi
    *
    x
    );
    cout
    << "y␣=␣" Для изменения вида и задания точности выводимых чисел вместе с потоком вывода cout используют манипуляторы форматирования, описанные в заголовочном файле iomanip
    . Манипулятор setw позволяет задать ширину поля (количество позиций — актуально для вывода таблиц манипулятор точность выводимых чисел (количество знаков после десятичной точки манипуляторы scientific и изменяют формат выводимых чисел (экспоненциальный или с фиксированной точкой. В листинге приведена короткая программа, в которой два вещественных числа сначала выводятся в экспоненциальном формате с точностью 4 знака после десятичной точки с шириной позиции 14 символов, а затем те же числа выводятся в формате с фиксированной точкой, с точностью 5 знаков и шириной
    12
    символов (рис.
    2.1
    ).
    1   2   3   4   5   6   7   8   9   10   11


    написать администратору сайта