Bài tập về nhà (CLB):
Chương 3:
Câu 1:
Nêu các kiểu dữ liệu cơ sở
Nêu các kiểu dữ liệu cho dạng số và số byte của mỗi kiểu.
I. Các kiểu dữ liệu cơ sở:
Có 5 kiểu dữ liệu cơ sở:
1) char kiểu kí tự ( character) ( 1 byte)
2) int kiểu số nguyên ( integer)
3) float kiểu số thực
4) double kiểu số thực có độ chính xác kép
5) void kiểu không có giá trị nào cả
II. các kiểu dữ liệu cho dạng số:
Kiểu nguyên | Phạm vi biểu diễn | Kích thước |
int | -32768 -> 32 767 | 2 byte |
unsigned int | 0 -> 65 535 | 2 byte |
long [int] | -2 147 482 648 -> 2 147 483 647 | 4 byte |
unsigned long [int] | 0 -> 4 294 967 295 | 4 byte |
Kiểu | Phạm vi biểu diễn | Số chữ số có nghĩa | Kích thước byte |
float | 3.4E-38 -> 3.4E+38 | 7 – 8 | 4 byte |
double | 1.7E-308 -> 1.7E+308 | 15 – 16 | 8 byte |
long double | 3.4E-4932 -> 1.1E4932 | 17-18 | 10 byte |
Câu 2:
Viết họ tên, quê quán theo bảng mã ASCII :
Ho….. ten: 72-11 …. 116-101-110
Que…quan: 81-117-101…. 113-117-97-110
Chương 4:
Câu 1: Nêu cấp bậc của sự chỉnh kiểu dữ liệu số học ( ép kiểu)
1. Sự hiệu chỉnh kiểu dữ liệu số học:
Trong một biểu thức, có thể tồn tại nhiều toán hạng với kiểu số học khác nhau ( Số nguyên, số thực). Nguyên tắc máy sẽ chuyển kiểu đơn giản lên cao hơn để qui đổi kết quả.
Chiều cấp bậc tăng dần được sắp xếp theo dãy sau:
int -> long -> float -> double -> long double
Không thể có chiều chuyển đổi ngược lại. Nghĩa là một số thực double cũng không được đổi về kiểu float.
Không có kiểu char và short trong dãy trên.
2. Sự ưu tiên cho kiểu số:
CChúng ta biết rằng các phép tính số học không được định nghĩa cho kiểu char và short. C tự hiệu chỉnh dữ liệu loại char và short xuất hiện trong biểu thức thành kiểu int trước khi tính toán . Đây là một sự hiệu chỉnh tự động.
CChúng ta biết rằng các phép tính số học không được định nghĩa cho kiểu char và short. C tự hiệu chỉnh dữ liệu loại char và short xuất hiện trong biểu thức thành kiểu int trước khi tính toán . Đây là một sự hiệu chỉnh tự động.
3. Sự chuyển đổi cho kiểu kí tự char:
Trong bảng mã ASCII , mỗi kí tự có 2 giá trị: bản thân kí tự và mã kí tự.
Ví dụ:
Kí tự ‘A’ có mã là 65.
Vậy máy sẽ đem mã kí tự ra để tính toán.
Kết quả ‘A + 1’ = 66.
4. Cố ý chuyển kiểu giá trị (typecast) hay ép kiểu:
C/C++ cho phép trộn lẫn các kiểu dữ liệu với nhau.
Đồng thời mỗi loại dữ liệu phản ứng khác nhau đối với 1 phép toán. Vì vậy đôi lúc chúng ta cần cố ý ra lệnh cho máy chuyển đổi kiểu dữ liệu để nhận được kết quả mong muốn.
int i, m,n;
float x;
x = m/n; // Phep chia nay cho ket qua la phan nguyen cua phep chia
x = m/ float(n);
// phep chia nay cho ket qua la so thuc vi day la phep chia so nguyen cho so thuc
float(n) được gọi là typecast, nghĩa là cưỡng ép chuyển kiểu dữ liệu của n thành kiểu float.
Ngoài ra ta cũng có thể viết (float ) n
Câu 2: Các hàm số học chuẩn ( dùng cho số nguyên và số thực)
Các hàm sau đây được định nghĩa sẵn và sử dụng với đối số là số thực hoặc các số nguyên.
Ta kí hiệu tham số nguyên là i, tham số thực là f. Các ham này nằm trong tệp
#include
Việc chuyển một số thực sang một số nguyên được thực hiện nhờ 2 hàm chuẩn:Hàm làm tròn và hàm cắt.
Hàm cắt floor(x) cho ta một số nguyên là phần nguyên của x.
Ví dụ:
floor(3.146)
Hàm làm tròn ceil (x) cho ta một só nguyên x gần nhất và không nhỏ hơn x.Hàm | Kiểu giá trị nhận được | Tác dụng |
abs(i) | int | Trả lại giá trị tuyệt đối của số nguyên i |
fabs(d) | double | Trả lại giá trị tuyệt đối của số thực d. |
sin(d) | double | Trả lại giá trị hàm sin |
cos(d) | double | Trả lại giá trị hàm cos |
cosh(d) | double | Trả lại giá trị hàm cosh |
tan(d) | double | Trả lại giá trị hàm tan |
exp(d) | double | Trả lại giá trị e mũ |
log(d) | double | Trả lại giá trị logarit cơ số tự nhiên ln(d) |
pow(d1, d2) | double | Trả lại giá trị d1 mũ d2 |
floor(d) | double | Hàm cắt tròn số |
ceil(d) | double | Hàm làm tròn số |
fmod(d1,d2) | double | Hàm phần dư của phép chia d1/d2 |
sqrt(d) | double | Hàm khai căn bậc 2 |
srand(d) | void | Khoi tao bộ tạo số ngẫu nhiên. Không có giá trị trả lại |
2. Các phép tính theo bit (logic số học):
Ngoài các phép tính số học ra, số nguyên còn được dùng với các phép tính theo bit như
NOT ( ^ )
AND (&)
OR ( |)
Các phép tính này liên quan đến cách biểu diễn nhị phân trong máy.
Số nhị phân là các số được biểu diễn bằng chữ số 0 và chữ số 1.
Mỗi chữ số biểu diễn một số nhị phân nào đó được gọi là bit ( Binary digit = chữ số nhị phân)
Tám bit hợp thành một byte.
Toán tử theo bit:
Toán tử | Ý nghĩa |
& | Phép AND theo từng bit |
| | Phép OR theo từng bit |
^ | Phép XOR theo từng bit |
~ | Phép đảo bit |
Phép toán logic XOR:
2 toán hạng giống nhau sẽ cho kết quả là 0, hai toán hạng khác nhau cho kết quả là 1.
Phép tính XOR có rất nhiều ứng dụng: tạo mật mã, tạo con trỏ di chuyển trên màn hình đồ họa.
PHÉP TOÁN DỊCH SỐ HỌC >> VÀ <<
Phép tính nhân một số nguyên với một số lũy thừa của 2 có thể thực hiện một cách nhanh hơn nếu dùng >> ( Shift Right) và << ( Shift Left).
Cách viết:
I << M nghĩa là dịch sang trái số nguyên I đi M bít, tương đương với I*2^M
I >> M nghĩa là dịch sang phải số nguyên I đi M bít , tương đương với I/ 2^M
Đây là 2 phép toán đặc biệt hay được dùng khi xử lý số nguyên để khai thác máy nhằm nâng cao tốc độ tính toán.
//Bitwise.cpp
//{L}printBinary
//Demonstration of bit manipulation
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// Display a byte in binary
#include
using namespace std;
void printBinary( const unsigned char val)
{
for( int i=7; i>= 0; i--)
if( val & (1<< i)) cout<< "1"; else cout<<"0"; } //A macro to save tying #define PR(STR,EXPR)\ cout<< STR; printBinary(EXPR); cout<>getval; a = getval;
PR(" a in binary:", a);
//...........................
cout<<"Enter a number between 0 and 255: "; cin>> getval; b = getval;
PR(" b in binary:", b);
//............................
PR(" a|b = ", a|b);
PR(" a&b = ", a&b);
PR(" a^b = ", a^b);
PR(" ~a = ", ~a);
PR(" ~b = ", ~b);
system("pause");
return 0;
}
Câu 3: Viết chương trình tính:
a) z = E^( A + sin(x) – x)
b) y = 2Ax – 4log(x)
// a) Viet chuong trinh tinh z = E^ ( A + sin(x) - x)
#include"iostream"
#include"math"
using namespace std;
int main(){
double z;
int E, A;
float x;
cout<<" Input the value of variable :";
cout<<" \nEnter E = "; cin >> E;
cout<<" \nEnter A = "; cin >> A;
cout<<" \nEnter x = "; cin >> x;
z = pow( E, ( A + sin(x) - x));
cout<<" \nResult : \n";
cout<<" z = E^ ( A + sin(x) - x) = " << z<< endl;
system("pause");
return 0;
}
// b) Viet chuong trinh tinh y = 2Ax - 4 log(x)
#include"iostream"
#include"math"
using namespace std;
int main(){
double y;
int A, x;
cout<<" Input the value of variable :";
cout<<" \nEnter A = "; cin >> A;
cout<<" \nEnter x = "; cin >> x;
y = 2*A*x - 4*(log(x)/log(10));
cout<<" \nResult : \n";
cout<<" y = 2Ax - 4 log(x)) = " << y << endl;
system("pause");
return 0;
}
Chương 5: Vào / ra dữ liệu
Thao tác trình bày hình thức in ra ( manipulator)
setw( do rong)
setw là từ viết tắt của set width
setw( do_rong) | |
setprecision ( int n) | Qui định số chỗ dành cho phần thập phân nếu số in ra là số thực và biểu diễn theo kiểu có dấu thập phân |
setfill ( char c) | Lấp ( fill) các kí tự c vào những chỗ trống khi in ra với setw. Kí tự ngầm định là dấu cách. |
dec | In ra số thập phân thông thường |
hex | In ra dạng hệ mười sáu, hexa |
oct | In ra số hệ 8 |
ws() | Nhẩy qua, không in các ký tự các ký tự trắng whitespace ( space, newline) |
endl() | Xuống dòng mới ( new line) như ‘\n’ |
ends() | Cho kí tự null ‘\0’ ra luồng ra ( output stream). Điều này thường được dùng trong trường hợp luồng ra được định hướng sang hướng khác |
flush() | Lùa hết dữ liệu trong bộ nhớ đệm (buffer) tới luồng ra. |
setioflag() | Thiết lập cờ chuyển đổi tương ứng |
resetiosflags() | Xóa cờ đã chọn |
fixed | Để in ra số thực dạng bình thường có dấu chấm |
sciencetific | Để in ra số thực dạng số mũ với E |
left | Căn lề trái |
right | Căn lề phải |
showpos | Hiển thị dấu + của số dương |
// example 5-1
#include"iostream"
#include"iomanip"
using namespace std;
int main()
{
cout<< 45 << -45 << endl;
cout<< setw(4) << setfill('0')
<< 45 << -45<< endl;
cout<< setw(4) << setfill('0') << 45
<< setw(4) << setfill('0') << -45<< endl;
cout<< setw(10) << 45 << -45<< endl;
cout<< setw(10)<< 45<< setw(10)<< -45<< endl;
cout<< setw(10) << setfill('0') << 45
<< setw(10) << setfill('0') << -45<< endl;
system("pause");
return 0;
}
//Example 5-2
#include"iostream"
#include"iomanip"
using namespace std;
int main()
{
int n =90;
cout<< "So " << n << " thap phan he tam la : " << oct << n << endl
<< " va so hexa la " << n << endl;
system("pause");
return 0;
}
#include"iostream"
#include"iomanip"
using namespace std;
int main()
{
float real;
real = 123.4567;
cout<< setiosflags( ios:: scientific) << real << endl;
cout<< setiosflags( ios:: fixed) << real;
system("pause");
return 0;
}
// Example 5-5
#include"iostream"
#include"iomanip"
using namespace std;
int main()
{
int i;
for( i =11; i<= 20; i++)
{
cout<< setw(4) << i << " ";
cout<< setw(2) << oct << i << " ";
cout<< setw(3) << setfill('0') << hex << i << endl;
cout<< dec << setfill(' '); // thiet lap ve dinh dang ban dau
}
system("pause");
return 0;
}
0 comments:
Post a Comment