Bài giảng Kỹ thuật lập trình: Bài 6 do TS. Ngô Hữu Dũng biên soạn cung cấp cho người học các kiến thức: Hàm nhập phân số - Trả về kiểu cấu trúc, tham biến và kiểu con trỏ, truyền tham biến dùng kiểu con trỏ, hàm nhập mảng kiểu cấu trúc, hàm nhập mảng kiểu cấu trúc – dùng con trỏ,...
Kỹ thuật lập trình Bài – Một số tốn kiểu cấu trúc TS Ngơ Hữu Dũng Bài tốn phân số Xây dựng liệu cấu trúc struct t_phso{ int tuso, mauso; }; Tử số Mẫu số Viết hàm nhập giá trị 152 Điều kiện nhập: Mẫu số ≠ Cách 1: Hàm trả kiểu cấu trúc Khơng có đối số Kiểu trả hàm cấu trúc Cách 2: Truyền tham biến Đối số tham biến Hàm khơng có kiểu trả struct t_phso nhapPS(); void nhapPS2(struct t_phso*); Kỹ thuật lập trình | DHTH11C | HK1 | 2016-2017 Ngơ Hữu Dũng Hàm nhập phân số - Trả kiểu cấu trúc struct t_phso nhapPS(){ // Trả kiểu struct struct t_phso ps; printf("Nhap tu so: "); scanf("%d",&ps.tuso); do{ printf("Nhap mau so (!=0): "); scanf("%d",&ps.mauso); }while(ps.mauso==0); // Kiểm tra mẫu số return ps; 10 } 11 struct t_phso a; 12 a = nhapPS(); // Gán giá trị hàm cho biến 153 Kỹ thuật lập trình | DHTH11C | HK1 | 2016-2017 Ngô Hữu Dũng Hàm nhập phân số - Truyền tham biến void nhapPS2(struct t_phso *ps)// Tham biến { printf("Nhap tu so: "); scanf("%d",&ps->tuso); // Dùng dấu -> do{ printf("Nhap mau so (!=0): "); scanf("%d",&ps->mauso); }while(ps->mauso==0); // Kiểm tra mẫu số } 10.struct t_phso b; // Gọi hàm, tham biến: &b 11.nhapPS2(&b); 154 Kỹ thuật lập trình | DHTH11C | HK1 | 2016-2017 Ngô Hữu Dũng Chú ý C C++ void nhapPS3(t_phso &); void nhapPS3(t_phso &ps) { printf("Nhap tu so: "); Khai báo biến, đối số khơng cần viết struct scanf("%d",&ps.tuso); do{ phía trước printf("Nhap mau so: "); Dùng dấu & cho tham scanf("%d",&ps.mauso); biến }while(ps.mauso==0); Báo lỗi trình biên 10 } 11 t_phso a; dịch C chuẩn 12 nhapPS3(a); Hàm bên cách viết C++ 155 Kỹ thuật lập trình | DHTH11C | HK1 | 2016-2017 Ngô Hữu Dũng Tham biến kiểu trỏ Trong C chuẩn, để truyền tham biến, ta dùng kiểu trỏ Kiểu trỏ int x=20; // Biến nguyên int *p; // Biến trỏ Lưu địa ô nhớ chứa biến p = &x; printf("x = %d \n", x); printf("&x = %x \n", &x); printf("p = %p \n", p); printf("*p = %d \n", *p); p = NULL; // Giá trị rỗng printf("p = %p.", p); Khai báo: * ; Ví dụ: int * p; Sử dụng: // Gán địa p: Địa ô nhớ biến *p: Giá trị biến Sẽ học kỹ phần sau 156 Kỹ thuật lập trình | DHTH11C | HK1 | 2016-2017 Ngô Hữu Dũng Truyền tham biến dùng kiểu trỏ 157 void swap (int *px, int *py) // Hoán vị { int temp = *px; // Dùng dấu * *px = *py; // để truy cập giá trị *py = temp; } int a = 5, b = 3; swap(&a, &b); // Truyền địa biến printf("a = %d, b = %d", a, b); Kỹ thuật lập trình | DHTH11C | HK1 | 2016-2017 Ngô Hữu Dũng Mảng kiểu cấu trúc Khai báo mảng chiều Kiểu cấu trúc phân số Tối đa 10 phần tử Viết hàm nhập giá trị cho mảng 158 Input: Mảng, số phần tử mảng Output: Nhập giá trị cho phân số #define MAX 10 void nhapMangPS(struct t_phso [], int); // Khai báo prototype, dùng [] không cho đối số kiểu mảng struct t_phso mps[MAX]; Kỹ thuật lập trình | DHTH11C | HK1 | 2016-2017 Ngô Hữu Dũng Hàm nhập mảng kiểu cấu trúc void nhapMangPS(struct t_phso m[], int n) { int i; for(i=0;i0 && n-1) // Gọi hàm search printf("This ID already exists\n"); }while (search(rec,*n,sID)>-1); // Kiểm tra ID updateID(rec,sID,*n); // Gọi hàm updateID printf("Student %d was added\n", sID); (*n)++; // Tăng số bảng ghi } Kỹ thuật lập trình | DHTH11C | HK1 | 2016-2017 Ngơ Hữu Dũng Hàm tìm kiếm int search(t_student rec[],int n, int sID) { int i; for(i=0;i