NGÔN NGỮ LẬP TRÌNH C++

Chia sẻ bởi Lê Hồng Thu | Ngày 19/03/2024 | 9

Chia sẻ tài liệu: NGÔN NGỮ LẬP TRÌNH C++ thuộc Công nghệ thông tin

Nội dung tài liệu:

Ngôn ngữ
lập trình bậc cao

Trường đại học KTCN Thái Nguyên
Khoa Điện Tử
Bộ môn: Khoa học máy tính và kĩ thuật phần mềm
CHƯƠ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

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 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
Bước 1: chạy file install.exe
Bước 2: Chọn ổ đĩa sẽ cài đặt
Bước 3: Chọn đường dẫn
(enter luôn, bộ cài đã tự nhận dạng)
Bước 4: Thay đổi tên thư mục
Bước 5: Sử dụng
Bước 6: Bắt đầu viết code
Chương 2: Các thành phần cơ bản
2.1 Các thành phần cơ bản
2.2 Các kiểu dữ liệu và các cách khai báo
2.3 Biểu thức, câu lệnh và các phép toán
2.1 Các thành phần cơ bản

2.1.1 Bộ kí tự
2.1.2 Tên
2.1.3 Từ khóa
2.1.4 Chú thích
2.1.5 Cấu trúc chương trình

2.1.1 Bộ kí tự
Các chữ cái: a,b,c…z, A, B,…,Z
Các chữ số: 0,1,2,…,9
Các kí tự đặc biệt:
~ ! @ # $ % ^ & * ( ) _ + - = { }[ ]| / < > , . : ; ` “

2.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

2.1.3 Từ khóa
Từ dành riêng cho C++
Có ý nghĩa xác định trước, không thể thay đổi
Không được đặt tên trùng với từ khóa

2.1.4 Chú Thích
Chú thích nhiều hàng
Chú thích một hàng
2.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()
2.2 Các kiểu dữ liệu và
các cách khai báo
2.2.1 Khái niệm về kiểu dữ liệu (data type)
2.2.2 Kiểu dữ liệu
2.2.3 Khai báo biến
2.2.4 Khai báo hằng
2.2.5 Biến tham chiếu
2.2.6 Biến con trỏ
2.2.7 Chuyển đổi kiểu giá trị
2.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
2.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*
(con trỏ kí tự).
2.2.3 Khai báo biến

KiểuDữLiệu biến;
KiểuDữLiệu biến1, biến2,…, biếnn;
KiểuDữLiệu biến=giátrị;
KiểuDữLiệu biến1=giátrị1, biến2, …, biếnn=giátrịn;
Vd:
int a;
long a, b, c;
float t = 1.6;
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

2.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ị
2.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<cout<

2.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ỏ;

2.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
2.2.7 Chuyển đổi kiểu giá trị

Chuyển kiểu tự động
Khi kiểu dữ liệu của biểu thức khác với kiểu của biến nhận kết quả
Có thể gây ra mất dữ liệu
Chủ động chuyển kiểu
Cú pháp: (kiểu_cần_chuyển) biểu_thức
Phạm Vi Toàn Cục – Cục Bộ
Phạm vi toàn cục
Được định nghĩa ở phạm vi chương trình
Phạm vi cục bộ
Được định nghĩa ở phạm vi khối hay hàm
Toán tử phạm vi
::
int xyz = 1; // xyz là toàn cục
void Foo (int xyz) // xyz là cục bộ cho thân của Foo
{
if (xyz > 0) {
double xyz =2;
// xyz là cục bộ cho khối này
cout < }
else {
cout<< ::xyz;
}
}
2.3 Biểu thức, câu lệnh và
các phép toán
2.3.1 Biểu thức
2.3.2 Câu lệnh
2.3.3 Các toán tử
2.3.4 Thứ tự ưu tiên của các toán tử


2.3.1 Biểu Thức
Mục tiêu
Giới thiệu các toán tử cho việc soạn thảo các biểu thức
Nội dung
Toán tử toán học, quan hệ, luận lý, bit, tă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

