− Khi định nghĩa hàm, ta luôn khai báo tường minh giá trị trả về khi
hàm thực hiện xong.
− Cú pháp:
(danh sách các tham số)
{
//Thân hàm
return //cùng kiểu dữ liệu với hàm
}
16 trang |
Chia sẻ: lylyngoc | Lượt xem: 1636 | Lượt tải: 2
Bạn đang xem nội dung tài liệu Ôn tập kỹ thuật lập trình, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
1Ôn tập kỹ thuật lập trình
GV: Nguyễn Hữu Thể
Khoa CNTT – Đại Học Cửu Long
CTDL1- Nguyễn Hữu Thể
2
NỘI DUNG
Hàm và thủ tục1
Con trỏ2
5
CTDL1- Nguyễn Hữu Thể
3
I. Hàm và thủ tục
I.1. Hàm
− Khi định nghĩa hàm, ta luôn khai báo tường minh giá trị trả về khi
hàm thực hiện xong.
− Cú pháp:
(danh sách các tham số)
{
//Thân hàm
return //cùng kiểu dữ liệu với hàm
}
CTDL1- Nguyễn Hữu Thể
4
I.1. Hàm
Ví dụ: tính tổng 2 số nguyên a, b. Trả về giá trị là tổng 2 số
Gọi hàm trong main()
int TinhTong(int a, int b)
{
int tong;
tong = a + b;
return tong;
}
int TinhTong(int a, int b)
{
return (a+b);
}
void main()
{
int a=4, b=5;
int tmp;
tmp = TinhTong(a,b);
printf(“Tong 2 so:%d”
,tmp);
}
void main()
{
int a=4, b=5;
printf(“Tong 2 so la:
%d”, TinhTong(a,b));
}
CTDL1- Nguyễn Hữu Thể
5
I.2. Thủ tục (Hàm không có giá trị trả về)
− Thủ tục không trả về giá trị, ta dùng từ khóa void để khai báo kiểu
dữ liệu.
− Cú pháp:
void (danh sách các tham số)
{
//Thân hàm, xử lý các dữ liệu
//Nếu cần biết thông tin dl thì in ra màn hình
}
CTDL1- Nguyễn Hữu Thể
6
I.2. Thủ tục
Ví dụ: tính tổng 2 số nguyên a, b. In kết quả ra màn hình
Gọi hàm trong main()
void TinhTong(int a, int b)
{
int tong;
tong = a + b;
printf(“%d”,tong);
}
void TinhTong(int a, int b)
{
printf(“%d”,(a+b));
}
void main()
{
int a=4, b=5;
TinhTong(a,b);
}
void main()
{
TinhTong(4,5));
}
CTDL1- Nguyễn Hữu Thể
7
Cách tổ chức mã nguồn trong C
Cách 1: khai báo prototype Cách 2: để hàm main sau cùng
#include
#include
//khai báo prototype
void TinhTong(int a, int b);
void main()
{
int a=4, b=5;
TinhTong(a,b);
getch();
}
void TinhTong(int a, int b)
{
int tong;
tong = a + b;
printf(“%d”,tong);
}
#include
#include
void TinhTong(int a, int b)
{
int tong;
tong = a + b;
printf(“%d”,tong);
}
void main()
{
int a=4, b=5;
TinhTong(a,b);
getch();
}
CTDL1- Nguyễn Hữu Thể
8
II. Con trỏ
II.1 Truy cập địa chỉ
− Trong các ngôn ngữ lập trình, khi một biến được khai báo, ba thuộc
tính cơ bản sau được liên kết đến nó:
Tên định danh của biến
Kiểu dữ liệu liên quan
Địa chỉ trong bộ nhớ
Ví dụ: khai báo biến
int n = 10;
n là tên định danh của biến, có kiểu int và được lưu trữ đâu đó
trong bộ nhớ máy tính.
Xuất:
printf(“%d”,n); //in nội dung biến
printf(“%0X”,&n);//in địa chỉ của biến
…
…
…
10Địa chỉ: FFF0
Nội dung ô nhớ
CTDL1- Nguyễn Hữu Thể
9
II.1 Truy cập địa chỉ
Ví dụ:
void main()
{
int n=10;
printf(“%d”,n); //in nội dung biến
printf(“%0X”,&n);//in địa chỉ của biến
}
Kết quả thực hiện như sau:
• Ta thấy giá trị của n là 10
• Địa chỉ biến n theo số hexa là FFF0
10
FFF0
CTDL1- Nguyễn Hữu Thể
10
II.2 Biến tham chiếu
− Dùng một biến khác truy cập đến cùng một địa chỉ với biến đã có, ta
sử dụng biến tham chiếu (references)
− Cú pháp:
type& alias = name
type: kiểu dữ liệu
alias: tên biến tham chiếu
name: tên của biến mà biến alias tham chiếu đến
void main()
{
int n=10;
int& r=n;
printf(“n=%d, r=%d”,n,r);
n++;
printf(“n=%d, r=%d”,n,r);
}
Kết quả
n = 10, r = 10
n= 11, r = 11
CTDL1- Nguyễn Hữu Thể
11
II.3. Biến con trỏ
− Dùng để lưu địa chỉ bộ nhớ của một đối tượng.
− Cú pháp:
type* var
type: kiểu dữ liệu
var: biến con trỏ
Ví dụ:
int x=10;
int* p;
p=&x; //p lưu địa chỉ của x, hay p trỏ đến x
Ghi chú:
(*p): nội dung của p
toán tử (*): toán tử đọc nội dung gián tiếp thông qua con trỏ.
CTDL1- Nguyễn Hữu Thể
12
II.3. Biến con trỏ
Ví dụ:void main()
{
int x=10;
int* p=&x; //p tr? d?n x
printf("Dia chi cua x: %0X \n",&x);
printf("Noi dung cua x: %d \n",x);
printf("Dia chi cua p: %0X \n",&p);
printf("Noi dung cua p: %0X",p);
printf("Noi dung tai dia chi ma p tro den: %d",*p);
}
FFEE
(&p)
FFF0
(&x)
Địa chỉ
FFF0
(&x hay p=&x)
p
10
(x)
x
Nội dung (giá trị)Biến
CTDL1- Nguyễn Hữu Thể
13
Ví dụ
void HoanVi_1(int a, int b)
{
int tmp = a;
a = b;
b = tmp;
}
void HoanVi_2(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void HoanVi_3(int &a, int &b)
{
int tmp = a;
a = b;
b = tmp;
}
void main()
{
int a = 1, b = 2;
HoanVi_1(a, b);
printf("a = %d",a);
printf("b = %d",b);
}
void main()
{
int *a = 1, *b = 2;
HoanVi_2(a, b);
printf("a = %d",*a);
printf("b = %d",*b);
}
void main()
{
int a = 1, b = 2;
HoanVi_3(a, b);
printf("a = %d", a);
printf("b = %d", b);
}
CTDL1- Nguyễn Hữu Thể
14
II.4. Con trỏ và mảng
− Con trỏ và mảng 1 chiều
int a[] = {4,5,7,9};
Truy xuất phần tử thứ hai a[1]=5
Sử dụng con trỏ:
• Tên mảng xem như con trỏ
• Truy xuất phần tử thứ i: a[i] hay *(a+i)
− Con trỏ và mảng 2 chiều
int a[2][3]={{4,5,7},
{9,10,12}};
Truy xuất phần tử thứ i=1,j=1 là: a[1][1]=10
Sử dụng con trỏ:
• Tên mảng xem như con trỏ
• Truy xuất phần tử thứ i,j: a[i][j] hay *(*(a+i)+j)
CTDL1- Nguyễn Hữu Thể
15
Bài tập
1. Cho mảng 1 chiều int a[] = {4,5,7,9}
Viết thủ tục xuất giá trị mảng ra màn hình (sử dụng con trỏ truy
xuất mảng).
2. Cho mảng 2 chiều int a[2][3]={{4,5,7},{9,10,12}};
Viết thủ tục xuất giá trị mảng ra màn hình (sử dụng con trỏ truy
xuất mảng).
16