[Tự học lập trình C/C++] Bài 1: Chương trình đầu tay

---------------------------------
* TÓM TẮT LÝ THUYẾT
---------------------------------

- C++ được mở rông từ ngôn ngữ lập trình C, được sử dụng phổ biến.

- C++ là một dạng ngôn ngữ đa mẫu hình tự do có kiểu tĩnh và hỗ trợ lập trình thủ tục, dữ liệu trừu trượng, lập trình hướng đối tượng, và lập trình đa hình.


---------------------------------
* VÍ DỤ [ Code Dev C++ ]
---------------------------------

Ví dụ: 

+ Yêu cầu: "Chương trình đầu tay", in ra màn hình "Hello world !"

+ Code  :

  #include <iostream>

  #include <conio.h>

   /* bỏ dòng này nếu viết trên Turbo C++ */

  using namespace std;

  int main() {

  // in ra man hinh
 
    cout<<"Hello world !";
 
    return 0;
   
  }


* Chú giải: 

1. Chỉ thị tiền xử lý: #include để chèn vào nội dung của tập tin header,
ví dụ:  <iostream.h>  trong chương trình. <iostream.h> là tập tin header chuẩn của C++ và chứa đựng các định nghĩa cho xuất và nhập.

2. Hàm main: hàm chính, bắt buộc phải có.

3. Dấu ngoặc nhọn bắt đầu thân của hàm main.

4. Các câu lệnh (statement) được viết sau dấu mở ngoặc, kết thúc câu lệnh bằng dấu ";".

5. Dấu ngoặc đóng kết thúc thân hàm main.

6. // hoặc /* */: Ghi chú trong chương trình



*** CHÚ Ý: 
  Các ví dụ được viết trên Dev C++ hoặc các chương trình soạn thảo khác như Netbean, Eclipse,....


Khoa hoc lap trinh C/C++

------------------------

Xem bài khác:

[Tự học lập trình C/C++] Bài 2: Các kiểu dữ liệu cơ bản chuần trong C\C++

