Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC++(теория).doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
375.3 Кб
Скачать

Задание: в данном примере реализуйте операции умножения и деления Оператор цикла 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) // Запрещается

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]