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

Bài giảng Ngôn ngữ lập trình C - Chương 6: Hàm và cấu trúc chương trình

34 5 0

Đ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

Tiêu đề Hàm và cấu trúc chương trình
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Ngôn ngữ lập trình
Thể loại Bài giảng
Năm xuất bản 2023
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 34
Dung lượng 350 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nối tiếp nội dung chương 5 của Bài giảng Ngôn ngữ lập trình C chương 6 sẽ tiếp tục giới thiệu đến bạn đọc về hàm và cấu trúc chương trình, quy tắc xây dựng một hàm, các khái niệm liên quan đến hàm, cách xây dựng hàm, con trỏ và địa chỉ. Hy vọng, đây là tài liệu tham khảo hữu ích dành cho các bạn.

Trang 1

CHƯƠNG VI HÀM VÀ CẤU TRÚC CHƯƠNG TRÌNH

I Hàm

1 Quy tắc xây dựng một hàm:

Hàm có thể xem là một đơn vị độc lập của chương trình Các hàm có vai trò ngang nhau, vì vậy không cho phép xây dựng một hàm bên trong một hàm khác.

Dòng đầu tiên (của một hàm) chứa các thông tin về hàm:

- Kiểu giá trị của hàm (nếu hàm có giá trị)

- Tên hàm

- Danh sách các đối số (nếu có)

Trang 2

Các dòng tiếp theo dùng để khai báo kiểu giá trị của đối số.Và bắt buộc phải khai báo kiểu giá trị cho tất cả các đối số.

Tiép theo là thân hàm Thân hàm là nội dung

chính của hàm nó bắt đầu bằng dấu { và kết

thúc }

Trong thân hàm có thể dùng 1 hoặc nhiều lệnh return hoặc có thể không dùng Và có thể đặt

chúng ở bất kỳ chỗ nào nếu thấy thích hợp

Cú pháp chung của lệnh return

return ([Biểu thức]);

Giá trị của biểu thức trong ngoặc sẽ được gán cho hàm

Trang 3

2 Quy tắc hoạt động của hàm

- Về nguyên tắc mọi hàm cần được khái báo trước khi sử dụng nó Nó hoàn toàn giống với việc khai báo một biến.

Trang 4

Ví dụ:

Viết chương trình tìm số lớn nhất và nhỏ nhất của từng cột trong ma trận, có sử dụng hàm tìm max, tìm min.

Trang 5

clrscr();

Trang 8

3 Các khái niệm liên quan đến hàm:

- Tên hàm

- Kiểu giá trị của hàm

- Đối hay tham số hình thức

- Thân hàm

- Khái báo hàm

- Lời gọi hàm

- Tham số thực

Trang 9

4 Cách xây dựng hàm

[type] tên_hàm([Danh sách đối số])

[Khai báo kiểu giá trị cho tất cả các đối]

- Khi xây dựng hàm cần nắm vững những qui định về

mối quan hệ giữa: tham số thực và tham số hình thức (đối) cũng như các đối trong thân của hàm

Trang 10

- Đối với hàm không cho giá trị thì chúng ta không cần khai báo kiểu giá trị của nó.

- Đối với các hàm có giá trị mà ta quên không khai báo kiểu giá trị của nó, thì máy sẽ coi hàm đó có giá trị nguyên Như vậy đối với hàm có gái trị kiểu nguyên thì không cần khai báo kiểu giá trị cho chúng.

- Khi gặp lệnh return có chứa biểu thức, thì giá trị của biểu thức bao giờ cũng được chuyển về theo kiểu giá trị của hàm trước khi nó được gán cho hàm.

Trang 11

 Nguyên tắc hoạt động của tham số thực, các đối và các

biến cục bộ

- Do đối và biến cục bộ đều có phạm vi hoạt động trong cùng một hàm nên đối và biến cục bộ cần có tên khác nhau

- Đối và biến cục bộ đều là biến tự động Chúng được cung cấp bộ nhớ khi hàm được khởi động và chúng sẽ lập tức biến mất khi máy ra khỏi hàm Như vậy, không thể mang giá trị của đối ra khỏi hàm Điều này có nghĩa là không thể sử dụng đối để làm thay đổi giá trị của bất kỳ một đại lượng nào ở ngoài hàm

- Khi một hàm được gọi tới, việc đầu tiên là gái trị của các tham số thực được gán cho các đối Như vậy, các đối chính là bản sao của các tham số thực Hàm chỉ làm vcệc trên các đối, tức là chỉ làm việc trên các bản sao này Các đối có tể bị biến đổi nhưng các tham số thực (các bản chính) không hề bị thay đổi

Trang 12

II Con trỏ và địa chỉ

1 Đia chỉ

Liên quan đến một biến ta đã có các khái niệm:

- Tên biến

- Kiểu giá trị của biến

- Giá trị của biến

Khi khai báo một biến thì máy sẽ cấp phát cho biến một vùng nhớ có số byte bằng với độ lớn của kiểu đó

Ví dụ:

Kiểu int là 2 byte Kiểu float là 4 byte

Trang 13

