You are on page 1of 10

Bài 2:

LẬP TRÌNH C CĂN BẢN - Mảng

I. MỤC ĐÍCH YÊU CẦU:


- Phân tích yêu cầu, xây dựng giải thuật và viết code theo yêu cầu.
- Xây dựng những chương trình cơ bản bằng ngôn ngữ C/C++.
- Hình thành kỹ năng phát hiện và sửa lỗi khi lập trình.
II. HƯỚNG DẪN LÝ THUYẾT:
2.1. Mảng:
a) Khai báo mảng:
Cú pháp khai báo :

 Mảng 1 chiều : type name[n]; //name là tên mảng, type là kiểu dữ liệu của phần tử, n là số phần
tử của mảng.

 Mảng nhiều chiều : type name[i1][i2]...[in]; //n là số chiều của mảng.


VD : int a[4]; //mảng 1 chiều 4 phần tử, phần tử có kiểu interger.
int b[3][3]; //mảng 2 chiều 3x3.
b) Gán giá trị và truy xuất phần tử:
Muốn gán giá trị cho mảng, ta phải gán giá trị cho từng phần tử một. Để truy xuất đến từng phần
tử của mảng, ta dùng cú pháp :
name[i1][i2]…[in] = Value; //name là tên mảng, i1,i2,…,in là vị trí của phần tử trong
mảng.
VD : b[0][0] = 5;
Gán trực tiếp: khi đã biết các giá trị phần tử của mảng, ta có thể gán giá trị trực tiếp cho mảng mà
không cần gán giá trị cho từng phần tử riêng lẻ bằng cách liệt kê tất cả các giá trị phần tử trong dấu
{...},các giá trị cách nhau bởi dấu ",".
name = {a1,a2,a3....}; //a1,a2,a3,...an lần lượt là giá trị của phần tử trong mảng.
hoặc
name = {{a1,...,an},{b1,...bn},{....}}; // a1...an lần lượt là giá trị của phần tử thuộc hàng
thứ 1 trong mảng nhiều chiều.
VD : int a[5] = {1,2,3,4,5};
int b[3][2] = {1,2,3,4,5,6};
int c[3][3] = {{1,2,3},{4,5,6},{5,6,7}};
Trong trường hợp mảng có nhiều phần tử, ta có thể gán giá trị cho mảng dùng cấu trúc lặp for:
VD :

 Mảng số nguyên N 1 chiều có giá trị lần lượt từ 1->9:


int N[9];
for (int i = 0; i<9; i++)
{
N[i] = i+1;
}

 Mảng số nguyên M (3x3) có giá trị lần lượt từ 1->9:


int M[3][3];
for (int i = 0; i<3; i++)
{
for (int j =0; j<3; j++)
{
M[i][j] = 3*i+j+1;
}
}
2.2. Các bài toán trên mảng:
a) Xuất mảng ra màn hình:
Muốn xuất giá trị của mảng ra màn hình, ta phải xuất từng phần tử một. Do đó, ta sẽ dùng cấu
trúc lặp for:
VD :

 Mảng số nguyên M (3x3) có giá trị lần lượt từ 1->9:


int M[3][3] = {1,2,3,4,5,6,7,8,9};
for (int i = 0; i<3; i++)
{
for (int j =0; j<3; j++)
{
printf("%d\t",M[i][j];
}
printf("\n");
}
Lệnh printf() thứ nhất để xuất giá trị của phần tử tại hàng thứ i, cột thứ j, "\t" để mỗi phần tử trên
cùng 1 hàng cách nhau 1 tab. Lệnh printf() thứ hai dùng để xuống hàng khi kết thúc 1 hàng của mảng.
b) Tìm kiếm phần tử của mảng:
Muốn xuất tìm kiếm vị trí hoặc giá trị của một phần tử trong mảng, ta tiến hành so sánh từng
phần tử của mảng với giá trị cần tìm kiếm:
VD :

 Tìm kiếm vị trí của phần tử có giá trị bằng 5:


int M[3][3] = {1,2,3,4,5,6,7,8,9};
for (int i = 0; i<3; i++)
{
for (int j =0; j<3; j++)
{
if(M[i][j] == 5) printf("Hang thu %d, cot thu %d",i,j);
}
}
b) Hoán đổi hai phần tử của mang:
Để hoán đổi hai phần tử của mảng, cần sử dụng thêm 1 biến tạm.
VD :

 Hoán đổi 2 phần tử ở vị trí [0,0] và [1,1]:


int M[3][3] = {1,2,3,4,5,6,7,8,9};
int a; //biến tạm
a = M[0][0];
M[0][0] = M[1][1];
M[1][1] = M[0][0];

- Các yêu cầu trên mảng đều có thể được thực hiện thông qua ba bài toán cơ bản này.
III. BÀI TẬP THỰC HÀNH:
3.1. Bài tập có hướng dẫn:
Tạo mới một project dùng phần mềm Visual Studio, nhập lại đoạn chương trình mẫu, biên dịch,
kiểm tra kết quả và nhận xét.

Bài 1 :
- Viết chương trình tạo một mảng số nguyên 2 chiều 3x3 (3 hàng, 3 cột) có các giá trị phần tử là
giá trị ngẫu nhiên từ 0-10. Hiển thị mảng ra màn hình.

#include "stdio.h"
#include "conio.h"
#include "stdlib.h"

