Professional Documents
Culture Documents
CPP05 Practice IF
CPP05 Practice IF
1
Că n củ a mộ t số chính phương
#include <iostream>
Nhậ p và o mộ t số chính #include <cmath>
using namespace std;
phương (unsigned long int main()
{
long) unsigned long long x,
y;
Tính cin >> x;
y = sqrt(x);
cout << y;
}
Că n củ a mộ t số chính phương
#include <iostream>
Dịch
chương trình bình thườ ng
#include <cmath>
(khô ng đặ t chế độ -O2) using namespace std;
int main()
Chạy chương trình và nhậ p và o :
{
9007199515875289
unsigned long long x,
Kết quả in ra : y;
cin >> x;
94906266
y = sqrt(x);
Kết quả đú ng cout << y;
94906267 }
Sai số tính toá n
Nếu khô ng có chỉ dẫ n đặ c biệt, hà m sqrt(x) nhậ n và o đố i số x là
kiểu double (15-16 chữ số có nghĩa)
Vớ i x nhậ p và o bằ ng 9007199515875289, việc chuyển đổ i từ
unsigned long long sang double đã có sai số ngay từ trướ c khi
tính că n
Giả i phá p, ép kiểu cho x thà nh long double trướ c khi tính că n…
4
Că n củ a mộ t số chính phương
#include <iostream>
Dịch
chương trình bình thườ ng (khô ng
#include <cmath>
đặ t chế độ -O2) using namespace std;
int main()
Chạy chương trình và nhậ p và o :
{
9007199515875289
unsigned long long x, y;
Kết quả in ra đú ng cin >> x;
94906267 y = sqrt((long
double)x);
(Đã kiểm thử bằ ng vò ng lặ p cho mọ i số cout << y;
chính phương unsigned long long ) }
Độ dà i phủ
Viết chương trình nhậ p và o 4 số thự c trong
đó và
Tính độ dà i phầ n trụ c số phủ bở i hai đoạ n và
6
Nếu
, độ dà i phầ n phủ
bằ ng tổ ng độ dà i hai 𝑎 𝑏 𝑐 𝑑
khoả ng:
Nếu , phầ n phủ là mộ t
khoả ng, độ dà i bằ ng
𝑎 𝑐 𝑏 𝑑
điểm cự c phả i – điểm
cự c trá i
7
#include <iostream>
using namespace std;
int main()
{
double a, b, c, d;
cin >> a >> b >> c >> d;
if (b < c || d < a) cout << b - a + d - c; //[a, b]∩[c, d] = ∅
else //[a, b]∩[c, d] ≠ ∅
{
a = a < c ? a : c; //a = min(a, c)
b = b > d ? b : d; //b = max(b, d)
cout << b - a;
}
}
8
Trung bình cộ ng
Nhậ p và o hai số nguyên có giá trị tuyệt đố i
Tính trung bình cộ ng củ a hai số
9
Trung bình cộ ng
#include <iostream>
Cẩ n thậ n vớ i phép “/”
#include <iomanip>
using namespace std; Nếu hai toá n hạ ng kiểu số
int main()
nguyên, máy sẽ dịch thà nh
{
int a, b; phép chia nguyên
cin >> a >> b;
Ví dụ a = 2, b = 3 sẽ cho kết
cout << fixed <<
setprecision(1); quả bằ ng 2
cout << (a + b) / 2; //Sai
}
10
Trung bình cộ ng
#include <iostream> Toá n tử ép kiểu
#include <iomanip>
Viết double(x) hay (double)x trong
using namespace std;
biểu thứ c buộ c máy hiểu x là kiểu
int main()
{ double trướ c khi tính biểu thứ c
int a, b;
cin >> a >> b;
cout << fixed << setprecision(1);
cout << double(a + b) / 2;
}
11
#include <iostream> #include <iostream>
#include <ipmanip> #include <ipmanip>
using namespace std; using namespace std;
int main() int main()
{ {
int a, b; int a, b;
cin >> a >> b; cin >> a >> b;
cout << fixed << cout << fixed <<
setprecision(1); setprecision(1);
cout << double(a + b) / 2; cout << (double(a) + b) / 2;
} }
Nhậ p và o a = 2, b = 5 Nhậ p và o a = 2, b = 5
In ra 3.5 (đú ng) In ra 3.5 (đú ng)
13
#include <iostream> #include <iostream>
#include <iomanip> #include <iomanip>
using namespace std; using namespace std;
int main() int main()
{ {
int a, b; int a, b;
cin >> a >> b; cin >> a >> b;
cout << fixed << cout << fixed <<
setprecision(1); setprecision(1);
cout << double(a + b) / 2; cout << (double(a) + b) / 2;
} }
Nhậ p và o: Nhậ p và o:
a = 2000000000 a = 2000000000
b = 2000000000 b = 2000000000
In ra -147483648.0 (sai) In ra 2000000000.0 (đú ng) 14
Quy tắ c tính phép toá n số nguyên
Xét biểu thứ c , trong đó là mộ t trong nhữ ng phép toá n +, - , *, /, %
int int int
int int int
int unsigned int unsigned int
int unsigned int unsigned int
unsigned int int unsigned int
unsigned
unsigned int
int int int
unsigned unsigned
unsigned int
int
unsigned
long long int unsigned
long long int unsigned
long long int
long long int unsigned
long long long
int int unsigned
long long long
int int
unsigned
long long
long long
int int long long
unsigned long long
int int unsigned
unsigned long
long long
long int
int
unsigned
unsigned long
long long
long int
int unsigned
long long
long long
int int unsigned
unsigned long
long long
long int
int
unsigned long long int unsigned long long int unsigned long long int
15
Xét biểu thứ c , trong đó là mộ t trong nhữ ng phép toá n +, - , *, /, %
int int int
int int int
int unsigned int unsigned int
int unsigned int unsigned int
unsigned int int unsigned int
unsigned
unsigned int
int int int
unsigned unsigned
unsigned int
int
unsigned
long long int unsigned
long long int unsigned
long long int
long long int unsigned
long long long
int int unsigned
long long long
int int
unsigned
long long
long long
int int long long
unsigned long long
int int unsigned
unsigned long
long long
long int
int
unsigned
unsigned long
long long
long int
int unsigned
long long
long long
int int unsigned
unsigned long
long long
long int
int
unsigned long long int unsigned long long int unsigned long long int
Quy tắ c 1: Nếu toá n hạ ng có kiểu nhỏ hơn 32 bit sẽ bị ép thà nh kiểu int
char, short int, unsigned char, unsigned short int => int
16
Xét biểu thứ c , trong đó là mộ t trong nhữ ng phép toá n +, - , *, /, %
int int int
int int int
int unsigned int unsigned int
int unsigned int unsigned int
unsigned int int unsigned int
unsigned
unsigned int
int int int
unsigned unsigned
unsigned int
int
unsigned
long long int unsigned
long long int unsigned
long long int
long long int unsigned
long long long
int int unsigned
long long long
int int
unsigned
long long
long long
int int long long
unsigned long long
int int unsigned
unsigned long
long long
long int
int
unsigned
unsigned long
long long
long int
int unsigned
long long
long long
int int unsigned
unsigned long
long long
long int
int
unsigned long long int unsigned long long int unsigned long long int
Quy tắ c 2: Nếu hai toá n hạ ng khá c kiểu, khá c kích thướ c (số bit), kiểu toá n hạ ng nhỏ
hơn bị ép thà nh kiểu toá n hạ ng lớ n hơn
unsigned int + long long int = long long int + long long int = long long int
17
Xét biểu thứ c , trong đó là mộ t trong nhữ ng phép toá n +, - , *, /, %
int int int
int int int
int unsigned int unsigned int
int unsigned int unsigned int
unsigned int int unsigned int
unsigned
unsigned int
int int int
unsigned unsigned
unsigned int
int
unsigned
long long int unsigned
long long int unsigned
long long int
long long int unsigned
long long long
int int unsigned
long long long
int int
unsigned
long long
long long
int int long long
unsigned long long
int int unsigned
unsigned long
long long
long int
int
unsigned
unsigned long
long long
long int
int unsigned
long long
long long
int int unsigned
unsigned long
long long
long int
int
unsigned long long int unsigned long long int unsigned long long int
Quy tắ c 3: Nếu hai toá n hạ ng cù ng kiểu, biểu thứ c tính theo kiểu đó
18
Xét biểu thứ c , trong đó là mộ t trong nhữ ng phép toá n +, - , *, /, %
int int int
int int int
int unsigned int unsigned int
int unsigned int unsigned int
unsigned int int unsigned int
unsigned
unsigned int
int int int
unsigned unsigned
unsigned int
int
unsigned
long long int unsigned
long long int unsigned
long long int
long long int unsigned
long long long
int int unsigned
long long long
int int
unsigned
long long
long long
int int long long
unsigned long long
int int unsigned
unsigned long
long long
long int
int
unsigned
unsigned long
long long
long int
int unsigned
long long
long long
int int unsigned
unsigned long
long long
long int
int
unsigned long long int unsigned long long int unsigned long long int
Quy tắ c 4: Nếu hai toá n hạ ng khá c kiểu, cù ng kích thướ c (số bit), biểu thứ c tính
theo kiểu toá n hạ ng khô ng dấ u
19
Quy tắ c tính phép toá n số thự c
Mộ t phép toá n tuâ n theo quy tắ c tính số thự c nếu nó có ít nhấ t mộ t toá n hạ ng là số thự c
Xét biểu thứ c , trong đó là mộ t trong nhữ ng phép toá n +, - , *, /
Nếu hai toá n hạ ng khá c kiểu, toá n hạ ng thuộ c kiểu nhỏ hơn sẽ bị ép thà nh kiểu củ a toá n
hạ ng cò n lạ i
Nếu hai toá n hạ ng cù ng kiểu, biểu thứ c sẽ tính theo kiểu toá n hạ ng
Ví dụ
float + double = double
long double * double = long double
float - long double = long double
20
Trung bình cộ ng
Nhậ p và o hai số nguyên có giá trị tuyệt đố i
Tính trung bình cộ ng củ a hai số
Chỉ ra lỗ i (nếu có củ a cá c chương trình sau)
21
#include <iostream> #include <iostream>
#include <iomanip> #include <iomanip>
using namespace std; using namespace std; Sai
int main()
Sai int main()
{ Phép chia {
Phép chia
nguyên int a, b;
int a, b; nguyên
cin >> a >> b;
cin >> a >> b;
cout << fixed <<
cout << fixed << setprecision(1);
setprecision(1);
cout << (long long)(a + b) / 2;
cout << (a + b) / 2; }
}
Cộ ng trà n số
Cộ ng trà n số
22
#include <iostream>
#include <iomanip>
using namespace std; Đú ng
int main()
{
int a, b; Phép chia
thự c
cin >> a >> b;
cout << fixed << setprecision(1);
cout << ((long long)a + b) / 2.0;
} Cộ ng
long long + int = long long
23
#include <iostream>
using namespace std;
int main()
Đú ng
{
int a, b; Phép chia
cin >> a >> b; thự c
28
Toá n tử ép kiểu
#include <iostream>
using namespace std; Lệnh j = i + 1 trà n số do phép tính
int main()
i + 1 tính theo kiểu int
{
int i; Có thể khắ c phụ c bằ ng cá ch khai
long long j;
i = LONG_MAX; bá o i thuộ c kiểu long long. Tuy
j = i + 1;
nhiên điều này có thể gây ra nhiều
cout << j;
} sự thay đổ i phiền phứ c…
29
Toá n tử ép kiểu
#include <iostream>
Để trá nh lỗ i trà n số họ c, khi biết chắ c kiểu
using namespace std;
int main() kết quả , có thể ép trình dịch hiểu mộ t toá n
{ hạ ng phả i thuộ c mộ t kiểu nà o đó
int i;
long long j; É p kiểu
i = LONG_MAX; (Kiểu)toá n hạ ng
j = (long long)i + hoặ c Kiểu (toá n hạ ng)
1;
Chú ý: Thay bằ ng j = (long long)(i + 1) vẫ n bị
cout << j;
} lỗ i trà n số do lỗ i trà n nằ m ở phép cộ ng
30
Cá c thô ng tin về kiểu
Để hiểu rõ cá c thô ng tin về mộ t kiểu dữ liệu,
C++ cung cấ p mộ t mẫ u lớ p numeric_limits
Viết std::numeric_limits<Kiểu>::Phương thứ c
để hiện thô ng tin củ a Kiểu.
31
#include <iostream>
#include <limits> Định nghĩa kiểu T là long long
typedef long long T;
using namespace std; In kiểu bool dạ ng false/true thay vì 0/1
int main ()
{ Kích thướ c kiểu tính bằ ng byte
cout << boolalpha;
Giá trị nhỏ nhấ t
cout << "Size in bytes: " << sizeof(T) << endl
<< "Minimum: " << numeric_limits<T>::min() << endl
<< "Maximum: " << numeric_limits<T>::max() << endl
<< "Signed: " << numeric_limits<T>::is_signed << endl
<< "Non-sign bits: " << numeric_limits<T>::digits << endl
<< "Has inf: " << numeric_limits<T>::has_infinity << endl;
}
32
Thông tin về kiểu long long
Size in bytes: 8
Minimum: -9223372036854775808
Maximum: 9223372036854775807
Signed: true
Non-sign bits: 63
Has inf: false
33