37
K K thu thu t t l l p p tr tr ì ì nh nh C++ C++ v v à à c c á á c c b b à à i i to to á á n n THCN THCN

Bai Giang 1

  • Upload
    nbb3i

  • View
    6.140

  • Download
    5

Embed Size (px)

Citation preview

Page 1: Bai Giang 1

KKỹỹ thuthuậậtt llậậpp trtrììnhnhC++ C++ vvàà ccáácc bbààii totoáánn THCNTHCN

Page 2: Bai Giang 1

GiGiớớii thithiệệuu mônmôn hhọọcc

• Môn C++ giúp sinh viên nắm được phươngpháp lập trình cấu trúc. Nội dung gồm: Cácbước giải bài toán trên máy tính. Các khái niệmvề biến, hằng, toán tử, biểu thức, câu lệnh... Cấu trúc rẽ nhánh và lựa chọn. Cấu trúc lặp. Mảng. Hàm. Con trỏ.

• Một số ứng dụng và thuật toán cho bài toán CN• Công cụ lập trình sử dụng ở đây là C-Free 4.0

Page 3: Bai Giang 1

NNộộii dung dung trtrììnhnh bbààyy

• Máy tính, phần cứng, phần mềm• Các mức của ngôn ngữ lập trình• Ngôn ngữ bậc cao và C++• Các thành phần cơ bản của chương trình

C++• Các kiểu dữ liệu cơ bản trong C++• Các bước giải bài toán• Các loại lỗi và xử lý lỗi

Page 4: Bai Giang 1

MMááyy ttíínhnh

• Máy tính (máy vi tính hay máy điện toán) là thiết bị hay hệ thống được dùng để tínhtoán hay kiểm soát các hoạt động mà cóthể biểu diễn dưới dạng số hay quy luậtlôgic.

Page 5: Bai Giang 1

ThiThiếếtt bbịị phphầầnn ccứứngng• Phần cứng (hardware) là các thành phần cụ thể

của máy tính có thể chạm vào được như mànhình, chuột, bàn phím, máy in, máy quét, vỏ máytính, đơn vị vi xử lý CPU, bo mạch chủ, các loạidây nối, loa, ổ mềm, ổ cứng, ổ CDROM, ...

• Dựa trên chức năng và cách thức hoạt động tacó thể phân biệt phần cứng ra thành:– Thiết bị nhập (Input): Các bộ phận thu nhập dữ liệu

hay mệnh lệnh như là bàn phím, chuột... – Thiết bị xuất (Output): Các bộ phận trả lời, phát tín

hiệu, hay thực thi lệnh ra bên ngoài như là màn hình, máy in, loa, ...

Page 6: Bai Giang 1

PhPhầầnn mmềềmm mmááyy ttíínhnh

• Phần mềm (Software) là một tập hợp những câulệnh được viết bằng một hoặc nhiều ngôn ngữlập trình theo một trật tự xác định nhằm tự độngthực hiện một số chức năng hoặc giải quyết mộtbài toán nào đó.

• Phân loại phần mềm dựa trên phương thức hoạtđộng– Phần mềm hệ thống: Hệ điều hành, Driver, Firmware– Phần mềm ứng dụng: Văn phòng, trò chơi, …– Phần mềm chuyển dịch (gồm trình biên dịch và trình

thông dịch): Công cụ lập trình

Page 7: Bai Giang 1

CCáácc mmứứcc ccủủaa ngônngôn ngngữữ llậậpp trtrììnhnh

• Ngôn ngữ:– Ngôn ngữ trong máy tính là một công cụ để

thực hiện việc giao tiếp giữa người và máy.• Lệnh:

– Lệnh là tập hợp một nhóm các ký hiệu củamột ngôn ngữ nào đó nhằm giúp cho ngườilập trình có thể xây dựng chương trình trênngôn ngữ đó.

Page 8: Bai Giang 1

CCáácc mmứứcc ccủủaa ngônngôn ngngữữ llậậpp trtrììnhnh

Cấu trúc phân cấp của ngôn ngữ trên máy tính

Page 9: Bai Giang 1

CCáácc mmứứcc ccủủaa ngônngôn ngngữữ llậậpp trtrììnhnh

• Ngôn ngữ máy: Gồm một tập hợp các câu lệnhđược mã hóa theo các số nhị phân 0 và 1, đâylà ngôn ngữ mà máy hiểu được khi đưa vào trựctiếp.

