Упражнения по C/C++ для начинающих

Вычисление факториала циклом в C и C++

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

Введение

Факториал n, обозначаемый n!, - это произведение всех положительных целых чисел от 1 до n; например, 6! = 720. Факториал растёт очень быстро, поэтому, чтобы избежать переполнения, нужен достаточно большой тип, например unsigned long long.

Главное

  • Включите предупреждения компилятора (compiler warnings) и исправьте их все.
  • Хорошо понимайте тип и время жизни (lifetime) каждого значения.
  • Всегда проверяйте входные данные и границы индексов массивов.

Примеры кода на C и C++

C
Запустить →
main.c
#include <stdio.h>
int main(void) {
    int number = 6; unsigned long long result = 1;
    // Multiply each value into the running product.
    for (int value = 2; value <= number; ++value) result *= value;
    printf("%d! = %llu\n", number, result);
}
Результат выполнения
6! = 720
C++
Запустить →
main.cpp
#include <iostream>
int main() {
    int number = 6; unsigned long long result = 1;
    // Multiply each value into the running product.
    for (int value = 2; value <= number; ++value) result *= value;
    std::cout << number << "! = " << result << '\n';
}
Результат выполнения
6! = 720

Сравнение C и C++

Переменная result начинается с 1, поэтому 0! и 1! получаются верными без особой обработки. Цикл по очереди умножает result на каждое число от 2 до number. Спецификатор %llu в printf нужен, чтобы вывести значение типа unsigned long long.

C

C использует небольшие процедурные функции и открыто показывает, как данные представлены в памяти.

C++

C++ по-прежнему позволяет работать на низком уровне, но добавляет библиотечные типы и более безопасные абстракции.

Упражнения для практики

Запустите обе версии, а затем измените код, чтобы увидеть разницу в безопасности, которую даёт каждый язык.

  • Проверьте неверный ввод и граничные значения.
  • Скомпилируйте с флагами -Wall -Wextra -Wpedantic, чтобы включить больше предупреждений.
  • Вынесите общие объявления в заголовочный файл, а реализацию в отдельный файл.

Попрактикуйтесь на задаче

Примените материал этого урока к реальной задаче. Каждая задача запускается в браузере, с мгновенными тестами и разбором от ИИ.

Все задачи