01/10/2018, 17:38

Chương trình làm tròn số

#include <stdio.h>
void nhap( float &a);
int lamtronso( float a);
void xuat ( int b);
void main ()
{
	float a;
	nhap(a);
	int b= lamtronso(a);
	xuat(b);
}
void nhap( float &a)
{
	scanf("%f", &a);
}
int lamtronso( float a)
{
	int b;
	if ((a % 1) >=0.5)
		b=(a/1)+1;
	return b;
}
void xuat ( int b)
{
	printf("%d", b);
}

Bài này em bị hai lỗi mà đó giờ gặp nhưng không bao giờ biết sửa

  1. ‘%’ : illegal, left operand has type ‘float’
  2. ‘=’ : conversion from ‘float’ to ‘int’, possible loss of data
Trương Tấn Phát viết 19:47 ngày 01/10/2018

Xem cách định dạng mã để dễ nhìn:

Làm sao để có thể hiển thị syntax highlighting bằng markdown? Các bạn phải đánh dấu ``` như ví dụ dưới đây Chú ý, dấu ``` được tạo ra bởi nút nằm bên trái số 1 trên bàn phím, nút này sẽ là ~ khi bấm giữ Shift Ví dụ cho C Nội dung: ``` void main() { } ``` Và đừng quên ``` ở cuối Kết quả void main() { } Ví dụ cho Pascal Nội dung: ``` Program HelloWorld; Begin WriteLn('Hello world!') {no ";" is required after the last statement of a block - adding one adds a "null statement" to t…

Trương Tấn Phát viết 19:49 ngày 01/10/2018
  1. Là lỗi: trong C không hỗ trợ chia lấy dư cho số thực (float, double).
  2. Là cảnh báo. Có thể phớt lờ cảnh báo. Vì mục đích làm tròn chính là làm mất phần thập phân.

Dùng fmod() trong math.h.

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

Lấy (int) (a + 0.5) thôi vì (vô tình) 0.5 là số tròn không lẻ

Gia Khang Nguyễn Lâm viết 19:42 ngày 01/10/2018

Anh ơi em muốn lấy bên phải phần thập phân chứ không phải lấy dư anh giúp em với.

rogp10 viết 19:40 ngày 01/10/2018

(int) a là phần nguyên rồi, nhưng làm tròn thì không cần trích phần lẻ

HK boy viết 19:40 ngày 01/10/2018

lấy bên phải phần thập phân

Dùng modf tách được cả phần nguyên và phần lẻ.

Gia Khang Nguyễn Lâm viết 19:53 ngày 01/10/2018

Là cảnh báo. Có thể phớt lờ cảnh báo. Vì mục đích làm tròn chính là làm mất phần thập phân

Cho em hỏi luôn là bài em làm sao mới có thể sửa được lỗi này.
Note: không được đổi thành float hay int hết nha .

HK boy viết 19:54 ngày 01/10/2018

Đừng gán trực tiếp

biến_int = giá_trị_float

mà hãy ép kiểu. Dùng

static_cast<int>(f); // f là biến kiểu double/float
NBQ viết 19:51 ngày 01/10/2018

void nhap( float &a);

Thêm nữa là trong C không có tham chiếu, chắc là bạn chạy chương trình theo kiểu C++ nên trình biên dịch không báo lỗi.

Gia Khang Nguyễn Lâm viết 19:54 ngày 01/10/2018

Bạn cho mình hỏi luôn là nếu mình làm kiểu này

int a,b;
float chia;
int phepchia= thuong(a,b,chia);

làm như vậy có báo lỗi không bởi vì ban đầu là int và bên trong 2 kiểu int, 1 kiểu float. Nếu có hoặc không thì tại sao lại như vậy ? thank bạn

rogp10 viết 19:42 ngày 01/10/2018

Lưu ý chia truyền theo tham biến. int chia int ra float thì công dụng sẽ khác so với ra int, chứ về nguyên tắc thì ko sao.

Bài liên quan
0