Nguyến tớc hoỰt ệéng cựa hộm vộ cịch truyÒn tham sè cho hộm

Một phần của tài liệu Đề cương bài giảng cơ sở kỹ thuật lập trình ngôn ngữ c (Trang 66 - 69)

Như ở trên chúng ta ựã tìm hiểu mỗi hàm có thể có ựối hoặc không. Nếu như hàm có ựối thì sau khi xây dựng xong chúng ta có thể gọi chúng ra thực hiện. Mỗi một ựối ta phải truyền cho nó một tham số tương ứng tuỳ thuộc ựối ựó là kiểu gì.

Nếu ựối là kiểu tham trị trước tiên máy sẽ cấp phát bộ nhớ cho ựối kiểu tham trị ựó, sau ựó tiến hành sao chép giá trị của tham số thực thụ với nó ựưa vào ựối nàỵ Từ ựó ta thấy tham số thực thụ tương ứng với ựối có kiểu tham trị có thể là một hằng, một biến, một biểu thức... và có kiểu tương ứng. Bởi vì ựối kiểu tham trị khi mà hàm chứa ựối này ựược gọi ra thực hiện thì nó ựược cấp phát bộ nhớ riêng sau ựó sao chép giá trị của tham số thực thụ tương ứng với nó ựưa vào và sau ựó máy tiến hành các thao tác trên ựối này mà không làm ảnh hưởng tới tham số thực thụ tương ứng với nó và cũng bởi vì nó chỉ sao chép giá trị của tham số thực thụ tương ứng với nó do vậy tham số thực thụ tương ứng với nó cứ cho một giá trị là ựược. Vì vậy tham số thực thụ tương ứng với ựối kiểu tham trị có thể là hàng, biến, biểu thức...miễn là có cùng kiểụ

Ghi chú: Theo những phân tắch ở trên những ựối chỉ nhằm mục ựắch cung cấp dữ liệu ựầu vào cho hàm thì chúng ta khai báo ựối ựó là ựối kiểu tham trị

Nếu ựối là kiểu tham chiếu ựối này sẽ tham chiếu tới tham số tương ứng với nó. Nghĩa là trong thân hàm khi ta thao tác trên ựối tham chiều này thực

chất là thao tác trên tham số truyền vào tương ứng với ựối nàỵ Do vậy mọi thay ựổi giá trị của ựối tham chiếu cũng ựồng nghĩa với việc thay ựổi giá trị của tham số tương ứng truyền vàọ điều này chứng tỏ rằng tham số tương ứng với ựối là kiểu tham chiểu phải là một biến hay phần tử của mảng có kiểu tương ứng và khi hàm chứa ựối kiểu tham chiếu này kết thúc thì tham số tương ứng với nó lưu lại ựược sự thay ựổi khi ra khỏi hàm

Trong C# có hai loại ựối kiểu tham chiếu ựó là: ựối kiểu tham chiếu ref và ựối kiểu tham chiếu out. Nếu ựối là kiểu tham chiếu ref thì tham số tương ứng với nó phải ựược khởi gán giá trị trươc khi truyền vào và nó có thể tham gia tắnh toán trong các biểu thức. Nếu ựổi là kiểu tham chiếu out thì tham số tương ứng với nó không cần khởi tạo giá trị ban ựầu, chắnh vì lẽ ựó nó chỉ dùng ựể nhận giá trị và không ựược tham gia tắnh toán trong các biểu thức.

Ghi chú: Theo những phân tắch ở trên những ựối dùng ựể cung cấp dữ liệu ựầu vào cho hàm và ựồng thời lưu lại ựược sự thay ựổi khi chúng ta tác ựộng trên những ựối này, những ựối như vậy thì chúng ta khai báo ựối kiểu tham chiếu(ref). Những ựối chỉ nhằm mục ựắch nhận giá trị khi ra khỏi hàm thì những ựối này chúng ta khai báo ựối theo kiểu tham chiếu out.

Tham số truyền vào cho ựối tham chiếu phải kèm theo hai từ khoá ref hoặc out tượng ứng với ựối kiểu tham chiếu ref và ựối kiểu tham chiếu out

Vắ dụ: Nhâp vào ba số nguyên dương sau ựó tiến hành sắp xếp ba số nguyên ựó theo thứ tự tăng dần.

using System; class VD9 {

static void HoanVi(ref int x, ref int y) {

int tg = x; x = y; y = tg; }

static void Main() {

int a, b, c;

ConsolẹWrite("Nhap a="); a = int.Parse(ConsolẹReadLine()); ConsolẹWrite("Nhap b="); b = int.Parse(ConsolẹReadLine()); ConsolẹWrite("Nhap c="); c = int.Parse(ConsolẹReadLine()); if (a > b) HoanVi(ref a, ref b);

if (a > c) HoanVi(ref a, ref c); if (b > c) HoanVi(ref b, ref c); ConsolẹWrite("a={0}\tb={1}\tc={2}", a, b, c); ConsolẹReadKey(); } }

Vắ dụ: Xây dựng chương trình giải phương trình bậc hai ax2+bx+c=0(a<>0)

using System; class VD {

static double a,b,c; static void Nhap() {

ConsolẹWrite("Nhap a=");a=doublẹParse(ConsolẹReadLine()); ConsolẹWrite("Nhap b=");b=doublẹParse(ConsolẹReadLine()); ConsolẹWrite("Nhap c=");c=doublẹParse(ConsolẹReadLine()); }

static double Deltă) {

return b*b-4*a*c; }

static void Giai(out double x1,out double x2,out bool ok) { double d=Deltă); ok=true; if(d<0) {ok=false;x1=x2=0;} else if(d==0) x1=x2=-b/(2*a); else { x1=(-b-Math.Sqrt(d))/(2*a);

x2=(-b+Math.Sqrt(d))/(2*a); }

}

static void Main() {

double x1,x2; bool ok; Nhap();

Giai(out x1,out x2,out ok); if(ok==true)

if(x1==x2)

ConsolẹWriteLine("Phuong trinh co nghiem kep x1=x2={0}",x1); else

{

ConsolẹWriteLine("Phuong trinh co hai nghiem phan biet"); ConsolẹWriteLine("x1={0}\nx2={1}",x1,x2);

} else

ConsolẹWriteLine("Phuong trinh vo nghiem"); ConsolẹReadKey();

} }

Một phần của tài liệu Đề cương bài giảng cơ sở kỹ thuật lập trình ngôn ngữ c (Trang 66 - 69)

Tải bản đầy đủ (PDF)

(135 trang)