
Уроки C-программирования. (автор Климант Юрий Викторович)
"...НАУЧИТЬ НЕВОЗМОЖНО...
можно только НАУЧИТЬСЯ!"
Урок 32: " Операции языка С. Арифметические операции. "
1. Цель урока:
Сегодня мы рассмотрим тему: операции языка С. Это могут быть арифметические и логические операции, операции отношения, поразрядные (побитовые) операции. Но на сегодняшнем уроке мы рассмотрим только арифметические операции.
Вы уже имели достаточное количество уроков, чтобы познакомиться в операциями в языке С и понимать их. Вы пользовалсь разными операциями в своих программах. Поэтому новая тема Вас не должна затрудять и будет Вам понятна. Но прежде всего вспомним такие очень важные понятия, как понятия: программы, оператора и операндов.
2. Понятия программы, оператора и операндов языка программирования.
Язык С имеет очень много операций. Каждая операция обозначается вполне определенным символом (знаком или комбинацией знаков). Введенное обозначение операции называют оператором языка программирования. Оператор сообщают компилятору, какое необходимо производить действие над операндами.
Следующие общепринятые определения надлежит хорошо помнить, понимать и знать:
Оператор - это действие или команда, которую может выполнить компьютер (вернее просто язык программирования).
Операнды - это данные, необходимые для выполнения оператора рассматриваемого языка.
Программа это запись алгоритма на языке компьютера (на языке программирования).
В этом опеределении акцентируется внимание именно на том, что без алгоритма нет программы, и стало быть без алгоритма не работает компьютер. Ведь жизнь компьютеру способна дать только программа. Стало быть эта компьютерная жизнь состоит в исполнении программ, то есть алгоритмов. Если жизнь часов в движении стрелок, то компьютер живет алгоритмами, выполняя программы. Это, естественно, только мое сугубо субъективное сравнение. Возможно не очень удачное. Но оно просится в голову и выплескивается в строках урока.
С другой стороны, программа состоит из строк. Каждая строка начинается с номера строки или адреса команды, за которым следует оператор(то есть сама команда). За оператором следуют операнды (или данные). Такова в целом структура программы. Это тоже нужно хорошо помнить и понимать.
3. Некоторые обозначения операций, принятые в языке С.
Приведем примеры обозначения операций, принятые в языке С:
- (..) - открывающая и закрывающая скобки. Показывают старшинство выполнения действий в скобках.
- . обыкновенная десятичная точка. Отделяет целую часть от дробной части числа.
- ++ увеличение на единицу (increment).
- -- уменьшение на единицу (decrement).
- + сложение.
- - вычитание.
- * умножение.
- / деление.
- > больше.
-
- = равно.
- == не равно.
- && логическое умножение или конъюнкция.
- || логическое сложение или дизъюнкция.
- # знак операции препроцессора.
- и так далее...
Каждая операция в языке С имеет вполне определенное число операндов (необходимых данных). Так, например, если требуется всего один операнд, то такую операцию называют унарной.
Если же для выполнения операции необходимы два операнда, то такая операция носит название бинарной операции.
В языке С существует только одна операция, которая требует три операнда. Это операция "?", которая будет рассмотрена нами попозже.
Отметим, что каждая операция имеет определенные типы данных, то есть операндов. Например, если необходимо выполнить побитовый сдвиг данных, то операнды должны быть целочисленными. аналогичное относится и к бинарным операциям. Кроме того, нужно еще знать, что, например, операция сложения выполняется в направлении слева направо. А операция присвоения, наоборот, выполняется справа налево.
Далее, каждая операция имеет свой приоритет. Так, например, сложение имеет более низкий приоритет по отношению к умножению или делению. В то же время сложение имеет более высокий приоритет по отношению к операции присвоения. Как правило унарные операции имеют более высокий приоритет, чем бинарные.
Отметим еще, что каждое выражение имеет определенное значение, то есть значит свой тип выражения. Рассмотрим теперь арифметические операции и их особенности.
4. Арифметические операции и их особенности в языке С.
В языке С к арифметическим операциям относятся следующие операции:
- - вычитание или унарный минус;
- + сложение;
- * умножение;
- / деление;
- % деление по модулю;
- ++ увеличение на единицу;
- -- уменьшение на единицу;
Операции сложения, вычитания, умножения и деления действуют так же, как в большинстве алгоритмических языков программирования. операции выполняются так: сначала вычисляется значение левого выражения (операнда), затем вычисляется значение выражения, стоящего справа от знака действия. Далее, в том случае, когда операнды имеют общий тип данных, этот же тип имеет и результат. Поэтому, если применяется деление "/" к целым числам, например, 11/3, то результат тоже будет целым, то есть в данном случае 3. А выражение 1/2 в этом случае будет равно нулю.
Операция "%" деление по модулю дает остаток от целочисленного деления. Она может применяться к целочисленным переменным. Теперь решим небольую задачу.
Задача 1: Вычислить целую часть и остаток отделения двух целых чисел. Написать программу c.c.
#include
#include
#include
// Пример программы вычисления
// целой части и остатка от деления целых чисел
main()
{
char str[50];
int a, b, x, y;
// Очистить экран
textbackground(3);
textcolor(15);
clrscr();
// Ввод целых чисел a, b
CharToOem("Введите два целых числа a, b \n", str);
printf(str);
scanf("%d %d", &a, &b);
// Вычисление остатка и целой части
// от деления двух целых чисел
y=a%b;
x=a/b;
CharToOem("\n Целая часть=%d Остаток=%d \n", str);
printf(str, x, y);
// Конец программы
CharToOem("\n Для выхода нажмите любую клавишу", str);
printf(str);
getch(); }
На рисунке показан текст работающей программы в окне компилятора Borland C++ ver 5.1.

