Лист задач 2
Тема занятия: функции. Для каждого фрагмента нужно ответить на вопрос из условия.
Зачем нужна функция
Что делает этот код? Что с ним не так?
int main() {
int a, b, c;
std::cin >> a >> b >> c;
int m1 = a;
if (b > m1) m1 = b;
if (c > m1) m1 = c;
int x, y, z;
std::cin >> x >> y >> z;
int m2 = x;
if (y > m2) m2 = y;
if (z > m2) m2 = z;
std::cout << m1 - m2 << '\n';
return 0;
}Вложенные вызовы
Что выведет программа?
int Twice(int x) {
return 2 * x;
}
int Inc(int x) {
return x + 1;
}
int main() {
std::cout << Twice(Inc(3)) << ' '
<< Inc(Twice(3)) << '\n';
}Забытый return
Что не так с этой функцией?
int Sign(int x) {
if (x > 0) return 1;
if (x < 0) return -1;
}
int main() {
std::cout << Sign(0);
}Високосный год
Напишите функцию:
bool IsLeap(int year);Год високосный, если он делится на 4, но не делится на 100, или если он делится на 400.
IsLeap(2024) // true
IsLeap(1900) // false
IsLeap(2000) // trueОбъявление и определение
Какие фрагменты скомпилируются?
// A
void F();
int main() { F(); }
void F() {}// B
int main() { G(5); }
void G(int x) {}// C
int H(int);
int H(int a);
int H(int b) { return b; }// D
int K(int x) { return x; }
int K(int y) { return y; }Передача по значению
Что выведет программа?
void Reset(int x) {
x = 0;
std::cout << x << ' ';
}
int main() {
int x = 5;
Reset(x);
std::cout << x << '\n';
}Область видимости
Что выведет программа?
int x = 1;
void F() {
std::cout << x;
int x = 2;
std::cout << x;
{
int x = 3;
std::cout << x;
}
std::cout << x << '\n';
}
int main() {
F();
std::cout << x << '\n';
}Обмен значений
Что выведет программа и почему?
void Swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
}
int main() {
int a = 0, b = 1;
Swap(a, b);
std::cout << a << ' ' << b << '\n';
}Значение и ссылка
Что выведет программа?
void A(int x) {
x *= 2;
}
void B(int& x) {
x *= 2;
}
void C(int& x, int y) {
x += y;
y = 0;
}
int main() {
int n = 3;
A(n);
B(n);
C(n, n);
std::cout << n << '\n';
}Выбор перегрузки
Какая версия функции вызовется в каждой строке?
void F(int) { std::cout << "int\n"; }
void F(double) { std::cout << "double\n"; }
void F(char) { std::cout << "char\n"; }
F(5);
F(5.0);
F('5');
F(5.0f);
F(true);Неоднозначный вызов
Что произойдет при каждом вызове?
void G(long x) {}
void G(long long x) {}
G(0);
G(0L);Рекурсивный вывод
Что выведет программа?
void Show(int n) {
if (n == 0) return;
std::cout << n;
Show(n - 1);
std::cout << n;
}
int main() {
Show(3);
}Сумма цифр
Напишите рекурсивную функцию для n >= 0 без циклов:
int SumDigits(int n);SumDigits(1234) // 10
SumDigits(7) // 7static-переменная
Что выведет программа?
void F(int x) {
std::cout << ++x;
{
static int y;
int z = x;
std::cout << ++y << ++z;
}
}
int main() {
F(1);
F(2);
F(3);
}