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

  • Модификаторы базовых типов

  • - формальные

  • Спецификаторы хранения

  • Директива препроцессора define

  • define имя( параметры ) текст_подстановки

  • Определение размера

  • Составной оператор (блок) –для описания сложного действия.

  • Условные операторы

  • Оператор выбора (варианта)

  • шпора по проге. прог. Теоретический материал по курсу Основы программирования Язык С (для фкбв и фкбо) Основные понятия. Типы данных


    Скачать 165.08 Kb.
    НазваниеТеоретический материал по курсу Основы программирования Язык С (для фкбв и фкбо) Основные понятия. Типы данных
    Анкоршпора по проге
    Дата06.01.2023
    Размер165.08 Kb.
    Формат файлаdocx
    Имя файлапрог.docx
    ТипДокументы
    #874591
    страница1 из 6
      1   2   3   4   5   6


    Теоретический материал по курсу «Основы программирования»

    Язык С++ (для ФКБВ и ФКБО)

    Основные понятия.

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

    Типы данных: 1. встроенные (базовые), 2. собственные (абстрактные).

    1. Встроенные (базовые) типы данных:

    int –целочисленные (4 байта);

    float- вещественные (4 байта);

    double – двойной точности (8 байт);

    char – символьные (1 байт);

    bool – логические (1 байт);

    void – пусто (зависит от процессора).

    2. Собственные (абстрактные типы данных):

    struct имя; структура

    union имя; объединение

    class имя; класс

    enum имя; перечисление

    Для определения размера типа данного используется оператор sizeof(тип) или sizeof(имя_переменной). Результат будет в байтах.

    Пример Определения размерности переменных встроенного типа:

    int a;

    double d;

    char c;

    printf("a = %d, d = %d, c = %d byte\n", sizeof(a), sizeof(d), sizeof(char));

    Результат выполнения



    Модификаторы базовых типов применяется для более точной настройки типов (int, double, char).

    Для типа int (32 разряда) : signed (по умолчанию ) - знаковый, unsigned – беззнаковый, short – занимает 16 разрядов, long – занимает 64 разряда.

    Для типа char (8 разрядов) – signed, unsigned.

    Для типа doublelong.

    Пример модификатора

    unsigned short int a;

    printf("a = %d\n", sizeof(a));

    Результат выполнения



    Идентификатор - имя программного объекта, имя переменной, функции, метки – совокупность букв, цифр и символа подчеркивания. Нельзя использовать:

    - цифру на первом месте;

    - пробелы;

    - совпадение с ключевым словом.

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

    Пример идентификатора: int nomer_chisla;

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

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

    тип имя_переменной ( int nomer; ); или тип список_переменных; (при списке переменных их имена записываются через запятую double own, now, elen; ).

    При объявлении переменную можно сразу инициализировать – придать ей начальные значения: тип имя_переменной = значение ( int nomer = 150; char ch = 'A'; double own = 3.14;).

    Пример: объявляются инициализированные переменные, заданные в разных основаниях

    int a1 = 10, //основание 10

    a2 = 073, //основание 8

    a3 = 0xf7, //основание 16

    a4 = 0b1010; //основание 2

    Места расположения переменных связаны с областью видимости (доступности) и временем жизни. Переменные разделяются на:

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

    Пример: for (int j = 0; j < 20; ++j){/*локальная. область видимости переменной j - тело оператора for*/}
    Пример:

    void func()// функция. Точка входа – имя func. Для компилятора это -адрес

    {

    int count = 50; /* локальная переменная. Область видимости – эта функция. создается каждый раз при входе в функцию*/

    printf("Localnaja count = %d\n", count++);

    }
    int main()

    {

    for (int j = 1; j <= 5; ++j) func();/* пять раз вызывается функция func()*/

    }

    Результат работы программы


    - глобальные – определены вне функции, доступны всем функциям. Время жизни – пока работает программа (до выхода из программы). Её рекомендуется инициализировать.;

    Пример:

    double rezultat = 0.0; /*глобальная. Область видимости весь файл/проект. Время жизни – пока не выполнится программа */

    int main()

    {

    /* выполняются какие-либо действия*/

    }

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

    - Фактические – определяются при вызове функции (ставятся по факту вместо формальных параметров)

    Пример:

    /* формальные параметры N и D */

    void Function( int N, double D){ /*выполняются какие-либо действия в функции*/ }
    int main()

    {

    Function(5, 3.14); /* фактические параметры, вместо N подставляется 5 и вместо D ставится 3.14 . Вместо значений можно подставлять переменные*/

    }
    Спецификаторы хранения сообщают компилятору, как хранить переменную.

    Общий вид спецификатора: спецификатор_хранения тип имя_переменной;

    - спецификатор extern - позволяет использовать переменную, описанную (определенную) в другом программном модуле (реализация внешних связей между модулями). В одном модуле переменная будет глобальной, во всех остальных модулях она должна быть описана со словом extern. Используется в многомодульных проектах;

    - спецификатор static – переменные могут быть локальными или глобальными (это – ресурсные переменные). Для функции (локальная переменная): создается при первом вызове функции и при последующих вызовах только используется, не уничтожается. Как глобальная статическая переменная создается один раз, область видимости ее – только файл, где она определена. Другие файлы проекта ее не видят.

    Пример:

    void func() // в функции определена статическая переменная

    {

    static int count = 50; /* статическая переменная создается только один раз при первом входе в функцию*/

    printf ("static count = %d\n", count++);//переменная count увеличивается на 1

    }

    //#########################
    int main()

    {

    for (int j = 1; j <= 5; ++j) func(); //вызываем функцию 5 раз

    }
    Результат работы программы


    - спецификатор register- хранит переменные в регистрах центрального процессора, применяется к локальным переменным. Быстродействующие переменные, используются в циклах.

    Пример:

    register int i;

    register int sum = 0;
    for(i=0; i
    Ключевые слова - зарезервированные слова, которые имеют специальное значение для компилятора и используются только в том смысле, в котором они определены в среде программирования на каком-либо языке (например, в Си, С++). При написании программы в редакторе среды ключевые слова выделяются цветом.

    Пример ключевого слова while: while(a == 2) {/* выполняются какие-либо действия*/}
    Константы - величины, которые не меняют своего значения в процессе выполнения программы. Описание констант: const тип имя = значение.

    Константы обязательно инициализировать, например:

    const int foo = 10; /* можно */

    const int bar;/* нельзя */

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

    Преимущество констант заключается в следующем:

    - позволяют явным образом определить тип данных;

    - константами могут быть более сложные типы данных (составные), например

    массивы и структуры;

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

    - имена констант можно использовать при отладке программы;

    Константы бывают:

    1. целые (десятичные 10, восьмеричные 07, шестнадцатеричными 0ха9) Окончание U может использоваться для явного задания констант типа unsigned: int a=3U;

    2. Аналогично, окончание L явно задает константу типа long: int b = 5L;.

    3. с плавающей точкой 1.23, научного формата типа e: 1.23e-5, типа float: 3.14159265f.

    4. символьные ‘t’, ‘\n’, '\x05f'

    5. Строковые “Hello”

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

    const int model = 90;

    const int v[] = { 1, 2, 3, 4 };

    Директива препроцессора #define

    #define- определяет подстановку в тексте программы (макрос). Подстановка используется для определения:

    1 символических констант (все имя заменяются на текст подстановки компилятором в программе): #define имя текст_подстановки

    Пример:

    #define N 10 /*во всем тексте программы, полученном после обработки препроцессором, вместо N будет записано 10 */
    2 макросов, которые выглядят как функции, но реализуются подстановкой их текста в текст программы:

    #define имя( параметры ) текст_подстановки

    Пример:

    #define pri(i) printf( "\nимя "#i " Значение по этому имени = %d\n", ##i)

    В коде программы будет записано:

    int MyCount = 15;

    pri(MyCount); //подставляем функцию: #имя, ##значение

    Результат выполнения:



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

    Они используются вместе с директивами #ifdef и #ifndef, #endif . Формат: #define имя

    #defineXXXXX_H – определение заголовочного имени файла.

    Пример:

    #ifndef Vektor_h //если файл не определен, то

    #define Vektor_h //его определяем.

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

    Каждое выражение заканчивается знаком ; (компилятор ищет этот символ)

    Примеры выражений:

    int a = 0b1001; //задана переменная в двоичном коде

    int ar[10] = {1,2,3,4,5,6,7,8,9,10};//задан инициализированный массив из 10 элементов

    int rez = (//задано сложное логическое выражение

    ((g && !v5) || (!g && v5)) && ((f && !v3) || (!f && v3)) &&

    ((!g && !v4) || (g && v4)) &&

    ((v3 && !v4 && !v5) || (!v3 && v4 && !v5) || (!v3 && !v4 && v5)) &&

    ((f && !g) || (!f && g))

    );

    Операции – действия. Бывают (примеры):

    - унарные (с одним операндом) ++ (инкрементация)

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

    - условная операция – тернарный оператор ?: (если, то, иначе)

    - последовательное вычисление , (перечисление переменных при объявлении)

    - определение размера, результат – объем в байтах sizeof().

    - преобразование типа (или приведение типа): (тип)

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

    Примеры:

    int a = 10, b, c, d;

    b = c = d = a; //множественное присваивание

    printf("a=%d\tb=%d\tc=%d\td=%d\n", a, b, c, d);

    Результат выполнения программы



    Арифметические:

    - обычные математические действия * / + -

    Пример:

    int a = 13, b = 10;

    float c = a * b / 5. + a;

    printf("%6.2f", c);

    Результат выполнения



    - инкремент и декремент : ++ -- изменение переменной на единицу, имеют префиксную форму (сначала изменение, потом участие в выражении) и постфиксную форму (сначала операнд участвует в выражении, потом изменяется).

    Пример:

    for(int j = 10; j >=0; --j);

    k++; --n;

    - остаток от деления % (только с целочисленными данными)

    Пример:

    int a = 13, b = 10, c;

    c = a % b; printf("%3d", c);

    Результат выполнения


    - битовая арифметика (работают с битами):

    & И

    | ИЛИ

    ^ ИСКЛЮЧАЮЩЕЕ ИЛИ

    ОТРИЦАНИЕ

    << СДВИГ ВЛЕВО (M<
    >> СДВИГ ВПРАВО (M>>L, M– число, L-позиции)

    Пример:

    int a = 13, b = 10, c;

    c = (a | b) << 2;

    printf("%6d", c);

    Результат выполнения



    Логические (работают над логическими значениями true false):

    && И

    || ИЛИ

    ! НЕ

    Пример:

    if (a > b && c <= a) {/* что-то делается*/}

    Сравнения (Отношения) в результате получается истина или ложь:

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

    > >= больше, больше равно;

    == равно;

    != не равно

    Пример:

    (x > y) ? x = x - y : y = y - x; //тернарный оператор
    Условная (тернарный оператор): условие ? выражение1 : выражение2;. Если условие истинно, выполняется выражение1, иначе – выражение2;

    Пример: (x > y) ? x = x - y : y = y - x; //тернарный оператор
    Преобразования типа: (тип) выражение – задание значения нового типа для согласования типа существующей переменной.

    Пример:

    int a = 10, b = 2;

    float f = (float)b / a; //приводим тип, иначе будет 0
    Определение размера (объема занимаемой ячейки в байтах): sizeof()

    Пример:

    int a = 0b1001, b; b = sizeof(a);.
    Обращение к элементу массива: [] или задание массива.

    Пример:

    double mas[5]; //резервирование места под массив

    mas[2] = 100; //обращение к 3-му элементу массива

    Перечисление: , используется при списке идентификаторов.

    Пример:

    int a = 10, b = 2, c=3; //перечисление – операция запятая
    Все операции имеют приоритет. Операции по приоритетам представлены в Приложении 1. «Приоритет операций».

    Оператор – задает конечное описание некоторого действия. Несколько операторов могут располагаться на одной строчке. Формат: оператор выражение;

    Пример:

    if (j) continue;

    Для описания сложного действия требуется последовательность операторов. Операторы могут быть объединены в блок (составной оператор). Блок заключается в фигурные скобки.

    Составной оператор (блок) –для описания сложного действия. - группа операторов в фигурных скобках (для транслятора это означает одно целое):

    {

    оператор1; оператор2;

    оператор3; оператор4; оператор5;

    оператор6;

    ………

    }

    Пример:

    for (int i = 2; i <= Num / 2; i++)

    {

    int j = Num%i;

    if (j) continue;

    pr = false;

    }

    Условные операторы

    Истина – значение переменной отличное от 0. Ложь – значение всегда 0.

    Условный if: выполняется только, если условие истинно, если условие ложно, то выполняется часть под else (если она есть), или следующий оператор после if.

    if (условие) oператор1; (неполный if)

    if (условие) oператор1; else oператор2;

    Могут быть составные, вложенные:

    if (условие1) { if (условие2) oператор11;}

    else {oператор2; oператор22;}

    Пример:

    if (pr) printf("\nПростое число");

    else printf("\nНепростое число");

    Оператор выбора (варианта):

    switch(выражение)

    {

    case значение1: операторы1; . . . . . . . break;

    case значение2: операторы2; . . . . . . break;

    case значение3: операторы3; . . . . . . break;

    . . . . . . . . . . . . . . . . . . . . . .

    default: операторы4; . . . . . . .

    }

    Выражение должно быть символом или целым числом. Значение выражения последовательно сравнивается с константами (значение1, значение2, значение3,….). Если обнаруживается значение, то выполняются операции до break. Если значения не обнаруживается. То выполняются операторы при default.

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

    switch(day)

    {

    case 1: case 2: case 3: case 4:

    case 5:

    printf("\nРабочий день"); break;

    case 6:

    printf("\nСуббота"); break;

    case 7:

    printf("\nВоскресенье"); break;

    default:

    printf("\nНет такого номера дня");

    }
      1   2   3   4   5   6


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