1. Записать на С++ следующие числа (в дробной части указывать до 4 цифр):
a) 5!;
b) LXIV;
c) 6,38;
d) -0,7(4);
e) 11/4;
f) -1/6;
g) Sqrt(2);
h) Pi;
i) 5*106;
j) -24,8*10-7;
k) 106;
l) 1/100000.
Результат:
#include <iostream>
#include <conio.h>
using namespace std;
void main()
{
int a1 = 1 * 2 * 3 * 4 * 5, b1 = 64, i1 = 5E6, k1 = 1E6;
double c1 = 6.38, d1 = -0.7 * 4, e1 = 11/4.0, f1 = -1/6.0,
g1 = sqrt(2), h1 = 3.1415, j1 = -24.8E-7, l1 = 1/100000.0;
cout << a1 << "\n" << b1 << "\n" << c1 << "\n" << d1 << "\n" << e1 << "\n";
cout.precision(4);
cout << f1 << "\n";
cout << g1 << "\n" << h1 << "\n" << i1 << "\n" << j1 << "\n" << k1 << "\n" << l1
<< "\n";
_getch();
}
2. Записать следующие числа без десятичного порядка:
a) -0.00027E+4;
b) 666E-3;
c) 1E1.
void main()
{
double a2 = -0.00027E+4, b2 = 666E-3;
int c2 = 1E1;
cout << a2 << " " << b2 << " " << c2;
_getch();
}
Результат:
Ошибочные записи чисел: a (6), b (0), c(7.0), d (7), f (3), h (1E-1), k (2E5), l (1E1).
4. Есть ли разница (с точки зрения языка С++) между числами 100 и 100.0, между 20 и 2E1? По какому признаку (величине или форме записи) целые числа отличаются от вещественных?
Ответ: Разница между целыми (Int и подобные) и вещественными (double и подобные) в том, что вещественные имеют большей числовой разряд, занимают больше ячеек памяти и допускают запись в десятичных дробях.
5. Привести примеры положительного и отрицательного целых чисел, не представимых в C++.
Ответ: Самое длинное целое положительное и отрицательное число в C++ будет при типе Longint (от -2147483648 до 2177483647). Все числа, за этими пределами не представимы в C++. Например -2200000000 и 2200000000.
6. Можно ли утверждать, что в C++ значение выражения (1/3)*3-1 равно нулю?
void main()
{
double x = (1 / 3) * 3 - 1;
cout << x;
_getch();
}
void main()
{
double x = (1 / 3.0) * 3 - 1;
cout << x;
_getch();
}
Результат:
Результат:
В С++ есть большая разница между записями 3 и 3.0. При делении двух целых чисел будет целый ответ, поэтому 1/3 = 0, а (1/3)*3-1 = -1. Для получения правильного ответа обязательно нужна запись 1.0 в числителе или 3.0 в знаменателе.
7. Почему при записи формул на C++ их «вытягивают» в линию? Почему знак умножения всегда выписывают явно (например, пишут a*t, а не at)?
Ответ: C++ читает лишь одноуровневые уравнения, а если не поставить знак между действиями, что C++ будет из читать не как a*t, а как отдельную переменную at;
8. Записать на C++ следующие формулы:
a) a+bx+cyz;
b) [(ax-b)x+c]x-d;
c) ab/c+c/ab;
d) ((x+y)/a1)*(a2/(x-y));
e) 104alpha-3*(1/5)betta;
f) (1+x/2!+y/3!)/(1+2/(3+xy)).
В C++ они будут выглядеть так:
a) a+b*x+c*y*z;
b) ((a*x-b)*x+c)*x-d;
c) A*b/c+c/a*b;
d) ((x+y)/a[1])*(a[2]/(x-y));
e) 1E4*alpha-3*(1/5)*betta;
f) (1+x/(1*2)+y/(1*2*3))/(1+2/(3+x*y))
9. Записать в общепринятой форме:
a) (p+q)/(r+s)-p*q/(r*s);
b) 1E3+betta/(x2-gamma*delta).
Ответ:
a)
b)
10. Вычислить: 24/(3*4)-24/3/4+24/3*4
void main()
{
double x = 24 / (3 * 4) - 24 / 3 / 4 + 24 / 3 * 4;
cout << x;
_getch();
}
Результат: 32.
11. Почему в C++ факториал от 10 нельзя записать в виде 10! Или 1*2*3*…*10?
Ответ: В C++ отсутствует знак “!”. Выполнить вычисление факториала можно через перемножение его составляющих. Или же составить отдельную программу для этого.
12. Сколько операций выполняется при вычислении выражения (x+1/2)*(y+7/10)-3/4? Как сократить число операций?
Ответ: Выполняется 7 операций. Чтобы сократить число операций надо заменить деление на десятичные дроби (x+0.5)*(y+0.7)-0.75
13. Почему в C++ аргумент функции всегда записывают в скобках (например, пишут ln(5), а не ln5)?
Ответ: Если написать аргумент функции без скобок, то C++ будет распознавать не Логарифм, а отдельную переменную «Ln5».
14. Записать на C++ следующие формулы:
для
- (1+x)2;
- Sqrt(1+x2);
- |a+bx|;
- Sin 8;
- cos2x3;
- tg x;
- log2(x/5);
- ch x;
- arcctg 103;
- arcsin x;
1) pow(1+x,2)
2) sqrt(1+Pow(x,2))
3) abs(a+b*x)
4) sin(8)
5) pow(cos(exp(log(x)*3)),2)
6) sin(x)/cos(x)
7) log(x/5)/log(2)
8) (exp(X)+exp(-X))/2
9) 1/atan(epx(log(10)*3))
10) atan(x/sqrt(1-Pow(x,2)))
15. Записать на C++ следующие формулы (x>0):
a) x5;
b) x100;
c) 21+x;
d) xsqrt(2);
Ответ:
a) pow(x,5)
b) pow(x,100)
c) pow(2,1+x)
d) pow(x,sqrt(2))
Для корректной работы нужна библиотека math.h
16. Как записать на C++ величину основания натуральных логарифмов (число e), если Вы забыли цифры этого числа? А как записать число Pi в подобной ситуации?
Ответ: Число Пи можно записать как PI, предварительно записав в константы выражение: const double PI = std::atan(1.0)*4; А Экспоненту можно записать как e:=exp(1), подключив библиотеку <math.h
>.
17. Как записать на C++ синус от x градусов?
Ответ: Sin(x*PI/180)
18. Как записать на C++ косинус от x градусов?
Ответ: Cos(x*PI/180)
19. Записать в общепринятой форме:
a) (-b+sqrt(pow(b,2)-4*a*c))/(2*a);
b) a/b*(c+d)-(a-b)/b/c+1E-8;
c) x1+arctan(y2-alpha)/2*abs(x4-ln(5)*y5)/exp(-1)
Ответ:
a)
b)
c)
20. Записать на C++ соответствующие операторы присваивания:
a) y=1+x+x2/2!+x3/3!+x4/4!;
b) f=6.673*10-8*(m1m2)/r2;
c) b=e|x-y|+ln(1+e)log2tg2
Ответ:
a) y:=1+x+Pow(x,2)/(1*2)+ exp(ln(x)*3)/(1*2*3)+ exp(ln(x)*4)/(1*2*3*4)
b) f:=6.673*10E-8*(M[1]*M[2])/Pow(r,2)
c) b:=exp(Abs(x-y))+Ln(1+exp(1))*ln(ln(sin(2)/cos(2))/ln(2))
Логические операции
1.. Записать на C++ отношение, истинное при выполнении указанного условия и ложное в противном случае:
а) целое k делиться 7;
void main()
{
int k;
cin >> k;
if (k % 7 == 0) cout << "Yes";
else cout << "No";
_getch();
}
б) уравнение ax2+bx+c=0 (a≠0) не имеет вещественных корней;
void main()
{
int a,b,c;
cin >> a >> b >> c;
if (pow(b,2) - 4 * a * c < 0) cout <<1;
else cout <<0;
_getch();
}
в) точка (x,y) лежит все круга радиуса r с центром в точке (1,0)
int Funf(int x, int y, int r)
{
int x0 = 1, y0 = 0;
if (pow((x - x0), 2) + pow((y - y0), 2) <= pow(r, 2)) return 1;
else return 0;
}
void main()
{
setlocale(LC_ALL, "RUS");
int x, y, r;
cout << "Введите данные:\n";
cin >> x >> y >> r;
if (Funf(x,y,r) == 1) cout << "Принадлежит";
else cout << "Не принадлежит";
_getch();
}
г) натуральное n является полным квадратом.
void main()
{
setlocale(LC_ALL, "RUS");
int n;
cin >> n;
double m = sqrt(n);
if (pow(trunc(m), 2) == pow(m, 2)) cout <<"да";
else cout << "нет";
_getch();
}
2. Вычислить значения выражений:
а) not odd(n) при n=0; Результат 1
void main()
{
setlocale(LC_ALL, "RUS");
int n = 0;
n =!(n % 2!= 0);
cout << n;
_getch();
}
б) t and (p mod 3=0) при t=true, p=101010; Результат 1
void main()
{
setlocale(LC_ALL, "RUS");
int t = 1, p = 101010;
t = t && (p % 3 == 0);
cout << t;
_getch();
}
в) (x*y<>0) and (y>x) при x=2, y=1;
Результат 0
void main()
{
setlocale(LC_ALL, "RUS");
int x = 2, y=1;
x = (x*y!=0) && (y>x);
cout << x;
_getch();
}
г) (x*y<>0) or (y>x) при x=2, y=1;
Результат 1
void main()
{
setlocale(LC_ALL, "RUS");
int x = 2, y=1;
x = (x*y!= 0) || (y > x);
cout << x;
_getch();
}
д) a or (not b) при a=false, b=true. Результат 0
void main()
{
setlocale(LC_ALL, "RUS");
int a = 0, b=1;
a = a ||!b;
cout << a;
_getch();
}
3 Записать на C++ выражение, истинное при выполнении указанного условия и ложное в противном случае:
а) 0<x<1;
bool main()
{
setlocale(LC_ALL, "RUS");
double x;
bool y;
cin >> x;
if ((0 < x) && (x < 1)) return 1;
else return 0;
_getch();
}
б) x=max(x,y,z);
bool main()
{
setlocale(LC_ALL, "RUS");
int x, y, z;
cin >> x >> y >> z;
if ((x > y) && (x > z)) return 1;
else return 0;
_getch();
}
в) x≠max(x,y,z) (операцию not не использовать);
bool main()
{
setlocale(LC_ALL, "RUS");
int x, y, z;
cin >> x >> y >> z;
if ((x < y) && (x < z)) return 1;
else return 0;
_getch();
}
г) хотя бы одна из логических переменных a и b имеют значение true.
bool main()
{
setlocale(LC_ALL, "RUS");
bool x, y;
cin >> x >> y;
if ((x == 1) || (y == 1)) return 1;
else return 0;
_getch();
}
д) обе логические переменные a и b имеют значение true.
bool main()
{
setlocale(LC_ALL, "RUS");
bool x, y;
cin >> x >> y;
if ((x == 1) && (y == 1)) return 1;
else return 0;
_getch();
}
4. Объяснить ошибки в следующих записях:
а) 1 and 0;
Операция and на C++ выглядит так: &&.
б) true + false;
В логическом типе нельзя использовать операцию +.
в) true<0;
Операция '<' не применима к типам bool.
г) not 2 = 5;
Выражение должно быть в скобках (!(2=5))
д) x>0 or y = 4;
Чтобы компилятор разобрал написанное, должны стоять скобки ((x>0) || (y == 4))
е) not not b or or d.
Повторение or не имеет смысла, а!! b= b.
5. Указать порядок выполнения операций при вычислении выражения:
а) a and b or not c and d;
1. Not c
2. A and b
3. (Not c) and d
4. (a and b) or (not c and d)
б) (x>=0) or t and odd(x) or (y*y<>4)
1. x >= 0
2. y * y
3. y*y <> 4
4. t and odd(x)
5. (x>=0) or t and odd(x)
6. (x>=0) or t and odd(x) or (y*y<>4)
6. Вычислить следующие выражения при a=true и b=false:
а) a or b and not a;
б) (a or b) and not a;
в) not a and b;
г) not (a and b).
Результат:
a) True
b) False
c) False
d) True
7. Записать на C++ выражение, истинное при выполнении указанного условия и ложное в противном случае:
а) x принадлежит отрезку [0,1];
б) x лежит вне отрезка [0,1];
в) x принадлежит отрезку [2,5] или [-1,1];
г) x лежит вне отрезков [2,5] и [-1,1];
д) каждое из чисел x,y,z положительно;
е) хотя бы одно из чисел x,y и z положительно;
ж) ни одно из чисел x,y и z не является положительным;
з) только одно из чисел x,y и z положительно;
и) логическая переменная a имеет значение true, а логическая переменная b имеет значение false;
к) год с порядковым номером y является високосным (год високосный, если его номер кратен 4, однако из кратных 100 високосными являются лишь кратные 400; например, 1700, 1800 и 1900 – невисокосные годы, а 2000 – високосный).
8. Нарисовать на плоскости (x, y) область, в которой и только в которой истинно указанное выражение:
а) (y>=x) and (y+x>=0) and (y<=1);
б) (pow(x)+pow(y)<1) or (y>0) and (abs(x)<=1);
в) (trunc(y)=0) and (round(x)=0).
9. Записать на C++ выражение, истинное при выполнении указанного условия и ложное иначе:
а) целые n и k имеют одинаковую четность;
б) только одна из логических переменных a и b имеет значение true;
в) только одна из логических переменных a,b и c имеет значение true.
10. Нарисовать на плоскости (x, y) область, в которой и только в которой истинно указанное выражение:
а) (abs(x)<=1)>(abs(y)>=1);
б) (pow(x)+pow(y)<=4)=(y<=x)
11. Преобразовать указанное выражение к виду, не содержащему знаков отношения (a и b-логические переменные):
а) a<b;
б) a=b;
в) (a<b)=a
Вывод: Я научился писать программы с использованием простейших операций, выражений, простейшего ввода-вывода.