- •Лабораторная работа №1 Линейные и разветвленные программы
- •Примеры использования арифметических операций
- •Примеры использования операций инкремента и декремента
- •Примеры использования операций отношения
- •Примеры использования поразрядных логических операций: Поразрядное логическое умножение:
- •Логический сдвиг:
- •Поразрядное логическое сложение:
- •Сложение по модулю 2 (исключающее или):
- •Примеры более сложного использования поразрядных логических операций:
- •Примеры записи логических выражений:
- •Алгебраические выражения
- •Пример вычисления значения выражения
- •Примеры использования преобразования типов
- •2. Особенности преобразования типов int и double:
- •6. Приведение типа в случае использования указателей:
- •7. Преобразование старшего типа к младшему удобно использовать для выделения отдельных частей переменной или константы:
- •9. Проанализируйте преобразование типов в операторах присваивания:
- •Особенности представления чисел по двоичному основанию
- •Особенности выполнения арифметических операций над вещественными числами
- •Операции умножения и деления
- •Ошибки округления
- •Переполнение (ошибка переполнения)
- •Потеря порядка (ошибка исчезновения порядка)
- •Катастрофическая потеря порядка (ошибка потери порядка)
- •Операции сложения и вычитания
- •Переполнение (ошибка переполнения)
- •Потеря значащих цифр
- •Особенности выполнения операций отношения (сравнения)
- •Правила работы с данными вещественных типов
- •Замечания по программированию алгебраических выражений
- •Условный оператор
- •Оператор switch Пример 1. Печать событий в зависимости от года
- •Пример 2. Распознавание вводимых символов
- •Пример 3. Печать сообщений о работе программы
- •Пример 4. Селектор перечислимого типа
Алгебраические выражения
//вычисление косинуса (cos), гиперболического косинуса (cosh), //синуса (sin), гиперболического синуса (sinh), //тангенса (tan), арккосинуса (acos), арксинуса (asin), арктангенса (atan) //(аргумент задается в радианах ) //прототипы функций описаны в <math.h> : //double cos (double x); //double cosh (double x); //double sin (double x); //double sinh (double x); //double tan (double x); //double asin (double x); //double acos (double x); //double atan (double x);
#include <conio.h>
#include <stdio.h> #include <math.h> #define PI 3.141592 // или const double PI = 4*atan(1); int main()
{double x=PI/2,
y = cos(x);
printf ("cos (%lf) = %lf\n",x, y); // остальное – аналогично printf ("tan PI/4 =%lf\n", tan (PI /4.0) ); printf ("enter a real number between -1 and 1\n"); scanf("%lf",&x); y = asin(x);
printf ("asin (%lf) = %lf\n", x, y);
_getch();
return 0;
}
//вычисление модуля (abs, labs, fabs) //прототипы функций описаны в <math.h> : // int abs (int n); // long labs (long n); // double fabs (double x); #include <stdio.h> #include <math.h> #include <iostream.h>
#include <conio.h>
int main()
{int i; long l; double x; cout << "Input i, l, y \n "; //input: -5, -555, -5.89 cin >> i >> l >> x; cout << "|" << i << "|" << abs(i) << endl; //-5 5 cout << "|" << l << "|" << labs(l) << endl; //-555 555 cout << "|" << x << "|" << fabs(x) << endl; //-5.89 5.89; cout << "|" << x << "|" << abs(x) << endl; //-5.89 5}
_getch();
return 0;
}
//вычисление e в степени x: exp(x), //натурального логарифма x: log(x), //десятичного логарифма x: lg(x), // квадратного корня из х: sqrt(x) //прототипы функций описаны в <math.h> : // double exp (double x); // double log (double x); // double lg (double x); // double sqrt (double x);
//вычисление значения числа а, возведенного в степень х: pow (a,x) //прототип функции описан в <math.h> : // double pow (double a, double x); Например: будет выглядеть так: z=pow(sin(x)+log(x*x), cos(x)) , a запишется как: z=pow (exp(cos(x))+x*x+sin(x), 0.25); или если у=exp(cos(x))+x*x+sin(x); z=pow (y, 0.25);
//округление числа с плавающей точкой до ближайшего целого с избытком ceil(x), //округление числа с плавающей точкой до ближайшего целого с недостатком floor(x) //прототипы функций описаны в <math.h> : // double ceil (double x); // double floor (double x); Например: floor(2.8) à2.000000 floor(-2.8) à-3.000000 ceil(2.8) à3.000000 ceil(-2.8) à-2.000000
//выделение целой и дробной частей числа (modf) // функция возвращает в качестве результата дробную часть числа //и присваивает целую часть указанной переменной //прототип функции описан в <math.h> : // double modf (double x, double &int_part); Пример: #include <stdio.h> #include <math.h> void main() {double value = 1.2345,
int_part, fraction;
fraction = modf (value, &int_part); printf (“value:%lf int_part:%lf fraction:%lf\n", value, int_part, fraction); } результат: value:1.2345 int_part: 1 fraction: 0.2345
//остаток от деления вещественного числа х на вещественное число y (fmod) // функция возвращает в качестве результата остаток от деления х на y; аналогична операции %, но работает с вещественными числами //прототип функции описан в <math.h> : // double fmod (double x, double y); Пример: #include <stdio.h> #include <math.h>
#include <conio.h>
int main() {double ab = 12.34; int a, b; b = int (fmod (ab, 10)); a= int (ab/10); printf ("ab: %lf a: %lf b: %lf\n", ab, a, b); _getch();
return 0;
}
//выделение целой и дробной частей числа (modf) // функция возвращает в качестве результата дробную часть числа //и присваивает целую часть указанной переменной //прототип функции описан в <math.h> : // double modf (double x, double *integer part);
Пример: #include <stdio.h> #include <math.h>
#include <conio.h>
int main() {double value = 1.2345, int_part, fraction;
fraction = modf (value, &int_part); printf ("value:%lf int_part:%lf fraction:%lf\n ", value, int_part, fraction); _getch();
return 0;
}
результат: value:1.234500 int_part: 1.000000 fraction: 0.234500
П
Результат:
41
15724
18467 11478
6334 29358
26500
26962
19169 24464
Пример генерирования случайных целых чисел в заданном диапазоне [k, m+k]: // генерирование случайных целых чисел в интервале [k, m) #include <stdlib.h> //для функции rand(); #include <stdio.h> #include <conio.h>
int main() {
int i, k, m;
scanf ("%d%d", &k, &m); for (i=0; i<10; i++) printf ("%4d\n", k+rand()%m);
_getch();
return 0;
}
результат:
1
15
(1-ое
выполнение программы)
1
10 15 2 12 1 2 2 5 7
1
15
(2-ое
выполнение программы)
5 3 1 9 9 7 3 1 14 10
1
15
(3-е
выполнение программы)
9 11 11 13 7 5 2 3 11 11
Пример генерирования случайных вещественных чисел в интервале (0.0, 1.0): #include <stdlib.h> #include <stdio.h>
#include <conio.h>
int main() {int i; printf ("random numbers from 0.0 to 1.0:\n "); for (i=0; i<5; i++) printf ("%lf\n ", (rand () + 0.0) / RAND_MAX); // +0.0 обеспечивает приведение типа и затем деление вещественных чисел _getch();
Результат:
random
numbers from 0.0 to 1.0:
0.001251
0.563585
0.193304
0.808741
0.585009