TIN H?C ??I C??NG Bài 6. HÀM.

Please download to get full document.

View again

All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
 79
 
  TIN HỌC ĐẠI CƯƠNG Bài 6. HÀM. Nguyễn Thành Kiên Bộ môn Kỹ thuật máy tính Khoa Công nghệ thông tin – ĐHBK HN. Bài 6. HÀM. 6.1. Khái niệm hàm trong C 6.2. Khai báo và sử dụng hàm trong C 6.2.1. Khai báo hàm 6.2.2. Sử dụng hàm
Share
Transcript
TIN HỌC ĐẠI CƯƠNGBài 6. HÀM. Nguyễn Thành Kiên Bộ môn Kỹ thuật máy tính Khoa Công nghệ thông tin – ĐHBK HNBài 6. HÀM.
  • 6.1. Khái niệm hàm trong C
  • 6.2. Khai báo và sử dụng hàm trong C
  • 6.2.1. Khai báo hàm
  • 6.2.2. Sử dụng hàm
  • 6.2.3. Phân loại biến sử dụng trong chương trình
  • 6.2.4. Nguyên mẫu hàm trong C.
  • Bài 6. HÀM.
  • 6.1. Khái niệm hàm trong C
  • 6.2. Khai báo và sử dụng hàm trong C
  • 6.2.1. Khai báo hàm
  • 6.2.2. Sử dụng hàm
  • 6.2.3. Phân loại biến sử dụng trong chương trình
  • 6.2.4. Nguyên mẫu hàm trong C.
  • 6.1. Khái niệm hàm trong C
  • Tại sao cần chương trình con?
  • Trong khi lập trình chúng ta thường gặp những đoạn chương trình lặp đi lặp lại nhiều lần ở những chỗ khác nhau.
  • Để tránh rườm rà và tiết kiệm công sức, những đoạn chương trình đó được thay thế bởi các chương trình con tương ứng và khi cần ta chỉ việc gọi những chương trình con đó ra mà không phải viết lại cả đoạn chương trình đó.
  • 6.1. Khái niệm hàm trong C
  • Tại sao cần chương trình con?
  • Khi giải quyết một bài toán lớn thì chương trình của ta có thể rất lớn và dài, điều này làm cho việc sửa chữa, gỡ rối, hiệu chỉnh chương trình gặp nhiều khó khăn.
  • Nếu ta chia bài toán lớn, phức tạp ban đầu thành các bài toán con nhỏ hơn và tương đối độc lập với nhau, rồi lập các chương trình con giải quyết từng bài toán con, cuối cùng ghép các ctc đó lại thành một chương trình giải quyết bài toán ban đầu thì sẽ rất tiện lợi cho việc phát triển, kiểm tra và sửa chữa cả chương trình.
  • 6.1. Khái niệm hàm trong C
  • Trong C, một số ctc thông dụng đã được thực hiện sẵn như sin, cos, pow, sqrt...
  • Những chương trình con này nằm trong thư viện các chương trình con mẫu , do trình biên dịch C quản lý, vì vậy chúng còn được gọi là các chương trình con chuẩn.
  • Trình biên dịch Turbo C++ phân loại và đặt các chương trình con chuẩn này trong các đơn vị chương trình khác nhau dưới dạng các tệp tiêu đề như stdio.h, conio.h, math.h, string.h...
  • 6.1. Khái niệm hàm trong C
  • Việc chia nhỏ một chương trình thành các chương trình con đảm nhận những công việc nhỏ khác nhau chính là tư tưởng chính cho phương pháp lập trình có cấu trúc (structured programming).
  • Cần lưu ý là có khi một chương trình con chỉ sử dụng đúng một lần nhưng nó vẫn làm cho chương trình trở nên sáng sủa và dễ đọc, dễ hiểu hơn.
  • Bài 6. HÀM.
  • 6.1. Khái niệm hàm trong C
  • 6.2. Khai báo và sử dụng hàm trong C
  • 6.2.1. Khai báo hàm
  • 6.2.2. Sử dụng hàm
  • 6.2.3. Phân loại biến sử dụng trong chương trình
  • 6.2.4. Nguyên mẫu hàm trong C.
  • Bài 6. HÀM.
  • 6.1. Khái niệm hàm trong C
  • 6.2. Khai báo và sử dụng hàm trong C
  • 6.2.1. Khai báo hàm
  • 6.2.2. Sử dụng hàm
  • 6.2.3. Phân loại biến sử dụng trong chương trình
  • 6.2.4. Nguyên mẫu hàm trong C.
  • 6.2.1. Khai báo hàm
  • Cú pháp
  • [<kiểu giá trị trả về>] <tên hàm> ([<danh sách tham số>,…])
  • { //Thân hàm }
  • Trong thân hàm có ít nhất một lệnh return.
  • 6.2.1. Khai báo hàm
  • Ví dụ: hàm tính giai thừa của một số nguyên dương. Ta quy ước rằng giai thừa của một số âm thì bằng –1, của 0 bằng 0, của một số nguyên dương a là a! = a (a-1) … 1.
  • int giai_thua(int a)
  • {
  • int ket_qua, i;
  • ket_qua = 1;
  • for(i = 0;i<a;i++)
  • ket_qua = ket_qua * i;
  • if(a < 0) ket_qua = -1;
  • if(a == 0) ket_qua = 0;
  • return ket_qua;
  • }
  • => Khai báo hàmThân hàm=> Trả về giá trị6.2.1. Khai báo hàm
  • Kiểu dữ liệu trả về của hàm
  • Trong C, kiểu dữ liệu trả về của hàm có thể là kiểu dữ liệu bất kì (kiểu dữ liệu có sẵn hoặc kiểu dữ liệu do người dùng tự định nghĩa) nhưng không được là kiểu dữ liệu mảng.
  • Nếu kiểu dữ liệu trả về là kiểu void thì hàm không trả về giá trị nào cả.
  • Trường hợp ta không khai báo kiểu dữ liệu trả về thì chương trình dịch của C sẽ ngầm hiểu rằng kiểu dữ liệu trả về của hàm là kiểu int.
  • 6.2.1. Khai báo hàm
  • Tên hàm
  • Tên hàm đặt theo yêu cầu của định danh.
  • Tuy nhiên tên hàm nên mang nghĩa gợi ý chức năng công việc mà hàm thực hiện.
  • Trong C, các hàm không được đặt tên trùng nhau.
  • 6.2.1. Khai báo hàm
  • Tham số của hàm
  • Chứa dữ liệu vào cung cấp cho hàm, hoặc chứa dữ liệu ra mà hàm tính toán được.
  • Các tham số sử dụng trong lời khai báo hàm được gọi là tham số hình thức (tham số giả định).
  • Các tham số được cung cấp cho hàm trong quá trình thực hiện được gọi là tham số thực.
  • Kiểu dữ liệu của tham số thực cung cấp cho hàm trong chương trình phải giống kiểu dữ liệu của tham số hình thức tương ứng với tham số thực đó, nếu không sẽ có báo lỗi biên dịch.
  • 6.2.1. Khai báo hàm
  • Tham số của hàm
  • Một hàm có thể có một, nhiều hoặc không có tham số nào cả.
  • Nếu có nhiều tham số thì chúng phải được phân cách với nhau bằng dấu phẩy.
  • Lưu ý là nếu hàm không có tham số nào cả thì vẫn phải có cặp dấu ngoặc đơn sau tên hàm, ví dụ main().
  • 6.2.1. Khai báo hàm
  • Lệnh return
  • Sau khi hàm thực hiện xong, nó sẽ trở về chương trình đã gọi nó. Có 2 cách để từ hàm trở về chương trình đã gọi hàm:
  • Sau khi thực hiện tất cả các câu lệnh có trong thân hàm.
  • Khi gặp lệnh return.
  • 6.2.1. Khai báo hàm
  • Lệnh return
  • Cú pháp chung của lệnh return là
  • return biểu_thức;
  • Khi gặp lệnh này, chương trình sẽ tính toán giá trị của biểu_thức, lấy kết quả tính toán được làm giá trị trả về cho lời gọi hàm rồi kết thúc việc thực hiện hàm, trở về chương trình đã gọi nó.
  • Trong lệnh return cũng có thể không có phần biểu_thức, khi đó ta sẽ kết thúc thực hiện hàm mà không trả về giá trị nào cả.
  • Ví dụ hàm#include <stdio.h>#include <conio.h>int max(int x, int y, int z){ int max; max = x>y?x:y; max = max>z?max:z;return max;}void main(){ int a,b,c; clrscr(); printf("\n Nhap gia tri cho 3 so nguyen a, b, c: "); scanf("%d %d %d",&a,&b,&c); printf("\n Gia tri cac so vua nhap: "); printf(" a = %-5d b = %-5d c = %-5d"); printf("\n Gia tri lon nhat trong 3 so la %d",max(a,b,c)); getch();}Bài 6. HÀM.
  • 6.1. Khái niệm hàm trong C
  • 6.2. Khai báo và sử dụng hàm trong C
  • 6.2.1. Khai báo hàm
  • 6.2.2. Sử dụng hàm
  • 6.2.3. Phân loại biến sử dụng trong chương trình
  • 6.2.4. Nguyên mẫu hàm trong C.
  • 6.2.2. Sử dụng hàm
  • Cú pháp:
  • <tên hàm> ([danh sách các tham số])
  • Trong chương trình, khi gặp một lời gọi hàm thì hàm bắt đầu thực hiện bằng cách chuyển các lệnh thi hành đến hàm được gọi. Quá trình diễn ra như sau:
  • Nếu hàm có tham số, trước tiên các tham số sẽ được gán giá trị thực tương ứng.
  • Chương trình sẽ thực hiện tiếp các câu lệnh trong thân hàm bắt đầu từ lệnh đầu tiên đến câu lệnh cuối cùng.
  • Khi gặp lệnh return hoặc dấu } cuối cùng trong thân hàm, chương trình sẽ thoát khỏi hàm để trở về chương trình gọi nó và thực hiện tiếp tục những câu lệnh của chương trình này.
  • Bài 6. HÀM.
  • 6.1. Khái niệm hàm trong C
  • 6.2. Khai báo và sử dụng hàm trong C
  • 6.2.1. Khai báo hàm
  • 6.2.2. Sử dụng hàm
  • 6.2.3. Phân loại biến sử dụng trong chương trình
  • 6.2.4. Nguyên mẫu hàm trong C.
  • 6.2.3. Phân loại biến sử dụng trong chương trình
  • Phạm vi của các biến
  • Nguyên tắc sử dụng biến là biến khai báo trong phạm vi nào thì được sử dụng trong phạm vi đó.
  • Một biến có thể được khai báo trong chương trình chính hoặc trong các chương trình con hoặc thậm chí trong một lệnh khối.
  • Nếu biến được khai báo trong một lệnh khối thì nó chỉ có thể được gọi trong lệnh khối đó thôi, không thể gọi từ bên ngoài lệnh khối được
  • Tương tự cho biến khai báo trong CTC và ctc.
  • Lưu ý về phạm vi của biến
  • Việc trùng tên của các biến:
  • Trong cùng một phạm vi ta không được phép khai báo 2 biến có cùng tên nhưng ta có thể khai báo 2 biến trùng tên thuộc 2 phạm vi khác nhau.
  • Nếu có 2 biến trùng tên khai báo ở 2 phạm vi khác nhau thì xảy ra 2 trường hợp:
  • Hai phạm vi này tách rời nhau: khi đó các biến sẽ có tác dụng ở phạm vi riêng của nó, không ảnh hưởng đến nhau.
  • Phạm vi này nằm trong phạm vi kia: khi đó nếu chương trình đang ở phạm vi ngoài (tức là đang thực hiện câu lệnh nằm ở phạm vi ngoài) thì biến khai báo ở phạm vi ngoài có tác dụng, còn nếu chương trình đang ở phạm vi trong (đang thực hiện câu lệnh nằm ở phạm vi trong) thì biến khai báo ở phạm vi trong sẽ có tác dụng và nó che lấp biến trùng tên ở bên ngoài.
  • Ví dụ về phạm vi của biến#include <stdio.h>void main(){ { int a = 1; printf(“\n a = %d”,a); { int a = 2; printf(“\n a = %d”,a); } printf(“\n a = %d”,a); } { int a = 3; printf(“\n a = %d”,a); }}6.2.3. Phân loại biến sử dụng trong chương trình
  • Biến địa phương (Local Variable):
  • Là các biến được khai báo trong lệnh khối hoặc trong thân chương trình con.
  • Biến toàn cục (Global Variable):
  • Là biến được khai báo sau phần khai báo tệp tiêu đề và khai báo hàm nguyên mẫu
  • Ví dụ về phạm vi của biến#include <stdio.h>void main(){ { int a = 1; printf(“\n a = %d”,a); { int a = 2; printf(“\n a = %d”,a); } printf(“\n a = %d”,a); } { int a = 3; printf(“\n a = %d”,a); }}Ví dụ về biến toàn cục#include <stdio.h>#include <conio.h>int a, b, c;int tich(){ printf("\n Gia tri cac bien tong the a, b, c: "); printf(" a = %-5d b = %-5d c = %-5d");return a*b*c;}void main(){ clrscr(); printf("\n Nhap gia tri cho 3 so nguyen a, b, c: "); scanf("%d %d %d",&a,&b,&c); printf("\n Tich cua 3 so la %d",tich(a,b,c)); getch();}Biến register
  • Thanh ghi có tốc độ truy nhập nhanh hơn so với các loại bộ nhớ khác (RAM, bộ nhớ ngoài).
  • Nếu một biến thường xuyên sử dụng được lưu vào trong thanh ghi thì tốc độ thực hiện của chương trình sẽ được tăng lên.
  • Để làm điều này ta đặt từ khóa register trước khai báo của biến đó.
  • Ví dụ: register int a;
  • Số lượng và kích thước các thanh ghi có hạn  Số lượng biến khai báo register sẽ không nhiều và thường chỉ áp dụng với những biến có kích thước nhỏ như kiểu char, int.
  • Biến static
  • Một biến cục bộ khi ra khỏi phạm vi của biến đó thì bộ nhớ dành để lưu trữ biến đó sẽ được giải phóng.
  • Nếu cần lưu giá trị của các biến cục bộ này, cần khai báo biến với từ khóastatic.
  • Ví dụ: static int a;
  • Biến static là biến tĩnh, nghĩa là nó sẽ được cấp phát một vùng nhớ thường xuyên từ lúc khai báo và chỉ giải phóng khi chương trình chính kết thúc.
  • Ví dụ về biến static# include <stdio.h># include <conio.h>void fct(){ static int count = 1; printf("\n Day la lan goi ham fct lan thu %2d", count++);}void main(){ int i; for(i = 0; i < 10; i++) fct(); getch();}Biến toàn cục và biến static
  • Như vậy về thời gian tồn tại biến static rất giống với biến toàn cục,
  • chỉ có một sự khác biệt nhỏ là biến toàn cục thì có thể truy cập ở mọi nơi trong chương trình (miễn là ở đó không có biến địa phương nào cùng tên che lấp nó), còn biến static thì chỉ có thể truy nhập trong phạm vi mà nó được khai báo mà thôi.
  • Bài 6. HÀM.
  • 6.1. Khái niệm hàm trong C
  • 6.2. Khai báo và sử dụng hàm trong C
  • 6.2.1. Khai báo hàm
  • 6.2.2. Sử dụng hàm
  • 6.2.3. Phân loại biến sử dụng trong chương trình
  • 6.2.4. Nguyên mẫu hàm trong C.
  • 6.2.4. Nguyên mẫu hàm trong C #include <stdio.h>#include <conio.h>int max(int, int, int); // khai báo nguyên mẫu hàmvoid main(){ int a,b,c; clrscr(); printf("\n Nhap gia tri cho 3 so nguyen a, b, c: "); scanf("%d %d %d",&a,&b,&c); printf("\n Gia tri cac so vua nhap: "); printf(" a = %-5d b = %-5d c = %-5d"); printf("\n Gia tri lon nhat trong 3 so la %d",max(a,b,c));getch();}int max(int x, int y, int z){ int max; max = x>y?x:y; max = max>z?max:z; return max;}6.2.4. Nguyên mẫu hàm trong C
  • Nếu muốn đặt phần khai báo hàm nằm sau hàm main() Cần khai báo nguyên mẫu của hàm
  • Để báo cho chương trình dịch biết có một hàm có dòng đầu hàm giống như trong phần nguyên mẫu này.
  • Chương trình dịch có thể kiểm tra được là các lời gọi hàm trong chương trình chính có đúng hay không
  • Có phù hợp về kiểu dữ liệu trả về hay không
  • Các tham số thực có kiểu dữ liệu có phù hợp với kiểu dữ liệu đã khai báo hay không.
  • Trong hàm nguyên mẫu có thể không cần nêu tên các tham số hình thức, nhưng trong phần khai báo hàm ta cần phải có các tham số hình thức.
  • Bài tập
  • Bài 1: Xây dựng hàm tính giai thừa cách của một số nguyên
  • n!! = 1x3x5x … x n nếu n lẻ
  • n!! = 2x4x6x … x n nếu n chẵn
  • Bài 2: Viết một hàm tính tổng các chữ số của một số nguyên.
  • Bài 3: Viết hàm tính giai thừa của một số nguyên. Sau đó sử dụng để viết chương trình nhập 2 số n và k nguyên. Tính tổ hợp chập k của n theo công thức như sau: C(k,n)=n!/(k!*(n-k)!).
  • Bài 2: Viết hàm tính giá trị trung bình của ba số nguyên.
  • Bài 3: Viết hàm đọc vào 1 số nguyên dương, khi đọc vào số âm, hàm sẽ yêu cầu đọc lại.
  • Related Search
    We Need Your Support
    Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

    Thanks to everyone for your continued support.

    No, Thanks
    SAVE OUR EARTH

    We need your sign to support Project to invent "SMART AND CONTROLLABLE REFLECTIVE BALLOONS" to cover the Sun and Save Our Earth.

    More details...

    Sign Now!

    We are very appreciated for your Prompt Action!

    x