Tải bản đầy đủ (.pdf) (30 trang)

Ip 06 function and organizing of c program

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (814.16 KB, 30 trang )

Hàm và cách tổ chức
chương trình C
GV. Nguyễn Minh Huy

Nhập mơn lập trình - GV. Nguyễn Minh Huy

1


Nội dung




Khái niệm hàm
hàm..
Truyền tham số và tầm vực
vực..
Tổ chức chương trình C.

Nhập mơn lập trình - GV. Nguyễn Minh Huy

2


Nội dung




Khái niệm hàm.


hàm.
Truyền tham số và tầm vực
vực..
Tổ chức chương trình C.

Nhập mơn lập trình - GV. Nguyễn Minh Huy

3


Khái niệm hàm


Xét chương trình sau:
sau:
Nhập vào 3 số nguyên a, b, c >= 0.
 Tính và xuất S = a! + b! + c!.
 Hãy chỉ ra những phần trùng lắp của chương trình
trình..





Điểm yếu của chương trình trùng lắp:
lắp:
Tốn thời gian,
gian, cơng sức
sức..
 Khi có thay đổi  sửa nhiều chỗ

chỗ..
 Viết 1 lần,
lần, tái sử dụng lại nhiều lần.
lần.


Nhập mơn lập trình - GV. Nguyễn Minh Huy

4


Khái niệm hàm


Phương pháp đặt hàm
hàm::
- B1: S1 = 1.
- B2: Nếu a > 0
S1 = S1 * a.
a = a – 1.
Quay lại B2.
- B3: S2 = 1.
- B4: Nếu b > 0
S2 = S2 * b.
b = b – 1.
Quay lại B4.
- B5: S3 = 1.
- B6: Nếu c > 0
S3 = S3 * c.
c = c – 1.

Quay lại B6.
- B7: S = S1 + S2 + S3.
S3.

Nhập mơn lập trình - GV. Nguyễn Minh Huy

- B0: Đặt F(x) như sau
sau::
- B0.1: Đặt T = 1.
- B0.2: Nếu x > 0
T = T * x.
x = x – 1.
Quay lại B0.2.
- B1: S1 = F(a)
F(a)..
- B2: S2 = F(b)
F(b)..
- B3: S3 = F(c)
F(c)..
- B4: S = S1 + S2 + S3.

5


Khái niệm hàm


Phương pháp đặt hàm
hàm::
Đặt F(x)

đúng
a>0
sai

S1 = F(a)

S1 = S1 * a
a=a-1
đúng
x>0

đúng
b>0
sai

S2 = S2 * b
b=b-1

sai

T=T*x
x=x-1

S2 = F(b)
S3 = F(c)
S = S1 + S2 + S3

đúng
c>0
sai


S3 = S3 * c
c=c-1

S = S1 + S2 + S3

Nhập mơn lập trình - GV. Nguyễn Minh Huy

6


Khái niệm hàm


Hàm trong ngôn ngữ C:
Một khối lệnh được đặt tên.
tên.
 Có thể gọi từ bất kỳ đâu trong chương trình
trình..
 Có thể gọi nhiều lần với tham số khác nhau
nhau..
 Cấu trúc của hàm
hàm::





Phần khai báo
báo::

Tên hàm
hàm..
 Tham số đầu vào
vào..
 Kết quả đầu ra.
ra.
 Định danh hàm
hàm..




Đầu vào
Tên hàm

Đầu ra

Thân hàm

Phần cài đặt
đặt:: thân hàm
hàm..

Nhập môn lập trình - GV. Nguyễn Minh Huy

7


Khái niệm hàm



Các bước sử dụng hàm trong C:


