Lập Trình C: Mảng (Array) Một Chiều | V1Study

Video tham khảo

1. Cách nhập liệu cho mảng 1 chiều

2. Cách xóa phần tử khỏi mảng

3. Cách sắp xếp mảng

4. Cách tìm max, min bằng phương pháp sắp xếp

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 forlà 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<stdio.h> main() { int arr[3]; int i; arr[0] = 100; arr[1] = 300; arr[2] = 200; for (i = 0; i < 5; i++) printf("\n arr[%d] = %d", 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ụ:

float a[20]; int i; for(i=0; i<20; i++) a[i] = 0.0; //khởi tạo tất cả các phần tử của mảng đều nhận giá trị 0.

Nhập liệu cho mảng

Cú pháp:

int i; for(i=0; i<Kích_thước; i++) scanf("%Định_dạng", &Tên_mảng[i]);

Ví dụ:

int i; for(i=0; i<20; i++) scanf("%f", &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++) printf("\n%Định_dạng", 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:

for(i=0; i<20; i++) printf("%f", 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 <stdio.h> #define N 10 //hoặc: const int N=10; main() { int a[N], i; printf("\nNhap gia tri cho cac phan tu cua mang:\n"); for(i=0; i<N; i++) { //dùng vòng lặp để nhập liệu cho mảng printf("\na[%d]= ", i); scanf("%d", &a[i]); } printf("\nCac phan tu cua mang vua nhap la:\n"); for(i=0; i<N; i++) //rồi cũng dùng vòng lặp for để in dữ liệu mảng printf("\na[%d]= %d", i, a[i]); 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 <stdio.h> main() { int a[99], i, M; do { printf("\nNhap vao so phan tu cua mang: "); scanf("%d", &M); }while(!(0<M && M<100)); printf("\nNhap lieu cho mang:\n"); for(i=0; i<M; i++) { printf("\na[%d]= ", i); scanf("%d", &a[i]); } printf("\nDu lieu cua mang la:\n"); for(i=0; i<M; i++) printf("\na[%d] = %d", i, a[i]); 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<stdio.h> main(){ int n, i, j; float a[10], t; printf("Nhap vao so phan tu cua mang: "); scanf("%d",&n); printf("\nNhap gia tri cho tung phan tu:"); for(i = 0; i < n; i++){ printf("\na[%d] = ", i); scanf("%f", &a[i]); } //Sắp xếp các phần tử theo thứ tự tăng dần for(i = 0; i < n - 1; i ++){ for(j = i + 1; j < n; j++){ if(a[i] > a[j]){ //(Nếu sắp xếp theo thứ tự giảm → a[i]<a[j]) t = a[i]; a[i] = a [ j ]; a[j] = t; } } } // In ra kết quả for(i = 0; i < n; i++) printf("%5g", a[i]); 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 <stdio.h> void nhapN(int *n) { //hàm nhập số phần tử mảng printf("\nNhap vao so phan tu cua mang: "); scanf("%d", &*n); } void nhapMang(float *a, int n) { //hàm nhập dữ liệu cho mảng int i; printf("\nNhap gia tri cho tung phan tu:"); for(i=0; i<n; i++) { printf("\na[%d] = ", i); scanf("%f", &a[i]); } } void sapXep(float a[], int n){ //hàm sắp 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 hiển thị int i; printf("\nSau khi sap xep, mang se co trat tu la:"); for(i=0; i<n;i++) printf("\n%g", a[i]); } main() { int n; float a[20]; nhapN(&n); //Nhập số lượng phần tử cho mảng nhapMang(a,n); //Nhập giá trị cho các phần tử của mảng sapXep(a,n); //Sắp xếp mảng hienThi(a,n); //Hiển thị mảng sau khi sắp xếp return 0; }

Từ khóa » Khởi Tạo Mảng C