2.3.2 Lệnh
Mục tiêu
Cung cấp cú pháp và cách sử dụng các lệnh
Nội dung
Lệnh đơn, lệnh phức
Lệnh khai báo
Lệnh gán
Lệnh rẽ nhánh: if, switch
Lệnh lặp: while, do..while, for
Lệnh nhảy: continue, break, goto
2.3.2 Lệnh Đơn & Lệnh Phức
Lệnh đơn là một sự tính toán được kết thúc bằng dấu chấm phẩy;

Nhiều lệnh đơn có thể kết nối lại thành một lệnh phức bằng cách rào chúng bên trong các dấu ngoặc xoắn.
{
int min, i = 10, j = 20;
min = (i < j ? i : j);
min + 5;
cout << min << ` `;
;
}
Ví dụ:
Lệnh rỗng
Lệnh vô dụng
2.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

Toán Tử Toán Học & Luận Lý
Toán Tử Luận Lý & Trên Bit
0: SAI (false)
Khác 0: ĐÚNG (true)
Toán Tử Tăng/Giảm & Khởi Tạo
Toá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 ";
Toán tử điều kiện
Toán tử phẩy
Toán tử lấy kích thước
Độ Ưu Tiên Của Các Toán Tử
Chương 3: Thao tác nhập xuất
Hàm printf
printf ("chuỗi định dạng"[, đối mục 1, đối mục 2,…]);
Hàm scanf
scanf ("chuỗi định dạng"[, đối mục 1, đối mục 2,…]);


Các dấu mô tả định dạng
%c : kí tự đơn
%s : Chuỗi
%d : Số nguyên thập phân có dấu
%f : Số chấm động (kí hiệu thập phân)
%e : Số chấm động (kí hiệu có số mũ)
%g : Số chấm động (%f hay %g)
%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)
Các kí tự điều khiển và kí tự đặc biệt

