1. Trang chủ
  2. » Luận Văn - Báo Cáo

Chương trình có sử dụng hàm, biến toàn cục, biến cục bộ.doc.DOC

22 2,1K 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 115,5 KB

Nội dung

Chương trình có sử dụng hàm, biến toàn cục, biến cục bộ

Trang 1

Phần I mở đầu

Trong giai đoạn hiện nay, giai đoạn mà nền công nghệ thông tin chiếm một vị tríhết sức quan trọng Mọi quốc gia trên thế giới đều cố gắng nỗ lực vào, và phấn đấuphát triển mạnh lĩnh vực công nghệ thông tin Một trong những công cụ tiếp cậnnhanh nhất đó là tin học

Đã qua rồi, thời mà cha ông ta phải làm và ghi nhớ mọi việc bằng những phơngtiện thô sơ Để tính toán họ đều phải bắt đầu bằng tay và tính toán một cách chi tiết.Còn ngày nay - Thời đại của công nghệ thông tin - Bạn không cần phải làm nh vậynữa Bạn chỉ cần lập ra một chơng trình rồi sử dụng nó Nó tiện ích và thuận lợi hơnrất nhiều Nó không hạn chế về khối lợng, con số Thậm chí trong một giây nó cóthể giải quyết hàng vạn bài toán phức tạp vv…Do đó tốc độ làm việc và năng suấtDo đó tốc độ làm việc và năng suấttăng lên rất nhiều Lợi ích rất lớn

Để nó có thể làm việc và hoạt động đợc thì chúng ta cần phải lập trình, mà muốnlập trình thì cần phải có ngôn ngữ lập trình Có rất nhiều ngôn ngữ lập trình nhPascal, Cobol, C++ vv…Do đó tốc độ làm việc và năng suất Mỗi ngôn ngữ lập trình có một chức năng riêng, một thếmạnh riêng, trong đó ngôn ngữ lập trình C++ rất hay dùng và nó có thế mạnh về quátrình can thiệp sâu vào máy tính Nó là điều mà mọi kỹ s lập trình đều cần phải biết

đến, là vấn đề rất quan trọng trong quá trình tiếp cận với máy tính

Những vấn đề trong ngôn ngữ lập trình C++ rất đáng phải quan tâm và có rấtnhiều vấn đề, nhng ở đề án này chúng ta chỉ nghiên cứu 3 vấn đề cơ bản nhất đó là:

Chơng I: Hàm

Chơng II: Biến toàn cục, biến cục bộ

Chơng III: Chơng trình có sử dụng hàm, biến toàn cục, biến cục bộ

Trong mỗi chơng sẽ có những vấn đề nhỏ, cụ thể cần nghiên cứu sẽ đợc thể hiệntrong phần nội dung

Đề án của em đợc hoàn thành dới sự hớng dẫn giúp đỡ của thầy TS Đặng QuếVinh và những tài liệu về bài giảng của thầy cũng nh một số tài liệu khác Một lầnnữa em xin cảm ơn thầy

Phần II Nội dung.

Nội dung chính bao gồm: Hàm, biến toàn cục, biến cục bộ

Chơng I : Hàm.

Trang 2

Chơng trình con: Chơng trình đợc viết theo những quy tắc đặc biệt để có thể đợcgọi thực hiện bằng một chơng trình khác Chơng trình chứa lời gọi thực hiện chơngtrình con đợc gọi là chơng trình chính.

Việc viết và sử dụng những chơng trình con cho phép tiết kiệm công sức của

ng-ời viết chơng trình rất nhiều Trong hầu hết các ngôn ngữ lập trình bậc cao chơngtrình con đợc chia làm 2 loại là thủ tục( x, thủ tục) và hàm(x, hàm)

I Định nghĩa hàm.

Hàm là một chơng trình con tính một giá trị và trả lại giá trị ấy thông qua tênhàm

Hàm chia thành 2 loại là hàm chuẩn và hàm tự định nghĩa còn gọi là hàm do ng

-ời sử dụng định nghĩa

