01/10/2018, 00:44

Chương trình này hoạt động như thế nào?

mình muốn hỏi là tại sao chạy đầu tiên nó lại in ra số 1, rồi nó mới in ra số chia hết cho 2 vậy.

#include < iostream>
#include < cmath>
using namespace std;
int ktscp(int);
int main()
{
    int n;
    cout << "Liet ke tat ca so chia het cho nho hon.
" << endl;
    cout << "nhap n: ";
    cin >> n;

    for(int i = 1; i < n; i++)
    {
        int sq = ktscp(i);
        cout << "so chia het cho 2 la " << sq << endl;
    }
    return 0;
}
int ktscp(int i)
{

    if(i%2==0)
    {
        return i;
    }
}
viết 02:51 ngày 01/10/2018

1 % 2 thương bằng 0, dư 1 chứ bạn?

viết 02:57 ngày 01/10/2018
#include <iostream>
using namespace std;
int ktscp(int);
int main()
{
    int n, sq;
    cout << "Liet ke tat ca so chia het cho nho hon.\n" << endl;
    cout << "nhap n: ";
    cin >> n;

    for (int i = 1; i < n; i++)
    {
        sq = ktscp(i);
        if (sq != 0)
            cout << "so chia het cho 2 la " << sq << endl;
    }
    return 0;
}
int ktscp(int i)
{
    return (i % 2 == 0 ? i : 0);
}

Code của bạn mình sửa lại chút xíu

  • Bỏ thư viện <cmath> đi vì mình thấy trong code không cần sử dụng đến.

  • Chỗ bạn sai là ở hàm ktscp, bạn cho chạy từ i = 1 nhưng hàm ktscp bạn chưa có else để xét nếu i % 2 != 0 thì return gì? Ở đây chương trình nó sẽ return 1 nếu i % 2 != 0, vì giá trị ban đầu của i là 1, nên nếu có số nào chia hết cho 2 thì điều kiện if sẽ được thực thi, còn không thì nó in ra số 1.
    Ví dụ:
    Chạy từ i = 1,
    1 không chia hết cho 2 nên nó in ra số 1, tăng i lên 1, vậy i = 2
    2 chia hết cho 2, nên nó in ra số 2, tăng i lên 1, vậy i = 3
    3 không chia hết cho 2, nên nó in ra số 1, tăng i lên 1, vậy i = 4

  • Câu lệnh if của hàm ktscp mình viết nó gọn lại theo cấu trúc điều kiện ? if : else. Nghĩa là “return i nếu i chia hết cho 2, ngược lại return 0 nếu i không chia hết cho 2”
    Chúc bạn học tốt
    Hoặc bạn muốn in ra các số chia hết cho 2 thì có thể làm như sau:

    #include
    using namespace std;
    int ktscp(int);
    int main()
    {
    int n;
    cout << “Liet ke tat ca so chia het cho nho hon.\n” << endl;
    cout << "Nhap n: ";
    cin >> n;

      for (int i = 0; i < n; i += 2)
          cout << "so chia het cho 2 la " << i << endl;
      return 0;
    

    }
    i = 0, i tăng lên 2 sau mỗi vòng for, nên i luôn chẵn, nên chia hết cho 2 (lưu ý: 0 cũng chia hết cho 2).

Chu Mai Bình viết 02:45 ngày 01/10/2018

Xin lỗi, mình nhầm

The Sao viết 02:54 ngày 01/10/2018

return (i % 2 == 0 ? i : 0);

cảm ơn bạn đã giải thích rất chi tiết.

Bài liên quan
0