Bài giảng Nhập môn lập trình - Chương 7: Giới thiệu tổng quan về lập trình - Phạm Minh Tuấn

Nhập môn lập trình  
Trình bày: …; Email: …@fit.hcmus.edu.vn  
Dữ liệu có cấu trúc  
Dữ liệu mảng với kích thước cố định  
Ứng dụng mảng trong lập trình  
Các vấn đề tìm hiểu mở rộng kiến thức  
nghề nghiệp  
Thuật ngữ và bài đọc thêm tiếng Anh  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
2
• Khai báo các biến để lưu trữ 1 SV  
char mssv[8];  
char hoten[30];  
char ntns[9];  
char phai;  
// “0912345”  
// “Nguyen Van A”  
// “01/01/91”  
// ‘n’  
float toan, ly, hoa;  
// 8.5 9.0 10.0  
• Truyền thông tin 1 SV cho hàm  
void xuat(char* mssv, char* hoten, char* ntns, char phai,  
float toan, float ly, float hoa);  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
4
• Nhận xét  
– Đặt tên biến khó khăn và khó quản lý  
– Truyền tham số cho hàm quá nhiều  
– Tìm kiếm, sắp xếp, sao chép,… khó khăn  
– Tốn nhiều bộ nhớ  
– …  
• Ý tưởng  
– Gom những thông tin của cùng 1 SV thành  
một kiểu dữ liệu mới => Kiểu struct  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
5
• Cú pháp  
struct <tên kiểu cấu trúc> {  
<kiểu dữ liệu> <tên thành phần 1>;  
…
<kiểu dữ liệu> <tên thành phần n>;  
};  
• Ví dụ  
struct Point2D {  
int x;  
int y;  
};  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
6
• Cú pháp khai báo tường minh  
struct <tên kiểu cấu trúc> {  
<kiểu dữ liệu> <tên thành phần 1>;  
…
<kiểu dữ liệu> <tên thành phần n>;  
} <tên biến 1>, <tên biến 2>;  
• Ví dụ  
struct Point2D {  
int x;  
int y;  
} p1, p2;  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
7
• Cú pháp khai báo không tường minh  
struct <tên kiểu cấu trúc> {  
<kiểu dữ liệu> <tên thành phần 1>;  
…
<kiểu dữ liệu> <tên thành phần n>;  
};  
struct <tên kiểu cấu trúc> <tên biến 1>, <tên biến 2>;  
• Ví dụ  
struct Point2D {  
int x;  
int y;  
};  
struct Point2D p1, p2;  
// C++ có thể bỏ từ khóa struct  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
8
• Cú pháp  
typedef struct {  
<kiểu dữ liệu> <tên thành phần 1>;  
…
<kiểu dữ liệu> <tên thành phần n>;  
} <tên kiểu cấu trúc>;  
<tên kiểu cấu trúc> <tên biến 1>, <tên biến 2>;  
• Ví dụ  
tyepdef struct {  
int x;  
int y;  
} Point2D;  
Point2D p1, p2;  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
9
• Cú pháp  
struct <tên kiểu cấu trúc> {  
<kiểu dữ liệu> <tên thành phần 1>;  
…
<kiểu dữ liệu> <tên thành phần n>;  
} <tên biến> = {<giá trị 1>, <giá trị 2>, …, <giá trị n>};  
• Ví dụ  
struct Point2D {  
int x;  
int y;  
} p1= {2912, 1706}, p2;  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
10  
• Đặc điểm  
– Không thể truy xuất trực tiếp.  
– Thông qua toán tử thành phần cấu trúc .  
Hay còn gọi là toán tử chấm (dot  
operation).  
<tên biến cấu trúc>.<tên thàn phần>  
• Ví dụ  
struct Point2D {  
int x, y;  
} p = {2912, 1706};  
void show(Point2D p) { printf(“x = %d, y = %d\n”, p.x, py); }  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
11  
• Có 2 cách  
<biến cấu trúc đích> = biến cấu trúc nguồn  
<biến cấu trúc đích>.<tên thành phần> = <giá trị>  
• Ví dụ  
struct Point2D {  
int x, y;  
} p1 = {2912, 1706}, p2;  
void main() {  
p2 = p1;  
p2.x = p1.x;  
p2.y = p1.y * 2;  
}
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
12  
• Các khai báo cần thiết  
#include <iostream>  
using namespace std;  
typedef struct {  
double x, y;  
} Point2D;  
typedef struct {  
Point2D ver[3];  
} Triangle;  
void inputPoint2D(Point2D& p);  
void showPoint2D(Point2D p);  
void gravCenter(Triangle t, Point2D& p);  
void inputTriangle(Triangle& t);  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
13  
• Các định nghĩa hàm  
void inputPoint2D(Point2D& p) {  
cout << “ + Coor X = “; cin >> p.x;  
cout << “ + Coor Y = “; cin >> p.y;  
}
void showPoint2D(Point2D p) {  
cout << “(” << p.x << “, ” << p.y << “(”;  
}
void gravCenter(Triangle t, Point2D& p) {  
p.x = (t.ver[0].x + t.ver[1].x + t.ver[2].x) / 3;  
p.y = (t.ver[0].y + t.ver[1].y + t.ver[2].y) / 3;  
}
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
14  
• Các định nghĩa hàm  
void inputTriangle(Point2D& p) {  
for (int i = 0; i < 3; i++) {  
cout << “Vertex ” << i + 1 << “: ” << endl;  
inputPoint2D(t.ver[i]);  
}
}
void main() {  
Triangle t; Point2D p;  
inputTriangle(t);  
gravCenter(t, p);  
cout << “Gravity center: ”;  
showPoint2D(p);  
}
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
15  
• Các khai báo cần thiết  
#include <iostream>  
using namespace std;  
typedef struct {  
long num, denom;  
} Fraction;  
void greatestDivisor(long a, long b);  
void reduce(Fraction& p);  
Fraction add(Fraction p, Fraction q);  
Fraction sub(Fraction p, Fraction q);  
void showFraction(Fraction p);  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
16  
• Các định nghĩa hàm  
void greatestDivisor(long a, long b) {  
// Viết như các ví dụ trước…  
}
void reduce(Fraction& p) {  
long gcd = greatestDivisor(p.num, p.denom);  
p.num /= gcd; p.denom /= gcd;  
}
Fraction add(Fraction p, Fraction q) {  
Fraction r;  
r.num = p.num * q.denom + p.denom * q.num;  
r.denom = p.denom * q.denom;  
return r;  
}
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
17  
• Các định nghĩa hàm  
Fraction sub(Fraction p, Fraction q) {  
q.num = -q.num;  
return add(p, q);  
}
void showFraction(Fraction p) {  
reduce(p); // Tối giản trước khi in ra  
cout << p.num << “/” << p.denom;  
}
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
18  
• Khái niệm  
– Là một kiểu dữ liệu có cấu trúc do người lập  
trình định nghĩa.  
– Biểu diễn một dãy các biến có cùng kiểu. Ví  
dụ: dãy các số nguyên, dãy các ký tự…  
– Kích thước được xác định ngay khi khai báo  
và không bao giờ thay đổi.  
– NNLT C luôn chỉ định một khối nhớ liên tục  
cho một biến kiểu mảng.  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
20  
Tải về để xem bản đầy đủ
pdf 37 trang baolam 16400 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Nhập môn lập trình - Chương 7: Giới thiệu tổng quan về lập trình - Phạm Minh Tuấn", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_nhap_mon_lap_trinh_chuong_5_gioi_thieu_tong_quan_v.pdf