Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 62 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
62
Dung lượng
1,19 MB
Nội dung
CON TRỎ
(POINTER)
Chương 7:
CON TRỎ (Pointer)
Gán địa chỉ
P = &x; // p = x; Error
Truy xuất nội dung biến
*p = *p – 12;
p = &y;
y – = 15;
x += 20;
P = (int*)malloc(sizeof(int));
*P = x – 10;
Free(p);
Khai báo biến và khởi tạo
int x = 8, y = 10;
Khai báo biến pointer
int *p;
x
0xFA30
y
0xFA32
????
p
????
0xFA30 0xFA32
NULL
8 10
- 4
- 5
16
6 ?
// x = *p = – 4 , y = 10
// y = *p = 10 , x = – 4
// y = *p = – 5 , x = – 4
// x = 16 , y = *p = – 5
// *p = 6, x = 16, y = – 5
0xAA00
// p = NULL
???? 0xAA00
????
HÀM
(FUNCTION)
Chương 8:
Function
Hm l mt đon chương trnh đc
lp thc hin trn vn mt công vic nht
đnh, sau đ tr v gi tr cho chương
trnh gi n.
Hay ni cch khc hm l s chia
nh ca chương trnh.
Khái niệm
Function
Ví dụ:
#include <stdio.h>
#include <conio.h>
// Prototype
void HoanDoi (int& a, int& b);
//
void main()
{
int a,b;
clrscr();
printf("Nhap vao 2 so nguyen A,B: ");
scanf("%d %d",&a,&b);
printf("Truoc khi hoan doi: A=%d va B=%d\n",a,b);
HoanDoi(a,b);
printf("Sau khi hoan doi: A=%d va B=%d\n",a,b);
getch();
}
//
void HoanDoi (int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
Function
<Kiu d liệu trả về> Tên hàm([ danh sách các tham s]);
Với:
Kiu d liệu : int, float, char, struct (void: không kiu)
Tên hàm : người lậptrình tự đặt tên theo qui tắc như tên Biến.
Ví dụ:
void HoanDoi (int& a, int& b);
Khai báo
Function
<Kiểu trả về> Tên_hm (danh sch cc tham s)
{
Khai bo cc bin cc b
Cc câu lnh / khi lnh hay li gi đn hm khc.
}
Cách Khai báo biến trong hàm:
#include <stdio.h>
#include <conio.h>
// Prototype
void HoanDoi (int& a, int& b);
//
void main()
{
int a,b;
clrscr();
printf("Nhap vao 2 so nguyen A,B: ");
scanf("%d %d",&a,&b);
printf("Truoc khi hoan doi: A=%d va B=%d\n",a,b);
HoanDoi(a,b);
printf("Sau khi hoan doi: A=%d va B=%d\n",a,b);
getch();
}
//
void HoanDoi (int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
Function
Truyền tham s hàm:
1.Truyền Tham Trị: Bên trong giá trị các
tham số thay đổi, nhưng ra khỏi hàm vẫn
không đổi.
Ví dụ:
int Tinh (int a)
{
int temp;
a = a+3;
temp = 2*(a+4);
return temp;
}
Truyền Tham TRỊ
Function
Truyền tham s hàm:
2.Truyền Tham Chiếu (&): Bên trong giá trị các
tham số thay đổi, ra khỏi hàm bị thay đổi theo.
Ví dụ:
void HoanDoi (int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
Truyền Tham CHIẾU
Function
Truyền tham s hàm:
3.Truyền Tham Biến (*): Bên trong giá trị các
tham số thay đổi, ra khỏi hàm bị thay đổi theo.
Ví dụ:
void HoanDoi (int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
Truyền Tham BiẾN
Cơ chế giống Tham
Chiếu, nhưng cách
viết theo con trỏ
[...]... array Các thao tác trên mảng Nhập và xuất mảng Kỹ thuật đặt cờ hiệu Kỹ thuật đặt lính canh Tìm kiếm trên mảng Đếm – Tần suất Tính tổng – Trung bình có điều kiện Sắp xếp mảng Xóa phần tử của mảng Chèn thêm phần tử vào mảng Tách / chia mảng Ghép / nối mảng One-dimensional array Nhập và xuất mảng Viết chương trình nhập xuất mảng một chiều các số nguyên #include #include... One-dimensional array Khai báo dạng con trỏ hằng (constant pointer) < Kiểu dữ liệu > < Tên mảng > [ < Số phần tử tối đa của mảng> ] ; Với: Kiểu dữ liệu : int, float, char, struct, pointer Tên mảng : người lập trình tự đặt tên theo qui tắc như tên Biến Tên mảng thực chất là một hằng địa chỉ của phần tử đầu tiên Số phần tử tối đa của mảng : là hằng số nguyên cụ thể Ví dụ: int a[100]; #define MAX 50 float... phép từ trong thân của một hàm có lời gọi hàm chính hàm đó Hàm như vậy gọi là hàm đệ qui Khi hàm gọi đệ qui đến chính nó, thì mỗi lần gọi, máy sẽ tạo ra một tập các biến cục bộ mới hoàn toàn độc lập với tập các biến cục bộ đã được tạo ra trong các lần gọi trước Ví dụ: #include #include // -Prototype unsigned long GiaiThua(int n); unsigned long GiaiThuaDQ(int n); //... < n; i ++) { printf (“ a [%d] = “, i); scanf (“ %d “, &a[i]); } } // void XuatMang (int a[], int n) { for (int i = 0; i < n; i ++) printf (“ %d \t “, a[i]); } One-dimensional array Kỹ thuật đặt cờ hiệu Viết hàm kiểm tra xem mảng các số nguyên có thứ tự tăng dần không? Index 0 1 2 3 4 5 6 7 8 9 a -3 -1 1 5 2 8 3 2 4 3 5 1 5 8 8 5 8 4 // Trả về 1: Nếu mảng tăng dần, ngược lại trả... về 0 int KiemTraTang (int a[ ], int n) { int flag = 1; for (int i = 0; i < n-1; i ++ ) if ( a[i] > a[i+1] ) // Vi phạm điều kiện tăng dần { flag = 0; break; } return flag; } One-dimensional array Kỹ thuật đặt lính canh Viết hàm tìm giá trị lớn nhất trong mảng một chiều các số nguyên i Index 0 1 2 3 4 5 6 7 8 9 a -3 -1 5 int TimMax (int a[], int n) { int max, i; max = a[0]; i = 1; while ( i < n ) . s]); Với: Kiu d liệu : int, float, char, struct (void: không kiu) Tên hàm : người lập trình tự đặt tên theo qui tắc như tên Biến. Ví dụ: void HoanDoi (int& a, int&. của mảng> ] ; Với: Kiu d liệu : int, float, char, struct, pointer Tên mảng : người lập trình tự đặt tên theo qui tắc như tên Biến. Tên mảng thực chất là một hằng địa chỉ của phần tử. đệ qui đến chính nó, thì mỗi lần gọi, máy sẽ tạo ra một tập các biến cục bộ mới hoàn toàn độc lập với tập các biến cục bộ đã được tạo ra trong các lần gọi trước. Ví dụ: #include<conio.h>