Sidebar

Học C/C++

  • Bài 1. Giới thiệu C/C++
  • Bài 2. Kiểu dữ liệu, toán tử, hàm số
  • Bài 3. Câu lệnh Vào/Ra
  • Bài 4. Cấu trúc rẽ nhánh (IF)
  • Bài 5. Cấu trúc lựa chọn (SWITCH)
  • Bài 6. Cấu trúc lặp FOR
  • Bài 7. Cấu trúc lặp WHILE
  • Bài 8. Cấu trúc lặp DO-WHILE
  • Bài 9. Dữ liệu kiểu mảng (ARRAY)
  • Bài 10. Dữ liệu có cấu trúc (STRUCT)
  • Bài 11. Hàm (FUNCTION)
  • Bài 12. Con trỏ (POINTER)
  • Bài 13. Tệp tin (FILE)
  • Bài 14. Lập trình hướng đối tượng (OOP)
Tự Học Tin - Dự án vì cộng đồng của TBit Tự Học Tin - Dự án vì cộng đồng của TBit
  • Văn phòng
    • Bắt đầu với Office 365
    • Microsoft Word 365
    • Microsoft Excel 365
    • Microsoft PowerPoint 365
    • Thủ thuật văn phòng
  • Thiết kế web
    • Kiến thức cơ bản
      • HTML/HTML5
      • CSS/CSS3
      • JavaScript
      • PHP
      • SQL
    • Nâng cao
      • jQuery
      • jQueryMobile
      • Bootstrap
      • XML
      • JSON

    Web Design Tutorials

  • Lập trình
    • Lập trình cơ bản
      • Pascal
      • C/C++
      • C#
      • Java
    • Nâng cao
      • Lập trình Android
      • Lập trình iOS
      • PhoneGap
      • Unity/Unity 3D

    Programming Tutorials

  • Hướng dẫn khác
    • Adobe Photoshop
    • Kiểm thử phần mềm
    • Kỹ thuật SEO

Bài 11. Hàm (FUNCTION)

Khái niệm hàm (function)

Hàm là một khối lệnh được thực hiện khi nó được gọi từ một đoạn khác của chương trình.


Khai báo hàm

<KDL> <Tên hàm> ([tham số])
  {
     Khối lệnh;...
  }

  Trong đó:

  - <KDL>: kiểu dữ liệu được trả về của hàm.   

  - <Tên hàm>: tên gọi của hàm.   

  - [tham số]: các tham số (có nhiều bao nhiêu cũng được tuỳ theo nhu cầu).

  + Một tham số bao gồm tên kiểu dữ liệu sau đó là tên của tham số giống như khi khai báo biến (ví dụ int x) và đóng vai trò bên trong hàm như bất kì biến nào khác.

  + Chúng dùng để truyền tham số cho hàm khi nó được gọi.

  + Các tham số khác nhau được ngăn cách bởi các dấu phẩy.   

  + Tham số có thể có hoặc không.       

  - Khối lệnh: thân của hàm. Nó có thể là một lệnh đơn hay một khối lệnh.

Ví dụ:

  // hàm tính tổng 2 số nguyên
  int Tong( int a, int b)
  {
  int s = a + b;
  return s;
  }

  // hàm in ra màn hình các số chăn <100.
  void InSoChan()
  {
  cout<<"\n In so chan: ";  
  for(int i=0; i<=100; i++)
   if (i%2==0)    
    cout<<i<<"; ";
  }

Tham số của hàm

- Tham trị:

  + Là những tham số không có sự thay đổi khi hàm được gọi

  + Khai báo:

<KDL> <tham so>

Ví dụ:

  int Tong(int a, int b) // a,b là tham trị
  {
  ...
  }

- Tham biến:

  + Là những tham số có sự thay đổi khi hàm được gọi.

  + Khai báo:

<KDL>&<tham so>

Ví dụ:

  int Tong(int &a, int &b) // a,b là tham biến  
  {
  ...
  }

Sử dụng hàm số

Sử dụng hàm trong các trường hợp:   

  - Khối lệnh lặp đi lặp lại nhiều lần

  - Các khối lệnh phức tạp

  - Một xử lý có chứa nhiều xử lý thành phần

  - Sử dụng hàm giúp dễ quản lý, dễ chỉnh sửa và sửa lỗi chương trình.

  - Ngoài ra các hàm còn dùng để xây dựng các thư viên.  

  - Gọi hàm mỗi khi sử dụng. Gọi hàm thông qua tên hàm, các tham số và kiểu dữ liệu trả về.