void main()
{
int M[3][3];
for (int i = 0;i<3;i++)
{
for(int j=0; j<3; j++)
{
M[i][j] = rand()%10;
}
}
printf("Mang 3x3 :\n");
for (int i = 0;i<3;i++)
{
for(int j=0; j<3; j++)
{
printf("%d\t",M[i][j]);
}
printf("\n");
}
getch();
}

Bài 2 :
Viết chương trình với các yêu cầu sau.
- Cho phép người sử dụng nhập các giá trị cho một mảng số nguyên 3x3.
- In ra màn hình mảng vừa nhập.

#include "stdio.h"
#include "conio.h"
#include "windows.h"
void main()
{
int M[3][3];
printf("Nhap mang:\n");
for (int i = 0;i<3;i++)
{
for(int j=0; j<3; j++)
{
printf("M[%d][%d] = ",i,j);
scanf("%d",&M[i][j]);
}
}
system("cls");
printf("Mang 3x3 :\n");
for (int i = 0;i<3;i++)
{
for(int j=0; j<3; j++)
{
printf("%d\t",M[i][j]);
}
printf("\n");
}
getch();
}

Bài 3 :
Viết chương trình giao diện console theo yêu cầu sau :
Yêu cầu :
- Tạo sẵn 1 ma trận số nguyên (3x3). Xuất ma trận ra màn hình.
- Tìm giá trị phần tử lớn nhất và nhỏ nhất. Xuất các giá trị này ra màn hình.
#include "stdio.h"
#include "conio.h"
#include "windows.h"
void main()
{
int M[3][3];
printf("Nhap mang:\n");
for (int i = 0;i<3;i++)
{
for(int j=0; j<3; j++)
{
printf("M[%d][%d] = ",i,j);
scanf("%d",&M[i][j]);
}
}
system("cls");
printf("Mang 3x3 :\n");
for (int i = 0;i<3;i++)
{
for(int j=0; j<3; j++)
{
printf("%d\t",M[i][j]);
}
printf("\n");
}
getch();
}

Bài 4 :
Viết chương trình giao diện console theo yêu cầu sau :
- In ra màn hình hình tam giác vuông cân (cạnh góc vuông = 10) được tạo thành từ các kí tự dấu
sao (*).
#include "stdio.h"
#include "conio.h"
#include "windows.h"
void main()
{
int Min,Max;
char M[10][10];
for (int i = 0;i<10;i++)
{
for(int j=0; j<10; j++)
{
if(i>=j) M[i][j] = '*';
else M[i][j] = ' ';
}
}
printf("Tam giac vuong can :\n");
for (int i = 0;i<10;i++)
{
for(int j=0; j<10; j++)
{
printf("%c",M[i][j]);
}
printf("\n");
}
getch();
}

3.2. Bài tập luyện tập:


Bài 1: Viết chương trình tạo mảng 2 chiều 3 hàng 3 cột (giá trị nhập từ bàn phím).
a/ Hiển thị mảng vừa nhập ra màn hình.
b/ Cho phép người sử dụng nhập vào giá trị cần tìm kiếm. Nếu tìm thấy có phần tử thỏa mãn yêu cầu tìm
kiếm, in ra màn hình vị trí (hàng, cột) của phần tử đó. Nếu không tìm thấy yêu cầu nhập lại giá trị tìm
kiếm khác.

Bài 2: Viết chương trình tạo mảng 2 chiều 3 hàng 3 cột (giá trị nhập từ bàn phím). Hiển thị mảng vừa
nhập ra màn hình.
- Cho phép người sử dụng chọn lựa: 1 để tính tổng , 2 để tính tích.
- 1: Tính tổng giá trị các phần tử của mảng.
- 2: Tính tích giá trị các phần tử của mảng.
- Xuất giá trị tính toán ra màn hình.

Bài 3: Viết chương trình tạo mảng 1 chiều gồm 10 phần tử (giá trị nhập từ bàn phím). Hiển thị mảng
vừa nhập ra màn hình.
a/ Hiển thị mảng theo thứ tự ngược lại.
b/ Tìm giá trị min, max và giá trị trung bình của các phần tử trong mảng. Hiển thị các giá trị vừa tìm
được.

Bài 4 : Tạo sẵn 1 mảng số nguyên (3x3). Xuất mảng ra màn hình.
- Tìm giá trị phần tử xuất hiện nhiều nhất trong mảng. Xuất giá trị này ra màn hình.

Bài 5 : Tạo sẵn một dữ liệu (mảng 1 chiều 20 phần tử) có các giá trị ngẫu nhiên.
- Hãy tự tạo 1 mảng để lưu giữ các dữ liệu này. Hiển thị mảng ban đầu ra màn hình.
- Thực hiện lọc trung bình x3 theo công thức sau:
- N[i] = (M[i-1] + M[i] + M[i+1])/3
- N[0] = (M[0] + M[1])/2
- N[19] = (M[19]+ M[18])/2
- Xuất giá trị của dữ liệu sau khi lọc ra màn hình.
Bài 6 : Viết chương trình tạo mảng 1 chiều a gồm 20 phần tử. Mỗi phần tử mang giá trị ngẫu nhiên
thuộc (-10, 10). Sắp xếp mảng theo thứ tự tăng dần của các phần tử. Hiển thị mảng sau khi sắp xếp ra
màn hình.
Bài 7:
Viết chương trình cho phép người dùng nhập giá trị cho 2 mảng số nguyên A,B (3x3).
- Tính AxB, BxA và hiển thị kết quả ra màn hình.

You might also like