Tính tổng các phần tử của mảng trong C, C++
Trong bài học này, bạn sẽ tính tổng tất cả các giá trị trong một mảng bằng vòng lặp và một biến tích lũy.
Giới thiệu
Biến tích lũy (accumulator) là biến dùng để gom kết quả qua từng bước của vòng lặp. Để tính tổng một mảng, biến tích lũy bắt đầu bằng 0 và lần lượt được cộng thêm từng phần tử.
Những điểm quan trọng
- Luôn bật cảnh báo của trình biên dịch (compiler warning) và sửa hết các cảnh báo.
- Hiểu rõ kiểu dữ liệu và thời gian tồn tại (lifetime) của từng giá trị.
- Luôn kiểm tra dữ liệu đầu vào và giới hạn chỉ số của mảng.
Xem cách hoạt động
Nhấn Từng bước để chạy vòng lặp từng bước một. Quan sát điều kiện được kiểm tra, thân vòng lặp chạy và bảng theo dõi thêm từng dòng.
Code ví dụ bằng C và C++
#include <stdio.h>
int main(void) {
int values[] = {2, 4, 6, 8, 10}; int total = 0;
// sizeof determines the local array length.
for (size_t i = 0; i < sizeof values / sizeof values[0]; ++i) total += values[i];
printf("sum=%d\n", total);
}
sum=30
#include <iostream>
#include <numeric>
#include <vector>
int main() {
std::vector values{2, 4, 6, 8, 10};
// accumulate folds the range into one total.
std::cout << "sum=" << std::accumulate(values.begin(), values.end(), 0) << '\n';
}
sum=30
So sánh C và C++
Biến total được khởi tạo bằng 0, sau đó vòng lặp cộng mỗi phần tử vào total đúng một lần. Biểu thức sizeof values / sizeof values[0] tính số phần tử của mảng, nên vòng lặp tự đúng kể cả khi bạn thêm hoặc bớt phần tử. Kết quả là sum=30.
C dùng các hàm thủ tục gọn nhẹ và thể hiện rõ cách dữ liệu được biểu diễn trong bộ nhớ.
C++ vẫn cho phép làm việc ở mức thấp nhưng bổ sung các kiểu dữ liệu thư viện và công cụ trừu tượng an toàn hơn.
Bài tập mở rộng
Hãy chạy cả hai phiên bản, sau đó thử thay đổi code để quan sát sự khác biệt về mức độ an toàn mà mỗi ngôn ngữ mang lại.
- Thử nhập dữ liệu sai và các giá trị ở biên.
- Biên dịch với các cờ -Wall -Wextra -Wpedantic để bật thêm cảnh báo.
- Tách phần khai báo dùng chung ra file header và phần cài đặt ra file riêng.
Luyện tập với thử thách
Áp dụng kiến thức của bài học này để giải một bài toán thực tế. Mỗi thử thách chạy ngay trên trình duyệt, có kiểm thử tức thì và AI nhận xét.
Tất cả thử thách