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

THDC - Bai II.05 doc

46 646 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 46
Dung lượng 1,67 MB

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

Nội dung

Khai báo hàm tiếpKiểu dữ liệu trả về của hàm:  Kiểu dữ liệu của giá trị tính toán mà hàm trả về sau khi thực hiện..  Tham số trong lời khai báo hàm được gọi là tham số hình thức, tham

Trang 1

TIN HỌC ĐẠI CƯƠNG

PHẦN 2: LẬP TRÌNH BẰNG NGÔN NGỮ C

BÀI 5: HÀM

KHOA C¤NG NGHÖ

INFORMATION TECHNOLOGY

Trang 3

5.1 Khái niệm hàm

Còn được gọi là chương trình con

Những đoạn chương trình lặp đi lặp lại

nhiều lần ở những chỗ khác nhau:

  Viết thành hàm để khi cần chỉ cần gọi ra

chứ không phải viết lại toàn bộ

 Ví dụ:

Các hàm toán học: sin(x), pow(x,y), sqrt(x),

Các hàm do người dùng viết ra.

Trang 4

5.1 Khái niệm hàm

Giải quyết một bài toán lớn thì chương trình của

ta có thể rất lớn và dài  Chia thành các công

viết, kiểm tra và sửa lỗi

Việc chia nhỏ một chương trình thành các

chương trình con đảm nhận những công việc

nhỏ khác nhau chính là tư tưởng chính cho

phương pháp lập trình cấu trúc (structured

programming)

Trang 6

//Than ham` bao gom:

//Cac khai bao

//Cac cau lenh

}

Trang 7

5.2.1 Khai báo hàm (tiếp)

Trang 8

5.2.1 Khai báo hàm (tiếp)

Kiểu dữ liệu trả về của hàm:

 Kiểu dữ liệu của giá trị tính toán mà hàm trả

về sau khi thực hiện

 Hàm có thể có giá trị trả về hoặc không có giá trị trả về

Nếu có giá trị trả về, trong thân hàm có ít nhất một

lệnh return.

Nếu không có giá trị trả về cần khai báo cho hàm

đó có kiểu trả về là void.

Trang 9

5.2.1 Khai báo hàm (tiếp)

Trang 10

5.2.1 Khai báo hàm (tiếp)

Tham số của hàm:

 Các thông tin cần cho hoạt động của hàm và các

thông tin, kết quả tính toán được hàm trả lại.

Tham số chứa dữ liệu vào cung cấp cho hàm

Tham số chứa dữ liệu ra mà hàm tính toán được.

 Tham số trong lời khai báo hàm được gọi là tham số

hình thức, tham số giả định của hàm.

Cần chỉ ra tên của tham số và kiểu dữ liệu của tham số.

 Một hàm có thể không có tham số, hoặc có nhiều

tham số.

Trang 11

5.2.1 Khai báo hàm (tiếp)

Lệnh return

 Cú pháp:

return bieu_thuc;

 Khi gặp lệnh này, chương trình sẽ tính toán

giá trị của bieu_thuc, lấy kết quả tính toán

được làm giá trị trả về cho lời gọi hàm rồi kết

thúc việc thực hiện hàm, trở về chương trình

đã gọi nó

 Nếu thiếu bieu_thuc  Kết thúc việc thực

hiện hàm mà không trả về giá trị nào cả

Trang 12

Ví dụ về các hàm trong thư viện Math.h

Trang 13

5.2.2 Sử dụng hàm

Sử dụng hàm hay gọi hàm  Cú pháp:

Tham số được cung cấp cho hàm trong

quá trình thực hiện được gọi là tham số

thực.

Kiểu dữ liệu của tham số hình thức và

tham số thực phải giống nhau.

Trang 15

Lưu ý

Trong chương trình, khi gặp một lời gọi hàm thì

hàm bắt đầu thực hiện bằng cách chuyển các

lệnh thi hành đến hàm được gọi Quá trình diễn

ra như sau:

 Nếu hàm có tham số, trước tiên các tham số sẽ được

 Chương trình sẽ thực hiện tiếp các câu lệnh trong

thân hàm bắt đầu từ lệnh đầu tiên đến câu lệnh cuối

cùng.

 Khi gặp lệnh return hoặc dấu } cuối cùng trong

thân hàm, chương trình sẽ thoát khỏi hàm để trở về

chương trình gọi nó và thực hiện tiếp tục những câu

lệnh của chương trình này.

Trang 17

void nhap_mang(int *a, int n)

Trang 19

Viết hàm để hoán đổi giá trị hai biến?

void trao_doi(int so1, int so2)

}

Trang 20

Gọi hàm: tham chiếu và tham trị

Khi gọi hàm cần truyền đối số (tham số)

cho hàm.

2 phương pháp truyền giá trị:

 Tham chiếu (biến)

 Tham trị

Trang 21

Gọi hàm: tham chiếu và tham trị

Gọi theo tham trị (Call by value)

 Bản sao của đối số được truyền cho hàm

 Sử dụng khi không muốn thay đổi giá trị tham số

truyền vào

 Gọi hàm tham trị loại bỏ các thay đổi ngoài ý muốn

lên các tham số

