bc [-l] [файл...]
Neutrino
-l
файл
операторы if, while и for;
определяемые пользователем функции с параметрами;
локальные переменные.
"hello, world\n"
5^2
ibase
Основание системы счисления для вводимых чисел.obase
Основание системы счисления для выводимых чисел.6 x 10^0 = 6
+ 6 x 10^1 = 60
--
66
Тогда как в случае основания восьмеричной системы счисления значение следующее:6 x 8^0 = 6
+ 6 x 8^1 = 48
--
54
F(=15) x 10^0 = 15
+ F(=15) x 10^1 = 150
---
165
В случае оснований в диапазоне от 2 до 16 формат представлен алфавитом 0–9, A–F.
В случае оснований в диапазоне от 17 до 10000 формат представлен последовательностью десятичных цифр с группами, разделенными пробелами. В этом формате каждая группа представляет значащую цифру. Таким образом, число 61 при obase=20 представляется в следующем виде:
3 1
что следует интерпретировать как:
1 х 20^0 = 1
+ 3 х 20^1 = 60
--
61
a += x
означает то же самое, что и выражениеa = a + x
a = b = 10
b = a++
с семантической точки зрения аналогичноb = a; a = a + 1;
А выражениеb = ++a
с семантической точки зрения аналогичноa = a + 1; b = a;
В следующей таблице приведена сводная информация по старшинству и ассоциативности операторов:
Оператор |
Ассоциативность |
Класс |
++, -- |
Неассоциативный |
(инкpемент, декремент) |
- |
Справа налево |
(одинарный минус) |
^ |
Справа налево |
(возведение в степень) |
*, /, % |
Слева направо |
(мультипликативный) |
+, - |
Слева направо |
(аддитивный) |
==, <=, >=, !=, <, > |
Слева направо |
(сравнительный) |
= +=, -=, *=, /=, %=, ^=, |
Справа налево |
(присваивание) |
if (выражение) оператор
if (i > 2047) {
"i выходит за пределы массива"
i = 2047; /* предельное значение индекса */
}
a[i] /* всегда выводить значение */
while (выражение) оператор
Выполнение оператора осуществляется в соответствии со следующим алгоритмом:Если выражение является ложным, перейти к шагу 4.
Выполнить оператор.
Перейти к шагу 1.
Продолжить далее.
for (выражение1;выражение2;выражение3) оператор
Выполнение оператора осуществляется в соответствии со следующим алгоритмом:выражение1
Если выражение2 является ложным, перейти к шагу 6.
Выполнить оператор.
Выполнить выражение3.
Перейти к шагу 2.
Продолжить далее.
define имя(список_параметров) { тело_функции }
auto [переменная|массив]...Локальные переменные используются вместо глобальных переменных с аналогичными именами на протяжении выполнения функции. Для локальных переменных также выполняется инициализация с присвоением значения 0 (см. приведенный ниже пример).
return
илиreturn [возвр_знач]
/* функция s(b[], n)
* возвращает сумму первых n элементов b[]
*/
define s(b[],n) {
auto t,i; /* следует отметить, что символы ';' используются только в стилистических целях и не являются обязательными. */
if (n > 2048) {
"Длина массива превышает допустимые пределы...\n"
return 0;
}
for (i=0; i < n; i++) {
t += b[i];
}
return t;
}
Имя |
Функция |
Диапазон |
Значение по умолчанию |
scale |
Минимальная точность вычисления. |
0..100 |
0 |
ibase |
Основание системы счисления для ввода. |
числа 2..10000 |
10 |
obase |
Основание системы счисления для вывода. |
числа 2..10000 |
10 |
Для утилиты bc предусмотрены следующие встроенные функции:
Функция |
Возвращаемое значение |
sqrt(выражение) |
Квадратный корень значения. |
length(выражение) |
Количество значащих десятичных цифр в выражении. |
scale(выражение) |
Количество десятичных цифр справа от десятичного маркера. |
Синтаксис |
Функция |
a(выражение) |
Арктангенс (в радианах) |
c(выражение) |
Косинус (в радианах) |
e(выражение) |
Экспоненциальная функция |
k(выражение1,выражение2) |
Функция Бесселя целого порядка |
l(выражение) |
Натуральный логарифм |
s(выражение) |
Синус (в радианах) |
/usr/lib/bclib.b
0
Завершено успешно.> 0
Возникла ошибка.Понятие оператор в случае утилиты bc соответствует либо структурному оператору, либо выражению, за которым следует символ новой строки или точка с запятой (;). Выражение может быть пустым, в таком случае оператор будет представлен только символом новой строки. В результате может возникнуть непредвиденное поведение, как в следующем примере, в котором оператор while никогда не завершается:
a=0
while (a < 100)
a++
a
Несмотря на очевидность цели, символ новой строки в конце оператора while составляет тело цикла, поэтому a не увеличивается. Этот пример имеет следующий эквивалент на языке C:
a=0;
while (a < 100);
Ниже приведены "правильные" варианты:
a=0
while (a < 100) a++
или
while (++a < 100)
или
while (a < 100) {
a++
}
Оператор quit обеспечивает завершение утилиты bc при его обнаружении, но не при попытке его выполнения. Таким образом, выполнение следующего кода приведет к незамедлительному завершению утилиты bc:
if (0) {
quit
}
Это равноценно следующему:
quit