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;
}
}
Bài liên quan
1 % 2 thương bằng 0, dư 1 chứ bạn?
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àmktscp
bạn chưa cóelse
để xét nếui % 2 != 0
thìreturn
gì? Ở đây chương trình nó sẽreturn 1
nếui % 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;
}
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).
Xin lỗi, mình nhầm
cảm ơn bạn đã giải thích rất chi tiết.