Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
с++ метода3511.doc
Скачиваний:
47
Добавлен:
15.04.2015
Размер:
409.6 Кб
Скачать

Контрольные вопросы

  1. Что определяет класс памяти переменной?.

  2. Что такое массив?

  3. Приведите пример описания одномерного и двумерного массивов.

  4. Рассажите об операции индексации.

  5. Что такое указатель? Приведите пример использования указателей.

  6. Какая существует связь между одномерным массивом и указателем?

  7. Какие существуют функции динамического распределения памяти в С++?

  8. Приведите пример использования функции malloc.

  9. Какие в С++ существуют функции для работы со строковым типом данным?

Варианты заданий

Модифицировать программу вычисления значения функции из лабораторной работы № 3.

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

5. Функции пользователя

Существует две категории:

  • объявление (прототип). Используется, если вызов функции предшествует объявлению. Объявление представляет собой заголовок функции. В этом заголовке должны быть указаны:

  1. тип возвращаемого функцией значения;

  2. имя функции (идентификатор);

  3. в круглых скобках типы и имена формальных параметров;

  4. объявление заканчивается ‘;’;

  • определение. Включает в себя заголовок и блок (‘;’ после блока не ставится). Внутри блока находятся описания локальных переменных и код реализации функции (т.е. действия). Блок заключается в фигурные скобки.

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

    Функции в С++ равноправны, любая функция может быть вызвана из любой другой, допускается рекурсивный вызов функций.

    Функция main представляет собой точку входа в программу (т.е. ее компилятор запускает первой).

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

    Передача параметров в функции

    1. По значению:

    Параметры, передаваемые по значению, являются входными, т.е. изменить их в функции и возвратить назад в программу нельзя.

    Пример: функция сложения чисел.

    int Sum(int x, int y)

    {int S;

    S= x + y;

    return(S); }

    Вызов такой функции: Sum(x1, y1).

    2. По адресу:

    Например, необходимо возвратить из функции 2 значения. Передаются не значения параметров, а их адреса.

    Пример: Функция обмена двух переменных.

    void Obmen (int*x, int *y)

    {int temp; temp = *x;

    *x = *y;

    *y = temp;}

    Вызов такой функции: Obmen (&x1,&y1).

    3. По ссылке:

    void Swap(int &p1, int &p2)

    {int temp;

    temp = p1;

    p1=p2;

    p2 = temp;}

    Вызов такой функции: Swap(x1,y1).

    Параметры по умолчанию

    Пусть объявлена некоторая функция

    float f(float a; float b=5; float c=0){}.

    Вызов такой функции может быть следующим:

    f(4,6,8); f(4,6); f(4);

    Неправильным будет вызов f(4,,3), поэтому рекомендуется сдвигать параметры, имеющие значения по умолчанию, в заголовке функции вправо.

    Встроенные функции

    Вводятся при помощи спецификатора inline и используются для повышения быстродействия.

    inline float Sum(float a1,float a2) {return a1+a2;}

    Вызов осуществляется не через стек, а подстановкой кода функции в место ее вызова.

    Ограничения:

    - 5 операторов максимум; - не должно быть операторов цикла; переключателей и goto.

    Перегрузка функций

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

    Пример перегрузки функции:

    определить одноименные функции, которые считают площади круга и треугольника.

    float S(float r) // площадь круга

    {puts(“s круга “);

    return 3.14*r*r}

    float S(float x, float H)

    {puts (“s треугольника”);

    return 1\2 * x*H}

    Параметры функции main

    int main (int argc, char * argv[ ] ) argv[ ] - массив символьных строк из командной строки DOS

    argv[ 0] - полное имя файла с маршрутом к каталогу, где хранится программа. argv[ 1] - первый параметр после имени программы в командной строке, argv[ 2] - второй и т.д.

    Параметр argc определяет количество параметров в командной строке, не может быть меньше 1.

    Передача функции в качестве параметра.

    Имя функции – адрес на начало ее кода в оперативной памяти. Для хранения таких адресов необходимо определить указатель на функцию. Это можно сделать, определив тип функции и затем объявить указатель на этот тип:

    typedef float ft (float) ; ft *ftp;

    Возможна другая запись:

    typedef float(*ftp)(float)

    объявление типа – указателя на функцию, возвращающую значение типа float и имеющую 1 параметр типа float.

    Пример: программа с меню из двух пунктов

    typedef void(*mn)( );

    mn M_c[2]

    void vb1( )

    { puts (“Выбор 1”); getchar ( );}

    void vb2 ( )

    { puts (“Выбор 2”); getchar( );}

    void b_t ( )

    { M_c [0] = vb1;

    M_c [1] = vb2;}

    main (void)

    { int c ;

    b_t ( );

    do { puts (“Выбор 1”);

    puts(“Выбор 2”);

    puts(“Выход “);

    cin<<c;

    if (c >=1 && c<=2)

    (*M _c [ c- 1 ]) ( );

    else break;}

    while (1);}