Mảng một chiều

0
2462

Trong lập trình việc sử dụng mảng một chiều là điều thiết yếu, sau đây sinhvientot.net sẽ gởi đến các bạn cách thức để làm chủ mảng một chiều…

Định nghĩa và khai báo mảng 1 chiều

Khái niệm

  • Là một kiểu dữ liệu có cấu trúc do người lập trình định nghĩa.
  • Biểu diễn một dãy các biến có cùng kiểu. Ví dụ: dãy các số nguyên, dãy các ký tự…
  • Kích thước được xác định ngay khi khai báo và không bao giờ thay đổi.
  • NNLT C luôn chỉ định một khối nhớ liên tục cho một biến kiểu mảng.

Khai báo biến mảng (tường minh)

  • Tường minh
    • <N1>, …, <Nn> : số lượng phần tử của mỗi chiều.
  • Lưu ý
    • Phải xác định <số phần tử> cụ thể (hằng) khi khai báo.
    • Bộ nhớ sử dụng = <tổng số phần tử>*sizeof(<kiểu cơ sở>)
    • Một dãy liên tục có chỉ số từ 0 đến <tổng số phần tử>-1

Ví dụ:

image002

Khai báo biến mảng (không tường minh)

  • Cú pháp
    • Không tường minh (thông qua khai báo kiểu)
typedef <kiểu cơ sở> <tên kiểu mảng>[<số phần tử>];
typedef <kiểu cơ sở> <tên kiểu mảng>[<N1>]…[<Nn>];
<tên kiểu mảng> <tên biến mảng>;
VD: typedef int Mang1Chieu[10];

Số phần tử của mảng

  • Phải xác định cụ thể số phần tử ngay lúc khai báo, không được sử dụng biến hoặc hằng thường
int n1 = 10; int a[n1];
const int n2 = 20; int b[n2];
  • Nên sử dụng chỉ thị tiền xử lý #define để định nghĩa số phần tử mảng
#define n1 10
#define n2 20
int a[n1];                    // <=> int a[10];
int b[n1][n2];            //  <=>  int b[10][20];

 

image004

Khởi tạo giá trị cho mảng lúc khai báo

  • Gồm các cách sau
    • Khởi tạo giá trị cho mọi phần tử của mảng
image005
  • Khởi tạo giá trị cho một số phần tử đầu mảng
image007
  • Khởi tạo giá trị 0 cho mọi phần tử của mảng
image008
  • Tự động xác định số lượng phần tử
image009

Truy xuất đến một phần tử

image010

Gán dữ liệu kiểu mảng

  • Không được sử dụng phép gán thông thường mà phải gán trực tiếp giữa các phần tử tương ứng
image011
  • Ví dụ: Nhập mảng có n phần tử kiểu nguyên, in ra các phần tử của mảng
    • Cách 01: viết trong hàm main
#include <stdio.h>
#define MAX 1000
void main()
{
	int ary[MAX];
	int i,n;
	printf("\nNhap so phan tu cho mang n = ");
	scanf("%d",&n);
	printf("\nNhap gia tri cho cac phan tu mang");
	for(i=0; i<n; i++)
	{
		printf("\n Enter value: %d : ", i+1);
		scanf("%d",&ary[i]);
	}
	printf("\n Xuat mang");
	for(i=0; i<n; i++)
		printf("a[%d]=%d\n",i, ary[i]);
}

Cách 02: viết trong hàm con, đứng trong hàm main gọi hàm con

//Bước 1: Tạo một Project mới
//Bước 2: Khai báo thêm các thư viện cơ bản cho chương trình.
#include <conio.h>
#include <stdio.h>
//Bước 3: Khai báo hằng số cho chương trình.
#define MAXSIZE 1000
//Bước 4: Viết các khai báo nguyên mẫu hàm(prototype) cho chương trình như sau:
void NhapMang1C_SoNguyen(int a[], int &n);
void XuatMang1C_SoNguyen(int a[], int n);
//Bước 5: Viết hàm main để thực thi chương trình.
void main()
{
	int A[MAXSIZE];
	int N;
	NhapMang1C_SoNguyen(A, N);
	printf("\nNoi dung cua mang la: ");
	XuatMang1C_SoNguyen(A, N);
	_getch();
}
//Bước 6: Viết các định nghĩa hàm cần thiết cho chương trình như sau:
void NhapMang1C_SoNguyen(int a[], int &n)
{	
        printf("Cho biet so phan tu cua mang: ");
	scanf_s("%d", &n);
	for(int i=0; i<n; i++)
	{
		printf("Gia tri phan tu a[%d]=", i);
		scanf_s("%d", &a[i]);
	}
}
//=======================================================================
void XuatMang1C_SoNguyen(int a[], int n)
{
	for(int i=0; i<n; i++)
		printf("%4d", a[i]);
}

