[Tự học lập trình C] Mảng một chiều

[Tự học lập trình C] Cấu trúc chương trình C

[Tự học lập trình C] Hằng - biến - toán tử - biểu thức trong ngôn ngữ lập trình C

[Tự học lập trình C] Nhập xuất dữ liệu trong ngôn ngữ lập trình C

[Tự học lập trình C] Câu lệnh điều khiển rẽ nhánh

[Tự học lập trình C] Câu lệnh lặp với số lần xác định trong ngôn ngữ C.

[Tự học lập trình C] Câu lệnh lặp với số lần không xác định trước

[Tự học lập trình C] Chương trình con và hàm

[Tự học lập trình C] Mảng một chiều

Mảng 1 chiều là tập hợp các phần tử có cùng kiểu dữ liệu. Giả sử bạn muốn lưu n số nguyên để tính trung bình, bạn không thể khai báo n biến để lưu n giá trị rồi sau đó tính trung bình.
Ví dụ 1 : Tính trung bình 10 số nguyên nhập vào từ bàn phím, bạn sẽ khai báo 10 biến: a, b, c, d, e, f, g, h, i, j có kiểu int và lập thao tác nhập cho 10 biến này như sau:
       printf("Nhap vao bien a: ");
       scanf("%d", &a);
      10 biến bạn sẽ thực hiện 2 lệnh trên 10 lần, sau đó tính trung bình:
      (a + b + c + d + e + f + g + h + i + j)/10
       Điều này chỉ phù hợp với n nhỏ, còn đối với n lớn thì khó có thể thực hiện được. Vì vậy, khái niệm mảng được sử dụng.
Khai báo
Ví dụ 2 : int ia[10]; với int là kiểu của mảng, ia là tên mảng, 10 là số phần tử của mảng, tức mảng ia có tối đa 10 phần tử
Ý nghĩa: Khai báo một mảng số nguyên gồm 10 phần tử, mỗi phần tử có kiểu int.
Các phần tử của mảng ia được mô tả như sau:
Mảng 10 phần tử nguyên - tinhoccoban.net
Mảng 10 phần tử nguyên

Từ ví dụ 2 ta có cú pháp khai báo mảng như sau:
Tên_kiểu tên_biến[spt];
Diến giải:
- Tên_kiểu là tên  của kiểu dữ liệu mà bạn muốn khai báo cho mảng
- Tên_biến là tên của mảng mà bạn muốn khai báo
- Spt: là số phần tử tối đa của mảng mà bạn muốn khai báo hay còn gọi là kích thức của mảng
 Tham chiếu đến từng phần tử mảng
Sau khi mảng được khai báo, mỗi phần tử trong mảng đều có chỉ số để tham chiếu. Chỉ số bắt đầu từ 0 đến n-1 (với n là kích thước mảng). Trong ví dụ 2, ta khai báo mảng 10 phần tử thì chỉ số bắt đầu từ 0 đến 9.
Mảng được đánh số bắt đầu từ 0 - tinhoccoban.net
Mảng được đánh số bắt đầu từ 0 