- Hàm chuẩn là những hàm có sẵn trong ngôn ngữ lập trình Lập trình viên cóthể sử dụng các hàm chuẩn mà không phải định nghĩa lại các hàm đó Hầu hết cáchàm toán học thông dụng đều là các hàm chuẩn trong các ngôn ngữ lập trình Tậphợp các hàm chuẩn tạo thành th viện hàm chuẩn của ngôn ngữ lập trình th viện hàmchuẩn là thành phần rất quan trọng của mỗi ngôn ngữ lập trình Nó làm cho việc lậptrình đợc dễ dàng hơn và làm cho khả năng của ngôn ngữ lập trình tăng lên rấtnhiều

- Hàm tự định nghĩa: Là những hàm không có sẵn trong th viện hàm chuẩn củangôn ngữ lập trình Muốn sử dụng những hàm này ngời sử dụng phải tạo ra nó Vìvậy những hàm này mới có tên là hàm do ngời dùng định nghĩa Việc tạo ra và sửdụng những hàm tự định nghĩa làm cho chơng trình ngắn gọn hơn, sáng sủa hơn vàcho phép tiết kiệm công sức của lập trình viên

Có thể coi hàm là một phép toán do ngời dùng xác định Nói chung hàm đợcbiểu thị bởi một tên gọi chứ không phải là một toán tử Các toán hạng của hàm, đợcgọi là các đối của nó, đợc xác định trong danh sách đối phân cách nhau bởi dấuphẩy và đợc bao trong dấu ngoặc tròn Kết quả của hàm thờng đợc coi là kiểu cholại của nó Hàm không cho lại giá trị nào có kiểu cho lại là Void Các hành độngthực tại mà một hàm thực hiện đợc xác định trong thân hàm Thân hàm đợc baotrong ngoặc nhọn( "{ }" ) và đôi khi còn đợc coi là một khối

Trong C++ có 2 cách định nghĩa hàm:

Định nghĩa hàm sau hàm main( ) và định nghĩa hàm trớc hàm main() Tuy nhiên cách định nghĩa hàm trớc hàm main( ) ngăn gọn hơn và hay dùng hơn cho nên ở

đây ta nghiên cứu kỹ về chúng

Việc định nghĩa một hàm theo mẫu sau:

Trang 3

TĐK(từ định kiểu) : int, char;

TĐK tên hàm( TĐK1 tham số 1 [, TĐK2 tham_số 2 ]…Do đó tốc độ làm việc và năng suất)

TĐK(*) xác định kiểu của hàm, tức là xác định kiểu của giá trị đợc trả lại thông quatên hàm

Các tham số có trong ngoặc tròn ( ) đi sau tên hàm đợc gọi là các tham số hìnhthức Toàn bộ các tham số trong ngoặc ( ) gọi là danh sách tham số hình thức Danhsách này gồm 1 hay nhiều tham số, tham số nọ cách tham số kia dấu phẩy Danhsách tham số hình thức kết thúc bởi dấu ngoặc, sau đó không có dấu chấm phẩy *Phần khai báo của hàm:

Dùng để khai báo các biến đợc dùng trong hàm này Các biến đợc khai báotrong hàm chỉ có ý nghĩa trong hàm này nên đợc gọi là các biến cục bộ( địa phơng).Việc sử dụng các biến cục bộ trong chơng trình khác hoặc chơng trình chính làkhông hợp lệ

Một hàm đợc tính bất kỳ khi nào toán tử gọi( "( )") đợc áp dụng vào tên củahàm Nếu hàm cần có các đối thì các đối này, còn đợc gọi là các đối thực tại, sẽ đợc

đặt vào bên trong toán tử gọi Mỗi đối đợc phân cách bởi một dấu phẩy Nó còn đợcgọi là truyền đối cho hàm

*Thân hàm:

Giống nh phần thân chơng trình của một chơng trình thông thờng Tuy nhiênsau khi tính xong giá trị hàm thì trong thân hàm thờng có câu lệnh return để trả lạigiá trị vừa tính đợc trong thân hàm cho tên hàm

Nó có dạng:

Return Biểu thức;

hoặc Return( biểu thức)

Câu lệnh này có tác dụng trả cho tên hàm giá trị của biểu thức có trong câu lệnhnày Câu lệnh return kết thúc việc thực hiện các câu lệnh trong thân hàm và trả điềukiện về chỗ đã gọi hàm trong chơng trình chính Tuy nhiên câu lệnh return là khôngbắt buộc phải có

Hàm trả lại giá trị qua tên hàm nên hàm có thể đợc dùng là một toán hạng trongbiểu thức

