1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Kỹ thuật lập trình: Bài 6 - TS. Ngô Hữu Dũng

30 8 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 318,3 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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ỏ,...

Trang 1

Kỹ thuật lập trình

Bài 6 – Một số bài toán kiểu cấu trúc

TS Ngô Hữu Dũng

Trang 2

Bài toán phân số

 Xây dựng dữ liệu cấu trúc

 Kiểu trả về của hàm là cấu trúc

 Cách 2: Truyền tham biến

 Đối số là tham biến

 Hàm không có kiểu trả về

1 struct t_phso{

3 };

4 struct t_phso nhapPS();

5 void nhapPS2( struct t_phso*);

Trang 3

Hàm nhập phân số - Trả về kiểu cấu trúc

1 struct t_phso nhapPS(){ // Trả về kiểu struct

Trang 4

Hàm nhập phân số - Truyền tham biến

1 void nhapPS2( struct t_phso *ps ) // Tham biến

2 {

3 printf( "Nhap tu so: " );

4 scanf( "%d" ,&ps->tuso); // Dùng dấu ->

Trang 5

Chú ý C và C++

 Hàm bên là cách viết

của C++

 Khai báo biến, đối số

không cần viết struct

1 void nhapPS3( t_phso &);

2 void nhapPS3(t_phso &ps )

Trang 6

Tham biến và kiểu con trỏ

 Trong C chuẩn, để truyền tham

biến, ta dùng kiểu con trỏ

p : Địa chỉ ô nhớ của biến

*p : Giá trị của biến

Sẽ học kỹ ở phần sau

2 int *p; // Biến con trỏ

Trang 7

Truyền tham biến dùng kiểu con trỏ

1 void swap ( int *px , int *py ) // Hoán vị

2 {

3 int temp = *px; // Dùng dấu *

4 *px = *py; // để truy cập giá trị

Trang 8

Mảng kiểu cấu trúc

 Khai báo mảng một chiều

 Kiểu cấu trúc phân số

2 void nhapMangPS( struct t_phso [] , int );

4 struct t_phso mps[MAX];

Trang 9

6 printf( "Nhap phan so thu %d: \n" ,i+1);

8 }

9 }

10 // Cách viết: for( int i = 0 ;…) là C++

11 // m[] là tham biến, không cần dùng con trỏ

Trang 10

Nhập mảng kiểu cấu trúc

1 // Khai báo mảng kiểu cấu trúc

2 struct t_phso mps [MAX] ;

3 // Nhập số phần tử của mảng

4 do {

6 scanf( "%d" ,&n);

7 } while (!(n>0 && n<=MAX)); //Kiểm tra điều kiện

8 // Hoặc while(n<=0 || n>MAX);

10 // Truyền tham biến cho mảng không cần truyền

địa chỉ (&mps)

Trang 11

Hàm nhập mảng kiểu cấu trúc – dùng con trỏ

1 void nhapMangPS( struct t_phso *m , int n)

Trang 12

Phép toán trên mảng cấu trúc

 Viết hàm tính tổng các phân số trên mảng

 Input: Mảng phân số kiểu cấu trúc, số phần tử của mảng

 Output: Trả về kết quả là phân số kiểu cấu trúc

 Gợi ý giải thuật

 Viết hàm tính tổng hai phân số

 Quy đồng mẫu số

 Thực hiện phép cộng tử số

 Rút gọn phân số kết quả

 Tìm ước số chung lớn nhất của tử số và mẫu số (viết hàm riêng)

 Chia tử số và mẫu số cho ước số chung lớn nhất

 Lần lượt gọi hàm tính tổng hai phân số để tính tổng mảng các phân số

Trang 13

Tổng mảng phân số

1 struct t_phso congMangPS( struct t_phso[], int );

2 struct t_phso congPS( struct t_phso, struct t_phso);

3 int UCLN( int , int );

4 struct t_phso congMangPS( struct t_phso mps[], int n)

Trang 16

Vận dụng mảng cấu trúc - Quản lý điểm

 Viết chương trình quản lý điểm và phân tích thống kê lớp học (20sv)

 Mỗi bảng ghi sinh viên gồm: ID, tên, giới tính, điểm thường kỳ, giữa kỳ,

cuối kỳ và điểm tổng kết (20% ĐTK + 30% ĐGK + 50% ĐCK).

 Chương trình hiển thị menu danh sách các tác vụ để người dùng lựa chọn

 1 Thêm một bảng ghi sinh viên

 2 Xem tất cả danh sách bảng điểm của sinh viên

 3 Xóa một bảng ghi sinh viên

 4 Cập nhật một bảng ghi sinh viên

 5 Tìm kiếm sinh viên bằng ID

 6 Hiển thị sinh viên có số điểm cao nhất, thấp nhất

 7 Sắp xếp danh sách sinh viên theo điểm tổng kết

 8 Thoát chương trình

Trang 17

Cấu trúc dữ liệu, header

2 void addRecord(t_student, int *);

3 void showAllRecords(t_student, int );

4 void deleteRecord(t_student, int *);

5 void updateRecord(t_student, int );

6 void findStudent(t_student, int );

7 void showMaxScore(t_student, int );

8 void sortByScore(t_student, int );

9 int search(t_student, int , int );

10 void updateID(t_student, int , int );

11 void showRecord(t_student, int );

12 void deleteID(t_student, int *, int );

13 void showMenu();

Trang 18

5. showMenu(); // Gọi hàm hiển thị menu

6. printf( "Enter your action: " );

7. scanf( "%d" , &act);

8. switch (act){

9. case 1: addRecord(records,&n); break ;

10. case 2: showAllRecords(records,n); break ;

11. case 3: deleteRecord(records,&n); break ;

12. case 4: updateRecord(records,n); break ;

13. case 5: findStudent(records,n); break ;

14. case 6: showMaxScore(records,n); break ;

15. case 7: sortByScore(records,n); break ;

17. } while (act!=8);

18. }