• Hợp ngữ: Gồm một tập hợp các ký tự gợi nhớcho phép thuận tiện trong việc viết chương trìnhhơn. Một lệnh của hợp ngữ tương ứng với mộtlệnh của mã máy.

• Ngôn ngữ bậc cao: Gồm các ngôn ngữ đượcthiết kế cho người lập trình ứng dụng. Ví dụ: Pascal, C, C++, Java, Fortran, Cobol

Page 10: Bai Giang 1

BiênBiên ddịịchch vvàà chchạạyy chươngchương trtrììnhnh• Chú ý: Tất cả các chương trình viết bằng ngôn ngữ lập trình

bậc cao đều phải được chuyển sang ngôn ngữ máy trước khithực thi.

Lệnh trong C++

cout<<“Hello, World !”;

Lệnh mã máy

1110010100011101

1001110111011011

Kết quả chạy

Hello, World !

Dịch lệnh Thực hiện lệnh

Page 11: Bai Giang 1

GiGiớớii thithiệệuu C++C++• C++ là một loại ngôn ngữ lập trình bậc cao có

các chức năng hướng đối tượng.• Bjarne Stroustrup đã phát triển C++ theo

phương thức C++ = C + OO (Object Oriented)• Những bổ sung của C++ so với C bắt đầu với

sự thêm vào của khái niệm lớp, tiếp theo đó làcác khái niệm hàm ảo, toán tử quá tải, đa kếthừa và xử lý ngoại lệ.

• Một số công vụ hỗ trợ cho lập trình C++:– Borland C++ của hãng Borland– Microsoft Visual C++ của hàng Microsoft

Page 12: Bai Giang 1

CCáácc ththàànhnh phphầầnn cơcơ bbảảnn ccủủaachươngchương trtrììnhnh C++C++

• <các thư viện>: Nơi chứa các chức năng cơ bản do trình biên dịchcung cấp hoặc các chức năng do người lập trình đã định nghĩatrước đó. Các thư viện này thường có đuôi .h

• <các biến, hằng, hàm toàn cục>: Là nơi chứa các thành phần có thểđược sử dụng ở bất kỳ nơi nào trong chương trình

• <hàm main>: Là điểm vào bắt đầu của chương trình.

Page 13: Bai Giang 1

MMộộtt ssốố chchúú ý ý khikhi llậậpp trtrììnhnh

• Ngôn ngữ C++ phân biệt chữ hoa và chữthường. Ví dụ: float khác với Float

• Kết thúc mỗi câu lệnh phải có dấu ; (chấm phảy)• Không đặt tên biến, hằng, … trùng với các từ

khóa của C++. Ví dụ: void, const, …• Sử dụng chú thích:

– Sử dụng dấu // để chú thích trên 1 dòng lệnh– Sử dụng dấu /* và */ để chú thích trên nhiều dòng

lệnh

Page 14: Bai Giang 1

MMộộtt ssốố khkhááii niniệệmm vvàà câucâu llệệnhnh cơcơbbảảnn ccủủaa chươngchương trtrììnhnh C++C++

• Lệnh hiển thị ký tự lên màn hình:– Cú pháp:

cout << chuỗi ký tự 1 << chuỗi ký tự 2 << … << chuỗi ký tự n;Chú ý: Khi hiển thị thông tin trên màn hình ở dạng chuỗi ký tự

(1 dãy các chữ) ta cần phải bao chuỗi ký tự đó giữa 2 dấunháy kép. Ví dụ: “Chao cac ban”

– Ví dụ:• Hiển thị chữ Hello World !!! lên màn hình

Cách 1: cout << “Hello World !!!”;Cách 2: cout << “Hello” << “ World” << “ !!!”;

Page 15: Bai Giang 1

MMộộtt ssốố khkhááii niniệệmm vvàà câucâu llệệnhnh cơcơbbảảnn ccủủaa chươngchương trtrììnhnh C++C++

– Các ký tự đặc biệt được sử dụng để địnhdạng hiển thị dữ liệu:

• \t : Tab• \n (endl) : Xuống dòng• \\ : Hiển thị chữ \• Ví dụ:

– Hiển thị chữ Hello World !!! với mỗi chữ trên 1 dòngCách 1: cout << “Hello” << endl << “World !!!”;Cách 2: cout << “Hello \n World !!!”;

