[C++] 陣列基礎練習題


Basic Array Problems in C++ Programming


本文提供幾個一、二維陣列相關的基礎練習題,其中包括陣列配合指標使用的基本題,以讓讀者熟悉陣列與指標的使用。


宣告一可儲存 5 個整數的陣列,可讓使用者輸入 5 個整數,計算並輸出其平均值


#include <iostream>
using namespace std;
const int maxSize = 5;
int  number[maxSize];
double average(int x[ ], int arraySize);
 
int main( ) {
        for (int i = 0; i < maxSize; i++)
        {
                cout << "輸入第" << i << "個元素整數值:";
                cin >> number[i];
        }
        cout << "陣列元素平均值為:" << average(number, maxSize) << "\n";
        return 0;
}
 
double average(int x[ ], int arraySize)
{
        int sum = 0;
        for (int i = 0; i < arraySize; i++)
                sum += x[i];
        return sum/maxSize;
}



輸出結果




宣告一可儲存 5 個整數的陣列,可讓使用者輸入 5 個整數,找出並輸出陣列中最大值


#include <iostream>
using namespace std;
const int maxSize = 5;
int  number[maxSize];
int main( ) {
int max_int = 0;
for (int i = 0; i < maxSize; i++)
{
cout << "輸入第" << i << "個元素整數值:";
cin >> number[i];
if ( i == 0 )
max_int = number[i];
else if (number[i] > max_int)
max_int = number[i];
}
cout << "陣列元素中最大值為:" <<  max_int << "\n";
return 0;
}



輸出結果













以氣泡排序法將輸入的 5 個整數進行由小至大的排序,最後輸出排序前與排序後的陣列元素


#include <iostream>
using namespace std;
const int maxSize = 5;
int  number[maxSize];
void bubble_sort(int x[], int arraySize);

int main() {
    for (int i = 0; i < maxSize; i++){
        cout << "輸入第 " << i << " 個元素整數值:";
        cin >> number[i];
    }
    cout << "排序前的陣列元素為:";
    for (int i = 0; i < maxSize; i++)
        cout << number[i] << " ";
    cout << "\n";
    cout << "排序後的陣列元素為:";
    bubble_sort(number, maxSize);
    for (int i = 0; i < maxSize; i++)
        cout << number[i] << " ";
    cout << "\n";
    return 0;
}

void bubble_sort(int x[], int arraySize)
{
    int i, j, temp;
    for (i = maxSize - 1; i >= 1; i--) {
        for (j = 0; j <= i - 1; j++) {
            if (number[j] > number[j + 1]) {
                temp = number[j + 1];
                number[j + 1] = number[j];
                number[j] = temp;
            }
        }
    }
}

或是使用指標

#include <iostream>
using namespace std;
const int maxSize = 5;
int  number[maxSize];
void bubble_sort(int x[], int arraySize);

int main() {
    for (int i = 0; i < maxSize; i++) {
        cout << "輸入第 " << i << " 個元素整數值:";
        cin >> *(number+i);
    }
    cout << "排序前的陣列元素為:";
    for (int i = 0; i < maxSize; i++)
        cout << *(number + i) << " ";
    cout << "\n";
    cout << "排序後的陣列元素為:";
    bubble_sort(number, maxSize);
    for (int i = 0; i < maxSize; i++)
        cout << *(number + i) << " ";
    cout << "\n";
    return 0;
}

void bubble_sort(int x[], int arraySize)
{
    int i, j, temp;
    for (i = maxSize - 1; i >= 1; i--) {
        for (j = 0; j <= i - 1; j++) {
            if (*(number+j) > *(number+j+1)) {
                temp = *(number + j + 1);
                *(number + j + 1) = *(number + j);
                *(number + j) = temp;
            }
        }
    }
}


輸出結果




將輸入的 5 個整數,利用指標存入陣列,並求取陣列元素的總和


#include <iostream>
using namespace std;
const int maxSize = 5;
int  number[maxSize];

int main() {
int sum = 0;
        int i;
for (i = 0; i < maxSize; i++)
{
cout << "輸入第" << i << "個元素整數值:";
cin >> *(number+i);
sum += *(number + i);
}
cout << "陣列總和為:" << sum << endl;
return 0;
}


是使用指標


#include <iostream>
using namespace std;
const int maxSize = 5;
int  number[maxSize];

int main() {
int sum = 0;
int* ptr;
for (ptr = number; ptr <  &number[maxSize]; ptr++)
{
cout << "輸入第" << (ptr-number) << "個元素整數值:";
cin >> *ptr;
sum += *ptr;
}
cout << "陣列總和為:" << sum << endl;
return 0;
}



輸出結果















有一個二維陣列,儲存有 5 的學生的國文、英文、數學、物理、化學與總分 (須自行計算) 的成績。試使用指標將這 5 個學生的成績依總分高低,由高至低排列輸出


#include <iostream>
#include <iomanip>   // 為了使用 setw()
using namespace std;
const int rowSize = 5;
const int columnSize = 6;
void output(int *pointer[rowSize]);
void bubble_sort(int *pointer[rowSize], int colMaxSize);
int main() {
    int score[rowSize][columnSize] = {{45, 56, 88, 63, 79, 0},  // 國文, 英文, 數學, 物理, 化學, 總分
                                                          {13, 46, 71, 36, 43, 0},
                                                          {95, 76, 77, 63, 66, 0},
                                                          {47, 36, 67, 52, 79, 0},
                                                          {92, 87, 94, 92, 83, 0}};
    int* ptr[rowSize+1];
    int i, j;
    for (i = 0; i < rowSize; i++) 
        ptr[i] = score[i];

    for (i = 0; i < rowSize; i++)
        for (j = 0; j < columnSize; j++)
            *(ptr[i] + columnSize - 1) += *(ptr[i] + j);

    cout << "排序前:\n\n" ;
    output(ptr);
    cout << "\n";
    cout << "排序後:\n\n";
    bubble_sort(ptr, columnSize);
    output(ptr);
}

void output(int* pointer[rowSize])
{
    int i, j;
    cout << setw(5) << "國文" << setw(5) << "英文" << setw(5) << "數學" << setw(5) << "物理" 
            << setw(5) << "化學" << setw(5) << "總分" << endl;
    cout << setw(5) << "----" << setw(5) << "----" << setw(5) << "----" << setw(5) << "----" 
            << setw(5) << "----" << setw(5) << "----" << endl;

    for (i = 0; i < rowSize; i++) {
        for (j = 0; j < columnSize; j++) {
            cout << setw(5) << *(pointer[i] + j) << setw(5);
        }
        cout << endl;
    }
}

void bubble_sort(int* pointer[rowSize], int colMaxSize)
{
    int *temp;
    int i, j;
    for(i = rowSize-1; i >=1; i--)
        for (j = 0; j <= i - 1; j++) {
            if (*(pointer[j] + colMaxSize-1) < *(pointer[j + 1] + colMaxSize-1)) {
                temp = pointer[j+1];
                pointer[j + 1] = pointer[j];
                pointer[j] = temp;
            }              
        }
}


輸出結果

























留言

這個網誌中的熱門文章

三段式電子開關電路

陣列 (C++)

首數、尾數與位數

分壓偏壓 BJT 放大電路的直流分析及其近似解的條件

MOSFET 共汲極放大電路 (源極隨耦器) 小訊號分析

為什麼理想的 OPA 電壓放大器有虛短路與虛斷路現象

具有倒數計時自動回復功能的行人穿越道號誌控制電路