Trong C++ chỉ có một loại chơng trình con đó là hàm Mỗi chơng trình

Trong C++ phải có ít nhất một hàm main( ) Hàm trong C++ không nhất thiết phải

có tham số, trả lại giá trị( đó là kiểu void) Trong chơng trình nguồn hàm có thể làmột toán hạng trong biểu thức hoặc có thể đứng một mình nh một câu lệnh đơn độc

Trang 4

Trong chơng trình này dòng(1) có chứa lời gọi hàm là BINH_PHUONG(m) ở

đây m đợc gọi là tham số thực sự gặp lời gọi này máy sẽ thực hiện hàmBINH_PHUONG mà ta đã khai báo ở trên

Một lời gọi hàm có thể làm cho 1 hay 2 điều xuất hiện Nếu hàm đã đợc khaibáo là inline thì thân của hàm đợc mở rộng tại điểm gọi nó trong lúc dịch, ngoài rahàm sẽ đợc gọi trong lúc chạy Một lời gọi hàm làm cho điều khiển của chơng trình

đợc chuyển cho hàm đợc gọi, việc thực hiện của hàm đang chạy lúc đó bị tạmngừng Khi tính toán của hàm đợc gọi đã hoàn tất thì hàm bị ngừng sẽ lấy lại hoạt

động tại điểm sau lời gọi Việc gọi hàm đợc quản lý trong chồng khi chạy của

ch-ơng trình Nếu một hàm không đợc khai báo trong chch-ơng trình trớc khi dùng nó thì

sẽ có lỗi khi dịch

Hàm chỉ đợc định nghĩa một lần trong chơng trình Về cơ bản định nghĩa hàmtrong tệp văn bản riêng của nó hay trong tệp văn bản có chứa nó và các hàm có liênquan khác Một hàm thờng đợc dùng trong các tệp khác tệp chứa định nghĩa của nó

Do đó cần có phơng pháp phụ để khai báo hàm

Khai báo hàm bao gồm kiểu cho lại của hàm, tên hàm và danh sách đối

III.Truyền tham số cho hàm.

Khi gặp lời gọi hàm trong chơng trình chính thì quá trình thực hiện hàm bắt

đầu Quá trình này gồm các công việc sau:

- Máy tạm thời rời khỏi chơng trình chính, cấp phát bộ nhớ cho các tham số hìnhthức và các biến cục bộ

- Gán các giá trị của tham số thực sự cho các tham số hình thức tơng ứng

- Lần lợt thực hiện các câu lệnh trong thân hàm Nếu gặp câu lệnh return hoặcgặp dấu “}” thì máy sẽ xoá các tham số hình thức hoặc các biến cục bộ quay về ch-

ơng trình chính ở chỗ có lời gọi hàm Nếu thoát khỏi hàm bằng câu lệnh Return thìgiá trị biểu thức có trong câu lệnh này sẽ đợc gán cho tên hàm

Khi gặp lời gọi hàm thì giá trị tham số thực sự sẽ đợc gán cho tham số hìnhthức tơng ứng, mọi tính toán trong thân hàm sẽ đợc thực hiện trên các tham số hìnhthức Khi thoát khỏi hàm máy sẽ xoá các tham số hình thức và các biến cục bộ, nh

Trang 5

vậy những thay đổi đối với các tham số hình thức không thể đợc truyền về chơngtrình chính thông qua tham số thực sự tơng ứng.

Vậy làm thế nào để trong chơng trình con có thể thay đổi giá trị các biến cótrong chơng trình chính?

Ngời ta dùng con trỏ làm tham số hình thức để giải quyết vấn đề này Khi đóngời ta truyền cho chơng trình con địa chỉ của biến trớc và sau lời gọi hàm( tức làtrớc và sau khi thực hiện hàm địa chỉ này không thay đổi, hoàn toàn phù hợp với cácgiả định của C++ Tuy nhiên trong quá trình thực hiện hàm thì giá trị chứa trong địachỉ đó có thể bị thay đổi, giá trị này đợc giữ nguyên khi thoát khỏi hàm Đây là ph-

ơng pháp truyền giá trị từ chơng trình con về chơng trình chính

VD: Truyền giá trị từ chơng trình con về chơng trình chính

// Chuong trinh co ham tinh tong n so.

cout<<"\n tong vecto a="<<TONG(a,4);//in so 10

cout<<"\n tong vecto b="<<TONG(&b[0],6); //in ra so 10

getch();

}

