Số phần tử của mảng sau là bao nhiêu

Giới thiệu về cuốn sách này


Page 2

Giới thiệu về cuốn sách này

I.        Tóm tắt kiến thức

Định nghĩa: Mảng một chiều là một dãy hữu hạn các phần tử có cùng kiểu dữ liệu. Mảng được đặt tên và mỗi phần tử của nó có một chỉ số.

Tại sao phải dùng mảng một chiều để lưu trữ dữ liệu?

Để trả lời cho câu hỏi trên ta xét một ví dụ đơn giản sau:

Nhập vào nhiệt độ (trung bình) của mỗi ngày trong tuần, tính và đưa ra màn hình nhiệt độ trung bình của tuần số lượng ngày trong tuần có nhiệt độ cao hơn nhiệt độ trung bình của tuần?

Theo kiến thức đã học, ta sẽ khai báo 7 biến số7 câu lệnh If để giải quyết bài toán này.

Vậy nếu ta mở rộng phạm vi bài toán từ 7 ngày sang N ngày (với N=365 ngày) thì ta phải khai báo 365 biến và sử dụng 365 câu lệnh If.

 =>Số lượng biến phải dùng cho bài toán quá lớn và chương trình quá dài, làm cho người lập trình khó nhớ (nếu sử dụng các biến khác nhau(a,b,c,d,…) thay vì sử dụng các biến(t1,t2,t3,…) ).

Chúng ta có thể khắc phục điều này bằng cách sử dụng một kiểu dữ liệu mới: kiểu mảng một chiều.

Ví dụ ta có mô hình mảng một chiều sau:

17

20

18

25

19

12

19

1

2

3

4

5

6

7

A

Trong đó:

Tên mảng: A

Số phần tử của mảng là: 7

Kiểu dữ liệu của các phần tử: Kiểu nguyên

Khi tham chiếu đến phần tử thứ i ta viết A[i] ví dụ: A[5]=19.

=>Các thành phần của một mảng một chiều:

+ Tên mảng;

+Số lượng phần tử;

+Kiểu dữ liệu của mảng;

+Cách tham chiếu đến các phần tử.

Như vậy để làm việc với mảng một chiều thì ta phải thực hiện các bước sau:

Bước 1: Khai báo biến

Có 2 cách khai báo biến mảng:

Ø  Cách 1: Khai báo gián tiếp

TYPE nhietdo = array[1..7]of Integer;

Var A: nhietdo;

(Công thức chung:

TYPE = array[..] of ;

Var :;

Lưu ý:

Ø  Chỉ số đầu <= Chỉ số cuối

Ø  Chỉ số đầu, chỉ số cuối là hằng số hoặc biểu thức nguyên.

Ø  Giữa 2 chỉ số là dấu ..

)

Ø  Cách 2:Khai báo trực tiếp

Var A : array[1..7] of Integer;

(Công thức chung:

Var : array[..] of ;

 )

Bước 2: Nhập mảng

u  Bước 2.1: Nhập số phần tử của mảng

Write(‘Nhap so phan tu cua mang’);

Readln(n);

u  Bước 2.2: Nhập giá trị cho từng phần tử của mảng

For i := 1 to n do

Begin

Write(‘nhap phan tu thu’,i,’=’);

Readln(A[i]);

End;

==>Nên sử dụng cấu trúc lặp FOR…TO…DO để nhập tuần tự các giá trị của mỗi phần tử mảng từ phần tử đầu tiên cho tới phần tử cuối cùng. Với mỗi chỉ số i thì A[i] nhận một giá trị (với i=1,…,n).

Bước 3: In mảng

Writeln(‘Mang vua nhap la: ’);

For i := 1 to n do

Write(A[i]:5);

==>Nên sử dụng cấu trúc lặp FOR…TO…DO để xuất tuần tự các giá trị của mỗi phần tử mảng từ phần tử đầu tiên cho tới phần tử cuối cùng ra màn hình. Nên cho độ rộng giữa các phần tử.

(*

Một số thao tác xử lí khác:

Đếm các phần tử của mảng thỏa mãn điều kiện cho trước.

Tính tổng các phần tử của mảng thỏa mãn điều kiện cho trước.

*)

Bước 4: Tính nhiệt độ trung bình của tuần và đếm số ngày có nhiệt độ trung bình lớn hơn nhiệt độ trung bình của tuần.

