Главная » Просмотр файлов » Конспект лекций по С++

Конспект лекций по С++ (1018900), страница 11

Файл №1018900 Конспект лекций по С++ (Сборник литературы - С и С++) 11 страницаКонспект лекций по С++ (1018900) страница 112017-07-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 11)

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

Программа OVERLOAD.CPP, иллюстрирующая перегрузку функции

ТИПОВЫЕ ВОПРОСЫ С ОТВЕТАМИ



Можно ли в С++ объявлять вложенные функции?

Нет, так как это приводит к большим накладным расходам во время выполнения программы.

В каких случаях нужно использовать статические глобальные переменные?

Можете использовать их, где хотите. Когда вы объявляете статической глобальную переменную (которые я вам не советую использовать вообще), вы даете указание компилятору сделать ее невидимой для функций из других файлов. Такая переменная недоступна из других файлов вашего проекта.

Как расходуется память при обслуживании вызовов рекурсивной функции?

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

ПРАКТИКУМ



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



1. Каков будет результат работы следующей программы? Что вы можете сказать по поводу функции swap?

*/



# include <iostream.h>

void swap(int i, int j)

{

int temp = i;

i = j;

j = temp;

}

int main()

{

int a = 10, b = 3;

swap (a, b);

cout << "а = " << a << " and b = " << b;

return 0;

}

/*

2. Каков будет результат работы следующей программы? Что вы можете сказать по поводу еще одной функции swap?

*/

#include <iostream.h>

void swap(int &i, int &j)

{

int temp = i;

i = j;

j = temp;

}

int main()

{

int a = 10, b = 3;

swap (a, b);

cout << "а = " << a << " and b = " << b;

return 0;

}

/*

3. Что за проблема возникнет со следующими перегруженными функциями?

*/

void inc(int &i)

{

i = i + 1;

}

void inc(int &i, int diff = 1)

{

i = + diff;

}

/*

4. Найдите ошибку в функции.

/*

double volume(double length, double width = 1, double height)

{

return length * width * height

}

/*

5. Найдите ошибку в функции.

*/

void inc (int &i, int diff = 1)

{

i = I + diff;

}

/*

6. В этой программе есть ошибка. Что это за ошибка и как ее исправить?

*/

# include<iostream.h>

int main()

{

double x = 5.2;

cout << x << " ^ 2 = " << sqr(x);

return 0;

}

double sqr( double х)

{ return x * x; }

/*

7. Попробуйте в функции вычисления факториала использовать операцию ?: .

Массивы



// Листинг 6.1. исходный текст программы AVERAGE1.CPP

// Программа иллюстрирует использование одномерных массивов

// при расчете среднего значения.

#include <iostream.h>

const int MAX = 0x1FFF; //64K/8 - максимальный размер массива типа double ***

int main()

{

double array[MAX]; // объявление одномерного массива ***

int num_elem;

// Ввод количества обрабатываемых данных

do

{

cout << "Введите размер массива данных [2 ... "

<< MAX << "]: ";

cin >> num_elem;

cout << endl;

} while (num_elem < 2 || num_elem > MAX);

// Ввод данных

for (int ix = 0; ix < num_elem; ix++)

{

cout << "массив[" << ix << "]: ";

cin >> array[ix];

}

// Расчет среднего значения

double sum = 0;

for (ix = 0; ix < num_elem; ++ix)

sum += array[ix];

cout << endl << "Среднее: " << sum / num_elem << endl;

return 0;



/*

- При объявлении одномерных массивов им можно присвоить начальные значения. Список ИНИЦИАЛИЗАЦИИ должен быть заключен в фигурные скобки, а элементы в нем должны быть разделены запятыми. Можно при инициализации задать данных МЕНЬШЕ, чем размер массива. В этом случае компилятор автоматически присвоит нулевые значения тем элементам, которые вы не инициализировали. И вдобавок, если вы не укажете размерность инициализируемого массива, она будет определена по количеству элементов в списке инициализации.

*/

// Листинг 6.2. исходный текст программы AVERAGE2.CPP

// Программа иллюстрирует использование одномерных массивов

// при расчете среднего значения.

