Bài thực hành Kỹ thuật lập trình C++ - Tuần 4

1. Viết chương trình trên nhiều file

2. Biến

2.1. Phạm vi hoạt động: cục bộ(trong 1 định nghĩa hàm), namespace(toàn cục, người dùng khai báo), class.

2.2. Thời gian tồn tại: tự động(register, auto), tĩnh (static, extern)

2.3. Tham chiếu

3. Hàm

3.1. Hàm toán học trong thư viện

3.2. Cách truyền tham số cho hàm

+ Truyền bằng giá trị

+ Truyền bằng tham chiếu

3.3. Hàm với đối số mặc định

3.4. Hàm trả về kiểu tham chiếu

3.5. Hàm inline

3.6. Hàm đệ quy

 

doc3 trang | Chuyên mục: C/C++ | Chia sẻ: dkS00TYs | Lượt xem: 1827 | Lượt tải: 2download
Tóm tắt nội dung Bài thực hành Kỹ thuật lập trình C++ - Tuần 4, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Bài thực hành số 4
Lưu ý:
Sinh viên cần viết khai báo hàm chính xác như trong đề với những bài đã ghi rõ nguyên mẫu hoặc tên hàm.
MỤC TIÊU BÀI HỌC
Viết chương trình trên nhiều file
Biến
Phạm vi hoạt động: cục bộ(trong 1 định nghĩa hàm), namespace(toàn cục, người dùng khai báo), class.
Thời gian tồn tại: tự động(register, auto), tĩnh (static, extern)
Tham chiếu
Hàm
Hàm toán học trong thư viện
Cách truyền tham số cho hàm
+ Truyền bằng giá trị
+ Truyền bằng tham chiếu
Hàm với đối số mặc định
Hàm trả về kiểu tham chiếu
Hàm inline
Hàm đệ quy
BÀI TẬP LẬP TRÌNH
Dùng hàm rand() để sinh ra 2 số nguyên dương một chữ số. Chương trình sẽ in ra màn hình câu đố theo mẫu sau: 6 lần 7 bằng bao nhiêu?Sau khi đọc câu trả lời từ bàn phím, chương trình sẽ kiểm tra câu trả lời: nếu đúng thì in ra thông báo “Chính xác!” và hỏi một câu hỏi khác; nếu sai thì in ra “Chưa chính xác. Vui lòng thử lại !” và cho người dùng làm lại tới khi nhận được câu trả lời đúng. Chương trình sẽ kết thúc khi mình gõ phím “Escape”.
Chú ý kết hợp lệnh srand(time(0)) để sinh ra các số nguyên khác nhau vào các lần thử khác nhau. 
(Tìm hiểu từ khóa static).
Viết hàm đệ quy computeGcd trả về ước chung lớn nhất của 2 số nguyên dương, biết UCLN(a,b) = UCLN(a,b%a) = UCLN(a%b,b).
Khai báo một biến static trong hàm computeGcd và dùng nó đếm xem hàm này được gọi bao nhiêu lần để tính ước chung lớn nhất của hai số nguyên dương A, B đọc từ bàn phím.
(Số Fibonacci nguyên tố)
Viết các hàm sau và một chương trình nhỏ kiểm tra tất cả các hàm đã viết:
Hàm kiểm tra tính nguyên tố của một số nguyên dương:
bool isPrime(unsigned long n);
Hàm không đệ quy trả về số Fibonacci Fn:
unsigned long calcFibNr(unsigned n);
Hàm đệ quy trả về số Fibonacci Fn:
unsigned long calcFibR(unsigned n);
Hàm có 1 tham số nguyên dương là maxId thực hiện việc in ra(dạng bảng) các số Fibonacci nguyên tố có chỉ số <= maxId, kèm theo chỉ số của nó. Nếu lời gọi không truyền maxId thì cho maxId = 30.
Hàm này trả về số lượng số Fibonacci nguyên tố tìm được.
unsigned printPrimeFibs1(unsigned maxId = 30);
Output:
n F(n)
3 2
4 3
5 5
7 13
…
Hàm thực hiện các chức năng như printPrimeFibs1 và bổ sung một tham số lastFoundId để lưu chỉ số của số Fibonacci nguyên tố lớn nhất tìm được.
unsigned printPrimeFibs2(unsigned & lastFoundId, unsigned maxId = 30) ;
(*) Thử đảo chỗ 2 tham số của printPrimeFibs2.
(Tìm kiếm nhị phân)
Viết hàm tìm kiếm nhị phân vị trí của target trong một dãy số nguyên đã được sắp, trả về -1 nếu không thấy số này.
int binarySearch(int a[], int size, int target);
(*) Thử thay đổi hàm trong câu a thành:
int binarySearch(int & a[], int size, int target);
Viết hàm tìm kiếm nhị phân binarySearch2 trả về tham chiếu tới phần tử có giá trị bằng target(giả sử luôn tìm thấy)
int & binarySearch2(int a[], int size, int target);
Hãy thay phần tử tìm thấy bằng tổng các chữ số của nó bằng lệnh:
binarySearch2(a, size, target) = sumOfDigits(target);
Sau đó in lại dãy số nguyên.
CÂU HỎI
Giải thích hiện tượng xảy ra trong bài 3f.
Giải thích vì sao nguyên mẫu hàm như trong bài 4b là không cần thiết.
Trong bài 4, vì sao ta có thể đặt lời gọi hàm binarySearch2 ở vế trái của phép gán nhưng không thể làm như vậy với binarySearch?
Có thể xác định thứ tự thực hiện các hàm ở dòng lệnh cuối không? Hãy đề xuất phương án để định rõ g() thực hiện trước f().
int g(int);
int f(int);
…
int a,b;
cout << g(a) + f(b) << endl ;
Hàm inline có điểm gì đặc biệt? Cho ví dụ một chương trình đơn giản. So sánh nó với macro.
TÀI LIỆU THAM KHẢO:

File đính kèm:

  • docBài thực hành Kỹ thuật lập trình C++ - Tuần 4.doc
  • rarCode.rar