Đề xuất thuật toán:

B1: Tính nhiệt độ trung bình;

B2: Khởi tạo giá trị biến đếm;

B3: duyệt lần lượt tất cả các phần tử trong mảng và xét: Nếu A[i]>TB thì biến đếm tăng lên 1 đơn vị;

==>Các lệnh tương ứng của ngôn ngữ lập trình

    Tong :=0;

For i :=1 to n do

Tong := Tong+A[i];

Tb := Tong/n;

Dem :=0;

For i :=1 to n do

if A[i] > Tb then Dem := Dem+1;

Writeln(‘Nhiet do trung binh tuan:’,Tb:4:1);

Writeln(‘So ngay co nhiet do trung binh cao hon nhiet do trung binh cua tuan la:’,Dem);

Mở rộng bài toán:

Tính tổng các phần tử của mảng chia hết cho 3.

Tìm phần tử lớn nhất của mảng.

Tìm phần tử nhỏ nhất của mảng.

Sắp xếp mảng đã cho theo trình tự không giảm.

Tìm vị trí phần tử trong mảng có giá trị chia hết cho 1 số nguyên k bất kì được nhập từ bàn phím.

….

Tổng kết

Ø  Mảng một chiều là một dãy hữu hạn các phần tự cùng kiểu.

Ø  Khai báo: tên mảng, chỉ số đầu, chỉ số cuối, kiểu phần tử.

Ø  Tham chiếu phần tử của mảng: Tên biến mảng[chỉ số phần tử]

Ø  Nhiều thao tác xử lí mảng dùng cấu trúc lập FOR..TO..DO

Yêu cầu: học sinh xem lại một số thuật toán đã được học trong chương trình tin học lớp 10 như tìm số lớn nhất, nhỏ nhất, sắp xếp, tìm kiếm tuần tự, …

II.     Bài tập

1. Viết chương trình nhập vào một dãy số nguyên n phần tử với n nguyên dương bất kì được nhập từ bàn phím.

In dãy số đã nhập ra màn hình.

Tìm phần tử lớn nhất trong dãy số đã nhập và xuất ra màn hình.

Sắp xếp dãy số đã nhập theo trình tự không giảm (dùng thuật toán tráo đổi).

nh giá trị trung bình của dãy số nguyên đã nhập.

2.Viết chương trình nhập dãy n số và in ra tổng các số lẻ trong dãy số vừa nhập với n nguyên dương được nhập từ bàn phím.

3.Viết chương trình nhập n số, xoá số thứ k trong n số vừa nhập.In ra n-1 số còn lại.

n= 10 (Nhập 10 phần tử)

Ví dụ: Nhập 2, 3, 4, 5, 6, 8, 7, 6, 5, 4.

k= 8 (Xoá phần tử thứ 8).

In ra: 2, 3, 4, 5, 6, 8, 7, 5, 4.

4. Viết chương trình cho phép nhập một dãy gồm n số nguyên.

Nhập thêm một số và chèn thêm vào dãy sau phần tử thứ k.

(với k,n nguyên dương được nhập từ bàn phím).

5.Viết chương trình cho phép nhập một dãy gồm n số nguyên . Xuất ra giá trị phần tử lớn nhất của mảng và vị trí của phần tử đó trong mảng.(n nguyên dương nhập từ bàn phím).

6.Viết chương trình cho phép nhập một dãy gồm n số nguyên . Xuất ra giá trị phần tử nhỏ nhất của mảng và vị trí của phần tử đó trong mảng.(n nguyên dương nhập từ bàn phím).

 7. Viết chương trình cho phép nhập một dãy gồm n số nguyên. Xuất ra các phần tử có giá trị là những số chẵn.(n nguyên dương nhập từ bàn phím).

8. Viết chương trình cho phép nhập một dãy gồm n số nguyên. Xuất ra các phần tử có giá trị là những số lẻ.(n nguyên dương nhập từ bàn phím).

9.Viết chương trình in dãy n số fibonacy.

10.Viết chương trình in ra màn hình giai thừa của n.

Ví dụ: n! = 1.2.3.4.5.6…n

(n nguyên dương nhập từ bàn phím).

11.Tạo mảng A gồm n (n<=100) số nguyên, mỗi số có giá trị tuyệt đối không vượt quá 300. Tính tổng các phần tử của mảng là bội số của một số nguyên dương k cho trước. 

Trong bài này chúng ta sẽ học cách sử dụng mảng 1 chiều và mảng 2 chiều trong lập trình c. Một mảng được sử dụng để lưu trữ tập hợp dữ liệu, nhưng nó rất hữu dụng nếu bạn nghĩ về một mảng các biến với cùng một kiểu.

Bài 12 Trong Học lập trình C từ A tới Z

Mảng là gì?

Mảng (Array) là một tập hợp tuần tự các phần tử có cùng kiểu dữ liệu và các phần tử được lưu trữ trong một dãy các ô nhớ liên tục trên bộ nhớ. Các phần tử của mảng được truy cập bằng cách sử dụng “chỉ số”. Mảng có kích thước N sẽ có chỉ số từ 0 tới N – 1.

Thay vì khai báo biến một cách rời rạc, như biến number0, number1,… và number99, bạn có thể khai báo một mảng các giá trị như numbers[0], numbers[1] và … numbers[99] để biểu diễn các giá trị riêng biệt. Một thành phần cụ thể của mảng có thể được truy cập qua index (chỉ số).

Tất cả mảng đều bao gồm các vị trí nhớ liền kề nhau. Địa chỉ thấp nhất tương ứng với thành phần đầu tiền và địa chỉ cao nhất tương ứng với thành phần cuối cùng của mảng.

Cú pháp khai bảo mảng 1 chiều

Số phần tử của mảng sau là bao nhiêu

Trong đó:

  • Array vriable: là tên mảng
  • index là trị số của mảng, chính là vị trí trong mảng

VD: Khai báo mảng không có giá trị int sohangban[10];

Khai báo mảng có giá trị: int sohangban[5] = {34, 56, 23, 124, 67};

Số lượng các giá trị trong dấu ngoặc kép {} không được lớn hơn số lượng phần tử khai báo trong dấu ngoặc vuông [].

Nếu bạn bỏ sót kích cỡ mảng thì mảng đó đủ lớn để giữ các giá trị được khởi tạo: int sohangban[] = {34, 56, 23, 124, 67};

Truy cập các phần tử mảng 1 chiều trong C

Một mảng được truy cập bởi cách đánh chỉ số trong tên của mảng. Dưới đây là một cách truy cập một giá trị của mảng:

int luonghangban = sohangban[9];

Ngoài ra chúng ta cũng có thể truy cập mảng bằng con trỏ, sẽ học vào những phần sau

Ví dụ: Nhập và in ra hàm

#include int main () { int n[ 10 ]; /* mang n gom 10 so nguyen */ int i,j; /* khoi tao cac phan tu trong mang ve gia tri 0 */ for ( i = 0; i < 10; i++ ) { n[ i ] = i + 100; /* Thiet lap phan tu tai vi tri i thanh i + 100 */ } /* hien thi gia tri cac phan tu trong mang */ for (j = 0; j < 10; j++ ) { printf("Phan tu [%d] = %d\n", j, n[j] ); } return 0; }

Kết quả

Số phần tử của mảng sau là bao nhiêu

Bài tập nhập, tìm kiếm và in ra phần tử của mảng

Trong bài này, chúng ta sẽ học cách nhập phần tử vào mảng, tìm kiếm và in ra

#include const int MAX = 100; void NhapMang(int a[], int n){ for(int i = 0;i < n; ++i){ printf("\nNhap phan tu a[%d] = ", i); scanf("%d", &a[i]); } } void XuatMang(int a[], int n){ for(int i = 0;i < n; ++i){ printf("\nPhan tu a[%d] = %d", i, a[i]); } } int TimKiem(int a[], int n, int v){ for(int i = 0;i < n; ++i){ if(a[i] == v){ return i; } } return -1; } int main(){ int arr[MAX]; int n; printf("\nNhap so luong phan tu: "); do{ scanf("%d", &n); if(n <= 0 || n > MAX){ printf("\nNhap lai so luong phan tu: "); } }while(n <= 0 || n > MAX); printf("\n======NHAP MANG=====\n"); NhapMang(arr, n); printf("\n======XUAT MANG=====\n"); XuatMang(arr, n); printf("\n======TIM KIEM======\n"); int v; printf("\nNhap vao gia tri can tim: "); scanf("%d", &v); printf("\nTim thay so %d tai chi so %d!", v, TimKiem(arr, n, v)); }

