Anh chi nào giúp e tìm ra cái lỗi trong đoạn code này với ạ. Em mới học C nên đang kém quá.
Mong anh chị giúp đỡ.
Lap trinh C cho newbie
If(so_chinh_phuong(n) == true)
// If thì phải có điều kiện chứ
theo mình thì If(so_chinh_phuong(n)) là nó đã có nghĩa là true rồi chứ bạn.
.c mà sao thành .cpp thế kia ,sửa title đi
của mình viết dev c nên nó .cpp bạn ak, theo mình nghĩ thì lỗi nó không phải ở đó
if (i*i != n) return false;
Lúc đầu i = 2 nên nếu n != 4 thì điều kiện này đúng -> return false được thực hiện, hàm bị thoát ngay và trả về giá trị false. Sửa như bạn trên đúng rồi đó.
ý bạn là sữa thế nào ạ, mình vẫn chưa hiểu lắm
for (i = 2; i <= n/2; i++) {
if (i*i == n)
return true;
}
return false;
Hàm kiểm tra số chính phương của mình, bạn có thể làm cách này đơn giản hơn:
bool so_chinh_phuong(int n) {
int i = 0;
while (i * i < n) i++;
return (i * i == n);
}
cam ơn bạn nhé, ak nhưng mà tại sao mình bỏ if (i*i != n) return false; thì kết quả sai vậy bạn
cảm ơn bạn nhé .hi, cách này nhanh thật
Cái này là c++ à, chứ c làm gì có bool
ý tưởng đúng nhưng dùng return không đúng nên sai
Code của bạn sửa lại chỗ return là đúng nhé!
#include <stdio.h>
#include <conio.h>
#include <math.h>
bool so_chinh_phuong(int n)
{
int i;
if (n <= 1) return false;
else
{
for (i = 2; i <= n / 2; i++)
if (i * i == n) return true;
}
return false;
}
int main(int argc, char const *argv[])
{
int n;
printf("Nhap vao so can kiem tra: ");
scanf("%d", &n);
if (so_chinh_phuong(n))
printf("%d la so chinh phuong\n", n);
else printf("%d khong phai la so chinh phuong\n", n);
getch();
return 0;
}
Khi vòng for chạy, nếu thỏa yêu cầu i * i == n
thì return true luôn, còn khi vòng for chạy xong rồi, mà điều kiện i * i == n
không xảy ra thì return false.
cam on ban nhieu nhe