Khai báo hàm (prototype):
<Kiểu trả về>
về> <Tên hàm>(
hàm>( <Khai báo tham số>
số> );
<Kiểu trả về>:
về>: int,
int, float, char, j, void (không trả về).
về).
float tinhDTB
tinhDTB(( float van, float toan );



Cài đặt hàm
hàm::
<Kiểu trả về>
về> <Tên hàm>(
hàm>( <Khai báo tham số>
số> )
{
[Các câu lệnh
lệnh]]
[return <giá trị trả về>
về>;]
}




Gọi thực hiện hàm
hàm::
<Tên hàm>(
hàm>( <Các tham số>
số> );
float dtb = tinhDTB
tinhDTB(7,
(7, 8.5);

Nhập mơn lập trình - GV. Nguyễn Minh Huy

8


Khái niệm hàm


Các bước sử dụng hàm trong C:
#include <stdio.h>
>
// Khai báo hàm
hàm..
long tinhGT
tinhGT((int n);
void main()
{

/* Viết khai báo biến
biến..
Viết lệnh nhập a, b, c. */

// Cài đặt hàm
hàm..
long tinhGT
tinhGT((int n)
{
long s = 1;
for ( ; n > 0; n-n--))
s = s * n;
return s;
}

// Gọi thực hiện hàm
hàm..
S1 = tinhGT
tinhGT(a);
(a);
S2 = tinhGT
tinhGT(b);
(b);
S3 = tinhGT
tinhGT(c);
(c);
S = S1 + S2 + S3;
}
Nhập mơn lập trình - GV. Nguyễn Minh Huy


9


Nội dung




Khái niệm hàm
hàm..
Truyền tham số và tầm vực
vực..
Tổ chức chương trình C.

Nhập mơn lập trình - GV. Nguyễn Minh Huy

10


Truyền tham số và tầm vực


Cách truyền tham số vào hàm
hàm::


Truyền tham trị (pass by value):






Truyền giá trị vào hàm
hàm..
Hàm chỉ nhận bản sao của tham số.
số.
Tham số KHÔNG bị thay đổi sau khi truyền
truyền..
Tham số:
số: biến
biến,, hằng
hằng,, biểu thức
thức..

float tinhDTB
tinhDTB(( float van, float toan )
{
van = van * 2;
toan = toan * 3;
return (van + toan)
toan) / 5;
}

void main
main()
()
{
float van, toan,
toan, dtb;
dtb;

dtb = tinhDTB
tinhDTB(( van,
van, toan );
dtb = tinhDTB
tinhDTB(( 6
6,, 8.5 );
);
dtb = tinhDTB
tinhDTB(( van + 1, toan );
// Biến van, toan khơng thay đổi
đổi..
}

Nhập mơn lập trình - GV. Nguyễn Minh Huy

11


Truyền tham số và tầm vực


Cách truyền tham số vào hàm
hàm::


Truyền tham chiếu (pass by reference) (C++):







Còn gọi là truyền tham biến
biến..
Hàm nhận bản gốc của tham số.
số.
Tham số có thể BỊ thay đổi sau khi truyền
truyền..
Tham số chỉ có thể là biến
biến..
Khai báo tham số:
số: &<tên tham số>.
số>.

float tinhDTB
tinhDTB(( float &van
&van,, float toan )
{
van = van * 2;
toan = toan * 3;
return (van + toan)
toan) / 5;
}

void main
main()
()
{
float van, toan,
toan, dtb;

dtb;
dtb = tinhDTB
tinhDTB(( van,
van, toan );
// Biến van bị thay đổi
đổi..
dtb = tinhDTB
tinhDTB(( 6
6,, 8.5 );
);
//
//Sai
Sai
dtb = tinhDTB
tinhDTB(van
(van + 1, toan)
toan); //
//Sai
Sai
}

Nhập mơn lập trình - GV. Nguyễn Minh Huy

12


Truyền tham số và tầm vực


Cách truyền tham số vào hàm

hàm::


Ghi chú
chú::


Dùng truyền tham chiếu để trả về giá trị.
trị.
 Hàm có nhiều giá trị trả về.
về.

void nhapDiem
nhapDiem(( float &diem1
&diem1,, float &diem2 )
{
printf(“
printf
(“Nhap
Nhap diem van = “);
scanf(“%d”,
scanf
(“%d”, &
&diem1
diem1);
);
printf(“
printf
(“Nhap
Nhap diem toan = “);

scanf(“%d”,
scanf
(“%d”, &
&diem2
diem2);
);
}
void tinhDTB
tinhDTB(( float van, float toan,
toan, float &dtb )
{
van = van * 2;
toan = toan * 3;
dtb = (van + toan)
toan) / 5;
}
Nhập mơn lập trình - GV. Nguyễn Minh Huy

void main
main()
()
{
int van, toan;
toan;
float dtb;
dtb;
// van, toan thay đổi
nhapDiem(van,
nhapDiem
(van, toan);

toan);
// dtb thay đổi
tinhDTB(van,
tinhDTB
(van, toan,
toan, dtb
dtb);
);
}

13


Truyền tham số và tầm vực


Tầm vực:
vực:
Phạm vi hoạt động của biến và hàm
hàm..
 Phân loại
loại::






Toàn cục
cục:: hoạt động trên tồn chương trình

trình..
Cục bộ:
bộ: hoạt động trong một khối lệnh
lệnh..

Hàm  phạm vi toàn cục
cục..
 Biến
Biến::






Biến toàn cục
cục:: khai báo ngoài hàm (kể cả hàm main).
 Hoạt động trên toàn chương trình
trình..
Biến cục bộ:
bộ: khai báo trong thân hàm hoặc khối lệnh
lệnh..
 Hoạt động trong thân hàm hoặc khối lệnh
lệnh..

Nhập mơn lập trình - GV. Nguyễn Minh Huy

14



Truyền tham số và tầm vực


Tầm vực:
vực:
float S;
int tinh();
void main()
{
int a = S + tinh();
while (a > 0)
{
int b = S + tinh();
}
}
int hamXYZ()
{
int y = S * 2;
}

Nhập môn lập trình - GV. Nguyễn Minh Huy

// Khai báo biến toàn cục.
// Khai báo hàm.

// Biến cục bộ hàm main.

// Biến cục bộ vòng lặp.

// Biến cục bộ hàm tinh.


15


Nội dung




Khái niệm hàm
hàm..
Truyền tham số và tầm vực
vực..
Tổ chức chương trình C.

Nhập mơn lập trình - GV. Nguyễn Minh Huy

16


Tổ chức chương trình C


Một quyển sách được tổ chức thế nào
nào?
?


Không thể viết tất cả trên một trang giấy
giấy!!

!!
 Chia làm nhiều chương
chương..
 Có mục lục ở đầu.
đầu.
 Nội dung các chương ở sau.
sau.

Nhập mơn lập trình - GV. Nguyễn Minh Huy

17


Tổ chức chương trình C


Cách tổ chức chương trình C:


Tổ chức giống một quyển sách
sách..



Các chương ~ các file mã nguồn
nguồn..
Mục lục ~ hàm main.

 Làm sao kết nối các file mã nguồn
nguồn?

?
// File main.cpp
void main()
{
nhap();
tinhToan1();
tinhToan2();
xuat();
}

Nhập mơn lập trình - GV. Nguyễn Minh Huy

// File nhapxuat.cpp
void nhap()
{
}

// File xuly.cpp
int tinhToan1()
{
}

void xuat()
{
}

int tinhToan2()
{
}


18


Tổ chức chương trình C


Header file:
Kết nối các file mã nguồn trong chương trình
trình..
 Làm mã nguồn trên các file hiểu lẫn nhau
nhau..
 Có đi file .h
.h..
 Cách sử dụng
dụng::







Tạo file .h cho file mã nguồn .cpp.
cpp.
File .h chỉ chứa khai báo hàm và biến
biến..
File .cpp chỉ chứa cài đặt hàm
hàm..
Để A.cpp hiểu mã nguồn của B.cpp
 Trong A.cpp dùng #include “<Đường dẫn B.h

B.h>
>”

Nhập mơn lập trình - GV. Nguyễn Minh Huy

19


Tổ chức chương trình C


Header file:

// File main.cpp
#include “nhapxuat.h”
#include “xuly.h”

// File nhapxuat.h
// Khai báo hàm
void nhap();
void xuat();

// File xuly.h
// Khai báo hàm
int tinhToan1();
int tinhToan2();

void main()
{
nhap();

tinhToan1();
tinhToan2();
xuat();
}

// File nhapxuat.cpp
void nhap()
{
}

// File xuly.cpp
int tinhToan1()
{
}

void xuat()
{
}

int tinhToan2()
{
}

Nhập mơn lập trình - GV. Nguyễn Minh Huy

20




×