Page 16: Bai Giang 1

MMộộtt ssốố khkhááii niniệệmm vvàà câucâu llệệnhnh cơcơbbảảnn ccủủaa chươngchương trtrììnhnh C++C++

• Biến: Là thành phần mà giá trị của nó có thể bịthay đổi trong chương trình. Trong C++, muốndùng biến ta cần phải khai báo trước khi sử dụng.– Khai báo biến:

• Cú pháp: <kiểu dữ liệu> <tên các biến>;Chú ý: Nếu khai báo nhiều biến thì các biến cách nhau bởi dấu

phảy• Ví dụ:

int a; // Khai báo một biến số nguyên có tên là afloat x; // Khai báo một biến số thực có tên là xlong m, n; // Khai báo 2 biến số nguyên dài có tên là m và n

Page 17: Bai Giang 1

MMộộtt ssốố khkhááii niniệệmm vvàà câucâu llệệnhnh cơcơbbảảnn ccủủaa chươngchương trtrììnhnh C++C++

– Khai báo và khởi gán giá trị cho biến:• Cú pháp:

<kiểu dữ liệu> <tên biến> = <giá trị>;• Ví dụ:

int a = 6; // Khai báo một biến số nguyên có tên là a và a nhận giá trị ban đầu là 6.

float x = 5.67; // Khai báo một biến số thực có tên là x vàx nhận giá trị ban đầu là 5.67

long m = 9, n = 15; // Khai báo 2 biến số nguyên dài cótên là m và n; trong đó m nhận giá trị ban đầu là 9 và n nhận giá trị ban đầu là 15

Page 18: Bai Giang 1

MMộộtt ssốố khkhááii niniệệmm vvàà câucâu llệệnhnh cơcơbbảảnn ccủủaa chươngchương trtrììnhnh C++C++

– Hiển thị giá trị của biến lên màn hình• Cú pháp:

cout << tên biến 1 << tên biến 2 << …. << tên biến n;

• Ví dụ:int a = 6;float b = 6.78;cout << a; // Hiển thị giá trị của a lên màn hìnhcout << a << b; // Hiển thị giá trị của a và b lên màn hình

Page 19: Bai Giang 1

MMộộtt ssốố khkhááii niniệệmm vvàà câucâu llệệnhnh cơcơbbảảnn ccủủaa chươngchương trtrììnhnh C++C++

• Hằng: Là thành phần mà giá trị của nó khôngthể bị thay đổi trong chương trình. Trong C++, muốn dùng hằng ta cần phải khai báo giá trịtrước khi sử dụng.– Khai báo và khởi gán giá trị cho hằng:

• Cú pháp: const <kiểu dữ liệu> <tên hằng> = <giá trị>;Chú ý: Người ta quy ước tên hằng số luôn để chữ hoa

• Ví dụ:const int HANG1 = 6; // Khai báo một hằng số nguyên có

tên là HANG1 và giá trị của hằng số này là 6const float PI = 3.14, E = 2.72; // Khai báo 2 hằng số thực

có tên là PI và E; trong đó PI nhận giátrị là 3.14 còn E nhận giá trị 2.72

Page 20: Bai Giang 1

MMộộtt ssốố khkhááii niniệệmm vvàà câucâu llệệnhnh cơcơbbảảnn ccủủaa chươngchương trtrììnhnh C++C++

– Hiển thị giá trị của hằng lên màn hình• Cú pháp:

cout << tên hằng 1 << tên hằng 2 << …. << tên hằng n;• Ví dụ:

const int HANG1 = 6;const float PI = 3.14, E = 2.72;cout << HANG1; // Hiển thị giá trị của HANG1 lên

màn hìnhcout << PI << E; // Hiển thị giá trị của hằng PI và E lên

màn hình

Page 21: Bai Giang 1

MMộộtt ssốố khkhááii niniệệmm vvàà câucâu llệệnhnh cơcơbbảảnn ccủủaa chươngchương trtrììnhnh C++C++

• Câu lệnh tổng quát hiển thị dữ liệu lênmàn hình:– Cú pháp:

cout << tham số 1 << tham số 2 << … << tham số n;Tham số: Là dữ liệu kiểu chuỗi, biến, hằng, …

– Ví dụ:int xep_thu = 6;float diem_trung_binh = 9.4;cout << “Ban Trung co diem trung binh la:” << diem_trung_binh