Những thao tác trên mảng:

image013
Ví dụ:
image015
 Tham số mảng của một hàm
image017
Bài tập mẫu
Bài 1: Viết chương trình nhập các giá trị cho mảng 1 chiều chứa các số thực, sau đó xuất mảng vừa nhập (Lưu ý: Viết chương trình dạng hàm).
Yêu cầu:
  • Viết 2 hàm con Nhập và Xuất mảng 1 chiều chứa các số thực.
  • Gọi thực hiện 2 hàm con trong hàm main.
Hướng dẫn:
Bước 1: Tạo một Project mới => đặt tên: Mang1C_BaiTapMau1_<Tên sinh viên>,
Ví dụ Mang1C_BaiTapMau1_NguyenVanTeo
Bước 2: Khai báo thêm các thư viện cơ bản cho chương trình.
#include <conio.h>
#include <stdio.h>
Bước 3: Khai báo hằng số cho chương trình.
#define MAXSIZE 1000
Bước 4: Viết các khai báo nguyên mẫu hàm cho chương trình như sau:
void NhapMang1C_SoThuc(float a[], int &n);
void XuatMang1C_SoThuc(float a[], int n);
Bước 5: Viết hàm main để thực thi chương trình.
void main()
{
float A[MAXSIZE];
int N;
NhapMang1C_SoThuc(A, N);
printf(“\nNoi dung cua mang la: “);
XuatMang1C_SoThuc(A, N);
_getch();
}
Bước 6: Viết các định nghĩa hàm cần thiết cho chương trình như sau:
void NhapMang1C_SoThuc(float a[], int &n)
{
printf(“Cho biet so phan tu cua mang: “);
scanf_s(“%d”, &n);
for(int i=0; i<n; i++)
{
printf(“Gia tri phan tu a[%d]=”, i);
scanf_s(“%f”, &a[i]);
}
}
//=======================================================================
void XuatMang1C_SoThuc(float a[], int n)
{
for(int i=0; i<n; i++)
printf(“%4f”, a[i]);
}

Bài tập: Cho một mảng 1 chiều chứa các số nguyên. Hãy viết một chương trình tổng hợp dạng hàm với yêu cầu sau:

1 Tạo một mảng 1 chiều chứa các số nguyên.
2 Xuất một mảng 1 chiều chứa các số nguyên.
3 Tính tổng các giá trị mảng.
4 Tính giá trị trung bình các phần tử trong mảng.
5 Tìm giá trị lớn nhất trong mảng.
6 Tính tổng chẵn trong mảng.
7 Tìm số chẵn lớn nhất trong mảng.
8 Tìm số nguyên tố nhỏ nhất trong mảng.
9 Tìm vị trị của giá trị x trong mảng, x nhập từ phím.
10 Tìm vị trí phần tử nhỏ nhất trong mảng.
11 Đếm phần tử dương trong mảng.
12 Đếm số lần phần tử x xuất hiện trong mảng.
13 Đếm số nguyên tố trong mảng.
14 Xuất ra danh sách các phần tử ở vị trí chẵn trong mảng.
15 Tìm “vị trí của giá trị chẵn đầu tiên” trong mảng 1 chiều các số nguyên. Nếu mảng không có giá trị chẵn nào thì trả về -1.
16 Đảo ngược các giá trị mảng.
17 Kiểm tra tính đối xứng của mảng. Nếu mảng không đối xứng thì trả về -1.
18 Viết hàm tìm giá trị phần tử xuất hiện nhiều nhất trong mảng, nếu có nhiều phần tử có số lần xuất hiện bằng nhau thì xuất phần tử đầu tiên.
19 Viết hàm kiểm tra mảng có phải là mảng tăng không.
Xem thêm các bài viết sau

This site uses Akismet to reduce spam. Learn how your comment data is processed.