So sánh 3 số trong c++

Tìm số lớn nhất trong 3 số được nhập từ bàn phím.

Bài giải

---- ######## ----

Cách giải bài toán này đơn giản như sau:

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

  • Lấy một biến tạm giữ giá trị lớn nhất, ta gọi đó là max
  • Gán giá trị số đầu tiên cho max, bây giờ max là số đầu tiên
  • So sánh max với số thứ 2, nếu số thứ 2 lớn hơn max, gán giá trị max bằng số thứ 2
  • So sánh max với số thứ 3, nếu số thứ 3 lớn hơn max, gán giá trị max bằng số thứ 3

Chúng ta sẽ sử dụng cấu trúc điều khiển if else trong C++ để giải quyết bài toán trên như sau:

include

using namespace std; int main[] {

int a, b, c, max;  
cout > a;  
cout > b;  
cout > c;  
max = a;  
if[max < b] {  
    max = b;  
}  
if[max < c] {  
    max=c;   
}  
cout  0] {
      printf["'%s' LON HON '%s' \n", chuoi_1, chuoi_2];
    }
    printf["-------------\n\n"];
}
int main[] {
    const char* chuoi = "Xin chao";
    so_sanh[chuoi, "Xin chao!"]; // co them dau '!'
    so_sanh[chuoi, "Xin chao"];
    so_sanh[chuoi, "Xin chao ban"];
    so_sanh[chuoi, "Chao"];
}

6:

// ...

# include 
void so_sanh[const char* chuoi_1, const char* chuoi_2] {
    int gia_tri = strcmp[chuoi_1, chuoi_2];
    printf["gia_tri = %d ---> '%c' \n", gia_tri, abs[gia_tri]];
    //...
}
//...

Kết quả là:

gia_tri = -33 ---> '!'
'Xin chao' NHO HON 'Xin chao!'

gia_tri = 0 ---> ''
'Xin chao' BANG 'Xin chao'

gia_tri = -32 ---> ' '
'Xin chao' NHO HON 'Xin chao ban'

gia_tri = 21 ---> ''
'Xin chao' LON HON 'Chao'

Rõ rồi nhé, giá trị chính là số thứ tự chênh lệch của kí tự khác nhau đầu tiên trong bảng ASCII. 33 là kí tự chấm than trừ null, còn 32 là kí tự trắng trừ null. Còn dấu thì chỉ để xem cái nào nhỏ hơn hay lớn hơn mà thôi. Còn số 21 là kí tự ‘X’ - ‘C’, không in ra được nên sẽ có


# include 

# include 
void so_sanh[const char* chuoi_1, const char* chuoi_2] {
    int gia_tri = strcmp[chuoi_1, chuoi_2];
    printf["gia_tri = %d \n", gia_tri];
    if [gia_tri == 0] {
      printf["'%s' BANG '%s' \n", chuoi_1, chuoi_2];
    } else if [gia_tri < 0] {
      printf["'%s' NHO HON '%s' \n", chuoi_1, chuoi_2];  
    } else if[gia_tri > 0] {
      printf["'%s' LON HON '%s' \n", chuoi_1, chuoi_2];
    }
    printf["-------------\n\n"];
}
int main[] {
    const char* chuoi = "Xin chao";
    so_sanh[chuoi, "Xin chao!"]; // co them dau '!'
    so_sanh[chuoi, "Xin chao"];
    so_sanh[chuoi, "Xin chao ban"];
    so_sanh[chuoi, "Chao"];
}

7.

Chú ý hàm strcmp[] so sánh kiểu thứ tự từ điển, bảng alphabet của tiếng anh sẽ có khác một số ngôn ngữ khác, khi đó giải pháp thay thế là strcoll[], mình sẽ không giải thích ở đây.

2. So sánh hai số thực

Đa số các ngôn ngữ lập trình đều có 2 kiểu số thực là


# include 

# include 
void so_sanh[const char* chuoi_1, const char* chuoi_2] {
    int gia_tri = strcmp[chuoi_1, chuoi_2];
    printf["gia_tri = %d \n", gia_tri];
    if [gia_tri == 0] {
      printf["'%s' BANG '%s' \n", chuoi_1, chuoi_2];
    } else if [gia_tri < 0] {
      printf["'%s' NHO HON '%s' \n", chuoi_1, chuoi_2];  
    } else if[gia_tri > 0] {
      printf["'%s' LON HON '%s' \n", chuoi_1, chuoi_2];
    }
    printf["-------------\n\n"];
}
int main[] {
    const char* chuoi = "Xin chao";
    so_sanh[chuoi, "Xin chao!"]; // co them dau '!'
    so_sanh[chuoi, "Xin chao"];
    so_sanh[chuoi, "Xin chao ban"];
    so_sanh[chuoi, "Chao"];
}