: Nhảy xuống dòng kế tiếp canh về cột đầu tiên.
: Canh cột tab ngang.
: 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 `
%%: In ra dấu %
scanf
 Khi sử dụng hàm phải khai báo tiền xử lý #include
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.
Xuất dữ liệu với cout
cout<cout<cout< < <cout<Nhập dữ liệu với cin
cin>>bien;
cin >>bien1>>bien2;
Định dạng xuất dữ liệu với cout
Sử dụng thư viện iomanip.h
<<<ios::showpoint, ios::fixed, ios::left, ios::right
<<Chương 4: Các cấu trúc điều khiển
Lệnh rẽ nhánh
Lệnh lựa chọn
Lệnh lặp
for
while
do while
Lệnh nhẩy

Lệnh rẽ nhánh if

if (biểu thức)
lệnh;
if (biểu thức)
lệnh 1;
else
lệnh 2;
Khi nào chúng ta nên sử dụng if-else và khi nào chúng ta nên sử dụng switch?
Vd: giải ptb2
Nhập a,b,c
Tính delta
Nếu (delta không âm)
Tính nghiệm thực x1,x2
In 2 nghiệm thực x1,x2
Ngược lại
Thông báo không có nghiệm thực
Lệnh rẽ nhánh switch
switch (biểu thức) {
case hằng 1: các lệnh; break;
...
case hằng n:
các lệnh; break;
default:
các lệnh;
}
Ví dụ về switch
switch (x) {
case 5: cout<< "x is 5"; break;
case 1: cout<<“hello”;
case 2: cout<<“xin chao”;
case 3: cout << "x is 1, 2 or 3"; break;
default: cout << "x is not 1, 2 nor 3";
}
Vd: Tính số ngày trong tháng
Nhập tháng (1->12)
Dùng switch(tháng)
Nhãn tương ứng với giá trị tháng là 1,3,5,7,8,10,12: thì 31 ngày
Nhãn tương ứng với giá trị tháng là 4,6,9,11: thì 30 ngày
Tháng 2: 28 ngày
Ngược lại: thông báo nhập sai tháng
Lệnh lặp while
while (biểu thức)
lệnh;
Lệnh lặp do-while
do
lệnh;
while (biểu thức);

Lệnh lặp for

for (biểu thức1; biểu thức2; biểu thức3)
lệnh;
khởi tạo
điều kiện dừng
điều khiển lặp
ví dụ hoạt động của for
do_sth;
Lệnh nhảy
Lệnh continue

Lệnh break
Lệnh goto
Lệnh return
dừng lần lặp hiện tại của một vòng lặp và nhảy tới lần lặp kế tiếp
nhả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ó.
Dữ liệu kiểu Mảng
Mảng (array)
Gồm một tập hữu hạn các đối tượng cùng kiểu và được sắp xếp liên tiếp trong bộ nhớ
Mỗi phần tử mảng được xác định bởi một chỉ 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
Số lượng phần tử trong mảng được gọi là kích thước của mảng (cố định; xác định trước)
Gồm mảng một chiều và mảng đa chiều
Biế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<Bộ Khởi Tạo Mảng
Mỗi mảng có một bộ khởi tạo mảng
Ví dụ




Chuỗi là một mảng kí tự
Ví dụ: so sánh sự khác nhau của
char str[] = "HELLO"; và char str[] = {`H`, `E`, `L`, `L`, `O`};

int nums[3] = {5, 10, 15};
Bộ khởi tạo mảng
int nums[3] = {5, 10};
nums[2] = ?
int nums[ ] = {5, 10, 15};
Kích thước mảng ?
Mảng Đa Chiều
int seasonTemp[3][4];
hàng đầu
hàng hai
hàng ba
Con Trỏ
Con trỏ đơn giản chỉ là địa chỉ của một vị trí bộ nhớ và cung cấp cách gián tiếp để truy xuất dữ liệu trong bộ nhớ
Ví dụ
it num = 10;
int *ptr1 = #

cout << *ptr1;
10
num
1000
1000
ptr1
2000
Bộ Nhớ Động - Tĩnh
Bộ nhớ động (heap)
Vùng nhớ được cấp phát động trong thời gian thực thi
Bộ nhớ tĩnh (stack)
Vùng nhớ được sử dụng để lưu trữ các biến toàn cục và lời gọi hàm
Hai toán tử được sử dụng
new: cấp phát
delete: thu hồi

void Foo (void)
{
int *ptr = new int;
char *str = new char[10];
//...
delete ptr;
delete [ ]str;
}
Một tham chiếu (reference) là một biệt hiệu (alias) cho một đối tượng.
Ví dụ

Ghi chú
Một tham chiếu phải luôn được khởi tạo khi nó được định nghĩa
Có thể khởi tạo tham chiếu tới một hằng

Tham Chiếu
double num1 = 3.14;
double &num2 = num1;
Truyền Bằng Trị - Con Trỏ - Tham Chiếu
int main (void)
{
int i = 10, j = 20;
Swap1(i, j); cout << i << ", " << j << ` `;
Swap2(&i, &j); cout << i << ", " << j << ` `;
Swap3(i, j); cout << i << ", " << j << ` `;
}
?
Hà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
NhapMang(a, n); //gọi hàm nhập


Hà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);
}
}


Sử dụng:
int a[100], n; //khai báo biến
NhapMang(a, n); //gọi hàm nhập


Kiể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;
NhapMang(p, n); //gọi hàm nhập

Hàm nhập cấp phát động
void NhapMang(int *&a, int &n){
cout << "Nhap N = "; cin >> n;
a = new int[n]; //cấp phát động
for (int i = 0; i < n ; i++){
cout << "a[" << i << "] = ";
cin >> a[i];
}
}

Sử dụng:
int *a, n; //khai báo
NhapMang(a,n);
….
delete [] a; //thu hồi
Xâu kí tự
Trong C++ không có kiểu dữ liệu cơ bản để lưu các xâu kí tự
Xâu là một mảng kí tự (mảng có kiểu char)
Ví dụ:
char str[20]; 
Biế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
Xâu kí tự
Mảng kí tự có thể lưu các xâu kí tự dài không quá dài khai báo của nó
Str có thể lưu "Hello" hay “Thai Nguyen"
Các kí tự trong xâu có địa chỉ liền kề nhau trong bộ nhớ (tính chất của mảng)
C++ quy ước để kết thúc một nội dung của một xâu kí tự bằng một kí tự null
(null là kí tự có mã 0 trong bảng mã ASCII)
Khai 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
Khai 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`,``};
Xâu str có 20 phần tử, có 6 phần tử đầu được khởi tạo
`` là kí tự null, dùng kí tự đặc biệt kết hợp với 0 để biểu diễn
char st[]={‘S`,‘V`,``};
Xâu st có đúng 3 phần tử, và đã khởi tạo
Khai báo xâu kí tự
Khai báo hợp lệ:
char mystring [ ] = { `H`, `e`, `l`, `l`, `o`, `` };
char mystring [ ] = "Hello";
Hai cách khai báo trên là tương đương
Các lệnh sau là không hợp lệ
mystring = "Hello"; 
mystring[ ] = "Hello"; 
mystring = { `H`, `e`, `l`, `l`, `o`, `` }; 
Khai 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ệ:
char* mystring = { `H`, `e`, `l`, `l`, `o`, `` };
char* mystring = "Hello";
Hai cách khai báo trên là tương đương
Con trỏ kiểu xâu được phép:
char *p;
p = "Hello Hanoi";
Thao tác với xâu kí tự
Gán giá trị cho xâu:
mystring[0] = `H`; 
mystring[1] = `e`; 
mystring[2] = `l`; 
mystring[3] = `l`; 
mystring[4] = `o`; 
mystring[5] = ``;
Rõ ràng cách này không khả thi 
Thao 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:
char *strcpy(char *dest, const char *src);
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)