<< “ va xep thu “ << xep_thu << “ o trong lop !” << endl;

Page 22: Bai Giang 1

MMộộtt ssốố khkhááii niniệệmm vvàà câucâu llệệnhnh cơcơbbảảnn ccủủaa chươngchương trtrììnhnh C++C++

• Câu lệnh nhập dữ liệu cho biến từ bànphím– Cú pháp:

cin >> biến 1 >> biến 2 >> …. >> biến n;– Ví dụ:

• Nhập giá trị cho biến số nguyên x rồi hiển thị giá trịcủa x lên màn hình

int x;cout << “Hay nhap gia tri cho bien x: “;cin >> x;cout << “Gia tri cua bien x la: “ << x << endl;

Page 23: Bai Giang 1

MMộộtt ssốố khkhááii niniệệmm vvàà câucâu llệệnhnh cơcơbbảảnn ccủủaa chươngchương trtrììnhnh C++C++

• Toán tử– Các toán tử cơ bản

+ (cộng), - (trừ), * (nhân), / (chia)– Các toán tử với kiểu số nguyên

/ (chia lấy phần nguyên), % (chia lấy phần dư)– Ví dụ:

b2 – 4ac = b*b – 4*a*c– Thứ tự ưu tiên các toán tử: Như trong toán

học (Ưu tiên trong ngoặc trước, tiếp đến lànhân chia trước, cộng trừ sau)

Page 24: Bai Giang 1

MMộộtt ssốố khkhááii niniệệmm vvàà câucâu llệệnhnh cơcơbbảảnn ccủủaa chươngchương trtrììnhnh C++C++

• Biểu thức– Biểu thức đơn: Là biểu thức chỉ có 1 toán

hạng. Toán hạng này có thể là một giá trị cụthể, có thể là một hằng hoặc biến.

• Ví dụ: 98 tong_day_so PI– Biểu thức có toán tử: Là biểu thức trong đó

có sự kết hợp giữa các toán hạng và toán tử.• Ví dụ:

a + b a + b * c PI * E 23 + 56

Page 25: Bai Giang 1

MMộộtt ssốố khkhááii niniệệmm vvàà câucâu llệệnhnh cơcơbbảảnn ccủủaa chươngchương trtrììnhnh C++C++

• Phép gán– Cú pháp:

<biến> = <biểu thức>;

– Quy tắc: Tính toán giá trị của biểu thức ở bên về phải, được giá trị bao nhiêu sẽ đưa vào cho biến.

– Ví dụ:int a = 7, b = 9, c;c = 5;c = a + b;a = a * b + c;b = b + 1;

Page 26: Bai Giang 1

CCáácc kikiểểuu ddữữ liliệệuu cơcơ bbảảnn trongtrong C++C++

như kiểulong

như kiểulong

TrênWindows làsố nguyên

32 bit

TrênWindows là

4 bytes

int

0 đến4294967295

-2147483648 đến

2147483647

Số nguyên32 bit

4 byteslong

0 đến 65535-32763 đến32762

Số nguyên16 bit

2 bytesshort

0 đến 255-128 đến 127Ký tự hay sốnguyên 8 bit

1 bytecharKhông dấuCó dấu

Miền giá trịMô tảĐộ dàiTên

Page 27: Bai Giang 1

CCáácc kikiểểuu ddữữ liliệệuu cơcơ bbảảnn trongtrong C++C++

true hoặc falseKiểu logic1 bytebool

1.2E-4932 đến 1.2E+4932Số thựcdạng dấuphảy động

10 byteslong double

1.7E-308 đến 1.7E+308Số thựcdạng dấuphảy động

8 bytesdouble

3.4E-38 đến 3.4E+38Số thựcdạng dấuphảy động

4 bytesfloat

Miền giá trịMô tảĐộ dàiTên

Page 28: Bai Giang 1

ÉÉpp kikiểểuu

• Ép kiểu được sử dụng để đưa kiểu dữ liệucủa một biến hay một hằng về dạng dữliệu có kiểu mong muốn tại một thời điểmxác định.– Cú pháp:

(kiểu dữ liệu) <tên biến>;– Ví dụ:

int a = 6;float b = (float) a; //Ép biến a về số thực và gán cho

b, tuy nhiên a vẫn là số nguyên