Hàm đệ quy 

Hàm đệ quy là hàm gọi đến chính nó.

Ví dụ: 

  // Tính 1+2+3+...+n. Hàm Tong gọi đến chính nó
  int Tong(int n){
     if (n==1)
       return 1;
     return Tong(n-1)+n;
  }

Ví dụ 1:

+ Yêu cầu: Giải và biên luận phương trình bậc 2, một ẩn.

+ Code:

#include <iostream>
#include <conio.h>
#include <math.h>

using namespace std;

// Khai bao he so
float a,b,c;

// Ham nhap he so
void NhapHS(){
   cout<<"\n Nhap he so a,b,c: ";
   cin>>a>>b>>c;
}

// Ham giai phuong trinh bac1
void GiaiBac1(float a, float b){
   if(a==0)
     if(b==0)
       cout<<"\n PT vo so nghiem.";
     else
       cout<<"\n PT vo nghiem.";
   else
     cout<<"\n PT co nghiem. x= "<<-b/a; 
}

// Ham giai phuong trinh bac2
void GiaiBac2(float a, float b, float c){
   if(a==0) // suy bien thanh bac1
    GiaiBac1(b,c); // goi ham
   else
   {
     float d; //d: delta
     d=b*b-4*a*c;
     if (d<0)
       cout<<"\n PT vo nghiem ";
     if (d==0)
       cout<<"\n PT co nghiem kep: x1=x2= "<< -b/(2*a); 
     if (d>0)
     {
       float x1 = (-b-(float)sqrt(d))/(2*a);   
       float x2 = (-b-(float)sqrt(d))/(2*a);   
       cout<<"\n PT co 2 nghiem: x1= "<<x1<<" ; x2= "<<x2;
     } 
   }
}

// ham main
int main() {
    // goi ham nham he so 
    NhapHS();       
    // Goi ham giai PT bac 2 
    GiaiBac2(a,b,c);

return 0;
}

Ví dụ 2:

+ Yêu cầu: Viết chương trình nhập vào hai số, hoán đổi 2 số với nhau (sử dụng tham biến)

+ Code:

#include <iostream>
#include <conio.h>

using namespace std;

// Ham hoan doi
void HoanDoi(int &a, int &b){
   int t; // bien trung gian
   t=a;
   a=b;
   b=t;
}

// ham main
int main() {
   int a,b;
   // nhap a,b
   cout<<"\n a= "; cin>>a;
   cout<<"\n b= "; cin>>b; 
   // in a,b ban dau
   cout<<"\n +Truoc hoan doi:";
   cout<<"\n  a = "<<a;
   cout<<"\n  b = "<<b;
   // Goi ham hoan doi
   HoanDoi(a,b);
   // in a,b sau khi hoan doi
   cout<<"\n +Sau khi hoan doi:";
   cout<<"\n  a = "<<a;
   cout<<"\n  b = "<<b;

return 0;
}

Ví dụ 3:

+ Yêu cầu: Viết chương trình tính S= 2! + 4! + 6! + ... + n!.

   Với n nhập vào từ bàn phím thảo mãn, n là số chẵn và 2<=n<=2014.

+ Code:

#include <iostream>
#include <conio.h>

using namespace std;

// khai bao n
int n;

// Ham Nhap n
void NhapN(){
  do{
   cout<<"\n n= ";
   cin>>n;
   if (n%2!=0 || n<2 || n>2014) 
    cout<<"\n Nhap lai n! ";
   } while (n%2!=0 || n<2 || n>2014);   
}

// Ham tinh giai thua
long GiaiThua( int a ){
   long gt=1;
   for(int i=1; i<=a; i++)
     gt *=i;
   return gt; 
}

// Ham tinh S
long TinhS(int n){
   long s=0;
   for(int i=2; i<=n; i=i+2) 
      s +=GiaiThua(i);
   return s;    
}

// ham main
int main() {
   // goi ham nhap n
   NhapN();
   // Goi ham tinh S
   cout<<"\n S = "<<TinhS(n);

return 0;
}

Ví dụ 4:

+ Yêu cầu: Viết chương trình

   - Nhập vào k, n (1<=k<=n<=100).

   - Tinh C(k,n) (tổ hợp chập k của n).

+ Code:

#include <iostream>
#include <conio.h>