Trang 19

Hiển thị menu

1 void showMenu()

2 {

3 printf( " -MENU - Student records -\n" );

4 printf( "1 Add a record\n" );

5 printf( "2 Show all student records\n" );

6 printf( "3 Delete a record\n" );

7 printf( "4 Update a record\n" );

8 printf( "5 Find a student by ID\n" );

9 printf( "6 Show student who gets max total score\n" );

10 printf( "7 Sort records by total score\n" );

11 printf( "8 Exit\n" );

12 }

Trang 20

Chức năng 1 - Thêm bảng ghi

1 void addRecord(t_student rec[], int *n)

7 if (search(rec,*n,sID)>-1) // Gọi hàm search

8 printf( "This ID already exists\n" );

9 } while (search(rec,*n,sID)>-1); // Kiểm tra ID

10 updateID(rec,sID,*n); // Gọi hàm updateID

11 printf( "Student %d was added\n" , sID);

12 (*n)++; // Tăng số bảng ghi

13 }

Trang 22

Cập nhật thông tin cho một ID

1 void updateID(t_student rec[], int sID, int n)

2 {

3 rec[n].ID=sID;

4 printf( "Enter name: " ); scanf( "%s" ,&rec[n].name);

5 printf( "Enter sex: " ); scanf( "%s" ,&rec[n].sex);

6 printf( "Enter regular score: " );

Trang 23

Chức năng 2 - Hiển thị tất cả các bảng ghi

1 void showAllRecords(t_student rec[], int n)

Trang 25

Chức năng 3 – Xóa bảng ghi

1 void deleteRecord(t_student rec[], int *n)

11 deleteID(rec,n,num); // Gọi hàm xóa bảng ghi

12 printf( "Student %d was delelted\n" , sID);

13 }

Trang 26

Hàm xóa bảng ghi thứ num

Trang 27

11 updateID(rec,sID,num); // Gọi hàm, đã định nghĩa

12 printf( "Student %d was updated\n" , sID);

13 }

Trang 28

Chức năng 5 – Tìm kiếm một bảng ghi

1 void findStudent(t_student rec[], int n)

Trang 29

Chức năng 6 – Tìm sinh viên có điểm cao nhất

1 void showMaxScore(t_student rec[], int n)

Trang 30

Chức năng 7 – Sắp xếp bảng ghi theo điểm

1 void sortByScore(t_student rec[], int n)

Ngày đăng: 08/05/2021, 11:49

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm