Tìm giá trị lớn nhất trong mảng bằng C, C++
Trong bài học này, bạn sẽ tìm giá trị lớn nhất trong một mảng bằng cách so sánh lần lượt từng phần tử.
Giới thiệu
Để tìm giá trị lớn nhất, ta dùng một biến lưu giá trị lớn nhất đã gặp cho đến hiện tại, rồi so sánh nó với từng phần tử còn lại. Mỗi khi gặp phần tử lớn hơn, biến này được cập nhậ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.
Code ví dụ bằng C và C++
#include <stdio.h>
int main(void) {
int values[] = {-4, 7, 23, 9, 12}; int maximum = values[0];
// Compare every remaining value with the current maximum.
for (size_t i = 1; i < sizeof values / sizeof values[0]; ++i)
if (values[i] > maximum) maximum = values[i];
printf("max=%d\n", maximum);
}
max=23
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector values{-4, 7, 23, 9, 12};
// max_element returns an iterator to the largest value.
std::cout << "max=" << *std::max_element(values.begin(), values.end()) << '\n';
}
max=23
So sánh C và C++
Biến maximum được khởi tạo bằng phần tử đầu tiên thay vì bằng 0. Nhờ vậy chương trình vẫn đúng khi mảng chỉ chứa số âm, vì nếu bắt đầu bằng 0 thì kết quả sẽ sai. Vòng lặp duyệt từ phần tử thứ hai và cập nhật maximum khi gặp giá trị lớn hơn, kết quả là max=23.
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.
- Giá trị lớn nhất trong mảng Tìm giá trị lớn nhất trong một danh sách. Dễ
- Count Positive Numbers Count the values greater than zero in a list. Dễ