Ví dụ về hàm strcpy
#include
#include
void main(){
char myName [20];
strcpy (myName, "Nguyen Van A");
cout<}

In ra:
Nguyen Van A
Nhậ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= ` `);
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
Ví dụ về: Nhập xâu từ bàn phím
dùng lệnh cin.getline
#include
void main(){
char s [100];
cin.getline(s,100);
cout<}
Nhập vào:
Nguyen Van B
In ra:
Nguyen Van B
Nhập xâu từ bàn phím
dùng lệnh gets
Cú pháp:
Khai báo thư viện stdio.h
char *gets(char *str);
Tác dụng:
Gán chuỗi kí tự nhập từ bàn phím vào biến xâu str, và trả về địa chỉ đầu của str
Ví dụ về: Nhập xâu từ bàn phím
dùng lệnh gets
#include
#include
void main(){
char str[100];
gets(str);
cout<}
Nhập vào:
Nguyen Van B
In ra:
Nguyen Van B
In 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<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
Bài tập: Viết hàm trả về độ dài xâu
Tên hàm là
Để trả về độ dài ->Kiểu trả về là
Đối số (đầu vào của hàm) là?

int length(char s[]){
int d=0;
while(s[d]!=``)d++;
return d;
}
Bất kỳ, theo quy tắc đặt tên, vd: length
Số nguyên, vd int
xâu kí tự
Ứng dụng hàm tính độ dài
#include
int length(char s[]){
int d=0;
while(s[d]!=``)d++;
return d;
}
void main(){
char st[100];
cout<<"Nhap xau: ";
cin.getline(st,100);
cout<<"Do dai xau: "<< length(st);
}
tính tổng các số xh trong xâu?
tôi đi chợ 3T mua 200 đ thịt, 30 đ cá.
=>230

Viết hàm đếm số từ trong xâu?
viết hàm đếm số từ bắt đầu bằng `tr`
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Lê Hồng Thu
Dung lượng: | Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)