01/10/2018, 00:03

Giúp minh giải bài tập C với

Có vài chỗ trong đây minh không hiểu lắm, các bạn giải thích hộ mình.


#include <stdio.h>
#include <stdlib.h>


int uscln(int a, int b);
int bscnn(int a, int b);
void main()
{
    int a = 6, b = 18;
    printf("USCLN(%d,%d) = %d
", a, b, uscln(a, b));
    printf("BSCNN(%d,%d) = %d
", a, b, bscnn(a, b));
    getch();
}
// dung thuat toan Euclid
int uscln(int a, int b)
{
    if(a == 0 && b == 0)
        return -1;
    else
        return (b == 0)? a : uscln(b, a%b); // chỗ này minh không hiểu lắm
}

int bscnn(int a, int b)
{
    if(a == 0 || b == 0)
        return -1;
    else
        return (a*b/uscln(a, b));
}

//  return (b == 0)? a : uscln(b, a%b); => mình không hiểu đoạn return này mọi người giải thích dùm mình nha
Đinh Quốc Hân viết 02:09 ngày 01/10/2018

Cú pháp này là toán tử 3 ngôi (tenary operator) một cách thay thế, rút gọn lại câu lệnh if vào các câu điều kiện đợn giản, ví dụ thay vì:


if(b == 0) {
    return a;
} else {
    return uscln(b, a%b);
}

thì chỉ cần đơn giản là:

    return (b == 0)? a : uscln(b, a%b);

P/s lần sau nhớ chèn code đúng cú pháp nha bạn mình sẽ sửa mẫu cho bạn.

Lee D viết 02:15 ngày 01/10/2018

à ra vậy. thx bạn nhé!

Nguyễn Xuân Phúc viết 02:03 ngày 01/10/2018

sao gọi toán tử 3 ngôi là viết tắt của cấu trúc if được
Trong trường hợp này nó có chức năng tương đương nhau thôi chứ đâu phải lúc nào if cũng có thể “viết tắt” thành toán tử 3 ngôi như vậy đâu

thuyhien viết 02:07 ngày 01/10/2018

đây là tiếng anh hay toán

Đinh Quốc Hân viết 02:11 ngày 01/10/2018

Đúng, 1 cái là statements if 1 cái là operator, mình đưa ra vậy để đơn giản thôi tuy nhiên, không phải là viết tắt mà là ngắn ngọn với những câu lệnh điều kiện đơn giản với những điều kiện phức tạp hơn thì dùng toán tử ba ngôi sẽ xấu và loằng ngoài code thank nhé.

Bài liên quan
0