Gọi hàm tham biến (Call by reference)

 Truyền cho hàm biến gốc (không phải bản sao)

 Truyền địa chỉ và sử dụng con trỏ

 Thay đổi giá trị của đối số trong hàm sẽ ảnh hưởng

Trang 22

Viết hàm để hoán đổi giá trị hai biến?

trao_doi(&a[i], &a[j]);

}

Trang 24

void hien_thi_mang(int *a, int n)

Trang 27

5.3 Phạm vi biến

Biến địa phương (Local Variable):

 Là các biến được khai báo trong lệnh khối

hoặc trong thân chương trình con

Biến toàn cục (Global Variable):

 Là biến được khai báo trong chương trình

chính

 Vị trí khai báo của biến toàn cục là sau phần

khai báo tệp tiêu đề và khai báo hàm nguyên

mẫu

Trang 28

} {

int a = 3;

printf(“\n a = %d”,a);

} getch();

}

Trang 30

Để làm điều này ta đặt từ khóa register trước khai

báo của biến đó

Số lượng và kích thước các thanh ghi có hạn  Số

lượng biến khai báo register sẽ không nhiều và

thường chỉ áp dụng với những biến có kích thước nhỏ

như kiểu char, int

Trang 31

Biến static

Một biến cục bộ khi ra khỏi phạm vi của biến đó

thì bộ nhớ dành để lưu trữ biến đó sẽ được giải

phóng

Nếu cần lưu giá trị của các biến cục bộ này, cần

khai báo biến với từ khóa static.

 Ví dụ: static int a;

Biến static là biến tĩnh, nghĩa là nó sẽ được

cấp phát một vùng nhớ thường xuyên từ lúc khai báo và chỉ giải phóng khi chương trình chính kết

thúc

Trang 32

static int count = 1;

printf("\n Lan goi ham fct lan thu %2d",count+

Trang 35

Nguyên mẫu hàm

Nếu muốn đặt phần khai báo hàm nằm sau hàm

 Để báo cho chương trình dịch biết có một hàm có

dòng đầu hàm giống như trong phần nguyên mẫu

này.

 Chương trình dịch có thể kiểm tra được là các lời gọi

hàm trong chương trình chính có đúng hay không

Có phù hợp về kiểu dữ liệu trả về hay không

Các tham số thực có kiểu dữ liệu có phù hợp với kiểu dữ

liệu đã khai báo hay không.

Trong hàm nguyên mẫu có thể không cần nêu

tên các tham số hình thức, nhưng trong phần

khai báo hàm ta cần phải có các tham số hình

Trang 37

5.5 Hàm đệ quy

Khái niệm hàm đệ quy

 Hàm tự gọi chính mình

Khi xây dựng hàm đệ quy cần:

 Xây dựng trường hợp cơ bản

 Nguyên lý đưa trường hợp tổng quát về

Trang 40

Ví dụ hàm đệ quy: tính giai thừa

/* dung de quy dinh nghia ham factorial */

long factorial(long number)

Trang 41

Ví dụ hàm đệ quy: Dãy số Fibonacci

Dãy số Fibonacci: 0, 1, 1, 2, 3, 5, 8

 Mỗi số trong dãy số Fibonacci có giá trị là tổng của hai số đứng trước nó trong dãy

 Công thức tổng quát của dãy số Fibonacci

fib(n) = fib(n - 1) + fib(n – 2)

 Hai số đầu tiên của dãy số Fibonacci có giá trị tương ứng 0 và 1:

fib(0)=0 fib(1)=1

 

Trang 42

Ví dụ hàm đệ quy: Dãy số Fibonacci

Dãy số Fibonacci: 0, 1, 1, 2, 3, 5, 8

 Giải thuật đệ quy để tính giá trị các số trong dãy Fibonacci:

long fibonacci(long n) {

if (n == 0 || n == 1) //Truong hop co ban

return n;

else return fibonacci(n - 1) + fibonacci(n – 2);

}

 

Trang 43

Ví dụ hàm đệ qui: Tìm kiếm nhị phân

Trên mảng đã sắp xếp tăng dần hoặc giảm dần

Nếu giá trị cần tìm > giá trị của phần tử đầu tiên

và nhỏ hơn giá trị của phần tử trong mảng:

 So sánh phần tử giữa mảng với giá trị cần tìm

Nếu bằng, tìm thấy và kết thúc

Lặp lại cho tới khi tìm thấy hoặc đã duyệt qua hết các nửa

Mỗi lần như vậy ta loại bỏ được một nửa số

phần tử đang xét - tìm kiếm nhị phân

 Giải thuật này sẽ thực hiện tìm kiếm rất nhanh

Trang 44

int cs_min, cs_max; /* Bien luu chi so cua ptu dau

va ptu cuoi trong mang */

int gtri_tim; // gia tri can tim kiem

int cs; // chi so

scanf( “Nhap gia tri can tim: %d”, & gtri_tim);

minindex = 0; // Chi so cua phan tu dau tien

maxindex = KT-1; // Chi so cua phan tu cuoi cung

Trang 45

while (cs_min < cs_max)

Trang 46

Câu hỏi?

Ngày đăng: 30/07/2014, 01:20

TỪ KHÓA LIÊN QUAN

w