Viết chương trình C để tìm phần tử lớn nhất hai
Các bước thực hiện để viết chương trình C:
- Định nghĩa một hàm findSecondSmallest nhận vào một mảng (arr), kích thước (size) của nó và một con trỏ để lưu trữ phần tử nhỏ thứ hai (secondSmallest).
- Bên trong hàm findSecondSmallest:
- Khởi tạo các biến nhỏ nhất và *secondSmallest thành INT_MAX.
- Sử dụng vòng lặp for để duyệt qua mảng và tìm phần tử nhỏ nhất và nhỏ thứ hai:
- So sánh phần tử hiện tại (arr[i]) với phần tử nhỏ nhất hiện tại (smallest).
- Nếu phần tử hiện tại nhỏ hơn phần tử nhỏ nhất, hãy cập nhật *secondSmallest thành phần tử nhỏ nhất trước đó (smallest) và cập nhật smallest = phần tử hiện tại.
- Nếu phần tử hiện tại nằm giữa phần tử nhỏ nhất và phần tử nhỏ thứ hai và không bằng phần tử nhỏ nhất, hãy cập nhật *secondSmallest thành phần tử hiện tại.
- Định nghĩa một hàm khác printSecondSmallest nhận một mảng (arr) và kích thước (size) của nó.
- Bên trong hàm printSecondSmallest, khai báo một biến secondSmallest để lưu phần tử nhỏ thứ hai.
- Gọi hàm findSecondSmallest với mảng, kích thước và địa chỉ của secondSmallest.
- Kiểm tra xem secondSmallest có = INT_MAX sau khi gọi hàm không:
- Nếu secondSmallest= INT_MAX, in ra "Không tìm thấy phần tử nhỏ thứ hai".
- Nếu secondSmallest != INT_MAX, hãy in "Phần tử nhỏ thứ hai là: " theo sau là giá trị của secondSmallest.
- Trong hàm main:
- Khai báo ba mảng arr1, arr2 và arr3 và khởi tạo chúng với một số giá trị.
- Tính toán kích thước của mỗi mảng bằng cách sử dụng toán tử sizeof và chia nó cho kích thước của phần tử đầu tiên.
- In một thông báo và gọi hàm printSecondSmallest cho mỗi mảng, truyền mảng và kích thước của nó làm đối số.
- Kết thúc chương trình bằng cách trả về 0 từ hàm chính.
Code tham khảo của chương trình C:
/*
Write a program that finds
the second smallest element in an array using pointers
*/
#include <stdio.h>
#include <limits.h>
void findSecondSmallest(int *arr, int size, int *secondSmallest) {
int smallest = INT_MAX;
*secondSmallest = INT_MAX;
// Find the smallest and second smallest elements
for (int i = 0; i < size; i++) {
if (arr[i] < smallest) {
*secondSmallest = smallest; // Update the second smallest element
smallest = arr[i]; // Update the smallest element
} else if (arr[i] < *secondSmallest && arr[i] != smallest) {
*secondSmallest = arr[i]; // Update the second smallest element
}
}
}
void printSecondSmallest(int *arr, int size) {
int secondSmallest;
findSecondSmallest(arr, size, &secondSmallest);
if (secondSmallest == INT_MAX) {
printf("No second smallest element found\n");
} else {
printf("The second smallest element is: %d\n", secondSmallest);
}
}
int main() {
int arr1[] = {5, 2, 8, 1, 9};
int size1 = sizeof(arr1) / sizeof(arr1[0]);
printf("For arr1 = {5, 2, 8, 1, 9}, ");
printSecondSmallest(arr1, size1);
int arr2[] = {-3, 6, -2, 9, 7};
int size2 = sizeof(arr2) / sizeof(arr2[0]);
printf("For arr2 = {-3, 6, -2, 9, 7}, ");
printSecondSmallest(arr2, size2);
int arr3[] = {4, -1, 6, 8, -3};
int size3 = sizeof(arr3) / sizeof(arr3[0]);
printf("For arr3 = {4, -1, 6, 8, -3}, ");
printSecondSmallest(arr3, size3);
return 0;
}
0 Nhận xét