---------------------------------
* TÓM TẮT LÝ THUYẾT
---------------------------------

  I. Các kiểu dữ liệu cơ bản chuần trong C\C++:

   1. Kiểu số nguyên
    - Ký hiệu: int (2 Byte);
    - Các kiểu mở rộng: long, unsigned int, unsigned long
 
   2. Kiểu số thực
    - Kí hiệu: float (4 Byte)
    - Các kiểu mở rộng: double, long double
 
   3. Kiểu ký tự
    - ký hiệu: char (1 Byte)

  II. Ép kiểu, chuyển kiểu
    - Chuyển kiểu tự động: char -> int -> float.
    - Ép kiểu:  
      Ví dụ: Ép kiểu float thành int:  
       (int)x; (x có kiểu float)

  III. Các toán tử trong C\C++
  - Toán tử số học:  

  +, -, *, /,
 
  % (chia lấy phần dư),
 
  ++ (tăng 1 đơn vị),
 
  -- (giảm 1 đơn vị),
 
  =, ...
 
 
  - Toán tử logic:
 
  && (and),
 
  || (or),
 
  ! (not).
 
  - Toán tử quan hệ:
 
   >, <, >=, <=, ==, !=.
 
 
  - Toán tử xử lý bit:
 
  >> (dịch phải),
 
  << (dịch trái),
 
  ~ (not bit),
 
  ^ (xor bit),
 
  & (and bit),
 
  | (or bit).

 
   IV. Một số hàm thông dụng C++
 
   Để sử dụng các hàm, bạn cần khai báo tiền xử lý (#include)
 
 - stdio.h : Thư viện chứa các hàm vào/ ra chuẩn (standard input/output).
   
   Gồm các hàm: 
       printf(), scanf(), getc(), putc(), gets(), puts(), fflush(), fopen(), fclose(), fread(), fwrite(), getchar(), putchar(), getw(), putw(),...
   

- conio.h : Thư viện chứa các hàm vào ra trong chế độ DOS (DOS console).

Gồm các hàm:
clrscr(), getch(), getche(), getpass(), cgets(), cputs(), putch(), clreol(),...


- math.h: Thư viện chứa các hàm tính toán

Gồm các hàm:
abs(), sqrt(), log(). log10(), sin(), cos(), tan(), acos(), asin(), atan(), pow(), exp(),...


  - alloc.h: Thư viện chứa các hàm liên quan đến việc quản lý bộ nhớ.
 
  Gồm các hàm:
  calloc(), realloc(), malloc(), free(), farmalloc(), farcalloc(), farfree(),...


- io.h: Thư viện chứa các hàm vào ra cấp thấp.

Gồm các hàm:
open(), _open(), read(), _read(), close(), _close(), creat(), _creat(), creatnew(), eof(), filelength(), lock(),...

- graphics.h: Thư viện chứa các hàm liên quan đến đồ họa.

Gồm các hàm:
initgraph(), line(), circle(), putpixel(), getpixel(), setcolor(),...
 


---------------------------------
* VÍ DỤ [ Code Dev C++ ]
---------------------------------

Ví dụ 1: 

+ Yêu cầu: Tính tổng hai số nguyên a, b cho trước.

+ Code:

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

using namespace std;

int main() {

    // khai báo biến
    int a,b;
    a=5; b=6;
    int s=a+b;
    cout<<"\n Tong "<<a<<" va "<<b<<" bang "<<s;
   return 0;
 
}

------------

Ví dụ 2: 

+ Yêu cầu: Tính chu vi diện tích của tam giác với 3 cạnh cho trước

+ Code:

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

using namespace std;

int main() {

    // khai báo biến sô thực
    float a,b,c;
    a=3.0; b=4.0;c=5.0;
    float cv,dt; // chu vi, dien tich
 
    // tinh chu vi, dien tich
    cv=a+b+c;
    float p=cv/2; // nua chu vi
    dt=sqrt(p*(p-a)*(p-b)*(p-c));
     cout<<"\n Chu vi = "<<cv<<"\n Dien tich = "<<dt;
   return 0;
 
}

------------

Ví dụ 3:

+ Yêu cầu:
  - In ra màn hình vị trí của ký tự 'A' trong bảng mã ASCII.

  - In ra ký tự tại vị trí 67 trong bảng mã ASCII.

+ Code:

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

using namespace std;

int main() {
    // khai báo biến ký tự
    char ch='A';
    int vt=ch;
    cout<<"\n Vi tri cua ky tu A: "<<vt;
    // in ra ky tu tai vi tri 67
    vt=67;
    ch=(char)vt;// ép kiểu int thành char
    cout<<"\n Ky tu tai tai vi tri 67 la: "<<ch;
   return 0;

}



Khoa hoc lap trinh C/C++

------------------------

Xem bài khác:

[Tự học lập trình C/C++] Bài 4: Cấu trúc rẽ nhánh (if)

---------------------------------
* TÓM TẮT LÝ THUYẾT
---------------------------------

1. Giới thiệu cấu trúc rẽ nhánh (if)
  Cấu trúc này được dùng khi một lệnh hay một khối lệnh chỉ được thực hiện khi một điều kiện nào đó thoả mãn.

2. Cú phúp
  - Cấu trúc if đơn:
     if (bieu thuc dieu kien)  
       {
        khối lệnh;...
       }
   
  - Cấu trúc if / else:
     if (bieu thuc dieu kien)
       {
         Khối lệnh 1;...;
       }
     else
       {
         Khối lệnh 2;...;
       }

   - Cấu truc if lồng nhau: trong trường hợp Khối lệnh chính là cấu trúc if khác.
     
---------------------------------
** VÍ DỤ
---------------------------------

Ví dụ 1: 

+ Yêu cầu: Nhập vào 3 số nguyên. In ra màn hình số lớn nhất, nhỏ nhất.

+ Code:

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

using namespace std;

int main() {
    int a,b,c;
    // nhap 3 so
    cout<<"\n Nhap 3 so: ";
    cout<<"\n a= ";
    cin>>a;
    cout<<"\n b= ";
    cin>>b;
    cout<<"\n c= ";
    cin>>c;
 
    // tim max
    int max=a;
    if (max<b) max=b;
    if (max<c) max=c;
    cout<<"\n Max: "<<max;
 
    // tim min
    int min=a;
    if (min>b) min=b;
    if (min>c) min=c;
    cout<<"\n Min: "<<min;

   return 0;
}

------------

Ví dụ 2: 

+ Yêu cầu: Giải phương trình bậc nhất 1 ẩn ax+b=0, với a, b nhập vào từ bàn phím.

+ Code:

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

using namespace std;

int main() {
    float a,b;
    // nhap he so
    cout<<"\n Nhap he so: ";
    cout<<"\n a= ";
    cin>>a;
    cout<<"\n b= ";
    cin>>b;
 
    // Giai va bien luan
    if (a==0)
      if (b==0)
        cout<<"\n Phuong trinh vo so nghiem";
      else
        cout<<"\n Phuong trinh vo nghiem";
    else
      {
        float x=-b/a;
        cout<<"\n Phuong trinh co 1 nghiem x= "<<x;
      }
 
   return 0;
}

------------

Ví dụ 3: 

+ Yêu cầu: Giải và biện luận phương trình bậc 2 một ẩn ax^2 + bx +c = 0, với a, b, c nhập vào từ bàn phím.

+ Code:
#include <iostream>
#include <conio.h>
#include <math.h>

using namespace std;

int main() {
    float a,b,c;
    // nhap he so
    cout<<"\n Nhap he so: ";
    cout<<"\n a= ";
    cin>>a;
    cout<<"\n b= ";
    cin>>b;
    cout<<"\n c= ";
    cin>>c;
    // Giai va bien luan
    if (a==0)
      if (b==0)
        if (c==0)
        cout<<"\n Phuong trinh vo so nghiem";
      else
        cout<<"\n Phuong trinh vo nghiem";
    else
      {
        float x=-c/b;
        cout<<"\n Phuong trinh co 1 nghiem x= "<<x;
      }
      else
       {
        float delta=b*b-4*a*c;
        if(delta<0)
        cout<<"\n Phuong trinh vo nghiem";
        if(delta=0)
        cout<<"\n Phuong trinh co nghiem kep, x1=x2= "<<-b/(2*a);
        if (delta>0)
        {
        float x1=(-b-(float)sqrt(delta))/(2*a);
        float x2=(-b+(float)sqrt(delta))/(2*a);
        cout<<"\n Phuong trinh co 2 nghiem, x1= "<<x1<<"; x2= "<<x2;
        }
       }

   return 0;
}

----------------

Ví dụ 4: 

+ Yêu cầu: Tính điểm cho sinh viên:

 - Nhập vào điểm: điểm toán rời rạc (3 tín chỉ); điểm lập trình (4 tín chỉ); điểm cơ sở dữ liệu (3 tín chỉ)
 - Tính điểm tổng kết.
 - In kết quả điểm chữ (A,B,C,D,F) của sinh viên.

+ Code:

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

using namespace std;

int main() {
    float dTRR,dLT,dCSDL;
    // nhap nhap diem
    cout<<"\n Nhap diem: ";
    cout<<"\n Diem toan roi rac: ";
    cin>>dTRR;
    cout<<"\n Diem lap trinh: ";
    cin>>dLT;
    cout<<"\n Diem co so du lieu: ";
    cin>>dCSDL;
    // Tinh diem
    float dTK;
    dTK=(dTRR*3+dLT*4+dCSDL*3)/10;
    // in điểm tổng kết
    cout<<"\n Diem tong ket: "<<dTK;
    // Tim diem chu
    char dChu;
    if(dTK<4)
    dChu='F';
    else if (dTK<5.5)
      dChu='D';
      else if (dTK<7.0)
      dChu='C';
      else if (dChu<8.5)
      dChu='B';
        else dChu='A';
     cout<<"\n Diem chu: "<<dChu;
   return 0;
}

[Tự học lập trình C/C++] Bài 5: Cấu trúc lặp for

---------------------------------
* TÓM TẮT LÝ THUYẾT
---------------------------------

1. Cấu trúc lặp for là cấu trúc lặp có số lần lặp biết trước

2. Cú pháp
  for(biểu thức 1 ; biểu thức 2 ; biểu thức 3)
   {
      khối lệnh;
   }  
  Trong đó:
    - biểu thức 1: thiết lập ban đầu
    - biểu thức 2: điều kiện lặp, là biểu thức logic
    - biểu thức 3: thiết lập lại   
- Quá trình lặp dừng lại khi biểu thức 2 sai.


   
---------------------------------
** VÍ DỤ
---------------------------------

Ví dụ 1: 

+ Yêu cầu: Tính tổng các số từ 1 đến n, với n nhập vào từ bàn phím

+ Code:

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

using namespace std;

int main() {
int n;
// nhap n
cout<<"\n n= ";
cin>>n;
// tinh tong
int s=0;
for(int i=0;i<=n;i++)
s=s+i;
// in ket qua
cout<<"\n Tong = "<<s;
return 0;
}

--------------

Ví dụ 2: 

+ Yêu cầu: Đếm số chẵn nhỏ hơn n, với n nhập vào từ bàn phím.

+ Code:

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

using namespace std;

int main() {
int n;
// nhap n
cout<<"\n n= ";
cin>>n;
// dem so chan
int dem=0;
for(int i=0;i<=n;i++)
if (i%2==0) dem++;
// in ket qua
cout<<"\n Ket qu = "<<dem;
return 0;
}

--------------

Vi dụ 3: 

+ Yêu cầu: In ra màn hình tất cả số nguyên gồm 4 chữ sao cho tổng các chữ số bằng 10.

+ Code:

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

using namespace std;

int main() {
cout<<"\n In ket qua: ";
for(int i=1000;i<=9999;i++)
{
if(i%10+(i/10)%10+(i/100)%10+i/1000==10)
cout<<i<<" ; ";
}
return 0;
}

---------------

Ví dụ 4: 

+ Yêu cầu: In ra màn hình bảng cửu chương

+ Code:

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

using namespace std;

int main() {
cout<<"\n In bang cuu chuong: \n";
for(int i=1;i<=9;i++)
{
for(int j=1;j<9;j++)
cout<<i<<"x"<<j<<"= "<<i*j<<" ; ";
cout<<"\n";
}
return 0;
}

--------------

Ví dụ 5: 

+ Yêu cầu: In ra màn hình tất cả số nguyên tố nhỏ hơn 1000.

+ Code:

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

using namespace std;

int main() {
cout<<"\n In so nguyen to nho hon 1000: \n";
for(int i=1;i<=1000;i++)
{
int test=0;
for(int j=2;j<i;j++)
if(i%j==0) {
test=1;
break;
}
if(test==0) cout<<i<<" ; ";
}
return 0;
}


Khoa hoc lap trinh C/C++

------------------------
Xem bài khác:

[Tự học lập trình C/C++] Bài 7: Cấu trúc lặp do ... while

---------------------------------
* TÓM TẮT LÝ THUYẾT
---------------------------------

 1. Cấu trúc lặp do - while
  Chức năng của nó là hoàn toàn giống vòng lặp while chỉ trừ có một điều là điều kiện điều khiển vòng lặp được tính toán sau khi [Khối lệnh] được thực hiện, vì vậy [Khối lệnh] sẽ được thực hiện ít nhất một lần ngay cả khi condition không bao giờ được thoả mãn

 2. Cú pháp: 
  do 
 
    Khối lệnh; 
 
  while (biểu thức điều khiển);
 
 Trong đó: 
  - [biểu thức điều khiển] là biểu thức logic
  - Trong [khối lệnh] cần có tác động để [biểu thức điều khiển] sai đi.
 


---------------------------------
** VÍ DỤ
---------------------------------

Ví dụ 1: 

+ Yêu cầu: Tính tổng các số từ 1 đến n, với n nhập vào từ bàn phím thỏa mãn 1<n<2014.

+ Code:

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

using namespace std;

int main() {
int n;
// su dụng do-while de nhap n
do{
cout<<"\n n= ";
cin>>n;
if (n<=1||n>=2014)
cout<<"\n Nhap lai n !";
}while (n<=1||n>=2014);
// tinh tong
int s=0,i=0;
do{  
   s=s+i;
i++;
}while(i<=n);
// in ket qua
cout<<"\n Tong = "<<s;
return 0;
}

--------------

Ví dụ 2: 

+ Yêu cầu: Đếm số chẵn nhỏ hơn n, với n nhập vào từ bàn phím thỏa mãn 4<=n<=1000.

+ Code:

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

using namespace std;

int main() {
int n;
// su dụng do-while de nhap n
do{
cout<<"\n n= ";
cin>>n;
if (n<4||n>1000)
cout<<"\n Nhap lai n !";
}while (n<4||n>1000);

// dem so chan
int dem=0,i=0;
do{
if (i%2==0) dem++;
i++;
}while (i<=n);

// in ket qua
cout<<"\n Ket qu = "<<dem;

return 0;
}

--------------

Ví dụ 3: 

+ Yêu cầu: In ra màn hình tất cả số nguyên gồm 4 chữ sao cho tổng các chữ số bằng 10.

+ Code:

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

using namespace std;

int main() {
cout<<"\n In ket qua: ";
int i=1000;
do{
if(i%10+(i/10)%10+(i/100)%10+i/1000==10)
cout<<i<<" ; ";
i++;
}while (i<=9999);
return 0;
}

---------------

Ví dụ 4: 

+ Yêu cầu: In ra màn hình bảng cửu chương

+ Code:

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

using namespace std;

int main() {
cout<<"\n In bang cuu chuong: \n";
int i=1;
do{
int j=1;
do{
cout<<i<<"x"<<j<<"= "<<i*j<<" ; ";
j++;
}while (j<9);
cout<<"\n";
i++;
} while (i<=9);

return 0;
}

--------------

Ví dụ 5: 

+ Yêu cầu: In ra màn hình tất cả số nguyên tố nhỏ hơn 1000.

+ Code:


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

using namespace std;

int main() {
cout<<"\n In so nguyen to nho hon 1000: \n";
int i=1;
do
{
int test=0,j=2;
do{
if(i%j==0) {
test=1;
break;
}
j++;
}while (j<i);
if(test==0) cout<<i<<" ; ";
i++;
}while (i<=1000);
return 0;
}

------------

*** CHÚ Ý:
 - Các cấu trúc for, while, do-while có thể chuyển đổi qua lại cho nhau.
 - Câu lệnh break, continue:
   + break: khi gặp lệnh break vòng lặp kết thúc
   + continue: khi gặp lệnh contineu vòng lặp bỏ qua phần còn lại, bắt đầu vòng lặp mới.


------------------------
Xem bài khác:

[Tự học lập trình C/C++] Bài 8: Cấu trúc lựa chọn switch... case

---------------------------------
* TÓM TẮT LÝ THUYẾT
---------------------------------

1. Cấu trúc switch - case
  Cú pháp của lệnh switch hơi đặc biệt một chút. Mục đích của nó là kiểm tra một vài giá trị hằng cho một biểu thức, tương tự với những gì chúng ta làm ở đầu bài này khi liên kết một vài lệnh if và else if với nhau
  
2. Cú pháp:
    witch (biểu thức)
    {
    case gt1:
    Khối lệnh 1;
    [break;]
   
    case gt2:
    Khối lệnh 2;
    [break;]
   
    case gt3:
    Khối lệnh3;
    [break;]
   
    ...
   
    case gtn:
    Khối lệnh n;
    [break;]
   
    [default:
    khối lệnh 0;]
    }
   
    Trong đó:
    - Biểu thức cho giá trị rời rạc (thường là giá trị nguyên).
    - Biểu thức cho giá trị ứng với trường hợp nào thì khối lệnh thuộc trường hợp đó thực hiện, gặp break thì kết thúc cấu trúc.
     - Nếu không gặp trường hợp nào tương ứng thì khối lệnh 0 thực hiện.
 


   
---------------------------------
** VÍ DỤ
---------------------------------

Ví dụ 1: 

+ Yêu cầu: Nhập vào từ bàn phím tháng và năm, in ra màn hình số ngày thuộc tháng đó.

+ Code:

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

using namespace std;

int main() {
int thang,nam;
// nhap thang, nam
cout<<"\n Nhap vao thang: ";
cin>>thang;
cout<<"\n Nhap vao nam: ";
cin>>nam;
// in ra so ngay trong thang
switch (thang){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
cout<<"\n Thang co 31 ngay";
break;
case 4:
case 6:
case 9:
case 11:
cout<<"\n Thang co 30 ngay";
break;
case 2:
if(nam%4==0)
  cout<<"\n Thang co 29 ngay";
else
cout<<"\n Thang co 28 ngay";
default:
cout<<"\n Thang khong hop le! ";
}
return 0;
}

----------------

Ví dụ 2: 

+ Yêu cầu: Tính điểm cho sinh viên:
 - Nhập vào điểm: điểm toán rời rạc (3 tín chỉ); điểm lập trình (4 tín chỉ); điểm cơ sở dữ liệu (3 tín chỉ)
 - Tính điểm tổng kết.
 - In kết quả điểm chữ (A,B,C,D,F) của sinh viên.
 - Tính điểm tính lũy cho sinh viên

+ Code:

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

using namespace std;

int main() {
    float dTRR,dLT,dCSDL;
    // nhap nhap diem
    cout<<"\n Nhap diem: ";
    cout<<"\n Diem toan roi rac: ";
    cin>>dTRR;
    cout<<"\n Diem lap trinh: ";
    cin>>dLT;
    cout<<"\n Diem co so du lieu: ";
    cin>>dCSDL;
    // Tinh diem
    float dTK;
    dTK=(dTRR*3+dLT*4+dCSDL*3)/10;
    // in diem tong ket
    cout<<"\n Diem tong ket: "<<dTK;
    // Tim diem chu
    char dChu;
    if(dTK<4)
    dChu='F';
    else if (dTK<5.5)
      dChu='D';
      else
       if (dTK<7.0)
      dChu='C';
      else
        if (dChu<8.5)
      dChu='B';
      else dChu='A';
     cout<<"\n Diem chu: "<<dChu;
     
    // Tinh điểm tích lũy
    int dTichLuy;
    switch (dChu)
    {
    case 'A':
    dTichLuy=4;
    break;
    case 'B':
    dTichLuy=3;
    break;
    case 'C':
    dTichLuy=2;
    break;
    case 'D':
    dTichLuy=1;
    break;
    default:
    dTichLuy=0;    
    }
    cout<<"\n Diem tich luy : "<<dTichLuy;
   return 0;
}

-------------
*** CHÚ Ý:
 - Cấu trúc switch hoàn toàn có thể chuyển đổi thành if.
 - Cấu trúc if kết hợp cùng break có thể chuyển đổi thành cấu trúc while => mọi cấu trúc có thể chuyển sang cấu trúc while.

** Đề nghị bạn đọc chuyển đổi các vị trên chỉ sử dụng while.


------------------------
Xem bài khác:

[Tự học lập trình C/C++] Bài 10: Dữ liệu kiểu cấu trúc (struct)

---------------------------------
* TÓM TẮT LÝ THUYẾT
---------------------------------

 1. Khái niệm về dữ liệu cấu trúc (struct) 
  Một cấu trúc dữ liệu là một tập hợp của những kiểu dữ liệu khác nhau được gộp lại với một cái tên duy nhất.
 
  Ví dụ: Nếu coi sinh viên là một biến thì biến sinh viên chứa nhiều kiểu dữ liệu khác nhau nhứ:
  - Họ tên: char
  - Tuổi: int
  - Địa chỉ: char
  - Điểm thi: float,...
  Như vậy, sinh viên có thể coi như một biến cấu trúc.
 
 2. Khai báo struct
    // Định nghĩa cấu trúc
 
  struct <Tên cấu trúc> { 
  Các trường (các biến thành phần);  ...
  };
 
  // Khai báo biến cấu trúc
 
  <Tên cấu trúc> <các biến cấu trúc>,...;
 
  Ví dụ:
    // Định nghĩa cấu trúc SV
 
  struct SV{ 
  char hoTen[30];
  char diaChi[50];
  int tuoi;
  float diem; 
  };
 
    // Khai báo các biến VS
 
  SV a,b; //a,b là biến cấu trúc SV 
  SV dhTin[4]; //dhTin là biến mảng cấu trúc SV
   
 3. Sử dụng struct
 - Mỗi trường trong cấu trúc như một biến thông thường.
 - Khí sử dụng các trường ta dung toán tử "."

   Ví dụ:
   // sử dụng biến điểm của sinh viên a
   a.diem;

---------------------------------
** VÍ DỤ
---------------------------------

Ví dụ 1:

 + Yêu cầu: Viết chương trình thực hiện
   - Nhập vào tạo độ 3 điểm A,B,C trong không gian.
   - Tính độ dài 3 đoạn thẳng AB,AC,BC.
   - Kiểm tra xem A,B,C có thẳng hàng không?

 + Code:

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

using namespace std;

int main() {
  // truc TaoDo
struct ToaDo{
float x,y,z;
};

// khai bao bien ToaDo
ToaDo A,B,C;
// Nhap toa do 3 diem
cout<<"\n Nhap toa do 3 diem: ";
cout<<"\n A: ";
cin>>A.x>>A.y>>A.z;
  cout<<"\n B: ";
cin>>B.x>>B.y>>B.z;
cout<<"\n C: ";
cin>>C.x>>C.y>>C.z;

// Tinh do dai doan thang
float d1; // AB
float d2; // AC
float d3; // BC
d1=sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y)+(A.z-B.z)*(A.z-B.z));
d2=sqrt((A.x-C.x)*(A.x-C.x)+(A.y-C.y)*(A.y-C.y)+(A.z-C.z)*(A.z-C.z));
d3=sqrt((C.x-B.x)*(C.x-B.x)+(C.y-B.y)*(C.y-B.y)+(C.z-B.z)*(C.z-B.z));
 
    // In do dai 3 doan thang
      cout<<"\n Do dai 3 doan thang: \n";
      cout<<"\n AB : "<<d1;
      cout<<"\n AC : "<<d2;
      cout<<"\n BC : "<<d3;
  // Kiem tra tinh thang hang
