01/10/2018, 00:43

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

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

If(so_chinh_phuong(n) == true)
// If thì phải có điều kiện chứ

Hung dang IT viết 02:51 ngày 01/10/2018

theo mình thì If(so_chinh_phuong(n)) là nó đã có nghĩa là true rồi chứ bạn.

Bùi Thế Khải viết 02:49 ngày 01/10/2018

.c mà sao thành .cpp thế kia ,sửa title đi

Hung dang IT viết 02:54 ngày 01/10/2018

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 ở đó

Nguyễn Văn Tâm viết 02:46 ngày 01/10/2018
    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 đó.

Hung dang IT viết 02:47 ngày 01/10/2018

ý bạn là sữa thế nào ạ, mình vẫn chưa hiểu lắm

Nguyễn Văn Tâm viết 02:55 ngày 01/10/2018
for (i = 2; i <= n/2; i++) {
    if (i*i == n)
       return true;
}
return false;
viết 02:51 ngày 01/10/2018

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);
}
Hung dang IT viết 02:52 ngày 01/10/2018

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

Hung dang IT viết 02:57 ngày 01/10/2018

cảm ơn bạn nhé .hi, cách này nhanh thật

Do Ngoc Anh viết 02:53 ngày 01/10/2018

Cái này là c++ à, chứ c làm gì có bool

Loser viết 02:44 ngày 01/10/2018

ý tưởng đúng nhưng dùng return không đúng nên sai

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

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.

Hung dang IT viết 02:56 ngày 01/10/2018

cam on ban nhieu nhe

Bài liên quan
0