Язык Си в примерах/Учимся складывать: различия между версиями
Содержимое удалено Содержимое добавлено
→Вариант «дробный»: Исправлена ошибка при написании кода. |
DannyS712 (обсуждение | вклад) м <source> -> <syntaxhighlight> (phab:T237267) |
||
Строка 18:
{{Якорь |plus.c}}
<
#include <assert.h>
#include <stdio.h>
Строка 30:
return 0;
}
</syntaxhighlight>
{{Якорь |printf}}
Рассмотрим выполнение этой программы почти с ее завершения — вызова функции <code >printf</code>.<ref name="fprintf" /> Данная функция выведет целое число в десятичной форме (согласно ''указателю преобразования'' <code >%d</code>), завершая вывод [[w:Перевод строки |переводом строки]] (<code >\n</code>).
Число, которое будет выведено, является результатом вычисления выражения <
{{Якорь |scanf}}
Вводимые пользователем числа помещаются в эти переменные функцией <code >scanf</code>, вызываемой в коде выше как <
Как и <code >printf</code>, функция <code >scanf</code> ''объявлена'' в ''заголовке'' (англ. {{lang |en|header}}) <code >stdio.h</code>.<ref name="stdio.h" />
Строка 45:
{{Якорь |assert}}
Для проверки соответствия ввода пользователя требованиям программы мы ''сохраняем'' (<code >=</code>) результат выполнения <code >scanf</code> — количество успешно измененных переменных — в целочисленной переменной с именем <var >r</var> (<
<small >Действие ''макроподстановки'' <code >assert</code> заключается в ''вычислении'' выражения, переданного ей первым (и единственным) аргументом и ''аварийном завершении'' программы в случае, если полученное значение — ноль («логическая ложь».)<ref name="assert" /></small>
Строка 57:
{{Якорь |plus-fp.c}}
<
#include <assert.h>
#include <stdio.h>
Строка 70:
return 0;
}
</syntaxhighlight>
Как видно, в этом случае изменяются лишь тип переменных <var >a</var>, <var >b</var> (<code >int</code> → <code >double</code>) и указатели преобразований (<code >%d</code> → <code >%lg</code>.)
Строка 90:
{{Якорь |*}}
Для обращения к ячейке памяти по ссылке используется унарный оператор <code >*</code>. Так, выражение <
== Вариант «произвольный» ==
Строка 100:
Код имеет следующие отличия от [[#plus.c |исходного]] варианта:
# ввод-вывод чисел произвольной разрядности выполняется функциями <code >gmp_scanf</code> и <code >gmp_printf</code> — ''определенными'' GNU MP и ''объявленными'' в <code >gmp.h</code>; заголовок <code >stdio.h</code> не требуется;
# вместо оператора сложения <code >+</code> используется вызов функции <
# переменные GNU MP требуют обязательной инициализации, которая в примере выполнена функцией <code >mpz_inits ()</code>;
# тип используемых для вычисления переменных — <code >mpz_t</code>.
{{Якорь |plus-imp.c}}
<
#include <assert.h>
#include <gmp.h>
Строка 122:
return 0;
}
</syntaxhighlight>
== Вариант «арифметический» ==
Строка 129:
{{Якорь |arith-if.c}}
<
#include <assert.h>
#include <stdio.h>
Строка 154:
return 0;
}
</syntaxhighlight>
{{Якорь |if}}
Строка 179:
{{Якорь |arith.c}}
<
#include <assert.h>
#include <stdio.h>
Строка 202:
return 0;
}
</syntaxhighlight>
В этом варианте, код вновь содержит те же самые строковые константы, что и в предыдущем, однако используется лишь один вызов функции <code>printf</code> — первым аргументом которой (в зависимости от значения переменной <code>b</code>) окажется одна из этих констант.
|