Hàm tính giá trị trung bình các số âm trong C

0
5437
viet ham tinh gia tri trung binh cac so am 1

Bài toán viết hàm tính giá trị trung bình các số âm trong C là bài tập số 2 trong list 67 bài viết giải chi tiết để cương nhập môn lập trình của mình.

1. Giới thiệu bài toán

Hàm là một dạng cấu trúc được sử dụng nhiều nhất, tất cả các bài toán thường giải quyết theo dạng viết hàm. Chính vì vậy việc luyện tập viết hàm sẽ giúp ích cho bạn rất nhiều.

Đề bài:

Viết hàm tính giá trị trung bình các phần tử có giá trị âm trong mảng một chiều a có n phần tử. Hàm trả về giá trị trung bình của các phần tử có giá trị âm. Ngược lại hàm trả về giá trị 0.

Mình hiểu nhanh bài toán là viết hàm tính giá trị trung bình các số âm bằng ngôn ngữ C

Theo quan điểm cá nhân của mình thì đây là bài toán tương đối dễ.

2. Giải quyết bài toán

Để giải quyết bài toán này bạn cầm nắm được kiến thức về cách viết hàm, cách sử dụng vòng for, cách tính giá trị trung bình và nắm được điều kiện của số âm.

2.1 Ý tưởng giải quyết bài toán

Để tính được giá trị trung bình các số âm, chúng ta cần đặt ra cách giải quyết của mình trên cơ sở toán học.

Số âm là các số nhỏ hơn 0.

Ý tưởng của mình đưa ra là:

  • Duyệt mảng
  • Tính tổng các số âm
  • Đếm số các số âm
  • Lấy tổng chia cho số lượng chúng ta có kết quả của bài toán.

2.2 Code gợi ý tính giá trị trung bình số âm

Hàm bài toán yêu cầu là hàm trả về giá trị kiểu số thực do đó ta khai báo kiểu float.

Đối số truyền vào ở đây là mảng số nguyên a có n phần tử.

Mình sẽ khai báo thêm 3 biến.

  • 1 biến dùng để tính tổng
  • 1 biến đếm
  • 1 biến là giá trị tb.

Code chi tiết như sau:

float tinhtb(int a[], int n){
	float tb, tong=0;
	int dem=0;
	for(int i=0;i<n;i++){
		if(a[i]<0){
			tong=tong+a[i];
			dem++;
		}
	}
	
	if(dem==0)
		return 0;
	else
		{
			tb=tong/dem;
			return tb;
		}
}

Trên đây là hàm tính giá trị trung bình các số âm. Nếu mảng không có giá trị âm tức dem=0, trả về giá trị 0 đúng theo yêu cầu bài toán.

Chương trình hoàn chỉnh có mã code như sau:

#include<stdio.h>
void nhap(int a[], int &n){
	do{
		printf("Nhap n: ");
		scanf("%d",&n);
	}
	while(n<2||n>99);
	
	for(int i=0; i<n; i++){
		printf("a[%d]: ",i);
		scanf("%d",&a[i]);
	}
}

void xuat(int a[], int n){
	printf("Mang vua nhap la: \n");
	for(int i=0;i<n;i++){
		printf("%5d",a[i]);
	}
}
float tinhtb(int a[], int n){
	float tb, tong=0;
	int dem=0;
	for(int i=0;i<n;i++){
		if(a[i]<0){
			tong=tong+a[i];
			dem++;
		}
	}
	
	if(dem==0)
		return 0;
	else
		{
			tb=tong/dem;
			return tb;
		}
}
int main(){
	int a[100];
	int n;
	nhap(a,n);
	xuat(a,n);
	printf("\nGia tri trung binh la: %0.2f",tinhtb(a,n));	
	return 0;
}

Kết quả của việc chạy thử chương trình trên:

viet ham tinh gia tri trung binh cac so am 2

Khuyến khích các bạn chỉ nên tham khảo thuật toán, tư tưởng giải quyết sau đó tự viết code của riêng mình. Hạn chế lạm dụng mã code mình chia sẻ.

Xem video của mình dưới đây để hiểu chi tiết hơn nhé:

Xem tiếp Bài 3: Hàm tính giá trị trung bình các số dương

Xem lại Bài 1: nhập xuất mảng trong C.

Đừng bỏ lỡ những bài tập quan trọng mình chia sẻ nhé!

Tải về để cương nhập môn lập trình

Bạn đọc có bất kì vướng mắc nào về bài toán, đừng ngại comment xuống dưới bài viết, mình sẽ hỗ trợ nhé!

Rất mong nhận được ý kiến đóng góp của các đọc giả để bài viết của chúng tôi được hoàn thiện hơn.

LEAVE A REPLY

Please enter your comment!
Please enter your name here