C++: Bài 20. Mảng (Array) một chiều


Đăng ký nhận thông báo về những video mới nhất

Giới thiệu và khai báo

Mảng (Array) một chiều hay còn gọi là mảng tuyến tính (thẳng) trong ngôn ngữ lập trình C là tập hợp các phần tử (hay biến) cùng kiểu dữ liệu, cùng tên và được cấp phát các vùng nhớ liên tiếp nhau trong bộ nhớ. Những phần tử này được gọi là phần tử mảng.

Một mảng một chiều được khai báo giống như cách khai báo một biến, khác ở điểm là sau tên mảng là cặp ngoặc vuông ([]) và bên trong cặp ngoặc vuông là một số nguyên dương thể hiện kích thước của mảng. Cú pháp tổng quát khai báo một mảng như sau:

kiểu_dữ_liệu tên_mảng [kích_thước];

Vòng lặp for là lựa chọn lý tưởng để thao tác với các mảng. Dưới đây sẽ trình bày một số ví dụ thể hiện cách xử lý mảng dùng cấu trúc for.

Ví dụ sau đây sẽ khai báo một mảng có tên là arr, gán giá trị cho các phần tử mảng rồi dùng vòng lặp for để in chúng:

#include<iostream>
using namespace std;

main() {
  int arr[3];

  arr[0] = 100;
  arr[1] = 300;
  arr[2] = 200;
  for (int i = 0; i < 5; i++)
    cout<<"arr["<<i<<"] = "<<arr[i]);

  return 0;
}

Khởi tạo mảng

Cách 1:

kiểu_dữ_liệu tên_mảng[kích_thước] = {giá_trị_0, giá_trị_1, ..., giá_trị_kích_thước - 1};

- Cách thức khởi tạo này thường dùng trong trường hợp kích_thước của mảng nhỏ.

kích_thước trong cách thức khởi tạo này có thể bỏ qua, không nhất thiết phải có.

Ví dụ:

int a[5]= {1, 2, 3, 4, 5}; //--> a[0]=1, a[1]=2, a[2]=3, a[3]=4, a[4]=5
hoc:
int b[]= {1, 2, 3, 4, 5}; //--> b[0]=1, b[1]=2, b[2]=3, b[3]=4, b[4]=5

Cách 2:

kiểu_dữ_liệu tên_mảng[kích_thước];
int i;
for(i=0; i<kích_thước; i++)
    tên_mảng[i]=giá_trị_khởi_tạo;

Cách thức khởi tạo này thường dùng trong trường hợp kích thước mảng lớn, khi đó thông thường các phần tử được khởi tạo cùng một giá trị.

Ví dụ:

#include<iostream>
using namespace std;

main(){

  float a[20];
  for(int i=0; i<20; i++)
    a[i] = 0.0; //khi to tt c các phn t ca mng đu nhn giá tr 0.

  return 0;
}

Nhập liệu cho mảng

Cú pháp:

for(int i=0; i<kích_thước; i++)
    cin >> Tên_mảng[i]);

Ví dụ:

  float a[20];
  for(int i=0; i<20; i++)
    cin >> a[i];

In dữ liệu mảng

Cú pháp:

for(biến_chạy = 0; biến_chạy < kích_thước; biến_chạy++)
    cout << Tên_mảng[Biến_chạy];

Ví dụ dưới đây sẽ in ra màn hình giá trị của 20 phần tử của mảng a, trong đó biến chạy là i:

//In d liu mng:
  for(int i=0; i<20; i++)
    cout << a[i];

Lưu ý: bạn không được gán mảng cho mảng và đây là quy tắc trong ngôn ngữ C, ví dụ như khi bạn khai báo int a[10], b[10]; thì bạn không được thực hiện câu lệnh gán a=b;, khi đó trình dịch sẽ báo lỗi.

Ví dụ tổng hợp về mảng một chiều

- Ví dụ sau nhập vào một mảng gồm 10 phần tử, sau đó hiển thị mảng vừa nhập ra màn hình. Chương trình được viết như sau:

#include<iostream>
using namespace std;

#define N 10 //hoặc đặt trong hàm main(): const int N=10;