IV Sử dụng hàm trong nhiều ch ơng trình khác.

Giả sử có một tệp gọi là: DVVECTERE.CPP

Chứa các hàm sau:

Float TONG VTF( float * vecter, int n);

Float TICH VTF ( float * vecter, int n);

Void NHAP VTF ( float * vecter, int n);

Void IN VTF ( float * vecter, int n);

Trang 6

V Danh sách đối của hàm.

Các hàm khác nhau của một chơng trình có thể thâm nhập chung vào các giá trịvới nhau theo 2 phơng pháp Một phơng pháp là dùng biến toàn cục trong chơngtrìnhl; Phơng pháp thứ hai là dùng danh sách đối hình thức

Danh sách đối đa ra một phơng pháp khác để thâm nhập chung vào các giá trịgiữa một hàm và chơng trình chung Danh sách đối cùng với kiểu cho lại của hàmxác định ra giao diện chung của hàm Một hàm khép kín có thể đợc dùng qua nhiềuchơng trình, nó không nhất thiết bị giới hạn vào một ứng dụng riêng Nếu bỏ bớt đimột đối hay truyền cho một đối kiểu sai sẽ gây ra lỗi Khả năng lỗi trong truyền đốităng lên theo kích cỡ của danh sách đối, dùng tối đa là 8 đối

*Cú pháp danh sách

Không đợc phép bỏ thiếu danh sách đối của hàm Một hàm không có đối có thể

đợc biểu thị hoặc bằng danh sách đối rỗng hoặc bằng danh sách đối chỉ chứa một từkhoá void

//Khai báo tơng đơng

int fork();

int fork( void);

Danh sách đối còn đợc gọi là dấu hiệu của hàm bởi vì nó thờng đợc dùng đểphân biệt một thể nghiệm của hàm này với hàm khác Tên và dấu hiệu một hàm xác

định duy nhất nó

Dấu hiệu bao gồm một danh sách các kiểu đối phân cách nhau bởi dấu phẩy.Không có hai tên đối nào xuất hiện trong dấu hiệu đợc phép trùng nhau Tên đốicho phép đối đó đợc thâm nhập từ trong thân của hàm Do đó tên đối không cần viếttrong khai báo hàm

*Truyền đối

Danh sách đối của hàm mô tả cho các đối hình thức Mỗi đối hình thức đợc cấp

bộ nhớ bên trong vùng nhớ của hàm Các biểu thức nằm giữa 2 dâu ngoặc tròn củalời gọi hàm đợc gọi là các đối thực tại của lời gọi Việc truyền đối vậy là một tiếntrình khởi đầu cho vùng nhớ của các đối hình thức theo các đối thực tại

Với truyền theo giá trị, hàm không bao giờ thâm nhập vào các đối thực tại củalời gọi, nội dung của đối thực tại không bị thay đổi Có 2 phơng án truyền theo giátrị

Thứ nhất là đối hình thức đợc khai báo là con trỏ

Void pswap( int * x, int * y)

Trang 7

Thứ 2 để truyền theo giá trị là khai báo đối hình thức có kiểu tham khảo

Void rswap( int &x, int &y)

*Tham chiếu tới một biến

Không thể gắn một tham chiếu với một hằng số trừ trờng hợp có từ khoá const

đứng trớc khai báo tham chiếu

Const int &p=3;

*Hằng tham chiếu

Hằng tham chiếu đợc khai báo nh sau:

Int n=5;

Const int &x=n;

Cũng giống nh biến, hằng tham chiếu đến một biến hoặc một hằng

Int n=5;

Const int &x=n;

Trang 8

Const int &y=100;

Hằng tham chiếu không đợc phép thay đổi giá trị của vùng nhớ mà nó thamchiếu Hằng tham chiếu thờng đợc sử dụng làm đối của hàm để cho phép hàm sửdụng giá trị của các tham số trong lời gọi hàm

*Truyền tham số cho hàm bằng tham chiếu

Nếu đối là biến hoặc hằng tham chiếu kiểu K thì tham số ( trong lời gọi hàm) phải

