Язык Си в примерах/Учимся складывать: различия между версиями
Нет описания правки |
Нет описания правки |
||
Строка 21: | Строка 21: | ||
К первому типу относятся |
К первому типу относятся |
||
<source lang="c"> |
<source lang="c"> |
||
char, |
|||
short, |
|||
int, |
|||
long, |
|||
unsigned char, |
|||
unsigned int, |
|||
unsigned long . |
|||
</source> |
</source> |
||
Версия от 23:43, 26 марта 2008
- Компиляция программ
- Простейшая программа «Hello World»
- Учимся складывать
- Максимум
- Таблица умножения
- ASCII-коды символов
- Верхний регистр
- Скобочки
- Факториал
- Степень числа
- Треугольник Паскаля
- Корень уравнения
- Система счисления
- Сортировка
- Библиотека complex
- Сортировка на основе qsort
- RPN-калькулятор
- RPN-калькулятор на Bison
- Простая грамматика
- Задача «Расчёт сопротивления схемы»
- Простая реализация конечного автомата
- Использование аргументов командной строки
- Чтение и печать без использования stdio
- Декодирование звукозаписи в формате ADX
- Другие примеры
Разнообразные вычисления — моделирование, решение алгебраических и дифференциальных уравнений — это то, для чего и создавались первые компьютеры. Давайте и мы научимся использовать компьютер для вычислений. Начнём со сложения двух чисел.
В нашей программе будут две целочисленные переменные: а и b. Это две ячейки памяти, в которых могут хранится целые числа из определенного диапазона значений (в 32-разрядной архитектуре от до ).
Переменные объявляются в начале тела функции main — после открывающей фигурной скобки. Объявление начинается со слова, обозначающего тип переменных, имена которых перечисляются через запятую после обозначения типа.
int a, b;
В языке Си есть несколько типов данных. Они делятся на две группы: целые типы и типы с плавающей точкой. К первому типу относятся
char,
short,
int,
long,
unsigned char,
unsigned int,
unsigned long .
Ко второму —
float, double.
Вот текст программы, складывающей два введенных целых числа:
#include <stdio.h>
int main () {
int a, b;
printf ("Введите два числа: ");
scanf ("%d%d", &a, &b);
printf ("%d\n", a + b);
return 0;
}
Функция scanf, также как и printf, определена в библиотеке stdio. Эта функция считывает данные, которые пользователь (тот, кто запустит вашу программу) вводит с клавиатуры. Слово scan означает «считывать данные», а print — «печатать данные». Буква «f» в конце соответствует первой букве английского слова «formated», то есть scanf и printf есть функции для форматированного ввода и вывода данных.
Первый аргумент у функции scanf — это "%d%d" (то, что стоит между открывающей скобкой и первой запятой). Первый аргумент является описанием формата входных данных, то есть описание типа данных, которые (как мы ожидаем) введёт пользователь. В этой программе мы ожидаем, что пользователь введет два целых числа.
Символ % служебный, с него начинается описание формата. Обычно, после него идет один или два символа, определяющих тип входных данных. Формат "%d" соответствует целому числу в десятичной системе счисления (decimal integer). Если вы напишете "%x", то функция будет ожидать ввода целого числа, записанного в шестнадцатиричной системе счисления.
Подробнее об спецификациях форматах ввода/вывода можно прочитать в документации (для Unix систем):
bash$ man 3 printf bash$ man 3 scanf
Первый аргумент команды man есть номер раздела документации. Помощь по языкам Си/Си++ находится в третьем разделе.
Следует отметить, что для каждого типа данных существует несколько форматов, и наоборот, для разных типов можно использовать один и тот же формат[1].
Приведенная программа умеет складывать только целые числа. Если вы хотите складывать действительные числа, то эту программу нужно несколько модифицировать. Ниже приведена программа, которая считывает два действительных числа и выводит результат четырех арифметических операций: сложения, вычитания, умножения и деления. Причём, программа выводит результаты вычислений два раза — сначала в обычном виде, а потом со специальным форматированием. Формат "%10.3lf" соответствует выводу числа типа double, при котором под запись числа числа выделяется ровно 10 позиций (если это возможно), а после запятой пишется ровно три знака. Равнение происходит по правому краю.
/* Программа "Арифметические операции с числами с плавающей точкой" */
#include <stdio.h>
int main () {
double a, b;
printf ("Введите два числа: ");
while(scanf ("%lf%lf", &a, &b) == 2 ) {
printf ("%lf %lf %lf %lf\n", a + b, a - b, a * b, a / b );
printf ("a + b=%10.3lf\n a - b=%10.3lf\n a * b=%10.3lf\n a / b=%10.3lf\n",
a + b, a - b, a * b, a / b );
}
return 0;
}
В этой программе мы встречаемся с оператором while. Конструкция
while ( A ) B;
означает буквально следующее:
«Пока выполнено условие A делать B.»
или, другими словами,
«Выполнять в цикле B, проверяя перед каждой итерацией, что выполнено условие A.»
В нашем случае A есть
scanf("%lf%lf", &a, &b) == 2.
Что соответствует логическому выражению:
«пользователь ввёл два действительных числа, и они удачно считаны в переменные a и b»
Таким образом, эта программа будет считывать пары чисел и выводить результаты арифметических операций, пока пользователь не введёт что-нибудь непохожее на число.
Цикл while закончится тогда, когда функция scanf не сможет успешно считать два числа.
Заметьте, что после каждой команды стоит точка с запятой. Одна из самых популярных синтаксических ошибок начинающих программистов — это не ставить точку c запятой в конце команды.
Примечания
- ^ Переменные типа char, short, int можно печатать используя формат "%d". Также этот формат можно использовать для печати значений указателей (номера ячейки памяти).