質問: c言語 配列・関数の問題 下記の問題が解けなくて困っております。 for文をつかった解法をお願いしたいです。 n個の要素からなる整数の配列a[ ]の中から2番目に大きな値を求め、それを戻り値とする関数maxsecを作成しなさい。 int maxsec(int n , int a[ ]) { 宜しくお願いします。
回答: #include int maxsec(int n, int a[]) { int t, i, j; for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; j++) { if (a[i] < a[j]) { t = a[i], a[i] = a[j], a[j] = t; } } } return a[1]; } int main(void) { int a[] = { 3, 5, 8, 4, 7, 2, 9, 6, 0, 1 }; printf("%d\n", maxsec(sizeof(a) / sizeof(a[0]), a)); return 0; } 要するに、引数として渡した配列を降順にソートして、 先頭から2つ目の要素を返す、ということです。