Cải tiến bài tập tính trung bình cộng n số từ số nguyên lên số thực

c

(leh) #1

Em lập trình bài tập tính trung bình cộng n số không âm nhập từ bàn phím như sau ạ
bây giờ bài em làm chỉ tính được sô nguyên thôi, làm như nào để tính được cả số thực ạ?
em mới hc nên ko biết nhiều ạ.

#include <stdio.h>
#include <math.h>
const long long MAX = 10000000;
long long arr[MAX];

int main(){
   long long n,i,sum=0,count=0;
   scanf("%lld", &n);
   for( i = 0;i < n; i++){
       scanf("%lld", &arr[i]);
   }
   for(i = 0; i <n; i++){
       if(arr[i] >=0){
           count++;
           sum += arr[i];
       }
   }
   printf("%.2f",sum/float(count));
}

(Sherly1001) #2

Thì bạn chỉ việc sửa kiểu của arr[] từ long long sang float hay double là được.

Mình cũng góp ý tí là cái count của bạn hơi thừa. Vì cộng song thì kiểu gì count vẫn bằng n, thà rằng bạn cho thành sum / (float)n là được. (mà cái float(count) của bạn hơi sai sai :slight_smile:)

Code như này chẳng hạn.

#include <stdio.h>

#define M 500

int main() {
	float arr[M] = {0.0}, sum = 0.0;
	int n = 0;
	do {
		printf("Enter N: \n");
		scanf("%d", &n);
		if (n <= 1)
			printf("\nN must be greater than 1\n");
	} while (n <= 1);

	for (int i = 0; i < n; i++) {
		printf("Enter the element %d\n", i + 1);
		scanf("%f", &arr[i]);
		sum += arr[i];
	}

	printf("\nAverage of %d numbers entered: %g\n", n, sum / (float)n);

	return 0;
}

Nhưng mà nếu chỉ đơn giản là tính trung bình cộng thôi thì bạn không nhất thiết phải lưu tất cả nhưng số vừa nhập vào một mảng làm gì, chỉ cần tạo một biến tạm để lưu giá trị nhập vào rồi lại ghi đè lên trong lần nhập sau là được. Thế này nè :point_down:.

#include <stdio.h>

int main() {
	float sum = 0.0, temp = 0.0;
	int n = 0;
	do {
		printf("Enter N: \n");
		scanf("%d", &n);
		if (n <= 1)
			printf("\nN must be greater than 1\n");
	} while (n <= 1);

	for (int i = 0; i < n; i++) {
		printf("Enter the element %d\n", i + 1);
		scanf("%f", &temp);
		sum += temp;
	}

	printf("\nAverage of %d numbers entered: %g\n", n, sum / (float)n);

	return 0;
}

Trông không khác lắm nhỉ, nhưng thực ra bạn đã tiết kiệm được khá khá RAM rồi đó. :smile:


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