8 và


# include 

# include 
void so_sanh[const char* chuoi_1, const char* chuoi_2] {
    int gia_tri = strcmp[chuoi_1, chuoi_2];
    printf["gia_tri = %d \n", gia_tri];
    if [gia_tri == 0] {
      printf["'%s' BANG '%s' \n", chuoi_1, chuoi_2];
    } else if [gia_tri < 0] {
      printf["'%s' NHO HON '%s' \n", chuoi_1, chuoi_2];  
    } else if[gia_tri > 0] {
      printf["'%s' LON HON '%s' \n", chuoi_1, chuoi_2];
    }
    printf["-------------\n\n"];
}
int main[] {
    const char* chuoi = "Xin chao";
    so_sanh[chuoi, "Xin chao!"]; // co them dau '!'
    so_sanh[chuoi, "Xin chao"];
    so_sanh[chuoi, "Xin chao ban"];
    so_sanh[chuoi, "Chao"];
}

9. Nhiều khi bất cẩn ta có thể sẽ có những phép so sánh như sau:

float a = 0.123;
double b = 0.123;
printf["A = %f \nB = %f\n", a, b];
if [a == b] {
  printf["BANG NHAU \n"];
} else {
  printf["KHAC NHAU \n"];
}

Thực tiễn hai số đó bằng nhau nhưng vào máy thì 🤣

A = 0.123000
B = 0.123000
KHAC NHAU

Code chạy ngon lành nhưng đôi khi không biết lỗi ở đâu ra, cái này thực sự rất nguy hiểm.

3. Thực hiện phép tính trong mệnh đề điều kiện

Cái này một số bạn vẫn sẽ mắc bẫy vì đôi khi muốn rút gọn phép tính vào ngay trong lúc so sánh. Ví dụ bài toán kiểm tra số nguyên

gia_tri = -33
'Xin chao' NHO HON 'Xin chao!'

gia_tri = 0
'Xin chao' BANG 'Xin chao'

gia_tri = -32
'Xin chao' NHO HON 'Xin chao ban'

gia_tri = 21
'Xin chao' LON HON 'Chao'

0 có gấp ba số

gia_tri = -33
'Xin chao' NHO HON 'Xin chao!'

gia_tri = 0
'Xin chao' BANG 'Xin chao'

gia_tri = -32
'Xin chao' NHO HON 'Xin chao ban'

gia_tri = 21
'Xin chao' LON HON 'Chao'

1 hay không?

int a = 30, b = 10;
if [a / 3 == b] {
  printf["A gap ba B"];
} else {
  printf["A khong gap ba B"];
}

Kết quả:

if [ strcmp[string1, string2] == 0 ] {
  // làm gì đó
}

0

Cũng đoạn trên thay thành

gia_tri = -33
'Xin chao' NHO HON 'Xin chao!'

gia_tri = 0
'Xin chao' BANG 'Xin chao'

gia_tri = -32
'Xin chao' NHO HON 'Xin chao ban'

gia_tri = 21
'Xin chao' LON HON 'Chao'

2, ta có kết quả mới:

if [ strcmp[string1, string2] == 0 ] {
  // làm gì đó
}

0

Vi diệu chưa? Sai tè le luôn. Bởi vì kết quả phép chia 2 số nguyên sẽ luôn là một số nguyên. Việc tính toán ở đây phải cẩn thận vì bên cạnh trường hợp làm tròn số thì còn lỗi tràn nữa:

if [ strcmp[string1, string2] == 0 ] {
  // làm gì đó
}

2

Kết quả:

if [ strcmp[string1, string2] == 0 ] {
  // làm gì đó
}

3

Vâng,

gia_tri = -33
'Xin chao' NHO HON 'Xin chao!'

gia_tri = 0
'Xin chao' BANG 'Xin chao'

gia_tri = -32
'Xin chao' NHO HON 'Xin chao ban'

gia_tri = 21
'Xin chao' LON HON 'Chao'

3 chỉ vì nó tràn kiểu dữ liệu

gia_tri = -33
'Xin chao' NHO HON 'Xin chao!'

gia_tri = 0
'Xin chao' BANG 'Xin chao'

gia_tri = -32
'Xin chao' NHO HON 'Xin chao ban'

gia_tri = 21
'Xin chao' LON HON 'Chao'

4 [tối đa 255 nên 2 * 200 = -112, và máy nó hiểu -112

Chủ Đề