// Данные задаются при инициализации массива.

#include <iostream.h>

const int MAX = 10; //50

int main()

{

double array[MAX] = { 12.2, 45.4, 67.2, 12.2, 34.6, 87.4,

83.6, 12.3, 14.8/*, 55.5*/ };

int num_elem = MAX;

//double array[] = { 12.2, 45.4, 67.2, 12.2, 34.6, 87.4,

// 83.6, 12.3, 14.8, 55.5 };

//int num_elem = sizeof(array) / sizeof(array[0]);

double sum = 0;

for (int ix = 0; ix < num_elem; ++ix)

{

sum += array[ix];

cout << "массив[" << ix << "]: " << array[ix] << endl;

}

cout << endl << "Среднее: " << sum / num_elem << endl;

return 0;

}

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

(Листинг 6.3а. исходный текст программы MINMAX.CPP)

(Листинг 6.3. исходный текст программы MINMAX.CPP)

СОРТИРОВКА массива - ПРИМЕР в файле list6_4cpp.

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

  • ПОИСК в массиве

означает нахождение в массиве элемента, совпадающего с заданным значением. Методы поиска делятся на две группы: для упорядоченных и неупорядоченных массивов. Метод линейного поиска применяется для неупорядоченных массивов, а метод двоичного поиска - для сортированных массивов. (Пример - list6_5.cpp)

Рассмотрим понятия ПАРАМЕТРОВ-ФУНКЦИЙ и УКАЗАТЕЛИ НА ФУНКЦИИ:

(Листинг 6.5. исходный текст программы SEARCH.CPP)

БИБЛИОТЕЧНЫЕ ФУНКЦИИ ПОИСКА и СОРТИРОВКИ в непрерывных массивах:

*/

void *bsearch(const void *key, const void *base, size_t nelem,

size_t width, int (*fcmp)(const void*, const void*));

// key - указатель на искомый элемент,

// возвращаемое значение - указатель на элемент (0 - не найден)

// base - базовый адрес массива

// num - число элементов в массиве

// width - размер элемента

// fcmp - указатель на функцию сравнения элементов массива

// Функция возвращает указатель на элемент, а не значение индекса элемента

// Если элемент не обнаружен, возвращается 0.

// Для вычисления индекса можно использовать следующую формулу:

index = (searchRslt - arrayBase) / sizeof(arrayBase[0]);



void *lfind(const void *key, const void *base, size_t *num,

size_t width, int (*fcmp)(const void *, const void*));

void *lsearch(const void *key, void *base, size_t *num,

size_t width, int (*fcmp)(const void *, const void *));

// - если нет элемента, то он вставляется, поэтому возвращаемое значение

// всегда не ноль.

void qsort(void *base, size_t nelem,

size_t width, int (*fcmp)(const void *, const void *));