if(d1+d2==d3||d1+d3==d2||d2+d3==d1)
cout<<"\n 3 diem A,B,C thang hang";
else
cout<<"\n 3 diem A,B,C khong thang hang";

   return 0;
}

----------------

Ví dụ 2: 

 + Yêu cầu: Viết các hàm thực hiện
  - Nhập thông tin SV gồm: họ tên, địa chỉ, tuổi, điểm toán, lý, hóa
  - Tính điểm tổng kết
  - In thông tin sinh viên

 + Code:

/* Chương trình này sử dụng hàm (phần hàm sẽ được trình bày ở mục 11) */

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

using namespace std;

// Dinh nghia cau truc SV
struct SV{
 char ht[30],dc[50];
 int tuoi;
 float dT,dL, dH;
};
// Khai bao bien cau truc
SV a;
// Ham nhap thong tin
void NhapTT(){
  // xu ly bo dem cho viec nhap mot xau
  fflush(stdin);
  cout<<"\n Nhap Sinh vien: ";
  cout<<"\n - Ho ten: ";
  gets(a.ht); // nhap mot xau
  cout<<"\n - Dia chi: ";
  gets(a.dc);
  cout<<"\n - Tuoi: ";
  cin>>a.tuoi;
  cout<<"\n - Diem toan: ";
  cin>>a.dT;
  cout<<"\n - Diem ly: ";
  cin>>a.dL;
  cout<<"\n - Diem hoa: "; cin>>a.dH;
 }

