Арифметичні операції
Java підтримує наступні арифметичні операції:Оператор | Операція |
+ | Додавання |
– | Віднімання |
* | Множення |
/ | Ділення |
% | Залишок від цілочисельного ділення |
Пріоритет операцій множення і ділення вище, ніж додавання і віднімання. Операції з однаковими пріоритетами виконуються зліва направо. Ви можете змінювати порядок виконання операцій з допомогою дужок:
a +
b / c ≡ a + ( b / c )
a *
b – c ≡ ( a * b ) – c
a /
b / c ≡ ( a / b ) / c
Рекомендується завжди задавати порядок виконання операцій з
допомогою дужок - в цьому випадку Вам не доведеться думати про те,
пріоритет якої операції вище.Стоит уделить особое внимание целочисленному делению.
Результат деления
в Java зависит от типов операндов. Если оба операнда - целые
числа, то результат будет тоже целым. Поэтому непреднамеренное
использование целочисленного деления может привести к существенной
потере точности. Чтобы произвести обычное деление, получив в качестве
результата вещественное значение, в Java нужно явно указать, что хотя
бы один из операндов является вещественным числом.
Например:
3 /
2 ≡ 1
2 /
3 ≡ 0
потому что это целочисленное деление. Однако
3 /
2. ≡ 1.5
2.0
/ 3 ≡ 0.66666666…
потому что 2. и 2.0 являются вещественными числами. Если k и n являются переменными типа int, то k/n
будет производить целочисленное деление и выдавать в качестве результата целое число (значение типа int).
Чтобы получить вещественный результат при делении двух
целочисленных переменных (или выражений), Вы должны заставить Java
рассматривать хотя бы с одну переменную как вещественную. Это
делается с помощью приведения типов:
для этого Вам нужно перед именем переменной написать в скобках имя
типа, к которому Вы хотите преобразовать значение, например, (double)k/n даст вещественный результат деления (значение типа double).Целочисленное деление часто используется вместе с операцией взятия остатка от деления для получения номера строки и столбца элемента по его порядковому номеру. Предположим, что есть коллекция из 600 элементов, задающая, скажем, места в театре, и мы хотим условно расположить эти места в 20 рядов, каждый из которых содержит по 30 мест. В этом случае получить номер ряда и номер места в этом ряду можно будет с помощью следующих выражений:
Номер места: index % 30
(остаток от деления индекса на 30: 0 - 29)
Номер ряда: index / 30
(целочисленное деление индекса на 30: 0 - 19)
где порядковый номер (индекс) index принимает значения от 0 до 599. Например, место с индексом 247 будет соответствовать месту 7 в ряду 8.У операции возведения в степень в Java нет собственного оператора (если Вы напишете a^b, то это будет означать операцию побитового ИЛИ). Чтобы выполнить возведение в степень, нужно вызвать функцию pow():
pow(
a, b ) ≡ ab
Java підтримує кілька спрощених операторів для часто використовуваних операцій з числовими змінними, тому до арифметичних операторів мови Java, які визначені для всіх числових типів, відносяться: + (додавання і унарний плюс) + = (додавання з присвоюванням), - (віднімання і унарний мінус), -= (віднімання з присвоюванням), * (множення), *= (множення з присвоюванням), / (ділення), /= (розподіл із присвоюванням), % (залишок від ділення або ділення по модулю), %= (залишок від ділення з присвоюванням), ++ (інкремент) -- (декремент).
Будь-який оператор з присвоюванням з погляду одержуваного результату еквівалентний виконання відповідної операції з подальшим присвоюванням, але працює зазвичай швидше: a @= b еквівалентно а = a @ b (тут символ " @ " означає будь-яку з арифметичних бінарних операцій).
i++
≡ i = i+1
(збільшення значення i на 1)
i––
≡ i
= i–1 (зменшення значення i на 1)
a
+= 100.0 ≡ a = a + 100.0 (збільшення значення a на
100.0)
b
–= 14 ≡ b = b – 14 (зменшення значення
b на 14)
Обратите внимание, что хотя такие операторы могут использоваться в выраженях, их вычисление изменяет значение операндов.
Приклад з арифметичними операціями:
public class Math1 {
public Math1() {
}
public static void main(String[] args) {
int a=5;
int b=2;
int c=25;
int k;
double r;
k=a+b;
r=Math.pow(3.,2.);
System.out.println("a=" + a);
System.out.println("b=" + b);
System.out.println("c=" + c);
System.out.println("Syma a+b=" + (a+b));
System.out.println("Сума: а+b="+k);
System.out.println("Не вірна сума a+b=" + a+b);
System.out.println("Добуток: a*b="+a*b);
System.out.println("Результат д?лення ц?лочисельних: а/b="+a/b); //дробова частина вiдкидається
System.out.println("Залишок по модулю: a%b="+a%b);
System.out.println("Cтепiнь: a^b="+Math.pow(a,b));
System.out.println("Корiнь: sqrt(с) ="+Math.sqrt(c));
}
}
Задача 1(про прямокутний трикутник). Нехай задано катети прямокутного трикутника a=3, b=4. Знайти периметр і площу трикутника.
class triangle {
public triangle() {
}
public static void main(String[] args) {
double a=3, b=4, c,p,s; //Задаємо довжини сторін
c= Math.sqrt(a*a+b*b); //Обчислюємо гіпотенузу
p=a+b+c; //обчислюємо периметр
s=a*b/2; //обчислюэмо площу
System.out.println("p=" + p); //виводимо значення периметра
System.out.println("s=" + s); //та площі на екран
System.out.println("виконав Юхим.В");
}
}
1.1. Вывести на экран с точностью два знака число Пи.
Ответ: Решил что надо вычислить число Пи.
- public class Math2 {
- public Math2() {
- }
- public static void main(String[] args) {
- long n=1;
- double sum,pi;
- sum=1;
- for (n=1; n<100000;n++)
- {
- sum=sum*(4*(n*n))/((4*(n*n))-1);
- }
- pi=sum*2;
- System.out.println("Число Пи=" + String.format("%.2f", pi));
- }
- }
1.2. Вывести на экран с точностью два знака число е (основание натурального логарифма).
- public class Math2 {
- public Math2() {
- }
- public static void main(String[] args) {
- long n;
- double sum,e,fuc;
- sum=1;
- fuc=1;
- for (n=1; n<20;n++)>
- sum=sum+1/fuc;
- }
- e=sum;
- System.out.println("Чиcло e=" + String.format("%.2f", e));
- }
1.3. Составить программу вывода на экран числа. вводимого с клавиатуры. Выводимому числу должно предшествовать сообщение “Вы ввели число”.
- import java.io.*;
- public class Les2 {
- public static void main(String[] args) throws IOException
- {
- char c;
- BufferedReader kb=new BufferedReader(new InputStreamReader(System.in));
- c=(char)kb.read();
- System.out.println("Вы ввели число "+c);
- }
- }
1.5. Вывести на одной строке числа 1, 13 и 49 с одним пробелом между ними.
- public class Num {
- public Num() {
- }
- public static void main(String[] args) {
- System.out.println(1+" "+13+" "+49);
- }
- }
1.7. Составить программу вывода на экран в одну строку трех любых чисел с двумя пробелами между ними.
- import java.io.*;
- public class Num {
- public static void main(String[] args) throws IOException
- {
- char n1,n2,n3;
- BufferedReader kb=new BufferedReader(new InputStreamReader(System.in));
- n1=(char)kb.read();
- n2=(char)kb.read();
- n3=(char)kb.read();
- System.out.println(n1+" "+n2+" "+n3);
- }
- }
1.9. Вывести на экран числа 50 и 10 одно под другим.
- public class Num {
- public Num() {
- }
- public static void main(String[] args) {
- System.out.println(50);
- System.out.println(10);
- }
- }
1.25. Дана сторона квадрата. Найти его периметр.
- import java.io.*;
- public class Kvadrat {
- public static void main(String[] args) throws IOException
- {
- String n1;
- BufferedReader kb=new BufferedReader(new InputStreamReader(System.in));
- n1=kb.readLine();
- int kv=Integer.parseInt(n1); // преоброзование типа String в int
- System.out.println("Периметр квадрата="+kv*4);
- }
- }
1.29. Дан радиус окружности. Найти длину окружности и площадь круга.
- import java.io.*;
- public class Krug {
- public static void main(String[] args) throws IOException
- {
- String n1;
- double Pi=3.14;
- BufferedReader kb=new BufferedReader(new InputStreamReader(System.in));
- n1=kb.readLine();
- int r=Integer.parseInt(n1); // преоброзование типа String в int
- System.out.println("Длина окружности="+2*Pi*r);
- System.out.println("Площядь круга="+Pi*r*r);
- }
- }
1.49. Составить программу обмена значениями двух переменных величин.
- public class obmen {
- public obmen() {
- }
- public static void main(String[] args) {
- int a=10,b=20;
- a=a+b;
- b=a-b;
- a=a-b;
- System.out.println("a="+a+" "+"b="+b);
- }
- }
1.51. Дано вещественное число получить используя только операцию умножение
а) а^4 за две операции;
- public class obmen2 {
- public obmen2() {
- }
- public static void main(String[] args) {
- long a=2,b;
- b=a*a;
- a=b*b;
- System.out.println("a="+a);
- }
- }
б) а^6 за три операции;
- public class obmen2 {
- public obmen2() {
- }
- public static void main(String[] args) {
- long a=2,b;
- b=a*a;
- a=b*b;
- a=a*b;
- System.out.println("a="+a);
- }
- }
в) а^7 за четыре операции;
- public class obmen2 {
- public obmen2() {
- }
- public static void main(String[] args) {
- long a=2,b,c;
- c=a;
- b=a*a;
- a=b*b;
- a=a*b;
- a=a*c;
- System.out.println("a="+a);
- }
- }
г) а^8 за три операции;
- public class obmen2 {
- public obmen2() {
- }
- public static void main(String[] args) {
- long a=2,b,c;
- c=a;
- b=a*a;
- a=b*b;
- a=a*a;
- System.out.println("a="+a);
- }
- }
Результати операцій двійкового доповнення, Або, що виключає Або і І виходять шляхом виконання над кожним з бітів операндів (операндів) дій у відповідності з таблицею
a | b | ~a |
a|b |
a^b |
a&b |
0 | 0 | 1 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 1 | 1 | 0 |
1 | 1 | 0 | 1 | 0 | 1 |
Наприклад, 4^5 дорівнює 1 (бо двійкові представлення цих чисел є відповідно 100 і 101).
У
операторів зсуву другий аргумент показує кількість розрядів, на яку
треба здійснити зсув у двійковому поданні першого операнда вліво (
<< ) або вправо (для>> та >>>).
int i = 3, j = 100; // i = 3, j = 100
int k = i << 4; // k = 48
int m = j >> 2; // m = 25
Легко зрозуміти, що зсув вліво на
розрядів еквівалентний множенню на
, а зсув вправо -- поділом на те ж число.
Немає коментарів:
Дописати коментар