/*

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

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

Пример работы с двумерным массивом:

(Листинг 6.6. Исходный текст программы MATRIX1.CPP)

- При объявлении многомерных массивов им можно присвоить начальные значения. Список ИНИЦИАЛИЗАЦИИ должен быть заключен в фигурные скобки, а элементы в нем должны быть разделены запятыми. Можно при инициализации задать данных меньше, чем размер массива, В этом случае компилятор автоматически присвоит нулевые значения тем элементам, для которых вы не указали начальные значения:

(Листинг 6.7. Исходный текст программы MATRIX2.CPP.)

- Объявление многомерных массивов в качестве параметров функции воз- можно в двух формах: массив-параметр фиксированной размерности и массив-параметр неопределенной длины по первому измерению. При объявлении параметром массива фиксированной размерности указывается размер массива по каждому измерению. В этом случае передаваемые функции аргументы должны соответствовать по типу и размеру параметру. Массив-параметр неопределенной длины объявляется с пустыми скобками для первого измерения, означающими, что передаваемый аргумент может быть любого размера по первому измерению. По другим измерениям размеры аргумента и параметра должны совпадать:

(Листинг 6.8. Исходный текст программы MATRIX3.CPP)

Строки и управление вводом/выводом

Здесь подробнее рассматриваются операции консольного ввода/вы­вода. C++, как и его предок — язык С — не определяет операции ввода/вывода как часть языка, а выносит операции консольного ввода/вывода в библиотеки ввода/вывода. Такие библиотеки в основном предназначены для работы в MS-DOS. Рассмотрим небольшую выборку функций ввода/вывода, объявляемых в заголовочных файлах STDIO.H и IOSTREAM.H.

Сегодня мы рассмотрим следующие темы:

  • Форматированный потоковый вывод

  • Потоковый ввод

  • Функция printf

  • Строки в C++

  • Ввод строк

  • Использование стандартной библиотеки функций для работы со строками

  • Присвоение значений строкам

  • Определение длины строки

  • Конкатенация строк

  • Сравнение строк

  • Преобразование строк

  • Перестановка символов в строке в обратном порядке

  • Поиск символа

  • Поиск подстроки

Форматированный потоковый вывод

C++ имеет целое семейство гибких библиотек функций ввода/вывода. Разработчикам языка было ясно, что функции ввода/вывода из STDIO.H, унаследованные из С, имеют ограничения при работе с классами (вы узнаете больше о классах в главе 8)., В результате в C++ было введено понятие потоков. Вспомним, что потоки, которые уже существовали в С, означают последовательность данных, передаваемых из одной части компьютера в дру­гую. В программах, рассматриваемых ранее, вы видели операцию помещения в поток «, например — в стандартный поток вывода, cout. Встречалась вам и операция извлечения из потока », применяемая к стандартному потоку ввода, cin. В этом разделе мы познакомимся с потоковыми функциями width и precision, используемыми при форматировании вывода. Библиотеки потоков C++ содержат большое количество таких функций, позволяющих настроить ваш вывод.

Функция width задает ширину поля вывода. Общая форма использования функции width с потоком cout:

cout.width (widthOf Output);

Функция precision определяет количество значащих цифр после точки для чисел с пла­вающей точкой. Общая форма использования функции precision с потоком cout:

cout.precision(numberOfDigits) ;

Обратимся к примеру, программе OUT1.CPP, исходный текст которой при­веден в листинге 1. Программа, в которую ничего не вводится, просто выво­дит форматированные целые числа, числа с плавающей точкой и символы с использованием функций width и precision.

Листинг 1. Исходный текст программы OUT1.CPP

01

// Программа иллюстрирует потоковый форматированный вывод в C++

02

// с использованием функций width и precision

03

#include <iostream.h>

04

05

int main()

06

{

07

int anInt = 67;

08

unsigned char aByte = 128;

09

char aChar = '@';

10

float aSingle = 355.1112;

11

double aDouble = 1.131112e+002;

12

13

// Вывод простых выражений

14

cout.width(3); cout << int(aByte) << " + ";

15

cout.width(2); cout << anInt << " = ";

16

cout.width(3); cout << (aByte + anInt) << endl;

17

18

cout.precision(3); cout << aSingle << " / ";

19

cout << aDouble << " =";

20

cout.width(7); cout.precision(4); cout << (aSingle / aDouble) << endl;

21

22

cout << "Символьная переменная aChar: "

23

<< aChar << endl;

24

return 0;

25

}

Пример программной сессии:

Характеристики

Тип файла
Документ
Размер
656 Kb
Тип материала
Высшее учебное заведение

Список файлов книги

С и С++ - сборник литературы
C++ Бархатный путь - Марченко А
cpp_001.shtml
cpp_002.shtml
cpp_003.shtml
cpp_004.shtml
cpp_005.shtml
cpp_006.shtml
cpp_007.shtml
cpp_008.shtml
cpp_009.shtml
cpp_010.shtml
cpp_011.shtml
cpp_012.shtml
cpp_013.shtml
cpp_014.shtml
cpp_015.shtml
cpp_016.shtml
cpp_017.shtml
cpp_018.shtml
cpp_019.shtml
cpp_020.shtml
cpp_021.shtml
cpp_022.shtml
cpp_023.shtml
cpp_024.shtml
cpp_025.shtml
cpp_026.shtml
cpp_027.shtml
cpp_030.shtml
cpp_034.shtml
Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7027
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее