//пример 38.
Что напечатает программа:
#define PRINT(int) printf("int = %d\n", int)
int x = 1, y = 1, z = 1;
x += y += z; | y=y+z= 2; x =x+y=3 |
PRINT(x < y? y : x); | 3 < 2 à ложь à x=3 |
PRINT(x < y? x++: y++); | 3 < 2 à ложь à 2, а потом y=3 |
PRINT(x); | 3 |
PRINT(y); | 3 |
PRINT(z += x < y? x++: y++); | (z+=(3<3à ложь à3) à 1+3=4, y=4 |
PRINT(y); | 4 |
PRINT(z); | 4 |
x = 3; y = z = 4;
PRINT(z >= y >= x)? 1: 0); | ((4>=4) >=3) à (1>=3)à ложь à0 |
PRINT((z >= y) && (y >= x)); | ((4>=4) && (4>=3)) àистина(1) |
-----------------------------------------------------------------------------------------
//пример 39.
Проанализируйте использование тернарной операции в условии:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
Bool b;
int i = 3;
int a [5] = {0, 1, 2, 3, 4}; //массив из 5 элементов типа int
//индекс элемента в массиве изменяется от 0 до 4
if (i >= 0 && i < 5 && a[i] == 3){
cout << 1 << endl;
}
else {
cout << 2 << endl;
}
if (!(i >= 0 && i < 5)? false: (a[i] == 3)) {
cout << 1 << endl;
}
else {
cout << 2 << endl;
}
if ((i >= 0 && i < 5)? (a[i] == 3): false) {
cout << 1 << endl;
}
else {
cout << 2 << endl;
}
_getch();
return 0;
}
-----------------------------------------------------------------------------------------
//пример 40.
/* «прокрутить» операторы вручную и проверить результаты*/
#include <stdio.h>
#include <conio.h>
int main()
{
Int x, y, z;
x = y = z = 1;
x += y += z; //y=2; x=3;
printf("%d\n", x < y? y: x); //x=3
printf("%d\n", x < y? x++: y++); // y=2
printf("%d\n", x); // x=3
printf("%d\n", y); // y=3
z += x < y? x++: y++;
printf("%d\n", z); // z=4;
printf("%d\n", y); // y=4
x = 3; y = z = 4;
printf("%d\n", (z >= y >= x)? 1: 0); //0 ложь
printf("%d\n", (z >= y)&& (y >= x)? 1: 0); //1 истина
printf(" \n ");
_getch();
return 0;
}
-----------------------------------------------------------------------------------------
Запись алгебраических выражений
//пример 41.
// вычисление модуля
#define _USE_MATH_DEFINES
#include <cmath>
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
Int i;
long l;
double x;
cout << "Input i, l, x \n"; // -5, -555, -5.89
cin >> i >> l >> x;
cout << ' | ' << i << ' | ' << abs(i) << endl; //-5 5
cout << ' | ' << l << ' | ' << abs(l) << endl; //-555 555
cout << ' | ' << x << ' | ' << abs(x) << endl; //-5.89 5.89
_getch();
return 0;
}
-----------------------------------------------------------------------------------------
//пример 42.
//тригонометрические функции
#define _USE_MATH_DEFINES
#include <cmath>
#include <stdio.h>
#include <conio.h>
#ifndef M_PI
#define M_PI 3.14159265358979323846
#define M_PI_4 0.785398163397448309616
#endif
int main()
{
double x = M_PI/2,
y = cos(x);
printf("cos (%lf) = %lf\n",x, y);
printf("tan PI/4 =%lf\n", tan (M_PI_4));
// другие функции – аналогично
printf("enter a real number between -1 and 1\n");
scanf_s("%lf",&x);
y = asin (x);
printf("asin (%lf) = %lf \n ", x, y);
_getch();
return 0;
}
-----------------------------------------------------------------------------------------
//пример 43.
//функция modf выделения целой и дробной частей числа:
#define _USE_MATH_DEFINES
#include <math.h>
#include <stdio.h>
#include <conio.h>
int main()
{
double value = 1.2345,
int_part,
fraction_part;
fraction_part = modf (value, &int_part);
printf(" value:%lf int_part:%lf fraction_part:%lf \n ",
value, int_part, fraction_part);
_getch();
return 0;
}
результат:
value:1.234500 int_part:1.000000 fraction:0.234500
-----------------------------------------------------------------------------------------
//пример 44.
//функция fmod нахождения остатка числа:
#define _USE_MATH_DEFINES
#include <math.h>
#include <stdio.h>
#include <conio.h>
int main()
{
double ab = 12.34, a;
a = fmod (ab, 10); //остаток от деления числа ab на 10
printf("ab: %lf a: %lf \n ", ab, a);
_getch();
return 0;
}
результат:
ab: 12.340000 a: 2.340000
-----------------------------------------------------------------------------------------
//пример 45.
// округление вещественного значения до ближайшего целого
#define _USE_MATH_DEFINES
#include <math.h>
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
double x = 3.75,
y = -3.14;
cout << floor(x) << endl; // 3 округление с недостатком
cout << ceil(x) << endl; // 4 округление с избытком
cout << floor(y) << endl; // -4
cout << ceil(y) << endl; // -3
_getch();
return 0;
}
-----------------------------------------------------------------------------------------
Примеры записи условных операторов
//пример 46.
Варианты записи условия:
int a = 5;
if (a!= 0) { /* вариант 1*/
cout << "a!=0\n";
}
else {
cout << "a == 0\n";
}
if (a == 0) { /* вариант 2*/
cout << "a == 0\n";
}
else {
cout << "a!= 0\n";
}
if (a) { / * вариант 3, эквивалентен варианту 1, */
cout << "a!= 0\n"; /* но требует понимания семантики оператора if */
}
else {
cout << "a == 0\n";
}
if (! a) { /* вариант 4, эквивалентен варианту 2, */
cout << "a == 0 \ n "; /* но требует понимания семантики оператора if*/
}
else {
cout << "a!= 0 \ n ";
}
-----------------------------------------------------------------------------------------
//пример 47.