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;
}