LẬP TRÌNH C CHO
NGƯỜI MỚI HỌC
Giảng viên: Thạc sĩ Trần Thanh Sơn
Trường Đại Học Khoa Học Tự Nhiên
BÀI 4: CẤU TRÚC MẢNG VÀ VÒNG LẶP
I. CẤU TRÚC MẢNG
II. VÒNG LẶP FOR
III. VÒNG LẶP WHILE
IV. VÒNG LẶP DO…WHILE
2
I. CẤU TRÚC MẢNG
1. Định nghĩa: Mảng là dãy các biến có cùng kiểu dữ liệu. Các biến này cùng tên
và phân biệt bởi chỉ số của chúng trong dãy.
2. Ví dụ:
• int a[5]: khai báo mảng a gồm 5 phần tử, mỗi phần tử là biến nguyên (kiểu
integer);
• float x[4]= {3.0, 2.5, 1.2, 4.5}: khai báo mảng x có 4 phần tử, mỗi phần tử
kiểu số thực và có khai báo trước:
x[0] = 3.0; x[1]=2,5;
x[2]=1.2;
x[3]= 4.5;
3
II. VÒNG LẶP FOR
For (<khởi gán>; <điều kiện lặp>; <cập nhật>)
{
<Khối lệnh>;
}
•
•
•
•
Khởi gán: Dùng để khởi gán giá trị ban đầu cho vòng lặp
Điều kiện lặp: Dùng để kiểm tra điều kiện trước khi thực hiện vòng lặp
Cập nhật: Dùng để cập nhật vòng lặp (tăng hoặc giảm chỉ số lặp) để dừng
Bất kỳ biểu thức nào trong 3 biểu thức nói trên đều có thể vắng nhưng
phải giữ dấu chấm phẩy (;)
4
II. VÒNG LẶP FOR (tt)
Bước 1: Khởi gán
Khởi gán
Bước 2: Kiểm tra điều kiện
Nếu đúng:
Thực hiện lệnh/khối lệnh
Cập nhật vòng lặp.
Quay lại bước 2
Nếu sai: Thoát vòng lặp
Sai
Điều
kiện lặp
Đúng
Lệnh / Khối lệnh
Cập nhật vòng lặp
5
II. VÒNG LẶP FOR (tt)
Ví dụ: Cho người dùng nhập n phần tử của mảng
int i, n;
int a[100];// khai báo mảng a gồm 100 phần tử số nguyên
printf (“Nhap vao so phan tu cua mang”);
scanf_s(“%d”,&n);
for (i = 0;i
{
printf(“\nNhap phan tu a[%d]: ”, i+1):
scanf_s(“%d”, &a[i]);
}
6
III. VÒNG LẶP WHILE
<khởi gán>;
while <điều kiện lặp>)
{
Lệnh/ Khối lệnh;
<cập nhật>
}
• Ý nghĩa: Nếu giá trị của điều kiện lặp còn đúng thì còn thực hiện lệnh/
khối lệnh.
• Trong vòng lặp lệnh / khối lệnh lặp ít nhất là 0 lần
• Lưu ý: Cách hoạt động của while giống for.
7
III. VÒNG LẶP WHILE
(tt)
Bước 1: Khởi gán
Khởi gán
Bước 2: Kiểm tra điều kiện
Nếu đúng:
Thực hiện lệnh/khối lệnh
Cập nhật vòng lặp.
Quay lại bước 2
Nếu sai: Thoát vòng lặp
Sai
Điều
kiện lặp
Đúng
Lệnh / Khối lệnh
Cập nhật vòng lặp
8
III. VÒNG LẶP WHILE (tt)
Ví dụ: Cho người dùng nhập n phần tử của mảng
int i, n;
int a[100];// khai báo mảng a gồm 100 phần tử số nguyên
printf (“Nhap vao so phan tu cua mang”);
scanf_s(“%d”,&n);
i = 0;// bước khởi gán
while (i
{
printf(“\nNhap phan tu a[%d]: ”, i):
scanf_s(“”, &a[i]);
i++;
}
9
III. VÒNG LẶP DO … WHILE
<Khởi gán>
Khởi gán
Do
{
Lệnh / Khối lệnh
<Lệnh/ Khối lệnh>;
<Cập nhật>;
Cập nhật vòng lặp
}while (điều kiện);
Ý nghĩa:
Thực hiện khối lệnh cho đến khi điều kiện sai thì dừng
Sai
Điều
kiện lặp
Đúng
Khối lệnh trong vòng lặp thực hiện ít nhất 1 lần
10
IV. VÒNG LẶP DO … WHILE (tt)
Ví dụ: Nhập số nguyên dương n. Tính tổng từ 1 đến n
int n, i, tong=0;
printf (“Nhap vao so nguyên n”);
scanf_s(“%d”,&n);
i = n;// bước khởi gán
do
{
Tong = tong + i;
i--;
} while (i>0);
11
SO SÁNH CÁC VÒNG LẶP
Vòng lặp for/while
• Kiểm tra điều kiện trước thực hiện công việc sau.
• Công việc có thể không được thực hiện lần nào.
• Vòng lặp kết thúc khi nào điều kiện sai.
Vòng lặp do-while
• Thực hiện công việc trước kiểm tra điều kiện sau.
• Công việc được thực hiện ít nhất 1 lần.
• Vòng lặp kết thúc khi nào điều kiện sai.
12
BÀI TẬP
Bài 1: Cho người dùng nhập vào n số nguyên và tính tổng, tích các số
vừa nhập
Giải pháp:
• Các số nhập vào lưu vào trong 1 mảng số nguyên
• Khởi tạo biến: tổng = 0;tích = 1;
• Lặp lại: với mỗi phần tử của mảng, lấy cộng với tổng rồi gán cho
biến tổng. Lặp lại n lần
• tổng = tổng + a[i];
• Tương tự làm tích
• Xuất kết quả tổng, tích.
13
BÀI TẬP (tt)
Bài 2: Tìm số lớn nhất trong mảng. Cho người dùng nhập vào
n số nguyên. In ra số lớn nhất, nhỏ nhất trong mảng.
Giải pháp:
• Các số nhập vào lưu vào trong 1 mảng số nguyên
• Khởi tạo min = max = a[0]; phần tử đầu mảng;
• Lặp lại: từ phần tử thứ a[1] đến cuối mảng a[n-1], phần tử a[i]
nào lớn hơn max, gán max = a[i] đó.
• Tương tự a[j] nào nhỏ hơn min, gán min = a[j] đó
• Xuất max, min ra màn hình
14