
c++ / L_2
.docОперации языка С
Арифметические операции
Операция |
Пояснение |
||
- |
Вычитание и унарный минус |
||
+ |
Сложение |
||
* |
Умножение |
||
/ |
Деление |
||
% |
Деление по модулю 2 дает остаток от целочисленного деления 5%2=1 |
||
++ |
Увеличение на 1 (префиксная и постфиксная формы) |
||
-- |
Уменьшение на 1 (префиксная и постфиксная формы) |
||
Различие префиксной и постфиксной формы |
|||
++X |
Префиксная форма |
Переменная X вначале увеличивается на 1, а затем ее значение используется в выражении |
|
X++ |
Постфиксная форма |
Значение переменной X сначала используется в выражении, а затем ее значение увеличивается на 1 |
|
Преобразование типа |
|||
(тип) переменная |
float a=10.45; int b; b=(int) a; // Результат 10; Приведение типов рассматривается как унарный оператор |
Старшинство арифметических операций: ++, --
*, /, % +, -
|
Пример
#include <stdio.h>
#include <conio.h>
//---------------------------------------------------------------------------
void main()
{
int x=10; int y=50;
float z=15.25;
printf("x=%d y=%d\n",x,y); // x=10 y=50
x++; // постфиксная форма
++y; // префиксная форма
printf("x=%d y=%d\n",x,y); // x=11 y=51
printf("x=%d y=%d\n",x++,++y); // x=11 y=52 , после вывода на экран x=12
printf("x=%d y=%d\n",x--,--y); // x=12 y=51, после вывода на экран x=11
x=(int) z; // преобразование вещественного числа к целому
printf("x=%d\n",x); // x=15
x=(int)z%2; //остаток от целочисленного деления x=1
printf("x=%d\n",x);
getch();
}
Операция многократного присваивания
a=b=c=x*y;
Комбинированные (или сокращённые) формы операторов присваивания
*= A *= B |
Операция присвоения произведения. A = A * B |
/= A /= B + 254 |
Операция присвоения частного от деления A=A / (B + 254) |
+= A += B |
Операция присвоения суммы А=A+B |
-= A -= B |
Операция присвоения разности А=A-B |
%= A %= B |
Операция присвоения остатка от деления (для целых чисел) A = A %B |
Операции отношения и логические операции
Операция |
Назначение |
< |
меньше |
<= |
меньше или равно |
> |
больше |
>= |
больше или равно |
= = |
равно |
!= |
не равно |
&& |
И |
|| |
ИЛИ |
! |
НЕ |
Операции отношения и логические операции имеют приоритет ниже, чем арифметические операции 12>10+1 эквивалентно 12>(10+1) |
Старшинство логических операций и операций отношения: ! < > >= <= == != && ||
|
Управляющие операторы
Операции отношения используются для сравнения в управляющих операторах:
if (a<b && (a>d || a= =0))
b++; // обратите внимание на ;
else
{b=7; a=0};
Результатом логического выражения является целочисленное арифметическое значение. “Истинно” – это ненулевое значение “Ложно” - это 0 |
Общий вид условного оператора
if (условие)
{
… // операторы выполняются, если условие истинно
}
else
{
…// операторы выполняются, если условие ложно
};
Вложенные операторы условия
if (условие1)
{
группа выражений1;
}
else
if (условие2)
{
группа выражений2;
}
else
{
группа выражений3;
};
Поразрядные операции
Поразрядные операция производятся только с любыми целочисленными переменными и константами и обеспечивают доступ к каждому биту информации.
Операция |
Назначение |
& |
AND |
| |
OR |
~ |
NOT |
^ |
XOR – сложение по модулю 2 (исключающее ИЛИ) |
<< |
сдвиг влево |
>> |
сдвиг вправо |
unsigned int k; |
|
Пусть k = 0101 -> 01000001 число 0177 -> 01111111 Тогда k=k & 0177 01000001 число 0200 10000000 k=k | 0200 11000001 |
Пусть k = 0101 -> 01000001 число 0177 -> 01111111 Тогда k=k ^0177 00111110
|
x=9 00001001 x=9<<3 01001000 x=9>>3 00000001 |
Пусть k = 4 -> 00000100 Тогда k= ~k 11111011 –>-5 (%d)
|
Назначение: для организации хранения в сжатом виде информации о состоянии флагов (включен-выключен). В одном байте можно хранить 8 флагов.
Если переменная ch хранит флаги, то для проверки, находится ли флаг, содержащийся в третьем бите, в состоянии включен (1) надо использовать операцию &
if (ch&4) printf(“3 флаг включен”);
Комбинированные (или сокращённые) формы операторов присваивания
Обозначение |
Операция присвоения результата: |
<<= A <<= B |
операции побитового сдвига влево A= A <<B |
&= A &= B |
поразрядной конъюнкции A = A & B |
|= A |= B |
поразрядной дизъюнкции A= A | B |
^= A ^= B |
поразрядной исключающей дизъюнкции A = A ^B |
Задачи:
-
Написать программу, которая проверяет, является ли год високосным.
-
Написать программу вычисления сопротивления электрической цепи, состоящей из трех сопротивлений. Сопротивления могут быть соединены последовательно или параллельно.
-
Написать программу, которая преобразует введенное с клавиатуры дробное число в денежный формат.
-
Найти сумму цифр трехзначного числа, введенного с клавиатуры.
-
Вычислить произведение высот треугольника со сторонами a, b, c.
Площадь
6.Треугольник задан координатами (x1, y1), (x2, y2), (x3, y3) своих вершин. Вычислить радиус окружности, вписанной в треугольник.
Вначале найти площадь по формуле Герона. Затем найти высоты. По высоте и одной стороне найти нужные углы. Центр окружности находится в точке пересечения бисcиктрисс . Составить два выражения и из них найти методом исключения x радиус.
-
Ромб задан координатами трех вершин (x1, y1), (x2, y2), (x3, y3). Вычислить площадь и периметр ромба.
-
Даны различные действительные числа x, y, z, d.
Найти max(max(x, y), max(x, z), max(z, d)).
-
Даны три действительных числа. Определить, что больше, сумма или произведение этих чисел. Если сумма больше произведения на число меньшее единицы, то вывести 0, и противном случае вывести 1.
//---------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
int a=10; //глобальная
int main()
{
int b;//локальная
extern int c; //с определена в другом месте
printf("1___a=%d\n",a);
a=1; // присвоение глобальной переменной
printf("2___a=%d\n",a);
int a; // присвоение локальной переменной
a=2;
printf("3___a=%d\n",a);
::a=3; // присвоение глобальной переменной
printf("4___a=%d\n",a);
printf("5___a=%d\n",::a);
getch();
return 0;
}