Như vậy, để truy xuất đến phần tử thứ i trong mảng ia ta viết ia[i], trong đó i chỉ được phép nhận một trong các giá trị từ 0 đến 9 vì mảng ia được khia báo chỉ có 10 phần tử
Nhập dữ liệu cho mảng
Mảng là một dãy các phần tử có cùng kiểu dữ liệu, việc nhập dữ liệu cho từng phần tử của mảng cũng giống như nhập dữ liệu cho biến thông thường
Ví dụ 3
for (i = 0; i < 10; i++) //vòng for có giá trị i chạy từ 0 đến 9
{
printf("Nhap vao phan tu thu %d: ", i + 1);
scanf("%d", &ia[i]);
}
Ví dụ 4: Viết chương trình nhập vào n số nguyên. Tính và in ra trung bình cộng.
#include <stdio.h>
#include <conio.h>
void main(void)
{
int ia[50], i, in, isum = 0;
printf("Nhap vao gia tri n: ");
scanf("%d", &in);
//Nhap du lieu vao mang
for(i = 0; i < in; i++)
{
printf("Nhap vao phan tu thu %d: ", i + 1);
scanf("%d", &ia[i]); //Nhap gia tri cho phan tu thu i
}
//Tinh tong gia tri cac phan tu
for(i = 0; i < in; i++)
       isum += ia[i]; //cong don tung phan tu vao isum
printf("Trung binh cong: %.2f\n", (float) isum/in);
getch();}
Ví dụ 5: Có 4 loại tiền 1, 5, 10, 25 và 50 đồng. Hãy viết chương trình nhập vào số tiền sau đó cho biết số số tiền trên gồm mấy loại tiền, mỗi loại bao nhiêu tờ
#include <stdio.h>
#include <conio.h>
#define MAX 5
void main(void)
{
int itien[MAX] = {50, 25, 10, 5, 1}; //Khai bao va khoi tao mang voi 5 phan tu
int i , isotien, ito;
printf("Nhap vao so tien: ");
scanf("%d", &isotien); //Nhap vao so tien
for (i = 0; i < MAX; i++)
{
ito = isotien/itien[i]; //Tim so to cua loai tien thu i
printf("%4d to %2d dong\n", ito, itien[i]);
isotien = isotien%itien[i]; //So tien con lai sau khi da loai tru cac loai tien da co
}
getch();
}
Đọc dữ liệu từ mảng
Việc đọc dữ liệu của mảng chúng ta cần chỉ rõ là cần đọc dữ liệu của phần tử thứ mấy trong mảng
Ví dụ 5:
for(i = 0; i < 10; i++)
printf("%3d ", ia[i]);
Sử dụng biến mảng
Ngoài kiểu int, bạn có thể khai báo mảng kiểu char, float, double…
Ví dụ 6: char cloai[20]; float ftemp[10];
Cách tham chiếu, nhập dữ liệu, đọc dữ liệu thực hiện như trên.
Bài tập thực hành.
Xây dựng các hàm để thực hiện các công việc sau
- Hàm Khoi_tao cho phép nhập vào một mảng gồm n phần tử số nguyên
- Hàm In_xuôi và hàm In_nguoc cho phép in mảng ra màn hình theo thứ tự xuôi và ngược
- Hàm Tim_max và hàm Tim_min để tìm giá trị nhỏ nhất và lớn nhất của mảng
- Hàm Tinh_tong cho phép Tính tổng các giá trị trong mảng
- Hàm Tinh_tong_duong và hàm Tinh_tong_am cho phép tính tổng các phần tử có giá trị dương và âm trong mảng
- Hàm Sap_xep_tang và hàm Sap_xep_giam để sắp xếp mảng theo thứ tự tăng dần và giảm dần
- Xây dựng chương trình chính gồm 1 menu như sau:
----------------------------------------------------
MENU CHUONG TRINH
---------------------------------------------------
1: Khoi tao mang
2: In mang ra man hinh
3: In mang dao nguoc ra man hinh
4: Tim gia tri max cua mang
5: Tim gia tri min cua mang
6: Tinh tong
7: Tinh tong cac phan tu duong
8: Tinh tong cac phan tu am
9: Sap xep tang dan
10 Sap xep giam dan
11: Thoat
Moi ban chon so tuong ung:
Khi người sử dụng chọn 1 số tương ứng của mục tương ứng của menu thì gọi đến hàm tương ứng đó để thực hiện
Gợi ý:
- Xây dựng tất cả các hàm tương ứng với yêu cầu của đề bài
- Xây dựng thêm hàm có tên gọi là inmenu để in ra menu như yêu cầu
- Viết hàm main, đầu tiên là gọi hàm inmenu, tiếp đến dùng lệnh switch theo mẫu
switch (ichon){
            case 1: gọi hàm khoi tạo mảng
                        break;
            case 2: gọi hàm in mảng ra màn hình
                        break;            …
case 10: gọi hàm sắp xếp giảm dần
}
Lưu ý, chương trình chỉ đóng lại khi người sử dụng chọn số 11 (dùng vòng lặp bao bên ngoài lệnh switch, điều kiện dừng khi người sử dụng nhấn số 11).
Ví dụ có video:
Viết chương trình C/C++ nhập vào một mảng n số nguyên sau đó tính tổng các số chia hết cho 3 trong mảng. Tính tổng của các số nằm trong khoảng [10,20]




Bài tập có lời giải:
1
2
3
4
5

6
7

9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
----------------------------------------------------------------------------------------------------------------
Mới hơn Cũ hơn

Biểu mẫu liên hệ