using namespace std;

// khai bao n,k
int k,n;

// Ham Nhap n
void NhapK_N(){
   // nhap k
   do{
    cout<<"\n k= ";
    cin>>k;
    if (k<1 || k>100) 
    cout<<"\n Nhap lai k! "; 
   } while (k<1 || k>100);
   // nhap n
  do{
   cout<<"\n n= ";
   cin>>n;
   if (n<k || n>100) 
     cout<<"\n Nhap lai n! "; 
   } while (n<k || n>100);
}

// Ham de quy tinh giai thua
long GiaiThua( int a ){
   if(a==1)
     return 1;
   return GiaiThua(a-1)*a;
}

// Ham tinh C
int TinhC(int k, int n){
   int c;
   c=GiaiThua(n)/(GiaiThua(k)*GiaiThua(n-k));
   return c;    
}

// ham main

int main() {
   // goi ham nhap k,n
   NhapK_N();
   // Goi ham tinh c
   cout<<"\n C = "<<TinhC(k,n);

return 0;
}

Ví dụ 5:

+ Yêu cầu: Viết các hàm

   - Nhập vào dãy số nguyên không quá 100 số

   - In dãy

   - Sắp xếp dãy tăng dần.

+ Code:

#include <iostream>
#include <conio.h>

#define max 100

using namespace std;

//nhap day
void NhapDay(int a[], int n) {
  for(int i=0; i<n; i++) {
  cout<<"\n a["<<i<<"] =";
  cin>>a[i];
  }
}

//xuat day
void XuatDay(int a[],int n) {
  cout<<"\n IN DAY: ";
  for(int i=0; i<n; i++)
  cout<<a[i]<<"\t";
}

//hoan vi 2 phan tu
void Swap(int &a,int &b) {
  int t = a;
  a = b;
  b = t;
}

//thuat toan Selection Sort
void SelectionSort(int a[],int n) {
  int min; // chi so phan tu nho nhat trong day hien hanh
  for(int i=0; i<n-1; i++) {
  min = i;
  for(int j=i+1; j<n; j++)
  if(a[min]>a[j])
  min = j; //ghi nhan vi tri phan tu nho nhat
  if(min!= i)
  Swap(a[i],a[min]); // doi chu 2 phan tu
  }
}

// Ham main
int main() {
  int a[max],n;
  cout<<"Nhap so phan tu:";
  cin>>n;
  NhapDay(a,n);
  cout<<"\n Day vua nhap la:";
  XuatDay(a,n);
  cout<<endl;
  SelectionSort (a,n);
  cout<<"\n Day vua sap xep la:";
  XuatDay(a,n);

return 0;
}

Các bài khác …

  1. Bài 12. Con trỏ (POINTER)
  2. Bài 13. Tệp tin (FILE)
  3. Bài 14. Lập trình hướng đối tượng (OOP)
Trang 11 / 14
  • Đầu tiên
  • Trước
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • Tiếp tục
  • Cuối cùng

Học C/C++

  • Bài 1. Giới thiệu C/C++
  • Bài 2. Kiểu dữ liệu, toán tử, hàm số
  • Bài 3. Câu lệnh Vào/Ra
  • Bài 4. Cấu trúc rẽ nhánh (IF)
  • Bài 5. Cấu trúc lựa chọn (SWITCH)
  • Bài 6. Cấu trúc lặp FOR
  • Bài 7. Cấu trúc lặp WHILE
  • Bài 8. Cấu trúc lặp DO-WHILE
  • Bài 9. Dữ liệu kiểu mảng (ARRAY)
  • Bài 10. Dữ liệu có cấu trúc (STRUCT)
  • Bài 11. Hàm (FUNCTION)
  • Bài 12. Con trỏ (POINTER)
  • Bài 13. Tệp tin (FILE)
  • Bài 14. Lập trình hướng đối tượng (OOP)
  1. Trang chủ
  2. Lập trình
  3. Lập trình cơ bản
  4. C/C++

© 2015 Tự Học Tin DMCA.com Protection Status

Chuyên trang hướng dẫn tự học công nghệ thông tin. Vui lòng ghi rõ "Nguồn: TuHocTin.Net" khi bạn sao chép nội dung tại đây.

TRANG CHỦ  |  GIỚI THIỆU  |  QUY ĐỊNH  |  LIÊN HỆ  |  TBIT  |  FACEBOOK  |  TWITTER