Các thao tác phổ biến với mảng
Thuộc phần Kiến thức nền tảng trong hành trình C++ của Coddy. Bài học 66 trên 74.
Dưới đây là một số thao tác phổ biến với mảng:
- Tính tổng của tất cả phần tử trong một mảng:
int numbers[] = {1, 2, 3, 4, 5};
int sum = 0;
for (int number : numbers) {
sum += number;
}
std::cout << "Sum: " << sum;- Tìm giá trị trung bình của các phần tử trong một mảng:
int numbers[] = {1, 2, 3, 4, 5};
double sum = 0;
for (int number : numbers) {
sum += number;
}
double average = sum / std::size(numbers);
std::cout << "Average: " << average;- Tìm phần tử lớn nhất trong một mảng:
int numbers[] = {1, 5, 2, 9, 3};
int max = numbers[0];
for (int i = 1; i < std::size(numbers); i++) {
if (numbers[i] > max) {
max = numbers[i];
}
}
std::cout << "Max: " << max;- Tìm phần tử nhỏ nhất trong một mảng:
int numbers[] = {1, 5, 2, 9, 3};
int min = numbers[0];
for (int i = 1; i < std::size(numbers); i++) {
if (numbers[i] < min) {
min = numbers[i];
}
}
std::cout << "Min: " << min;Thử thách
DễTạo một hàm có tên calculateStats nhận một mảng số thực và kích thước mảng làm đầu vào, rồi thực hiện các thao tác sau:
- Tính tổng tất cả phần tử trong mảng.
- Tính giá trị trung bình của các phần tử trong mảng.
- Tìm phần tử lớn nhất trong mảng.
- Tìm phần tử nhỏ nhất trong mảng.
Hàm cần trả về một mảng số thực chứa tổng, giá trị trung bình, giá trị lớn nhất và giá trị nhỏ nhất theo thứ tự đó.
Lưu ý quan trọng:
- Dùng tham số
sizeđể kiểm soát vòng lặp: không dùngstd::size(). - Để khởi tạo
maxvàmin, hãy đặt giá trị ban đầu của chúng làarr[0]. Cách này vẫn hoạt động chính xác khi mảng chỉ chứa số âm. - Code viết sẵn trong
main()đã cấp phát một mảng động bằngnewvà giải phóng mảng đó bằngdelete[]. Bạn chỉ cần cấp phát mảng kết quả bên trong hàm bằngnew double[4]rồi trả về mảng đó. Lưu ý: con trỏ và bộ nhớ động vớinewsẽ được giới thiệu kỹ hơn trong phần sau. Ở đây, bạn chỉ cần làm theo cách dùngnew double[4]như minh họa.
Cách làm gợi ý:
- Khởi tạo
sum = 0,max = arr[0]vàmin = arr[0]. - Lặp từ
i = 0đếni < size, cộng dồn tổng và cập nhật max/min khi cần. - Tính giá trị trung bình bằng
sum / size. - Cấp phát một mảng mới bằng
new double[4], lưu bốn kết quả theo thứ tự rồi trả về mảng đó.
Tự làm thử
#include <iostream>
double* calculateStats(double arr[], int size) {
// Bạn cần tính 4 giá trị (value) trước khi lưu chúng vào newArr
// Khởi tạo các biến (variable) sum (bắt đầu từ 0), max và min (đều bắt đầu từ arr[0])
// Dùng vòng lặp (loop) for để duyệt qua mảng (array)
// Trong vòng lặp:
// Cộng từng phần tử (element) vào sum
// So sánh từng phần tử với max và cập nhật max nếu phần tử lớn hơn
// So sánh từng phần tử với min và cập nhật min nếu phần tử nhỏ hơn
// Tính average = sum / size (sau vòng lặp)
double* newArr = new double[4];
newArr[0] = sum;
newArr[1] = average;
newArr[2] = max;
newArr[3] = min;
return newArr;
}
int main() {
int n;
std::cin >> n;
std::cin.ignore();
double arr[n];
for (int i = 0; i < n; i++) {
double val;
std::cin >> val;
arr[i] = val;
}
double* stats = calculateStats(arr, n);
std::cout << "Sum: " << stats[0] << std::endl;
std::cout << "Average: " << stats[1] << std::endl;
std::cout << "Maximum: " << stats[2] << std::endl;
std::cout << "Minimum: " << stats[3] << std::endl;
delete[] stats;
return 0;
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Kiến thức nền tảng
11Cơ bản về mảng
Khai báo mảngTruy cập phần tửChỉnh sửa phần tửÔn tập: In mảng đẹpMảng và hàmÔn tập: Tích của mảngÔn tập: Mảng đảo ngượcVòng lặp for nâng caoCác thao tác phổ biến với mảngTự luyện tập: Trình biên dịch C++ online