Bài giảng Tin học - Lập trình trên ngôn ngữ C++

Bài giảng Tin học - Lập trình trên ngôn ngữ C++

HỌC KỲ II – LẬP TRÌNH TRÊN NGÔN NGỮ C++

-Giới thiệu về ngôn ngữ C++,

-Tại sao chọn C++?

-Các thành phần của ngôn ngữ lập trình nói chung,

-Các hệ thống lập trình phục vụ C++,

-Các khái niệm cơ bản trong C++,

-Cấu trúc chung của chương trình,

-Các loại câu lệnh và cấu trúc chương trình,

-Tổ chức vào ra.

 

pptx 87 trang ngocvu90 5430
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Tin học - Lập trình trên ngôn ngữ C++", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
HỌC KỲ II – LẬP TRÌNH TRÊN NGÔN NGỮ C++Giới thiệu về ngôn ngữ C++,Tại sao chọn C++?Các thành phần của ngôn ngữ lập trình nói chung,Các hệ thống lập trình phục vụ C++,Các khái niệm cơ bản trong C++,Cấu trúc chung của chương trình, Các loại câu lệnh và cấu trúc chương trình,Tổ chức vào ra.Cơ sở lập trình (C++)1LỊCH SỬ RA ĐỜI VÀ PHÁT TRIỂNDennis Ritchie (Bell Labs) xây dựng từ 1969 – 1973,Bjame Stroustrup phát triển từ 1979,Phiên bản C++ thương mại đầu tiên: 14/10/1985,C++: C PreProcessor,Cơ sở lập trình (C++)2Dennis Ritchie 1999(09/09/1941 – 12/10/2011)Bjame StroustrupMục đích: Tạo một ngôn ngữ thủ tục (imperative (procedural) systems implementation language) lai giữa cấp thấp và cấp cao để xây dựng và phát triển hệ điều hành Unix, Cách viết thuận tiện cho người lập trình, Cung cấp công cụ để có thể xây dựng chương trình trên ngôn ngữ máy một cách tối ưu.Định hướng: cho người lập trình chuyên nghiệp.Đặc điểm: khai thác tối đa khả năng làm việc với địa chỉ.So sánh: PASCAL khai thác tối đa khả năng làm việc với giá trị và phục vụ trình bày giải thuật.Lưu ý: C không phải là tập con của C++!Cơ sở lập trình (C++)3LỊCH SỬ RA ĐỜI VÀ PHÁT TRIỂNMở rộng ngôn ngữ: thư viện chuẩn (Standard Template Libraries – STL).Nhược điểm:Cú pháp, kế thừa từ C, có nhiều điểm không thuận tiện,Có quá nhiều khả năng trong một số câu lệnh dễ dẫn đến sai sót khó phát hiện,Thiếu một số khả năng cần thiết,Một số chức năng: kém hiệu quả.Cơ sở lập trình (C++)4LỊCH SỬ RA ĐỜI VÀ PHÁT TRIỂNCÁC THÀNH PHẦN CỦA NGÔN NGỮHai thành phần cơ sở: Bảng chữ cái, Cú pháp (Syntax) xây dựng các thành phần dẫn xuất, quy tắc viết câu lệnh,Các kiểu dữ liệu (chuẩn, được ngôn ngữ trực tiếp cung cấp). Lưu ý: Chỉ cần nhớ các ký tự hay dùng và các quy tắc thường sử dụng.Cơ sở lập trình (C++)5Bảng chữ cái26 chữ cái La tinh in hoa và thường,10 chữ số Arập,Các ký tự:Dấu cách, nháy đơn(‘), nháy kép (“), gạch dưới (_),+ - * / ( ) [ ] { } = . , ; : \ | # % ^ & ! ~ ?Tổng cộng: 91 ký tự.Cơ sở lập trình (C++)6TÊNTên là khái niệm quan trọng nhất trong mọi ngôn ngữ lập trình,Trong C++: Tên là dãy ký tự độ dài bất kỳ, Bao gồm chữ số, chữ cái hoặc dấu gạch dưới, Bắt đầu bằng chữ cái hoặc dấu gạch dưới, Phân biệt chữ hoa và chữ thường. Ví dụ; tên đúng: a, bc12, a_a, A_aTên sai: 12bc (bắt đầu bằng chữ số), a.b, a b (chứa dấu chấm hoặc dấu cách).Cơ sở lập trình (C++)7Hai loại tên: Từ khóa (keywords) và tên do người sử dụng đặt (user’s identifiers).Từ khóa: tên được sử dụng với ý nghĩa quy định sẵn, không được dùng vào mục đích khác.Cơ sở lập trình (C++)8TÊNasmautoboolbreakcasecatchcharclassconstconst_castcontinuedefaultdeletedodoubledynamic_castelseenumexplicitexportexternfalsefloatforfriendgotoifinlineintlongmutablenamespacenewoperatorprivateprotectedpublicregisterreinterpret_castreturnshortsignedsizeofstaticstatic_caststructswitchtemplatethisthrowtruetrytypedeftypeidtypenameunionunsignedusingvirtualvoidvolatilewchar_twhile Để tham khảo.Không cần thuộc!Lưu ý: Không nhất thiết phải biết và thuộc hết từ khóa!Tên do người sử dụng đặt: mọi biến dùng trong chương trình: Đều phải được đặt tên, Phải được khai báo (để xác định kiểu dữ liệu) trước khi sử dụng. Khai báo: được thực hiện bằng lệnh khai báo.Mỗi khai báo: tồn tại phạm vi tác động.Cơ sở lập trình (C++)9TÊNCẤU TRÚC CHƯƠNG TRÌNH C++Ví dụ CT C++:Ví dụ 1:Cơ sở lập trình (C++)10/*VIDU.CPP*/#include using namespace std;int	main(){	cout using namespace std;int	main(){	cout ;Cơ sở lập trình (C++)14CẤU TRÚC CHƯƠNG TRÌNHKHAI BÁONguyênMột sốKiểu dữ liệuThường dùngThựcKý tựXâuLôgicFileCông thức siêu ngữKiểu Bộ nhớPhạm vi biểu diễnintnguyên4 bytes-2147483648  2147483647longnguyên4 byteslong longnguyên8 bytes~24 chữ sốfloatThực4 bytes~7 chữ sốdoubleThực8 bytes~15 chữ sốlong doubleThực10 bytescharKý tự1 bytesstringXâuCơ sở lập trình (C++)15CẤU TRÚC CHƯƠNG TRÌNHKHAI BÁOMáy 32 bítVí dụ:	int m,n,i,j,k;	float a,b;	char c;	string s1,s2;	double x;Cơ sở lập trình (C++)16CẤU TRÚC CHƯƠNG TRÌNHKHAI BÁO Ví dụ CT C++: #include using namespace std; int m,n; int main() { cout >m>>n; cout >Phép tính bít đẩy phải (Shift right)~Phép tính bít phủ định NOTCách viết biểu thức (số học và các loại biểu thức khác): Có thể viết trên nhiều dòng , xuống dòng sau phép tính, tên hoặc hằng, Trên mỗi dòng: tuyến tính từ trái sang phải, mỗi vị trí: một ký tự, Chỉ dùng dấu ngoặc tròn để thay đổi trình tự thực hiện các phép tính.Trình tự thực hiện các phép tính: Trong ngoặc trước, ngoài ngoặc sau, Nhân chia trước, cộng trừ sau, Cùng mức ưu tiên: từ trái qua phải.Cơ sở lập trình (C++)20BIỂU THỨC SỐ HỌCQuy tắc xác định kiểu dữ liệu kết quả,Chỉ định kiểu dữ liệu thực hiện (ép kiểu),Lưu ý phép chia: Với các biến nguyên, Với các trường hợp còn lại.Ví dụ: 	int b=3;	 b/3 cho kết quả 1;	 double(b)/2 cho kết quả 1.5;Cơ sở lập trình (C++)21BIỂU THỨC SỐ HỌCChỉ thị gán: = ;Ví dụ: 	 i=j+5;	x1=(-b-sqrt(b*b-4*a*c))/2/a;Lưu ý:Trong biểu thức được dùng các hàm toán học sqrt (lấy căn bậc 2), abs ( giá trị tuyệt đối),exp(x) ex, . . . Khai báo thư viện #include Không được bỏ qua dấu phép nhân: 4*a*cCơ sở lập trình (C++)22CHỈ THỊ GÁNHàm lấy căn bậc 2x1=(-b-sqrt(b*b-4*a*c))/2/a;Trình tự thực hiện:Cơ sở lập trình (C++)23CHỈ THỊ GÁNBước 1: Tính địa chỉ của biến nhận giá trịBước 2: Tính giá trị biểu thức ở vế phảiBước 3: Gán giá trị cho biếnThực hiện phép chia (/) với các số nguyên,Phép tính một ngôi với biến nguyên: ++, --:i++; // Lấy giá trị của i để tính toán sau đó tăng i lên 1++i; // Tăng i lên 1 sau đó lấy giá trị của i để tính toáni--; // Lấy giá trị của i để tính toán sau đó giảm i đi 1--i; // Giảm i đi 1 sau đó lấy giá trị của i để tính toánCơ sở lập trình (C++)24CHỈ THỊ GÁNint	i = 5, j = 4;i ++;-- j;++ i;j  3i  6i  7Khai báo biến có gán giá trị đầuThứ tự thực hiện các toán tử ++ và -- phụ thuộc vào vị trí của chúng (trước hay sau) so với biến:Cơ sở lập trình (C++)25CHỈ THỊ GÁN#include using namespace std;int	main(){	int	i, j = 5;	i = ++j;	cout >=Tổng quát:	biến op= biểu thức	tương đương:	biến = biến op (biểu thức)Cơ sở lập trình (C++)27CHỈ THỊ GÁNa += 27;a = a + 27;f /= 9.2;f = f / 9.2;i *= j + 2;i = i * (j + 2);BIỂU THỨC QUAN HỆ VÀ LÔGICCác phép tính quan hệ:	 	lớn hơn	>=	lớn hơn hay bằng	==	bằng	!=	không bằng (khác)Tất cả đều cho kết quả 1 khi so sánh đúng và 0 trong trường hợp ngược lại.Cơ sở lập trình (C++)28Cơ sở lập trình (C++)29BIỂU THỨC QUAN HỆ VÀ LÔGICNNLT C hỗ trợ các phép tính lô gic:	&&	và (and)	||	hoặc (or)	!	phủ định (not)Tất cả đều cho kết quả 1 hoặc 0 tương ứng các trường hợp ĐÚNG hoặc SAIint	i, j = 10, k = 28;i = ((j > 5) && (k 24);Điều kiệnCHƯƠNG TRÌNH RẼ NHÁNHChỉ thị gán có điều kiện:(điều kiện) ? BT1 : BT2Biểu thức nhận giá trị BT1 nếu điều kiện khác 0 (ĐÚNG), các trường hợp khác nhận giá trị BT2Cơ sở lập trình (C++)30int	 i, j = 100, k = -1;i = (j > k) ? j : k;Nếu (j > k)	i = j;Ngược lại	i = k; int	i, j = 100, k = -1;i = (j y) ? x : y)Chỉ thị if:Có 2 dạng: Không đầy đủ, Đầy đủ.Cơ sở lập trình (C++)31CHƯƠNG TRÌNH RẼ NHÁNHĐiều kiệnS1SaiĐúngif (điều kiện) s1;Dạng không đầy đủVí dụ:if (b>max) max=b;Điều kiện: để trong ngoặc.Một câu lệnhVí dụ:# include using namespace std;int a,b,maxab;int main(){ cin>>a>>b; maxab=a; if (b>maxab) maxab=b; cout using namespace std;int a,b,t;int main(){ cin>>a>>b; if (a b) t=a; else t=b;Các lệnh if có thể lồng nhau,Nếu không có ngoặc: else kết nối với lệnh if gần nhấtCơ sở lập trình (C++)36CHƯƠNG TRÌNH RẼ NHÁNHint i = 100;if(i > 0)	if(i > 1000)	cout 0) {	if(i > 1000)	 cout #include using namespace std;ifstream fi("EQU1.INP");ofstream fo("EQU1.OUT");float a,b,c,d,e,f,dt,dx,dy,x,y;int main(){ fi>>a>>b>>c>>d>>e>>f; dt=a*e-d*b; dx=c*e-f*b; dy=a*f-d*c; if(dt!=0) {x=dx/dt;y=dy/dt; fo #include using namespace std;ifstream fi (“VD1.INP”);ofstream fo (“VD1.OUT”);int main(){ int a,b,t1; fi>>a>>b; t1=a+b; fo #include #include using namespace std;ifstream fi ("triangle.inp");ofstream fo ("triangle.out");int main(){ float x1,x2,x3,y1,y2,y3; float a,b,c,p,s; fi>>x1>>y1>>x2>>y2>>x3>>y3; a=sqrt(((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))); b=sqrt(((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3))); c=sqrt(((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3))); p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c))/2; fo #include using namespace std;int n,k,b,c,t,maxk,sl;long long p;float tb;ifstream fi ("NUMBERS.INP");ofstream fo ("NUMBERS.OUT");int main(){ fi>>n; int a[n+1]; for(int i = 1;i >a[i]; fi>>k>>b>>c; t=0; for (int i=1;i t) p*=a[i]; Cách tính tổngCách tính tíchTìm MAX , chưa biết phần tử đầu fo maxk) maxk=a[i]; if(maxk==-10000000) fo int n,ineg;int a[]={5,0,2,-1,6,4};int main(){ineg=-1; for(int i=0;i =0) continue; ineg=i; cout using namespace std;int n,k,j;ifstream fi ("ins_num.inp");ofstream fo ("ins_num.out");int main(){fi>>n;int a[n+1]; for(int i=0;i >a[i]; fi>>k; j=0; for(int i=n-1;i>=0;--i) if(a[i]>k)a[i+1]=a[i]; else{j=i+1;break;} a[j]=k; for(int i=0;i 0) {b++; m>>=1;}Câu lệnh khốiVí dụ: Cho dãy số nguyên a = (a1, a2,. . ., an).Xét tổng s(p,q) = ap+ap+1+ . . .+aq (0 using namespace std;int n,p,q,tg; long long t,tmax;ifstream fi("int_sum.inp");ofstream fo ("int_sum.out");int main(){fi>>n; long long b[n+1]; b[0]=0; for(int i=1;i >tg;b[i]=b[i-1]+tg;} tmax=(long long)-1000000*1000000000; while( !fi.eof() ) { fi>>p>>q; t=b[q]-b[p-1]; if(t>tmax) tmax=t; } fo 0, intdo {t=a%b; a=b; b=t;}while (b>0); Tìm ƯSCLN của a và bVí dụ:Cho dãy số nguyên a = (a1, a2, . . ., an). Hãy lập trình đưa các số âm lên đầu dãy, các số không âm xuống cuối, trong mỗi phần – các phần tử giữ nguyên trình tự trước sau như trong dãy ban đầu.Ví dụ, n = 8, a = (5, -1, 0, 3, -3, 0, 4, -2).Kết quả sau khi xử lý: a = (-1, -3, -2, 5, 0, 3, 0, 4). Dữ liệu: vào từ file TWOSEQ.INP: Dòng đầu tiên chứ số nguyên n (2 n 105), Dòng thứ 2 chứa n số nguyên a1, a2, . . ., an (|ai| 109,i).Kết quả: đưa ra file TWOSEQ.OUT trên một dòng dãy đã biến đổi.Cơ sở lập trình (C++)63CHU TRÌNH DO WHILE#include using namespace std;int n,kt,tg;ifstream fi ("twoseq.inp");ofstream fo ("twoseq.out");int main(){fi>>n;int a[n];for(int i =0;i >a[i]; do {kt=0; for(int i=1;i =0 & a[i] để sử dụng,Người lập trình có thể tự mình thành lập hàm để mở rộng ngôn ngữ trong phạm vi CT của mình.Hàm có thể có tham số hoặc không có tham số,Nếu có tham số: các tham số nêu trong khai báo hàm được gọi là danh sách tham số hình thức.Cơ sở lập trình (C++)66HÀM (FUNCTION)Liên quan tới việc dịch và tổ chức thực hiện.Khai báo hàm: kiểu trả về 	tên hàm(danh sách tham số hình thức) { //khai báo các biến của hàm	 //các lệnh thực thi	 return giá trị trả về; //hàm void không có giá trị trả về } Cơ sở lập trình (C++)67HÀM (FUNCTION)int, float, double, . . .voidKhông gán giá trị cho tên hàmCó thể không cóCó thể bỏ qua câu lệnh này với hàm kiểu voidCó thể không có.Nếu có: về cơ bản giống cách khai báo biến trong CTThân (body) hàm header của hàmC hỗ trợ 2 cách truyền tham số:Truyền giá trị (call by value)Truyền địa chỉ (call by address)Mở rộng với C++Truyền tham chiếu (call by reference)Cơ sở lập trình (C++)68HÀM (FUNCTION)TRUYỀN THAM SỐTồn tại trong các ngôn ngữ khác (trừ FORTRAN và C )Hàm sẽ xử lý trên bản sao của tham sốHàm không thể thay đổi giá trị của tham số được.Được dùng trong các trường hợp cần chuyển dữ liệu vào bên trong hàm để xử lý, tính toánCác ví dụ trên đều dùng kiểu truyền tham số bởi giá trịVí dụ hàm có sẵn của C truyền giá trị:float sqrt(float);double pow(double, double);Cơ sở lập trình (C++)69HÀM (FUNCTION)TRUYỀN THAM SỐ:truyền giá trịVí dụ: truyền theo giá trị.#include using namespace std;ofstream fo (“VD2.INP”);void	change(int v){	v *= 100;	fo using namespace std;ofstream fo (“VD3.INP”);void	change(int *v){	(*v) *= 100;	fo using namespace std;ofstream fo (“VD4.INP”);void	change(int &v){	v *= 100;	fo using namespace std;ofstream fo (“VD5.INP”);void	 fct(int a, int *b, int &c){	a *= 2;	(*b) += a;	c = a + (*b);	fo using namespace std;ifstream fi ("pass_arr.inp");ofstream fo ("pass_arr.out");int n,a[1000],b[1000],c[1000];void arr_c(int u[],int v[],int r[],int k){for(int i=0;i v[i])? u[i]:v[i];}int main(){fi>>n; for(int i=0;i >a[i]; for(int i=0;i >b[i]; arr_c(a,b,c,n); for(int i=0;i using namespace std;void	change(int v);ofstream fo (“VD2.INP”);int	main(){	int var = 5;	change(var);	 fo #include using namespace std;int m,n,k;int a[102][102]={0};ifstream fi ("dfs_p.inp");ofstream fo ("dfs_p.out");void nhap_dl(){fi>>m>>n; for(int i=1;i >a[i][j]; }Cơ sở lập trình (C++)81HÀM (FUNCTION). Đệ quyKỹ thuật hàng rào:Mảng aCách nhanh nhất xóa 0 mảng avoid loang(int x, int y){a[x][y]=k; if(a[x-1][y]==1) loang(x-1,y); if(a[x+1][y]==1) loang(x+1,y); if(a[x][y-1]==1) loang(x,y-1); if(a[x][y+1]==1) loang(x,y+1);}void xuat_kq(){fo Hằng ký tự: ‘b’, ‘6’, ‘C’Hằng xâu: “Europa”, “Aurora”. “pi = 3.14159”Khai báo biến kiểu ký tự: char c,c1,z[12],;Khai báo biến kiểu xâu: string s, st, sb, p[50];Các phép tính với xâu: Phép gán: s=“Andromeda”; st=s; Cộng xâu: s=“123”; st=“ab”; sb=sa+sb; Các phép tính quan hệ (!=, ==, =,>)Cơ sở lập trình (C++)84XÂU (STRING)sb: 123abSo sánh theo thứ tự từ điểns=“abc”; s1=“abcd”;s2=“ac”;s =s2 SaiNhập/Xuất xâu: fi>>s>>s1; fo #include using namespace std;int main(){ string s=("ABCD12345abcdABCDE2"); string ns=("0123456789"); int l,k,m,p,q,i,j; ofstream fo ("xl_xau.out"); l=s.size(); k=s.find("BC"); m=s.rfind("BC"); p=s.find_first_of('C'); q=s.find_last_of('C'); i=s.find_first_of(ns); j=s.find_last_not_of(ns); fo<<"L = "<<l<<endl; fo<<"K = "<<k<<endl; fo<<"M = "<<m<<endl;Cơ sở lập trình (C++)87XỬ LÝ XÂU fo<<"P = "<<p<<endl; fo<<"Q = "<<q<<endl; fo<<"I = "<<i<<endl; fo<<"J = "<<j<<endl; fo.close();}Khai báo và gán giá trị đầu

Tài liệu đính kèm:

  • pptxbai_giang_tin_hoc_lap_trinh_tren_ngon_ngu_c.pptx