Lịch Sử Của C++ C++ dựa trên ngôn ngữ lập trình C C được phát minh trước 1970 bởi Dennis Ritchie Ngôn ngữ cài đặt hệ thống cho hệ điều hành Unix C++ được phát minh bởi Bijarne Str
Trang 1Giảng viên: Đỗ Duy Cốp
Ngôn ngữ
lập trình bậc cao
Trang 2CHƯƠNG 1: Giới thiệu về C++,
Lịch Sử Của C++
Cài đặt
Môi trường Borland C++
Thiết lập môi trường
Trang 3Lịch Sử Của C++
C++ dựa trên ngôn ngữ lập trình C
C được phát minh trước 1970 bởi Dennis Ritchie
Ngôn ngữ cài đặt hệ thống cho hệ điều hành Unix
C++ được phát minh bởi Bijarne Stroustroup, bắt đầu năm 1979
Phiên bản thử nghiệm, phiên bản thương mại
Các chuẩn ngôn ngữ C++ hiện tại được điều khiển bởi
ANSI và ISO
Trang 4Bước 1: chạy file install.exe
Trang 5Bước 2: Chọn ổ đĩa sẽ cài đặt
Trang 6Bước 3: Chọn đường dẫn
(enter luôn, bộ cài đã tự nhận dạng)
Trang 7Bước 4: Thay đổi tên thư mục
Trang 8Bước 5: Sử dụng
Trang 9Bước 6: Bắt đầu viết code
Trang 132.1.2 Tên
Còn được gọi là định danh
Được sử dụng để tham khảo đến Tên biến, tên hàm, tên kiểu, và tên macro
Phải bắt đầu bằng chữ cái, _
Phân biệt chữ hoa, chữ thường
Không được đặt trùng từ khóa
Trang 142.1.3 Từ khóa
không thể thay đổi
từ khóa
Trang 15int main (void){
int workDays = 5; // so ngay lam viec trong tuanfloat workHours = 7.5; // so gio lam viec trong ngayfloat payRate = 33.50; // so tien phai tra moi giofloat weeklyPay; // tong so tien phai tra moi tuanweeklyPay = workDays * workHours * payRate;
cout << "Weekly Pay = " << weeklyPay << '\n';
}
Chú thích nhiều hàng
Trang 162.1.5 Cấu trúc một chương trình
Khai báo thư viện
Các khai báo hàm
Hàm main()
Trang 182.2.1 Khái niệm về kiểu dữ liệu
(data type)
Mỗi giá trị phải thuộc một kiểu dữ liệu nào đó
Kiểu dữ liệu trong máy tính
là có giới hạn trên và giới
hạn dưới
Trang 192.2.2 Kiểu dữ liệu:
Số Nguyên & Số Thực, kí Tự & Chuỗi
Biến số nguyên có thể được định nghĩa là
kiểu short , int , hay long ,
số không dấu thêm tiền tố unsigned
Biến số thực có thể được định nghĩa là
kiểu float hay double
Biến kí tự được định nghĩa là kiểu char
Biến chuỗi được định nghĩa kiểu char*
Trang 202.2.3 Khai báo biến
unsigned int w=10, delta = 20, total, x, y = 1;
Biến có thể được thay đổi giá trị bởi lệnh gán
Trang 212.2.4 Khai báo hằng
const tên_hằng = biểu_thức;
const kiểu_dữ_liệu tên_hằng = biểu_thức;
Hằng không thay đổi giá trị
Trang 222.2.5 Biến tham chiếu
Được gán một lần bằng toán tử &
(& là toán tử lấy địa chỉ)
Ví dụ:
int a = 10; //khai báo biến a có giá trị 10
int &p = a; //biến p tham chiếu đến biến a
cout << p; //xuất ra số 10, vì tham chiếu đến a
p = 100;
cout<<a; // xuất ra số 100
cout<<p; // xuất ra số 100
Trang 232.2.6 Biến con trỏ
Biến con trỏ lưu giữ địa chỉ
Biến con trỏ có kích thước 4 byte
Một địa chỉ cần 4 byte
( 2 byte lưu Segment và 2 byte lưu Offset)
Cú pháp: kiểu_dữ_liệu
* tên_biến_con_trỏ;
Trang 242.2.6 Biến con trỏ và cách sử dụng
int a=10, b=20;
int *p, *q;
p = &a; //p lưu địa chỉ của a
q = &b; // q lưu địa chỉ biến b
*q = a; //gán giá trị a cho vùng nhớ đang lưu trong q
p = q; //sao chép địa chỉ trong q vào p
*p = *q; //(copy) gán giá trị trong vùng nhớ của q
// vào vùng nhớ của p
Trang 252.2.7 Chuyển đổi kiểu giá trị
Trang 26if (xyz > 0) { double xyz =2;
// xyz là cục bộ cho khối này cout <<xyz;
} else { cout<< ::xyz;
} }
Trang 28tăng/giảm, khởi tạo, điều kiện, lấy kích thước
Độ ưu tiên của các toán tử
Chuyển kiểu
Trang 30Ví dụ:
Lệnh rỗng Lệnh vô dụng
Trang 312.3.3 Các toán tử
Toán Tử Toán Học & Luận Lý
Toán Tử Luận Lý & Trên Bit
Toán Tử Tăng/Giảm & Khởi Tạo
Toán Tử Điều Kiện
Trang 32Toán Tử Toán Học & Luận Lý
Trang 33Toán Tử Luận Lý & Trên Bit
! Phủ định luận lý !(5 == 5) // được 0
& & Và luận lý 5 < 6 && 6 < 6 // được 0
|| Hoặc luận lý 5 < 6 || 6 < 5 // được 1
0 : SAI (false) Khác 0 : ĐÚNG (true)
Trang 34Toán Tử Tăng/Giảm & Khởi Tạo
++ Tăng một (tiền tố) ++k + 10 // được 16++ Tăng một (hậu tố) k++ + 10 // được 15 Giảm một (tiền tố) k + 10 // được 14 Giảm một (hậu tố) k + 10 // được 15
Toán Tử Ví dụ Tương đương với
Trang 35Toán Tử Điều Kiện, Phẩy,
Lấy Kích Thước
min = (m < n ? m++ : n++) + 100;
min = (m < n ? mCount++ , m : nCount++ , n);
cout << "float size = " << sizeof (float) << " bytes\n";
Toán tử điều kiện
Toán tử phẩy
Toán tử lấy kích thước
Trang 36Độ Ưu Tiên Của Các Toán Tử
phải
+ -
+ +
Một ngôi Phải tới trái
Trang 37Chương 3: Thao tác nhập xuất
Trang 38 %u : Số nguyên thập phân không dấu
%x : Số nguyên hex không dấu
%o : Số nguyên bát phân không dấu
l : Tiền tố dùng kèm với %d, %u, %x, %o để chỉ số nguyên dài (ví
dụ %ld)
Trang 39Các kí tự điều khiển và kí tự đặc biệt
\n : Nhảy xuống dòng kế tiếp canh về cột đầu tiên.
\t : Canh cột tab ngang.
\r : Nhảy về đầu hàng, không xuống hàng.
\a : Tiếng kêu bip.
\\ : In ra dấu \
\" : In ra dấu "
\' : In ra dấu '
Trang 40 Khi sử dụng hàm phải khai báo tiền xử lý
#include <stdio.h>
scanf: tên hàm, phải viết bằng chữ thường.
khung định dạng: được đặt trong cặp nháy kép ("
") là hình ảnh dạng dữ liệu nhập vào.
đối mục 1,…: là danh sách các đối mục cách nhau bởi dấu phẩy, mỗi đối mục sẽ tiếp nhận giá trị
nhập vào.
Trang 41Xuất dữ liệu với cout
Trang 42Nhập dữ liệu với cin
cin>>bien;
cin >>bien1>>bien2;
Trang 43Định dạng xuất dữ liệu với cout
Trang 44Chương 4: Các cấu trúc điều khiển
Trang 48default: cout << "x is not 1, 2 nor 3"; }
Trang 50Lệnh lặp while
lệnh;
Trang 51Lệnh lặp do-while
do
lệnh;
Trang 53ví dụ hoạt động của for
do_sth;
Trang 54nhảy ra bên ngoài những lệnh lặp hoặc switch và kết thúc chúng
nhảy trực tiếp đến nhãn được chỉ định
cho phép một hàm trả về một giá trị cho thành phần gọi nó.
Trang 55Dữ liệu kiểu Mảng
kiểu và được sắp xếp liên tiếp trong bộ
nhớ
số biểu thị vị trí của phần tử trong mảng
Phần tử đầu tiên của mảng luôn có chỉ số 0
kích thước của mảng (cố định; xác định
Trang 56Biến Mảng
Được định nghĩa bằng cách đặc tả kích thước mảng và kiểu các phần tử của nó
Ví dụ: int heights[10];
Truy xuất 1 phần tử qua chỉ số mảng
Ví dụ: heights[0]= 210; cout<< heights[3];
Truy xuất phần tử không tồn tại lỗi vượt ngoài biên
Ví dụ: cout<<heights[-1]; cout<<heights[10];
Trang 58Mảng Đa Chiều
Mùa xuân Mùa hè Mùa thu Mùa đôngSydney 26 34 22 17
Trang 59it num = 10;
int *ptr1 = & num;
cout << * ptr1;
10 num 1000
1000 ptr1 2000
Trang 60 delete : thu hồi
void Foo (void){
int *ptr = new int;
char *str = new char[10];
//
delete ptr;
delete [ ]str;
Trang 61 Một tham chiếu (reference) là một biệt hiệu (alias) cho một đối tượng
Trang 62Truyền Bằng Trị - Con Trỏ - Tham Chiếu
// Truyền bằng trị (đối tượng)
void Swap1 (int x, int y)
// Truyền bằng địa chỉ (con trỏ)
void Swap2 (int *x, int *y)
// Truyền bằng tham chiếu
void Swap3 (int &x, int &y)
?
?
Trang 63Hàm nhập mảng
void NhapMang(int a[ ], int &n){
cout << "Nhap N = "; cin >> n;
for (int i = 0; i < n ; i++){
cout << "a[" << i << "] = "; cin >> a[i]; }
} Sử dụng: int a[100], n; //khai báo biến
Trang 64Hàm nhập mảng kiểu con trỏ
void NhapMang(int *a, int &n){
cout << "Nhap N = "; cin >> n;
for (int i = 0; i < n ; i++){
cout << "a[" << i << "] = "; cin >> *(a+i); }
Trang 65Kiểu kết hợp
void NhapMang(float *a, int &n){
cout << "Nhap N = "; cin >> n;
for (int i = 0; i < n ; i++){
cout << "a[" << i << "] = "; cin >> a[i]; }
}
Sử dụng:
float a[100], n, *p; //khai báo biến
p = a;
Trang 66Hàm nhập cấp phát động
void NhapMang(int *&a, int &n){
cout << "Nhap N = "; cin >> n;
Trang 67Biến str có thể lưu một xâu kí tự với độ dài cực đại là 20 kí tự
Chú ý: kiểu char chỉ lưu 1 kí tự đơn
Trang 68Xâu kí tự
không quá dài khai báo của nó
Str có thể lưu "Hello" hay “Thai Nguyen"
Trang 69Khai báo biến xâu kí tự
(giống như khai báo cho mảng)
char s[100]; //khai báo s
không có khởi tạo
Trang 70Khai báo biến xâu kí tự
(giống như khai báo cho mảng)
char str[20]={'h','a','n','o','i','\0'};
Xâu str có 20 phần tử, có 6 phần tử đầu được khởi tạo
Trang 71Khai báo xâu kí tự
Khai báo hợp lệ:
char mystring [ ] = { 'H', 'e', 'l', 'l', 'o', '\0' };
char mystring [ ] = "Hello";
Hai cách khai báo trên là tương đương
Trang 72Khai báo xâu kí tự
Biến con trỏ kiểu char được hiểu như là biến xâu kí tự
Khai báo hợp lệ:
'\0' };
char* mystring = "Hello";
Con trỏ kiểu xâu được phép:
char *p;
p = "Hello Hanoi";
Trang 73Thao tác với xâu kí tự
Trang 74Thao tác với xâu kí tự
Gán giá trị cho xâu
Sử dụng hàm strcpy của thư viện string.h
Cú pháp:
Tác dụng:
Copy xâu src (nguồn) sang dest (xâu đích)
Xâu nguồn không bị biến đổi ( const char *src )
Trang 76Nhập xâu kí tự từ bàn phím
dùng lệnh cin.getline
Cú pháp:
Khai báo thư viện iostream.h
istream& getline(char* str , int len , char d= '\n');
Tác dụng:
Gán chuỗi kí tự nhập từ bàn phím
(với độ dài tối đa là len ) vào biến xâu str
Chú ý: Không nên dùng cin>>str để nhập xâu
Trang 80In xâu kí tự ra màn hình
khi in biến xâu kí tự ra màn hình
C++ sẽ in liên tiếp các kí tự của xâu cho đến khi gặp kí tự null
Ví dụ:
char s[100]="Nguyen Van A";
cout<<s;
Chú ý: khi khởi tạo, thao tác về xâu
phải có kí tự null đánh dấu kết thúc xâu
Trang 81Bài tập: Viết hàm trả về độ dài xâu
Trang 83 tính tổng các số xh trong xâu?
30 đ cá.
=>230
Trang 84 Viết hàm đếm số từ trong xâu?
viết hàm đếm số từ bắt đầu bằng 'tr'