Lap trinh C cho newbie

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 đỡ.

1 Like

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;
1 Like

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);
}
1 Like

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 :frowning:

ý 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.

1 Like

cam on ban nhieu nhe

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?