Tải bản đầy đủ (.ppt) (45 trang)

Hàm (function) (NHẬP môn về lập TRÌNH SLIDE)

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 (912.17 KB, 45 trang )

Chương 6

Hàm
(Function)

Presenter:

Nhập mơn về lập trình (C6)

Slide 1


Learning outcomes
L.O.4.1 – Xác định được thành phần của một hàm.
L.O.4.2 – Hiện thực được giải thuật dưới dạng hàm.
L.O.4.3 – Giải thích được các kiểu truyền tham số trong C.
L.O.4.4 – Tổ chức được các chương trình lớn, gồm nhiều
hàm.
L.O.3.5 – Hiện thực được các giải thuật đệ quy bằng ngôn
ngữ C và hiểu được nguyên tắc hoạt động của nó.

Nhập mơn về lập trình (C6)

Slide 2


Tổ chức chương trình C
Cấu trúc module
 Tiền xử lý:

Mô tả module


#<Tiền xử lý>
Khai báo / định nghĩa
Hàm 1

Hàm 2

Hàm 3

Nhập mơn về lập trình (C6)

• #include
• #define

 Khai báo / định nghĩa:





Hằng
Biến
Hàm/biến extern
Mơ tả hàm

 Các hàm:
• main được chạy đầu tiên.
• Định nghĩa ngang cấp,
khơng lồng nhau.
• Được gọi mới chạy.


Slide 3


Hàm là gì ?
 Hàm là phương tiện phân chia code của module ra nhiều
đơn vị nhỏ hơn để dễ quản lý và sửa chữa.
 Một dự án/giải pháp/chương trình = tập hợp N module
 Một Module = tập hợp N hàm

Nhập mơn về lập trình (C6)

Slide 4


Hàm là gì ?
 Hàm (function) tách ứng dụng thành từng đơn vị độc lập
 Câu lệnh trong thân hàm
• được viết một lần
• dùng được nhiều nơi trong ứng dụng
• che giấu đối với các hàm khác

 Kinh nghiệm:
• Một phương thức thực hiện một tác vụ
• Tên phương thức cần thể hiện tác vụ đó

Nhập mơn về lập trình (C6)

Slide 5



Hàm là gì ?
 Phải chia thành từng bài toán nhỏ và đơn giản hơn
• Kỹ thuật chia để trị (divide-and-conquer)

 Hoặc tái sử dụng các phương thức sẵn có (đã viết) vào
ứng dụng mới
• Tái sử dụng phần mềm (reusability)

 Tránh việc viết một cùng đoạn mã hai lần
 Dễ sửa lỗi và bổ sung tính năng về sau

Nhập mơn về lập trình (C6)

Slide 6


Hàm là gì ?
 Khối lệnh: tập hợp của các lệnh
 VD 1:
if (delta > 0) {
x1 = (-b + sqrt(delta))/(2*a);
x2 = (-b - sqrt(delta))/(2*a);
}
 VD 2:
for (int i = 0; i < 10; i++)
{
temp = i*i;
sum += temp;
}


Nhập môn về lập trình (C6)

Slide 7


Hàm là gì ?
 Hàm cũng là tập hợp của những câu lệnh, nhưng
• Có tên
• Có tham số
• Có giá trị trả về

 VD
float
{

}

average(float a, float b)
float val;
val = (a + b) /2;
return val;

Nhập mơn về lập trình (C6)

Slide 8


Hàm là gì ?
void main()
{

float x1, x2, x3, x4;
printf("Input x1, x2, x3, x4: ");
scanf("%f %f %f %f", &x1, &x2, &x3, &x4);
printf("Average of x1, x2: %f\n", (x1+x2)/2);
printf("Average of x3, x4: %f\n", (x3+x4)/2);
}

Nhập mơn về lập trình (C6)

Slide 9


Hàm là gì ?
float
average(float a, float b){
float val;
val = (a + b) /2;
return val;
}
void main() {
float x1, x2, x3, x4, ave1, ave2;
printf("Input x1, x2, x3, x4: ");
scanf("%f %f %f %f", &x1, &x2, &x3, &x4);
ave1 = average(x1, x2);
ave2 = average(x3, x4);
printf("Average of x1, x2: %f\n", ave1);
printf("Average of x3, x4: %f\n", ave2);
}
Nhập mơn về lập trình (C6)


Slide 10


Hàm là gì ?
float
average(float a, float b){
float val;
val = (a + b) /2;
return val;
}
void main() {
float x1, x2, x3, x4;
printf("Input x1, x2, x3, x4: ");
scanf("%f %f %f %f", &x1, &x2, &x3, &x4);
printf("Average of x1, x2: %f\n", average(x1, x2));
printf("Average of x3, x4: %f\n", average(x3, x4));
}
Nhập mơn về lập trình (C6)

Slide 11


Các vấn đề của hàm
Khai báo hàm  extern
 Mô tả trước

Hàm

Định nghĩa hàm
 Định nghĩa biến

 Lệnh thực thi
Gọi hàm

Truyền tham số hàm

 Trực tiếp
 Gián tiếp

 Trị
 Tham khảo
Nhập mơn về lập trình (C6)

Slide 12


Các vấn đề của hàm
 Hàm gồm 4 phần:

 Kiểu của giá trị trả về
 Tên hàm
 Tham số.
 Thân hàm: các câu lệnh nằm trong cặp dấu { }.
 
 Ví dụ :
Ưu điểm:
int FindMax (int x, int y) { -Kỹ thuật chia để trị (divide-andint maximum;
conquer)
if ( x > = y)
-Tái sử dụng phần mềm
maximum = x;

(reusability)
else
-Tránh việc viết một cùng đoạn mã hai
maximum = y;
lần
return maximum;
-Dễ sửa lỗi và bổ sung tính năng về sau
Nhập
Slide 13
} mơn về lập trình (C6)


Các vấn đề của hàm
 <returnType> FunctionName (parameter2, ..., parameterX>)
{
...
}

i1
i2

o

…………
….
Nhập mơn về lập trình (C6)

Slide 14



Gọi hàm
int FindMax (int x, int y) {
int maximum;
if ( x >= y) maximum = x;
else
maximum = y;
return maximum;
}
void main(){
int m1 = FindMax(50, 100);
int m2, a = 14, b = 20;
m2 = FindMax(a, b);
printf("m1 = %d; m2 = %d", m1, m2);
}
Nhập mơn về lập trình (C6)

Slide 15


Gọi hàm
void giaiptbac2(float a, float b, float c){
float delta = b*b - 4*a*c, x1, x2;
if(delta == 0) {
x1 = -b/(2*a);
x2 = -b/(2*a);
printf("Phuong trinh co nghiem kep x = %f\n", x1);
}
else if(delta > 0){
x1 = (-b + sqrt(delta))/(2*a);

x2 = (-b - sqrt(delta))/(2*a);
printf("Phuong trinh co 2 nghiem x1 = %f, x2 = %f\n", x1, x2);
}
else
printf("Phuong trinh vo nghiem\n");
}
Nhập mơn về lập trình (C6)

Slide 16


Gọi hàm
void main()
{
giaiptbac2(5, -11, 6);
float
fltA = 7, fltB = -13, fltC = 6;
giaiptbac2(fltA, fltB, fltC);
}

Nhập mơn về lập trình (C6)

Slide 17


Khai báo hàm
 Nếu định nghĩa hàm xuất hiện trước lời gọi hàm thì khơng
cần khai báo.
 Nếu định nghĩa hàm xuất hiện sau lời gọi hàm thì cần
phải khai báo (tùy từng mơi trường lập trình)


Nhập mơn về lập trình (C6)

Slide 18


Khai báo hàm
int maximum( int x, int y, int z) {
int max = x;
Lưu ý:Có sự tương
ứng 1-1 giữa tham số
if ( y > max )
max = y;
hình thức và tham số
if ( z > max )
max = z;
thực
return max;
}
void main() {
int a, b, c;
printf( "Enter three integers: ");
scanf("%d %d %d", &a, &b, &c);
printf( "Maximum is: %d\n", maximum (a, b, c));
}
Nhập mơn về lập trình (C6)

Slide 19



Khai báo hàm
int maximum( int x, int y, int z);
void main() {
int a, b, c;
printf( "Enter three integers: ");
scanf("%d %d %d", &a, &b, &c);
printf( "Maximum is: %d\n", maximum (a, b, c));
}
int maximum( int x, int y, int z) {
int max = x;
if ( y > max )
max = y;
if ( z > max )
max = z;
return max;
}
Nhập môn về lập trình (C6)

Slide 20


Giá trị trả về
 Cú pháp
 

return value;
hoặc
return(value);
 Giá trị trả về và biến được giá trị trả về khi gọi hàm, phải
có kiểu giống nhau.

 Khi khơng có giá trị trả về, thì sử dụng void.

Nhập mơn về lập trình (C6)

Slide 21


Giá trị trả về
float
average(float a, float b){
float val;
val = (a + b) /2;
return val;
}
void main() {
float x1, x2, x3, x4;
printf("Input x1, x2, x3, x4: ");
scanf("%f %f %f %f", &x1, &x2, &x3, &x4);
printf("Average of x1, x2: %f\n", average(x1, x2));
printf("Average of x3, x4: %f\n", average(x3, x4));
}
Nhập mơn về lập trình (C6)

Slide 22


Giá trị trả về
void average(float a, float b){
float val;
val = (a + b) /2;

printf("The average of %f and %f is %f\n", a, b, val);
}
void main() {
float x1, x2, x3, x4;
printf("Input x1, x2, x3, x4: ");
scanf("%f %f %f %f", &x1, &x2, &x3, &x4);
average(x1, x2);
average(x3, x4);
}
Nhập mơn về lập trình (C6)

Slide 23


Khai báo/định nghĩa hàm
 Cú pháp :
[extern|static] [ret_type] name ([arglist])
{
[statements]*
[return expr;]
[statements]*
[return expr;]
extern | static Ret_type Name(
}

arglist

)

{


Định nghĩa biến
[statements]*
[return expr;]
[statements]*
[return expr;]
}
Nhập mơn về lập trình (C6)

Slide 24


Khai báo/định nghĩa hàm
Cú pháp
 Cú pháp :
[extern|static] [ret_type] name ([arglist])
{
[statements]*
[return expr;]
[statements]*
[return expr;]
}

 extern (khai báo): hàm đã được định nghĩa trong module
khác.
 static (định nghĩa): hàm chỉ được gọi cục bộ trong
module chứa hàm này, không thể là đối tượng của extern.

Nhập mơn về lập trình (C6)


Slide 25


×