là biến hoặc phần tử mảng kiểu K

/*Ham swap2 thuc hien viec truyen tham so bang tham tro*/

void swap2(int *x, int *y)

/*Ham swap3 thuc hien viec truyen tham so bang tham chieu*/

void swap3(int &x, int &y)

Trang 9

cout<<"Sau khi goi ham swap2:\n";

ket qua se la:

Truoc khi goi swap1:

địa chỉ này để xác định giá trị biến, bằng cách đó giá trị của 2 biến a,b sẽ hoán đổicho nhau sau lời gọi hàm Hàm swap3( )đa ra giải pháp sử dụng tham chiếu, cáctham số hình thức của hàm swap3( ) bây giờ là các tham chiếu đến các tham số thực

đợc truyền cho hàm Nhờ vậy mà giá trị của 2 tham số thực a và b có thể hoán đổi

đợc cho nhau

*Giá trị trả về của hàm là tham chiếu

Định nghĩa của hàm có dạng:

<type> & fct(…Do đó tốc độ làm việc và năng suất )

{ …Do đó tốc độ làm việc và năng suất

return< biến có phạm vi toàn cục>;

}

Biểu thức đợc trả lại trong câu lệnh return phải là tên của một biến xác định từbên ngoài hàm Vì nếu là biến cục bộ thì nó sẽ bị mất đi khi kết thúc thực hiện hàm.Khi trả về của hàm là tham chiếu ta có thể gặp vế trái là một lời gọi hàm chứkhông phải là tên một biến

VD:

#include<iostream.h>

#include<conio.h>

Trang 10

Thông thờng số tham số trong lời gọi hàm sẽ bằng số đối của hàm Mỗi đối sẽ

đ-ợc khởi gán giá trị theo tham số tơng ứng của nó C++ cho phép tạo giá trị mặc địnhcho các đối Các đối này có thể có hoặc không có tham số trong lời gọi hàm Khikhông có tham số tơng ứng đối đợc khởi gán bởi giá trị mặc định

Sử dụng hàm có đối mặc định: Lời gọi hàm cần viết theo quy định sau:

Các tham số thiếu vắng trong lời gọi hàm phải tơng ứng với các đối mặc địnhcuối cùng, nghĩa là đã dùng giá trị mặc định cho một đối thì cũng phải sử dụng giátrị mặc định cho các đối còn lại

Trang 11

VD:

Inline float f( int n, float x);

Float f(int n, float x)

cout<<"\n Hinh chu nhat thu"<<i<<":";

cout<<"\n do dai 2 canh="<<x[i]<<"va"<<y[i];

cout<<"\n Dien tich="<<dt[i];

cout<<"\n Chu vi="<<cv[i];

}

getch();

}

Trang 12

- Điều kiện dừng: Nó không chứa đối tợng đang định nghĩa.

- Thành phần đệ quy: Nó có chứa đối tợng đang định nghĩa

Nếu không có điều kiện dừng thì hàm sẽ đệ quy “mãi mãi” Sử dụng kỹ thuật

đệ quy cho phép biến một quá trình gồm vô hạn các thao tác thành một quá trìnhgồm một số hữu hạn Sau đó giao cho máy thực hiện với tốc độ rất cao

Chơng trình con đệ quy là chơng trình con có chứa lời gọi đến chính nó Khi gặpmột lời gọi đến chơng trình con máy sẽ tạo ra một tập hợp các biến cục bộ mới, cóbao nhiêu lời gọi đến chơng trình con thì có bấy nhiêu lần thoát khỏi nó Mỗi khithoát khỏi chơng trình con thì một tập hợp các biến cục bộ đợc giải phóng, quá trìnhgiải phóng các biến cục bộ ngợc với quá trình tạo ra nó, nghĩa là tập hợp biến cục

bộ nào tạo ra sau thì sẽ đợc giải phóng trớc

Viết và sử dụng các hàm đệ quy làm cho chơng trình ngắn gọn nhng tốn thờigian tính toán và tốn bộ nhớ Bằng phơng pháp lập trình thông thờng có thể khôngcần đến kỹ thuật đệ quy

VD:

// định nghĩa hàm GIAI_THUA theo kiểu đệ quy

Int GIAI_THUA( int n)

Ngày đăng: 10/09/2012, 09:22

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w