// Ham Tinh diem
float TinhDiem(){
 return (a.dT+a.dL+a.dH)/3;
}

// Ham In thong tin
void InTT(){
 // tim xep loai
 char xepLoai[10];
 float dtk=TinhDiem();
 // Xep loai sinh vien
 if (dtk<5)
  strcpy(xepLoai,"Truot"); // copy xau
 else 
  if (dtk<6) 
  strcpy(xepLoai,"TB");   
    else   
    if (dtk<7)   
    strcpy(xepLoai,"TBK");    
    else    
    if (dtk<8)    
    strcpy(xepLoai,"Kha");      
      else      
      if (dtk<9)      
      strcpy(xepLoai,"Gioi");       
        else if (dtk<=10)       
        strcpy(xepLoai,"XS");         
          else         
          strcpy(xepLoai,"");    
 // in thong tin sinh vien    
 cout<<"\n In sinh vien: ";
 cout<<"\n - Ho ten: "<<a.ht;
 cout<<"\n - Dia chi: "<<a.dc;
 cout<<"\n - Tuoi: "<<a.tuoi;
 cout<<"\n - Diem tong ket: "<<dtk;
 cout<<"\n - Xep loai: "<<xepLoai;
}

// Ham main
int main(){
  NhapTT();
  InTT();
  getch();
  return 0;
}