Далее показано окно программы, в котором Вы видите инструкцию, приглашающую ввести два исходные целые числа "a" и "b".

На следующем рисунке Вы видите результат решения по программе c.c

Решим еще одну задачу для того, чтобы понять особенности использования в языке С операторов "++" и "--".
Задача 2: Написать программу, которая будет давать один и тот же результат, но при этом будут использованы различные выражения, такие, как: x = x + 1; ++x=; и x++.
#include <stdio.h>
#include <conio.h>
#include <windows.h>
// Пример программы, использующей для вычислений
// выражения: x = x + 1; ++x; и x++
main()
{
char str[50];
int x=5;
int y=60;
// Очистить экран
textbackground(2);
textcolor(4);
clrscr();
// Вычисление x++ и ++y
x++;
++y;
CharToOem("x=%d y=%d \n", str);
printf(str, x, y);
CharToOem("x=%d y=%d \n", str);
printf(str, x++, ++y);
// Конец программы
CharToOem("\n Для выхода нажмите любую клавишу", str);
printf(str);
getch();
}
На рисунке показан текст работающей программы в окне компилятора Borland C++ ver 5.1.

На следующем рисунке Вы видите результат решения по программе c02.c

Легко увидеть, что значение x не изменилось при втором обращении к функции printf. При этом значение y увеличилось на 1. На самом же деле значене x тоже увеличилось на 1. Однако же только после выхода из функции printf. В чем же состоит различие в использовании операторов ++x c префиксной формой увеличения x и x++ с постфиксной формой увеличения x?
В выражении x++ значение переменной x сначала используется и только вслед за этим оно увеличивается на 1. Напротив в выражении ++x переменная x сначала увеличивается на 1, а уж только потом ее значение используется в вычислениях.
В завершение урока укажем на старшинство следующих операций:
- ++ и -- ;
- - унарный минус;
- *, /, %;
- +, - .
Запомните, что операции, одинаковые по старшинству, выполняются в порядке слева направо. Для того, чтобы изменить порядок выполнения операций используются скобки.
На этом у меня сегодня все. Урок окончен.
Пишите мне. Я попрежнему жду Ваших дельных откликов, интересных, умных писем, рецензий, справедливых, доброжелательных замечаний, обоснованных пожеланий о том, как улучшить мой сайт и нашу совместную работу. В любом случае Вы должны убедить меня в том, что Вы правы и хотите, чтобы было лучше.
С уважением к Вам
Юрий Викторович Климант,
учитель информатики и программирования Краснодарского Центра Образования.
Рекомендуемая литература:
- Шилдт, Герберт. Полный справочник по С, 4-е издание. : Пер. с англ. - М,: Издательский дом "Вильямс", 2002. - 704 с. : ил. - Парал.т ит. англ.
- Павловская Т.А. С/C++. Программирование на языке высокого уровня. / Т.А. Павловская. - СПб.: Питер, 2002. - 464 с.: ил.
- Культин Н.Б. C/C++ в задачах и примерах. - СПб.:БХВ-Петербург, 2001. - 288 с.: ил.
- Березин Б.И., Березин С.Б. Начальный курс С и С++. - М,: ДИАЛОГ_МИФИ, 1996. - 288 с.
- Подбельский В.В., Фомин С.С. Программирование на языке Си: Учеб. пособие. - М.: Финансы и статистика, 1998. - 600 с.: ил.
- Франка П. С++: учебный курс. - СПб.: Питер, 2001. - 528 с.: ил.
- Дэвис Стефан Р. С++ для "чайников", 4-е издание.: Перев. с англ.: Уч. пос. - М.: Издательский дом "Вильямс", 2001. - 336 с.: ил.
- Джонс Р., Стюарт Я. Программируем на Си/Пер. с англ. и предисл. М.Л. Сальникова, Ю.В. Сальниковой. - М.: Компьютер, ЮНИТИ, 1994. - 236 с.: ил.
- Скляров В.А. Программирование на языках Си и Си++: Практ. пособие. - М.: Высш. шк., 1996. -240 с.: ил.
- Пашенков В.В. Язык программирования Си. - М.: Центр НТТМ "Алгоритм", 1990. - 76 с.
- УинерР Р. Язык Турбо Си: Пер. с англ. -М.: Мир, 1991. - 384 с.: ил.
- Першиков В.И., Савинков В.М. Толковый словарь по информатике.-М.: Финансы и статистика, 1991. - 543 с.
| Назад | | Содержание | | Дальше |