Nhờ mọi người góp ý code tính trung bình cộng các số chẵn trong dãy số

Đề bài: Trình bày thuật toán tính trung bình cộng các số chẵn từ 1 dãy số a[n] (0<=n<=50)

m,n xem và góp ý với bài làm của em với ạ

#include<stdio.h>
int a[1000];
int n;
void nhapMang()
{
	int i;
	for(i=0;i<n;i++)
	{	
		printf("a[%d]= ",i);
		scanf("%d",&a[i]);
	}
}

void TrungBinhCongSoChan()
{
	int i;
	int tong=0;
	int dem=0;
	
	for(i=0;i<n;i++)
		if(a[i]%2==0) 
		{	tong+=a[i];
			dem++;
		}
		
	printf("tong trung binh cong so chan la %d  ",tong/dem);		
}
void main()
{
	printf("nhap phan tu mang ");
	scanf("%d",&n);
	nhapMang();
	TrungBinhCongSoChan();


}

góp ý là:

  • nên sử dụng tên biến với hàm bằng tiếng anh
    +hàm trung bình cộng nên return biến kiểu float
    +hàm main nên prinft kết quả ra, không nên printf kq trong function
    => như vậy trông dễ nhìn hơn, két quả chính xác hơn
1 Like

Đề bài là số chẵn rồi nên không cần kiểu float.
Function nhapMang nên input là “n” và output là mảng đã nhập.
Function tính trung bình cộng, check số chẵn làm riêng code sẽ sáng sủa hơn.

thuật toán đúng, nhưng code sai.

Chú ý: int / int => int
tức là:
4/2 = 2
5/2 = 2
1/2 = 0
8/3 = 2

vì vậy, hàm in phải là printf("tong trung binh cong so chan la %f ", (float)tong / dem); để nó chuyển phép tính thành float / int

Ngoài ra, phương pháp làm cũng không đúng, các phép tính nên return ra kết quả, rồi in kết quả đó, không nên in ra kết quả ngay trong hàm tính.

2 Likes

“Đề bài là số chẵn rồi nên không cần kiểu float.”
???
logic thế nào đấy bạn

1 Like

Hi Tiến Dũng.

  1. Hạn chế dùng biến toàn cục.
  2. Dùng cấp phát động.
  3. Viết nguyên mẫu hàm.
  4. Đặt tên hàm tiếng Anh cùng convention.
  5. Tên biến đặt rõ nghĩa, tiếng Anh.
  6. Không nên in trúc tiếp trong các hàm tính toán mà viết hàm xuất riêng.

Sorry mình nhầm, confirm chưa kỹ.

tùy yêu cầu đề bài mà nên dùng cấp phát động hay không.
Nếu ước tính được size của mảng thì mình hay dùng static aray hơn cấp phát động, vì ccap phát động hiệu năng chậm hơn static array

Mình thấy trong hầu hết các trường hợp, người ta dùng cấp phát động vì vụ chênh lệch hiệu năng giữa 2 kiểu dữ liệu này không đáng kể :smile:

Nếu như bạn thớt sau này học và sử dụng các ngôn ngữ đời sau thì cấp phát động sẽ là chủ đạo, thôi thì cứ làm quen dần.

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