----------------

Ví dụ 3:
+ Yêu cầu: Viế chương trình thực hiện
 1. Nhập vào thông tin của một nhân viên IT
  - Ho ten
  - Tuoi
  - Vi tri lam viec
  - He so luong
  - So nam cong tac
 2. In thông tin của nhân viên vừa nhập
 3. Tính lương cho nhân viên
   luong = he so luong * luong co ban + phu cap.

 Trong đó:   
  phụ cấp = 1.2 lương cơ bản nếu số năm công tác > 3,
  ngược lại phụ cấp băng 1 lương cơ bản.
   
4. Tính thuế thu nhập mà nhân viên phải trả.
 Nếu lương > 5.000.000 thì thuế = 10% lương, ngược lại thuế = 0.
+ Code:

/* Lưu ý:
  Chương trình được viết bằng ngôn ngữ C
  Các bạn hoàn toàn có thể chuyển đổi sang C++
  Đổi printf -> cout; scanf -> cin.
 */

#include<stdio.h>
#include<conio.h>
#include<string.h>

// khai bao hang LCB
#define LCB 1050000

using namespace std;
// Dinh nghia struc NV
struct NV{
  char hoTen[30], viTriLV[30];
  int tuoi, soNamCT;
  float heSoLuong;
};
// khai bao bien
NV t;
// Nhap thong tin nhan vien
void NhapTT(){
 printf("\n Nhap nhan vien: \n");
 printf("\n Ho ten: ");
 fflush(stdin);
 gets(t.hoTen);
 printf("\n Vi tri lam viec: ");
 fflush(stdin);
 gets(t.viTriLV);
 do{
  printf("\n Tuoi nhan vien: "); 
  scanf("%d",&t.tuoi); 
  if (t.tuoi<18||t.tuoi>65)  
  printf("\n Tuoi khong hop le, nhap lai tuoi");  
  } while(t.tuoi<18||t.tuoi>65);
 do{ 
  printf("\n So nam cong tac: ");
  scanf("%d",&t.soNamCT);
  if (t.soNamCT<0|| t.soNamCT>t.tuoi-18)
  printf("\n So nam cong tac khong hop le, nhap lai nam cong tac");
  } while (t.soNamCT<0|| t.soNamCT>t.tuoi-18);
 do{
  printf("\n He so luong: "); 
  scanf("%f",&t.heSoLuong); 
  if (t.heSoLuong<=0||t.heSoLuong>15)  
  printf("\n He so luong khong hop le, nhap lai he so luong.");
  } while (t.heSoLuong<=0||t.heSoLuong>15);
}