Chúng ta cũng có thể hiểu: Địa chỉ của biến là số thứ

tự của byte đầu tiên trong một dãy các byte liên tiếp nhau mà máy dành cho biến.

Cần chú ý rằng: Địa chỉ của biến là mộ số nguyên nhưng không được đánh đồng nó với các số nguyên thông thường trong các phép tính

Phép toán

&x cho ta địa chỉ của biến x

Trang 14

2 Con trỏ

Con trỏ là một biến dùng để chứa địa chỉ Vì có nhiều loại địa chỉ nên cũng có bấy nhiêu kiểu con trỏ tương ứng.

Trang 15

Toán tử: & và * là các toán tử một ngôi, nó chỉ tác động lên biến, phần tử của mảng hoặc chuỗi.

&: Toán tử lấy đại chỉ của biến

*: Toán tử lấy giá trị tại địa chỉ nào đó.

Các toán tử này có độ ưu tiên hơn các toán tử số học

và có độ ưu tiên tương đương với toán tử một ngôi.

Trang 16

b Phép toán số học trên con trỏ:

Các phép toán số học được áp dụng trên biến con trỏ

cũng như giá trị của nó là 2 phép toán cộng và trừ.

biến con trỏ p:

(*p)++,++(*p):Tăng giá trị tại p lên 1

*(p++): lấy gía trị phần tử kế tiếp trỏ bởi p,

Trang 17

c So sánh con trỏ

Các phép toán so sánh địa chỉ của các biến con trỏ là:

>,<, = =

4 Kiểu giá trị trong khai báo:

Mọi thành phần của cùng một khai báo (biến, phần tử mảng, hàm, con trỏ) khi xuất hiện trong biểu thức đều

Trang 18

5 Hàm có đối con trỏ:

Nếu đối là con trỏ thì tham số thực tương ứng phải là địa chỉ của biến hoặc địa chỉ của phần tử mảng có kiểu tương ứng.

Khi đó địa chỉ của biến được truyền cho đối con trỏ

tương ứng.

Ví dụ:

Trang 19

#include "stdio.h" int swap(x,y)

Trang 20

printf("x = %d y = %d",x,y); getch();

return 0;

}

Trang 21

#include "stdio.h" swap(x,y)

Trang 22

printf("\nx = %d y = %d",x,y); getch();

return 0;

}

Trang 23

6 Sử dụng biến con trỏ:

Trong các đối của hàm, ta có thể chia thành 2 loại:

- Gồm các đối dùng để chứa các giá trị đã biết.(Tham trị)

- Gồm các đối dùng để chứa các kết quả mới nhận được (Tham biến)

Ví dụ:

Viết chương trình giải phuơng trình bậc hai có sử dụng con trỏ để xây dựng hàm giải phương trình

Trang 24

}

Trang 25

if (s==0)

printf("\nKhong phai la phuong trinh bac 2 vi a=0");

Trang 26

else if (s==-1) printf("\nPhuong trinh vo nghiem"); else printf("\n x1 = %6.2f x2 = %6.2f",x1,x2);

getch();

return 0;

}

Trang 27

Từ ví dụ trên thì lúc này con trỏ p trỏ đến đầu mảng

a, điều này có nghĩa p = &a[0]

Khi đó các biểu thức sau là tương đương nhau:

*p  a[0]

*(p+i)  a[i]

p+i  &a[i]

p=p+1  *pa=a[4]

Trang 28

Việc khai báo mảng là địa chỉ của mảng được cấp rõ ràng và đủ kích thước, địa chỉ này không thay đổi Tên mảng được xem như một hằng địa chỉ

Việc khai báo con trỏ thì vị trí được cấp là chổ của con trỏ ở, còn vị trí con trỏ trỏ đến là tuỳ ý, và nó chỉ trao đổi địa chỉ, giá trị khi nó đã có địa chỉ.

Ví dụ: Viết chương trình nhập vào mảng một chiều dưới dạng con trỏ.

Trang 29

}

Trang 30

return 0;

}

Trang 31

IV Con trỏ và mảng nhiều chiều

Việc xử lý mảng nhiều chiều phức tạp hơn so với

mảng một chiều Vì không phải mọi quy tắc của

mảng một chiều có thể áp dụng được với mảng nhiều chiều Bởi những lý do sau:

 Phép toán lấy địa chỉ không dùng được đối

với các phần tử của mảng nhiều chiều.

 Mảng nhiều chiều thì các phần tử được bố

trí liên tiếp nhau trong bộ nhớ hết hàng này đến hàng khác Nhưng không thể sử dung phép toán a+i để nhập số liệu cho phần tử của mảng nhiều chiều.

Trang 32

Tuy nhiêu chúng ta có thể dùng con trỏ để truy cập đến từng phần tử của mảng nhiều chiều, với số địa chỉ bằng với số phần tử trong mảng nhiều chiều.

Ví dụ:

Viết chương trình nhập vào một ma trân 3 dòng 3 cột và xác định phần phần tử lớn nhất trong ma trân chỉ

sử dụng con trỏ, không dùng mảng.

Ngày đăng: 11/05/2021, 18:55

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w