
- •Методическое материалы по курсу
- •Cанкт-Петербург
- •Оглавление
- •Введение.
- •Задание: Разобраться в коде и вывести на консоль еще одну фразу: "It's a first program"
- •Типы данных и правила их применения:
- •Операции
- •Управляющие операторы
- •Задание: в данном примере реализуйте операции умножения и деления Оператор цикла for (;;)
- •Оператор цикла do-while
- •Задание: к примеру добавьте перегруженную функцию для суммирования чисел типа double, и проверьте ее работу
- •Модульная организация программы
- •Массивы
- •Задание: добавьте еще один элемент в массив при инициализации и посмотрите его размерность. В цикле увеличьте значение всех элементов массива на 10 и напечатайте его заново. Работа со строками
- •Ссылочный тип данных
- •Задание: Объявить еще одну переменную-ссылку на I и, изменив ее значение, пронаблюдать, как изменилось значение переменной I Работа с файлами
- •Взаимодействие с ассемблером
- •Обработка ошибок и исключений
- •Директивы препроцессора: Макросы и Условные директивы
- •Структуры
- •Задание : Добавить в сруктуру еще одно данное (стоимость модели) типа int, в коде функции main() задать значение этого данного переменной–структуры, и напечатать его.
- •Объектно-ориентированное программирование (ооп)
- •Терминология ооп
- •Структура как простейший класс
- •Конструкторы и деструкторы
- •Перегрузка методов класса
- •Дружественные функции и классы
- •Указатель this
- •Перегрузка операций
- •Множественное наследование
- •Если осталось время – разобраться в иерархии классов и принципов построения
- •Список литературы
Задание: в данном примере реализуйте операции умножения и деления Оператор цикла for (;;)
Синтаксис: for(инициализация; проверка_условия; коррекция)
действие;
int isum = 0;
for(int i = 1; i <= 5; i++) // Цикл для нахождения суммы первых пяти чисел
isum += i;
(\10FOR)
int irow, icol; // Переменные: линии и колонки
for (irow = 1; irow <= 4; irow++) { // Цикл по строкам
cout << "\n" << irow << " -- "; // Перевод строки
for (icol = 1; icol <=5; icol++) // Цикл по колонкам
cout << setw(5) << icol*irow; // Печать произведения
}
Задание: В данном примере напечатайте таблицу умножения полностью (10*10) и добавьте печать пустой линии между строками чисел. В этой же программе создайте еще один цикл, в нем найдите сумму целых чисел от 1 до 100 и напечатайте ее после таблицы умножения.
Оператор цикла while
Синтаксис: while(проверка_условия)
действие;
(\11WHILE)
int i = 1;
while ( i!=0 ) { // Цикл выполняется пока пользователь не введет 0
cout << "\nEnter a number (0 - end): "; // Введите число (0 - конец)
cin >> i;
cout << "\nSquare of " << i << " is " << i*i; // Печать квадрата числа
}
Оператор цикла do-while
Синтаксис: do
действие;
while(проверка_условия)
int i;
do { // Цикл выполнится по крайней мере один раз
cout << "\nEnter a number (0 - end)"; // Введите число (0 - конец)
cin >> i;
cout << "\nSquare of " << i << " is " << i*i; // Печать квадрата числа
} while ( i!=0 ); // пока пользователь не введет 0
В любом цикле можно использовать оператор break для выхода из его, continue – для перехода к следующей итерации цикла
int i;
do { // Цикл выполнится по крайней мере один раз
cout << "\nEnter a number (0 - end)"; // Введите число (0 - конец)
cin >> i;
if (i==0) // Если пользователь ввел число 0
break; // то выйти из бесконечного цикла
if (i>10000) { // Если пользователь ввел число больше 10000,
cout << "\nPlease, enter value lower than 10000";
continue; // перейти к следующей итерации,
}
cout << "\nSquare of " << i << " is " << i*i; // Печать квадрата числа
} while ( 1 ); // Бесконечный цикл
Использования функций в С++
Согласно стандарту ANSI C все функции в программе должны иметь прототипы, либо в программе, либо в заголовочном файле для объявления компилятору имени функции, количества и типов используемых аргументов, типа возвращаемого значения. Общее правило: функция должна быть объявлена (через прототип) или реализована до (выше в модуле) ее использования (\12FUNC)
#include <iostream>
using namespace std;
int iadder(int ix, int iy); // Описание прототипа функции
int main()
{
int ia = 23, ib = 13, ic;
ic = iadder(ia, ib); // Вызов функции с аргументами
cout << "The sum is: " << ic << endl; // Вывод результата
return(0);
}
int iadder(int ix, int iy) // заголовок функции
{
int iz;
iz = ix + iy; // Суммирование аргументов
return (iz); // Возврат результата сложения
}
Задание: Изменитте пример \12FUNC так, чтобы функция принимала в качестве аргументов не два, а три целых числа, и выводила их сумму. Дололнительно: вычисления проведите без промежуточной переменной iz.
Функция может возвращать единственное значение любого простого типа (или void, если ничего не возвращается), и принимать параметрами любой тип. Список параметров в объявлении или заголовке функции называется списком формальных параметров, список параметров в момент вызова – списком фактических параметров.
Если функция не возвращает значений или не содержит аргументов перед именем функции или в скобках использовать void не обязательно, но считается целесообразным
Кроме переменных и указателей имеется третий тип аргументов функций - ссылочный тип (&), который задает адрес, но не требует операции обращения по адресу (\13REFER):
#include <iostream>
using namespace std;
void iadder(int ix, int iy, int &iz, int &ir); // Описание прототипа функции
int main()
{
int ia = 23, ib = 13, ic, id;
iadder(ia, ib, ic, id); // Вызов функции с аргументами
cout << "The sum is: " << ic << endl; // Вывод результата сложения
cout << "The difference is: " << id << endl; // Вывод результата вычитания
return(0);
}
void iadder(int ix, int iy, int &iz, int &ir) // заголовок функции
{
iz = ix + iy; // Суммирование аргументов
ir = ix - iy; // Вычитание аргументов
return ;
}
В списке параметров можно указывать значения по умолчанию, которые будут подставлены при отсутствии параметра при вызове функции (\14DEFLT)
void yourfunc(int it, float fu=4.2, int ic=10) // 2 и 3 аргументы заданы по умолчанию
{
cout << it << endl << fu << endl << ic << endl << endl;
}
Int main()
{
yourfunc(1,2,3); // Вызов со всеми параметрами
yourfunc(1,2); // Вызов без последнего параметра
yourfunc(1); // Вызов без двух последних параметров
// yourfunc(1,,3); // такой вызов не верен
// yourfunc(); // такой вызов не верен (Первый параметр обязателен)
return(0);
}
Задание: в вышеописанном примере снимите комментарии с двух неверных вызовов функкции, посмотрите возникающие ошибки, назначьте для первого аргумента функции любое значение по умолчанию, какой из закомментаренных вызовов будет работать?
inline - директива компилятору на встраивание тела функции в место вызова, но компилятор может и проигнорировать это указание
Перегрузка (overloading) позволяет использовать одно и то же имя функции для нескольких ее прототипов. Затем различные прототипы распознаются не по имени, а по типу и списку аргументов (\15OVERLD), например:
int adder(int ix, int iy) // Функция, складывающая целые числа
{
return (ix + iy); // Возвратить сумму
}
float adder(float fx, float fy) // Функция, складывающая дробные числа
{
return (fx + fy);
}
int main()
{
int isum, ix = 1, iy = 2;
float fsum, fx = 1.1, fy = 2.2;
isum = adder(ix, iy); // Вызовется первая функция
fsum = adder(fx, fy); // Вызовется вторая функция
cout << "The sum of integers is :" << isum << endl; // вывод результатов
cout << "The sum of floats is : " << fsum << endl;
return(0);
}
Нельзя перегружать функции, отличающиеся только типом, а не аргументами
int adder(int ix, int iy);
float adder(int ix, int iy); // Недопустимая перегрузка
Нельзя перегружать функции, с одинаковым типом аргументов, например
int yourfunc(int number)
int yourfunc(int &value) // Запрещается