// In thong tin nhan vien
void InTT(){
printf("\n IN THONG TIN NHAN VIEN: \n"); 
  printf("\n - Ho ten: %s",t.hoTen); 
  printf("\n - Vi tri lam viec: %s",t.viTriLV); 
  printf("\n - Tuoi: %d",t.tuoi); 
  printf("\n - So nam cong tac: %d",t.soNamCT);
  printf("\n - He so luong: %f",t.heSoLuong);
}

// Tinh luong
float TinhLuong(){
float phuCap; 
  if(t.soNamCT>=3)
  phuCap=1.2*LCB;
  else
  phuCap=LCB;
  return (t.heSoLuong*LCB+phuCap); 
}

// Tinh thue thu nhap
float ThueTN(){ 
  float thue=0; 
  if (TinhLuong()>=5000000) 
  thue=0.1*TinhLuong();
  return thue;
}

// ham main

int main(){ 
  NhapTT(); 
  InTT(); 
  printf("\n Luong nhan vien: %f",TinhLuong() ); 
  printf("\n Thue thu nhap: %f",ThueTN() );
  getch();
  return 0;
}


Khoa học lập trình C/C++
------------------------
Xem bài khác:

[Tự học lập trình C/C++] Bài 11: Hàm (function)

---------------------------------
* TÓM TẮT LÝ THUYẾT
---------------------------------

1. 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 điểm khác của chương trình.

2. 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<<"; ";
  }

3. 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
 {  ... }

4. 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ề.

5. 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Ụ
---------------------------------

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;
 }

Khoa học C/C++
------------------------
Xem bài khác:

Danh mục bài viết