Kết quả

Nhap so luong phan tu: 6 ======NHAP MANG===== Nhap phan tu a[0] = 1 Nhap phan tu a[1] = 2 Nhap phan tu a[2] = 5 Nhap phan tu a[3] = 7 Nhap phan tu a[4] = 8 Nhap phan tu a[5] = 2 ======XUAT MANG===== Phan tu a[0] = 1 Phan tu a[1] = 2 Phan tu a[2] = 5 Phan tu a[3] = 7 Phan tu a[4] = 8 Phan tu a[5] = 2 ======TIM KIEM====== Nhap vao gia tri can tim: 5 Tim thay so 5 tai chi so 2!

Khai báo mảng đa chiều trong lập trình C

Mảng đa chiều (multi-dimensional array) là một biến thể của mảng, trong đó mảng 3 chiều được sử dụng nhiều nhất, rất phù hợp để truy cập như một bảng dữ liệu. Thực chất mảng đa chiều cũng là mảng một chiều nhưng khai báo khác nhau 1 chút mà thôi

Số phần tử của mảng sau là bao nhiêu

Cú pháp khai báo: type arr[row_size][column_size];

Khi khởi tạo mảng 2 chiều có 2 phương pháp khới tạo giá trị.

Khởi tạo kiểu mảng 1 chiều

int x[3][4] = {0, 1 ,2 ,3 ,4 , 5 , 6 , 7 , 8 , 9 , 10 , 11}

Khởi tạo kiểu mảng đa chiều

int x[3][4] = {{0,1,2,3}, {4,5,6,7}, {8,9,10,11}};

Ví dụ: Nhập mảng 2 chiều

#include int main () { int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}}; // hien thi gia tri cua cac phan tu trong mang for ( int i = 0; i < 5; i++ ) for ( int j = 0; j < 2; j++ ) { printf("Gia tri cua a[%d][%d] = %d\n",i,j,a[i][j]); } return 0; }

Kết quả

Số phần tử của mảng sau là bao nhiêu

Bài tập nhập, tìm kiếm và xuất giá trị mảng 2 chiều

Trong bài này, chúng ta sẽ học cách nhập phần tử vào mảng, tìm kiếm và in ra

#include #include void NhapMaTran(int a[][100], int m, int n) { for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) { printf("A[%d][%d] = ", i, j); scanf("%d", &a[i][j]); } } void XuatMaTran(int a[][100], int m, int n) { for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) printf("%d\t", a[i][j]); printf("\n"); } } std::pair TimKiem(int a[][100], int m, int n, int v){ for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) if(a[i][j] == v) return {i, j}; } return {-1, -1}; } int main(){ int a[100][100]; int m,n; printf("nhap so hang n = "); scanf("%d",&n); printf("nhap so cot m = "); scanf("%d",&m); printf("nhap vao ma tran:\n"); NhapMaTran(a, m , n); XuatMaTran(a, m, n); int v; printf("\nNhap vao gia tri can tim: "); scanf("%d", &v); std::pair rs = TimKiem(a, m, n, v); printf("\nTim thay so %d tai hang %d, cot %d!", v, rs.first, rs.second); }

Kết quả

nhap so hang n = 4 nhap so cot m = 3 nhap vao ma tran: A[0][0] = 1 A[0][1] = 2 A[0][2] = 3 A[0][3] = 4 A[1][0] = 5 A[1][1] = 6 A[1][2] = 7 A[1][3] = 8 A[2][0] = 1 A[2][1] = 21 A[2][2] = 4 A[2][3] = 44 1 2 3 4 5 6 7 8 1 21 4 44 Nhap vao gia tri can tim: 6 Tim thay so 6 tai hang 1, cot 1!

Kết

Mảng 1 chiều và mảng 2 chiều được sử dụng rất nhiều khi lưu trữ dữ liệu, đây cũng là một kiểu dữ liệu trong cấu trúc dữ liệu mà các bạn sẽ học ở những phần sau.

Nếu thấy có ích hãy chia sẻ bài viết và tham gia nhóm Nghiện Lập Trình để giao lưu và học hỏi nhé