Kiểm tra số chính phương

#include <stdio.h>
#include <math.h>
void nhap(int &n);
int timsobinhphuong(int n);
void xuat(int kt);
void main()
{
	int n;
	nhap(n);
	int kt=timsobinhphuong(n);
	xuat(kt);
}
void nhap(int &n)
{
	scanf("%d", &n);
}
int timsobinhphuong(int n)
{
	for(int i=1;i<n;i++)
	{
		if(pow(i,2)==n)
		{
			return 0;
			break;
		}
		else
			return 1;
	}
}
void xuat(int kt)
{
	if(kt==0)
		printf("binh phuong");
	else 
		printf("ko binh phuong");
}

em không biết sai lỗi nào trong đây mà nó toàn trả về giá trị 1.

if(pow(i,2)==n)
{
	return 0;
	break;
} else 
	return 1;

chỗ này sai nhé vì nếu n = 4 thì trong vòng for:
i = 1 => 1 ^ 2 = 1 => 1 == 4 là false => return 1

nên đặt cái return 1 ở ngoài vòng for (cuối hàm timsobinhphuong)

for(int i=1;i<n;i++)
{
	if(pow(i,2)==n)
	{
		return 0;
		break;
	}
}
		
return 1;
3 Likes

Thank bạn nha mà cho mình hỏi tý là nếu làm vậy nó lặp vòng for hết rồi xong nó chạy tiếp lệnh return 1; thế là lúc nào nó cũng return 1 sao

return là kết thúc hàm rồi bạn, nó chỉ trả về 1 lần thôi

nếu mà if trong for không thỏa -> for cứ chạy đến n nhưng ko return -> return 1 ở cuối hàm

3 Likes

Lệnh return nếu mình trả về cho nó 1 lần rồi tý mình trả về 1 lần nữa thì

  1. Nó lấy thằng nào?
  2. Nó có đè lên ko bạn?
    Mình đã hiểu sai về return nên bài này mình code sai ấy. Giải đáp giúp mình với thank bạn

bạn có thể hiểu return thế này (ví dụ thôi nhé, copy vào là IDE vả vỡ mồm đấy)

bool tìm_gái()
{ 
    while(true) 
    {
         if (thấy_bạn_gái == true) return true; // có gái rồi, éo tìm nữa => thoát timgai() 
    }  
}
  1. Nó lấy giá trị của thằng return nó nhận dc (như code của bạn là return 1)
  2. Sau khi găp return => thoát hàm => ko chạy hàm nữa (sau khi gặp return => thoát khỏi hàm)
3 Likes

Nếu bạn muốn trả về nhiều giá trị thì có thể để nó vào 1 mảng hoặc cấu trúc (struct).

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