Язык Си в примерах/Учимся складывать: различия между версиями

Перейти к навигации Перейти к поиску
м
Замена <tt /> на <code />; избыточные <big /> и <font /> вокруг <source />; {{SUBPAGENAME}}; пробелы.
(Использовано «:» для выделения пояснений (был: пробел → <pre />.))
м (Замена <tt /> на <code />; избыточные <big /> и <font /> вокруг <source />; {{SUBPAGENAME}}; пробелы.)
{{Содержание «Язык Си в примерах»}}
 
Разнообразные вычисления &mdash;
моделирование, решение алгебраических и дифференциальных уравнений &mdash;
это то, для чего и создавались первые компьютеры.
Начнём со сложения двух чисел.
 
В нашей программе будут две целочисленные переменные: <ttcode>а</ttcode> и <ttcode>b</ttcode>. Это
две ячейки памяти, в которых могут храниться целые числа из определенного диапазона значений
(в [[w:Машинное слово|32-разрядной архитектуре]] от <math>-2^{31}</math> до <math>2^{31}-1</math>).
 
Переменные объявляются в начале тела функции <ttcode>main</ttcode> &mdash; после открывающей фигурной скобки.
Объявление начинается со слова, обозначающего тип переменных, имена которых перечисляются через запятую
после обозначения типа.
<big><source lang="c">
int a, b;
</source></big>
 
В языке Си есть несколько типов числовых данных. Они делятся на две группы: целые числа и числа с плавающей точкой.
 
К первой группе относятся:
* <ttcode>char</ttcode> — один байт, обычно 8 бит.
* <ttcode>short</ttcode> — короткое число, чаще всего в 2 раза короче, чем int.
* <ttcode>int</ttcode> — обычное число, на x86 32 бита.
* <ttcode>long</ttcode> — длинное число, на x86 32 бита, но на 64-битных x86-системах в зависимости от компилятора может быть как 32 бита, так и 64.
* <ttcode>long long</ttcode> — очень длинное число, обычно 64 бита.
 
Целые числа могут быть знаковые (как положительные, так и отрицательные) и беззнаковые (только положительные). По умолчанию числа знаковые, и чтобы сделать их беззнаковыми, необходимо написать слово <ttcode>unsigned</ttcode> перед названием типа.
 
Точный размер целых чисел указан в заголовочном файле <ttcode>limits</ttcode>.
 
Ко второй группе относятся:
* <ttcode>float</ttcode> — 32 бита.
* <ttcode>double</ttcode> — 64 бита.
 
Особые величины этих типов даны в заголовке <ttcode>float</ttcode>.
 
Вот текст программы, складывающей два введенных целых числа:
<big><source lang="c">
#include <stdio.h>
int main () {
return 0;
}
</source></big>
 
Функция <ttcode>scanf</ttcode>, также как и <ttcode>printf</ttcode>, определена в библиотеке <ttcode>stdio</ttcode>.
Эта функция считывает данные, которые пользователь (тот, кто
запустит вашу программу) вводит с клавиатуры. Слово <ttcode>scan</ttcode>
означает «считывать данные», а <ttcode>print</ttcode> &mdash; «печатать данные».
Буква «f» в конце соответствует первой букве английского слова
«formatted», то есть <ttcode>scanf</ttcode> и <ttcode>printf</ttcode> есть функции для
форматированного ввода и вывода данных.
 
Первый аргумент у функции <ttcode>scanf</ttcode> &mdash; это <ttcode>"%d%d"</ttcode> (то, что стоит между открывающей скобкой и первой запятой).
Первый аргумент является описанием формата входных данных, то есть описание типа данных, которые (как мы ожидаем) введёт пользователь.
Второй и третий аргументы являются указателями (создаются символом «&amp;») на переменные <ttcode>a</ttcode> и <ttcode>b</ttcode>. Указатели нужны для того, чтобы передать функции не значения этих переменных, а их адреса — местоположения в памяти, по которым функция будет записывать значения.
В этой программе мы ожидаем, что пользователь введет два целых числа.
 
Обычно, после него идет один или два символа, определяющих тип входных данных. Формат "%d" соответствует целому числу в десятичной системе счисления (decimal integer). Если вы напишете "%x", то функция будет ожидать ввода целого числа, записанного в шестнадцатиричной системе счисления.
 
Подробнее об спецификациях форматах ввода/вывода можно прочитать в документации (для Unix систем):
 
bash$ man 3 printf
bash$ man 3 scanf
 
Первый аргумент команды <ttcode>man</ttcode> есть номер раздела документации.
Помощь по языкам Си/Си++ находится в третьем разделе.
 
Причём, программа выводит результаты вычислений два раза &mdash; сначала
в обычном виде, а потом со специальным форматированием.
Формат <ttcode>"%10.3lf"</ttcode> соответствует выводу числа типа <ttcode>double</ttcode>,
при котором под запись числа выделяется ровно 10 позиций (если это возможно),
а после запятой пишется ровно три знака. Равнение происходит по правому краю.
 
<big><source lang="c">
/* Программа "Арифметические операции с числами с плавающей точкой" */
#include <stdio.h>
return 0;
}
</source></big>
 
В этой программе мы встречаемся с оператором <ttcode>while</ttcode>. Конструкция
<big><source lang="c">
while ( A ) B;
</source></big>
 
означает буквально следующее:
 
: Пока выполнено условие <ttcode>A</ttcode> делать <ttcode>B</ttcode>.
 
или, другими словами,
 
: Выполнять в цикле <ttcode>B</ttcode>, проверяя перед каждой итерацией, что выполнено условие <ttcode>A</ttcode>.
 
В нашем случае <ttcode>A</ttcode> есть
 
scanf("%lf%lf", &a, &b) == 2.
арифметических операций, пока пользователь не введёт что-нибудь непохожее на число.
 
Цикл <ttcode>while</ttcode> закончится тогда, когда функция <ttcode>scanf</ttcode> не сможет успешно считать два числа.
 
Заметьте, что после каждой команды стоит точка с запятой.
==Примечания==
 
# {{note|char}} Переменные типа <ttcode>char</ttcode>, <ttcode>short</ttcode>, <ttcode>int</ttcode> можно печатать, используя формат "%d". Также этот формат можно использовать для печати значений [[Язык Си в примерах/Указатели в языке Си|указателей]] (номера ячейки памяти).
[[Категория:Язык Си в примерах|Учимся складывать{{SUBPAGENAME}}]]
398

правок

Навигация