Page 29: Bai Giang 1

ÉÉpp kikiểểuu

• Ép kiểu trong biểu thức:– Quy tắc tính toán trong biểu thức:

<số nguyên> <toán tử> <số nguyên> => <số nguyên><số thực> <toán tử> <số thực> => <số thực><số nguyên> <toán tử> <số thực> => <số thực>

– Ví dụ:int a = 5;float x = 6.7;cout << x * a << endl;cout << (int) x * a << endl;

Page 30: Bai Giang 1

CCáácc bưbướớcc gigiảảii bbààii totoáánn

1. Đầu bài: Tính tiền Sưu Tập2. Phân tích bài toán

– Tính giá trị của một bộ sưu tập gồm các đồng 5 xu và 1 xu.

– Input : Số đồng nickel (5 xu) và penny (1 xu).– Output : Giá trị tiền của bộ sưu tập bằng đôla và xu.– Biết rằng :

1 đồng nickel = 5 xu1 đồng penny = 1 xu1 đôla = 100 xu

Page 31: Bai Giang 1

CCáácc bưbướớcc gigiảảii bbààii totoáánn

3. Thiết kế thuật toán1. Nhập số đồng nickel và đồng penny2. Tính tổng giá trị xu3. Đổi giá trị xu sang đôla và xu lẻ4. Hiển thị kết quả đôla và xu lẻ

4. Làm mịn (refine) thuật toánTính tổng giá trị xu

1. Tổng giá trị xu = 5*Số đồng nickel + Số đồng penny.Đổi giá trị xu sang đôla và xu lẻ

1. Số đôla = Phần nguyên của Tổng giá trị xu chia 100.2. Số xu lẻ = Phần dư của Tổng giá trị xu chia 100.

Page 32: Bai Giang 1

CCáácc bưbướớcc gigiảảii bbààii totoáánn5. Cài đặt

#include <iostream.h>

void main(){

// Khai bao bienint nickel;int penny;int giatrixu;int dola;int xule;

// Nhap so dong nickel va pennycout<<"Nhap so dong nickel : ";cin>>nickel;

cout<<"Nhap so dong penny : ";cin>>penny;

Page 33: Bai Giang 1

CCáácc bưbướớcc gigiảảii bbààii totoáánn// Tinh tong gia tri xugiatrixu = 5*nickel + penny;

// Tinh gia tri dola va xu ledola = giatrixu / 100;xule = giatrixu % 100;

// Hien thi ket quacout<<"Bo suu tap cua ban co gia tri la "<<dola<<" dola va“

<<xule<<" xu";}

Page 34: Bai Giang 1

CCáácc bưbướớcc gigiảảii bbààii totoáánn

6. Kiểm tra chương trìnhNhap so dong nickel : 37Nhap so dong penny : 25Bo suu tap cua ban co gia tri la 2 dola va 10 xu

Page 35: Bai Giang 1

MMộộtt ssốố loloạạii llỗỗii thưthườờngng ggặặpp vvàà ccááchchththứứcc xxửử lýlý llỗỗii

• Lỗi cú pháp xuất hiện khi dịch chương trình– Thiếu dấu chấm phảy– Biến chưa khai báo– Gõ sai tên biến– Không tương thích kiểu dữ liệu…– => Sửa lỗi dựa trên lời báo lỗi của chương trình dịch

• Lỗi xuất hiện khi chạy chương trình– Chia cho không– Khai căn của số âm– Nhập sai kiểu dữ liệu…– => Xem lại đoạn lệnh gây lỗi khi chạy

Page 36: Bai Giang 1

MMộộtt ssốố loloạạii llỗỗii thưthườờngng ggặặpp vvàà ccááchchththứứcc xxửử lýlý llỗỗii

• Lỗi logic xuất hiện do thiết kế thuật toánkhông đúng– Lỗi rất đa dạng– => Xem lại quá trình cài đặt thuật toán và thiết kế

thuật toán– => Xen kẽ các câu lệnh in kết quả trung gian– => Sử dụng chương trình debug

Page 37: Bai Giang 1

ThThựựcc hhàànhnh trêntrên mmááyy

1. Chạy Visual C++ 6.02. Tạo một dự án (project)3. Tạo tập tin nguồn4. Soạn thảo lệnh5. Dịch chương trình6. Chạy chương trình7. Sửa lỗi (nếu có)