main(){

  float a[N];

  cout<<"Nhap gia tri cho cac phan tu cua mang:"<<endl;
  for(int i=0; i<N; i++){
    cout<<"a["<<i<<"]: ";
    cin >> a[i];
  }

  cout<<"Cac phan tu cua mang vua nhap la:"<<endl;
  for(int i=0; i<N; i++){
    cout << a[i] <<endl;
  }

  return 0;
}

- Còn đây là ví dụ nhập vào một mảng M phần tử (M nhập từ bàn phím), sau đó hiển thị mảng vừa nhập ra màn hình.

#include<iostream>
using namespace std;

main(){

  int a[99], M;

  do {
    cout<<"Nhap vao so phan tu cua mang: ";
    cin>>M;
  }while(!(0<M && M<100));

  cout<<"Nhap lieu cho mang:\n";
  for(int i=0; i<M; i++) {
    cout<<"a["<<i<<"] = ";
    cin>>a[i];
  }

  cout<<"Du lieu cua mang la:"<<endl;
  for(int i=0; i<M; i++)
    cout<<"a["<<i<<"] = "<<a[i]<<endl;

  return 0;
}

Một kết quả thử nghiệm được thể hiện dưới đây:

Mảng một chiều - in kết quả

- Nhập vào một mảng n phần tử (n nhập từ bàn phím) sau đó sắp xếp các phần tử theo thứ tự tăng dần. Chương trình được viết như sau:

#include<iostream>
using namespace std;

main(){

  int n;
  float a[10], t;

  do{
    cout<<"Nhap vao so phan tu cua mang: ";
    cin>>n;
  }while(!(0<n && n<10));

  cout<<"Nhap gia tri cho tung phan tu:"<<endl;
  for(int i = 0; i < n; i++){
    cout<<"a["<<i<<"] = ";
    cin>>a[i];
  }
  //Sp xếp các phn t theo th t tăng dn
  for(int i = 0; i < n - 1; i ++){
    for(int j = i + 1; j < n; j++){
      if(a[i] > a[j]){ //(Nếu sp xếp theo th t gim → a[i]<a[j])
        t = a[i];
        a[i] = a [ j ];
        a[j] = t;
      }
    }
  }
  // In ra kết qu  for(int i = 0; i < n; i++)
    cout<<a[i]<<"\t";

  return 0;
}

- Ví dụ này sẽ thực hiện lại ví dụ trên nhưng chương trình được viết dưới dạng các hàm bao gồm các hàm sau:

+ Hàm dùng để nhập số lượng phần tử cho mảng.

+ Hàm nhập dữ liệu cho mảng.

+ Hàm sắp xếp các phần tử của mảng theo thứ tự tăng dần.

+ Hàm hiển thị mảng sau khi sắp xếp.

Dưới đây là đoạn mã thực hiện chương trình:

#include<iostream>
using namespace std;

void nhapN(int *n) { //hàm nhp s phn t mng
  cout<<"Nhap vao so phan tu cua mang: ";
  cin>>*n;
}

void nhapMang(float *a, int n) { //hàm nhp d liu cho mng
  int i;
  cout<<"Nhap gia tri cho tung phan tu:"<<endl;
  for(int i=0; i<n; i++) {
    cout<<"a["<<i<<"] = ";
    cin>>a[i];
  }
}

void sapXep(float a[], int n){ //hàm sp xếp
  int i,j,t;
  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;
      }
    }
  }
}

void hienThi(float a[], int n) { //hàm hin th  int i;
  cout<<"Sau khi sap xep, mang se co trat tu la:"<<endl;
  for(i=0; i<n;i++)
    cout<<a[i]<<"\t";
}

main() {
  int n;
  float a[20];

  nhapN(&n); //Nhp s lượng phn t cho mng
  nhapMang(a,n); //Nhp giá tr cho các phn t ca mng
  sapXep(a,n); //Sp xếp mng
  hienThi(a,n); //Hin th mng sau khi sp xếp

  return 0;
}

Nếu bạn có điều thắc mắc, bạn hãy comment cho V1Study để được giải đáp.
Bài viết này được chia sẻ bởi LongDT. Nếu bạn muốn chia sẻ bài viết, bạn hãy Đăng ký làm thành viên!
« Prev
Next »
Copied !!!