Не так давно мы разбирали программу, которая высчитывала треугольник Паскаля на языке C#. Теперь мы сделаем то же самое, но для языка Си.
С формулами и и определением треугольника Паскаля можете ознакомиться вот в этой статье.
Для начала не забываем подключить все нужные библиотеки:
1 2 3 4 |
#include <stdlib.h> #include <conio.h> #include <string.h> #include <locale.h> |
Нам понадобятся следующие библиотеки:
- <stdlib.h> — отвечает за выделение памяти и контроль процесса компиляции (стандартная, наравне с «stdafx.h»).
- <conio.h> — отвечает за создание и вывод консоли.
- <string.h> — отвечает за работу со строками.
- <locale.h> — отвечает за локализацию. Благодаря ей мы сможем писать в консоли на русском языке.
Ниже мы объявляем функцию — подпрограмму. В нашем случае эта функция будет считать факториалы:
1 |
long factorial(int); |
long — обозначение того, что у нашей функции будет тип данных long int, то есть будет принимать числа от -2 147 483 648 до 2 147 483 647.
factorial — это имя нашей функции. Оно может быть любым.
(int) — означает, что в функцию будут поступать переменные типа int.
Теперь, чтобы подключить русскую локализацию, пишем в функции main:
1 |
setlocale(LC_ALL, "Rus"); |
Затем объявляем некоторые целочисленные переменные, которые понадобятся нам впоследствии:
1 |
int i, n, c; |
Далее пишем следующее:
1 2 |
printf("Введите нужное количество строк треугольника Паскаля:\n"); scanf_s("%i", &n); |
Первой строкой мы выводим на консоль текст с просьбой ввести число.
Во второй строке мы считываем то, что написал нам пользователь. %i означает, что введённое пользователем число будет целочисленным (формата int). &n— это переменная с именем n, в которую мы запишем полученные данные.
Теперь оформляем наш код так, чтобы при выводе у нас получился треугольник, например, вот такой:
В коде выглядеть это будет вот так:
1 2 3 4 5 6 7 |
for (i = 0; i < n; i++){ //пока не кончатся строки, количество которых указал пользователь for (c = 0; c <= (n - i); c++)//в каждой строке от левой стороны консоли происходит n-i отступов (пробелов); чем ниже строка, тем меньше отступ printf(" "); for (c = 0; c <= i; c++) printf("%ld ", factorial(i) / (factorial(c)*factorial(i - c))); //формула вычисления элементов треугольника printf("\n"); //начинается новая строка } |
Не забываем после этого всего написать:
1 |
_getch(); |
Это нужно для того, чтобы консоль не закрывалась раньше времени.
Теперь остаётся последнее. Мы объявили функцию, в цикле эта функция также присутствует, но пока что её самой нет. Давайте создадим её. Делается это вне тела main.
1 2 3 4 5 6 7 |
long factorial(int n) { float i, x = 1; for (i = 1; i <= n; i++) x *= i; return x; } |
Функция принимает аргумент — значение переменной n, вычисляет факториал n!, записывая результат в переменную x, и возвращает его.
Вот и всё, наша программа готова!
Исходник с комментариями тут:
Скачать исходник
Поделиться в соц. сетях: