Một chương trình bắt đầu thực hiện từ câu lệnh đầu tiên của hàm main cho đến khi gặp dấu ngoặc } cuối cùng của hàm này.. CHƯƠNG TRÌNH VÀ HÀM TRONG C* Cấu trúc của một chương trình: 1..
Trang 1TIN HỌC ĐẠI CƯƠNG
Lý thuyết: 6 buổi Thực hành: 8 buổi
GVHD: Dương Khai PhongEmail: khaiphong@gmail.com
Ngôn ngữ lập trình: C
Trang 2NỘI DUNG CÁC BUỔI HỌC
1. Tổng quan về C (chương 1,2)
2. Các cấu trúc điều khiển trong C (chương 3)
3. Hàm và cấu trúc chương trình (chương 4)
4. Mảng, chuỗi và con trỏ (chương 5)
5. Kiểu cấu trúc, đệ qui, tập tin (chương 6,7,8)
Trang 3CHƯƠNG 4: HÀM VÀ CẤU TRÚC CHƯƠNG TRÌNH
1. Chương trình và hàm trong C.
2. Cách viết một hàm.
3. Phân loại hàm trong C.
a) Hàm với đối số là tham trị.
b) Hàm với đối số là tham biến.
Trang 41 CHƯƠNG TRÌNH VÀ HÀM TRONG C
a Chương trình là gì?
Chương trình là một tập hợp gồm một hay nhiều hàm Trong
đó bắt buộc phải có hàm main().
Một chương trình bắt đầu thực hiện từ câu lệnh đầu tiên của hàm main() cho đến khi gặp dấu ngoặc } cuối cùng của hàm này.
- Hàm là một đơn vị độc lập của chương trình.
- Không cho phép xây dựng một hàm bên trong một hàm.
Trang 51 CHƯƠNG TRÌNH VÀ HÀM TRONG C
* Cấu trúc của một chương trình:
1. <Khai báo thư viện>
2. <Khai báo hằng,biến toàn cục>
3. <Khai báo các hàm>
4. <Chương trình chính / hay hàm main>
5. <Định nghĩa hàm>
Lưu ý: việc truyền dữ liệu từ hàm này sang hàm
khác được thực hiện theo một trong 2 cách:
Trang 6return kq;
Trang 72 CÁCH VIẾT MỘT HÀM
* Cú pháp khai báo chung:
<Kiểu dữ liệu trả về> <Tên_hàm>([Danh sách các tham
số nếu có]);
Trong đó:
• <Kiểu dữ liệu trả về>: int,float,char, Nếu hàm không
có kiểu dữ liệu trả về thì ta dùng kiểu void
Ví dụ: int binhphuong(int a), void xuat()
• <Tên_hàm> : cần đặt tên sao cho gợi nhớ chức n8angcủa hàm
• [Danh sách các tham số nếu có]: tùy theo chức năngcủa hàm mà danh sách này có hay không có tham số,
các tham số cách nhau bởi dấu phẩy “ , ”
Trang 92 CÁC VÍ DỤ CÁCH VIẾT HÀM
* Ví dụ 1: viết chương trình tính S,P hình chữ nhật bằngcách dùng hàm
#include “stdio.h”
#include “conio.h”
int tinhP(int dai,int rong);
int tinhS(int dai,int rong);
void main()
{ int dai,rong;
printf (“Nhap dai,rong: ”);
scanf(“%d %d”,&dai,&rong);
printf (“Chu vi hcn là %d”,tinhP(dai,rong));
printf (“Dien tich hcn là %d”,tinhS(dai,rong));
int S;
S=dai*rong;
return S;
}
Trang 10printf (“pt co nghiem x=%.2f”,x); }
}
Trang 112 CÁC VÍ DỤ CÁCH VIẾT HÀM
* Ví dụ 3: viết chương trình giải ptb2 ax^2+bx+c=0 dùng hàm.
#include “stdio.h”
#include “conio.h”
void giaiPTB1(int a,int b);
void giaiPTB2(int a,int bint c);
void giaiPTB2(int a,int b,int c) {
}
Trang 123 PHÂN LOẠI HÀM TRONG C
* Xét ví dụ: viết CT hoán vị giá trị cho 2 số nguyên a,b như
b = 1fx rác (-859…)
tam = 2fx rác (…)
5 6
5
6 5
Nhap a,b:
Truoc khi hvi a=5 b=6
5 6
Trang 133 PHÂN LOẠI HÀM TRONG C
* Xét ví dụ: viết CT hoán vị giá trị cho 2 số nguyên a,b bằng
cách dùng hàm như sau:
… void hoanvi(int a,int b);
void main() { int a,b;
printf (“Nhap a,b: ”);
Trang 143 PHÂN LOẠI HÀM TRONG C
b= giá tri rác (-859…) 1fx
a= 5 0fx
b= 6 1fx
a'= 5 (lấy giá trị từ a) 2ffx.
b'= 6 (lấy giá trị từ b) 3ffx.
a'= 6 (hoán vị a=b) 2ffx.
b'= 5 (hoán vị b=tam) 3ffx.
Tạo 2 vùng nhớ phụ khác:
Sau khi kết thúc hàm hoanvi 2 vùng nhớ phụ được giải phóng
Thực hiện các lệnh để hoán vị:
Không đổi
Trang 153 PHÂN LOẠI HÀM TRONG C
* Cách khắc phục: truy cập trực tiếp đến địa chỉ vùng nhớ
b = 1fx rác (-859…)
5 6
6 5
tam = 1fx rác (-859…)5
Trang 163 PHÂN LOẠI HÀM TRONG C
* Nhận xét: từ ví dụ trên, ta phân loại hàm trong C theo
Trang 173 PHÂN LOẠI HÀM TRONG C
a/ Hàm với đối số là tham trị:
Định nghĩa: là hàm không làm thay đổi giá trị của
các tham số truyền vào khi hàm kết thúc
Khai báo:
<Kiểu_data_trả_về> <Tên_hàm> ([DS_các tham_số])
Ví dụ:
float tinhDTB ( float van, float toan);
float rutcan_bac_hai ( float so);
…
Trang 183 PHÂN LOẠI HÀM TRONG C
b/ Hàm với đối số là tham biến:
Định nghĩa: là hàm làm thay đổi giá trị của các
tham số truyền vào khi hàm kết thúc
Khai báo cơ bản:
<Kiểu_data_trả_về> <Tên_hàm> ([ & DS_các tham_số])
Ví dụ:
void tinhDTB ( float van, float toan, float & DTB);
float rutcan_bac_hai ( float so, float & kq);
…
Trang 193 PHÂN LOẠI HÀM TRONG C
* Các vấn đề liên quan đến biến: (xem trang 100)
a/ Địa chỉ của biến : là địa chỉ vùng nhớ của máy
tính khi ta khai báo biến (qui ước: đó là số thứ tự của byte đầu tiên trong một dãy các byte liên tiếp)
=> Cú pháp để lấy địa chỉ của biến: & <Tên_biến>
b/ Biến con trỏ: là một loại biến dùng để lưu địa chỉ
của biến (phụ thuộc vào kiểu dữ liệu của biến)
=> Cú pháp khai báo biến con trỏ:
<Kiểu_data> * <Tên_biến>;
=> Qui tắc sử dụng: biến con trỏ bắt buộc phải sử
dụng kết hợp với địa chỉ của vùng nhớ
Trang 203 PHÂN LOẠI HÀM TRONG C
int *p; // khai báo con trỏ
p=&a; // gán vào địa chỉ biến a
*p=7; // Thay đổi giá trị biến a
}
Tạo vùng nhớ chứa số nguyên a:
a = 0fx 57
Truoc a=5
1fx p NULL
Trang 213 PHÂN LOẠI HÀM TRONG C
* Các vấn đề liên quan đến biến: (xem trang 115,117)
c/ Biến cục bộ (biến nội) : là các biến khai báo bên
trong thân của một hàm
Thời gian tồn tại: từ lúc hàm bắt đầu cho đến khi hàm đó
kết thúc (như vậy các biến khai báo trong hàm main() tồn tại cho đến khi kết thúc chương trình)
Phạm vi sử dụng: chỉ sử dụng bên trong hàm mà nó
được khai báo
d/ Biến toàn cục (biến ngoại) : là các biến được khai
báo bên ngoài các hàm
Thời gian tồn tại: tồn tại trong suốt chương trình
Phạm vi sử dụng: từ vị trí nó được khai báo cho đến cuối
chương trình.
Trang 223 PHÂN LOẠI HÀM TRONG C
* Bảng tóm tắt về cách dùng hàm:
trong khai báo hàm
Tham số thực trong hàm main
Khai báo dạng địa chỉ của biến
void hoanvi(int &a,int &b)
int a=5,b=6;
hoanvi(a,b);
Khai báo dạng biến con trỏ
void hoanvi(int *a,int *b)
int a=5,b=6;
hoanvi(&a,&b);