Hàng ngày, bạn dùng điện thoại di động để nhắn tin, gọi điện. Để điện thoại của bạn hoạt động được, cần có phần mềm cài đặt bên trong và phần mềm tại công ty viễn thông cung cấp dịch vụ điện thoại để tính cước.
Trang 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
Trang 2NỘI DUNG
Hàm và thủ tục
1
Con trỏ
2
5
Trang 3I 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:
<kiểu dữ liệu> <tên hàm> (danh sách các tham số)
{
//Thân hàm return <biến> //cùng kiểu dữ liệu với hàm }
Trang 4I.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)); }
Trang 5I.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 <tên hàm> (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 }
Trang 6I.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));
}
Trang 7Cá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<stdio.h>
#include<conio.h>
//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<stdio.h>
#include<conio.h>
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();
}
Trang 8II 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
…
…
…
10
Địa chỉ: FFF0
Nội dung ô nhớ
Trang 9II.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
Trang 10II.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
Trang 11II.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ỏ
Trang 12II.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
FFF0
(&x)
Địa chỉ
FFF0 p
10
(x)
x
Nội dung (giá trị) Biến
Trang 13Ví 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);
Trang 14II.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)
Trang 15Bà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)