ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH
Đại học Công nghệ Thông tin
THỰC HÀNH MÔN TIN HỌC ĐẠI CƯƠNG
Bài số 4 : KIỂU DỮ LIỆU MẢNG
1. MỤC TIÊU
1.1. Nắm được các cách khai báo kiểu dữ liệu mảng.
1.2. Sử dụng vòng lặp để duyệt trên mảng.
1.3. Thao tác các phần tử trong mảng thông qua giá trị và chỉ số tương
ứng trong mảng.
2. BÀI TẬP THỰC HÀNH
2.1. Dãy số thực : Phần tử lớn nhất, bé nhất; số phần tử dương, âm
và bằng 0.
2.2. Tìm dãy số chẵn, lẻ từ một dãy số nguyên.
2.3. So sánh hai dãy số nguyên.
2.4. Dãy số nguyên : Đảo ngược dãy; tìm, xoá, sắp xếp, và chèn phần
tử trong dãy.
2.1. Dãy số thực : Phần tử lớn nhất, bé nhất; số phần tử dương, âm và
bằng 0.
• Đề bài :
Nhập số tự nhiên N và một dãy số thực x
1
, x
2
, , xn.
- Tìm số lớn nhất và số nhỏ nhất của dãy.
- Đếm trong dãy có bao nhiêu số dương, bao nhiêu số âm, bao nhiêu số 0 ?
Loại nào nhiều nhất ?
• Phân tích bài toán :
- Dãy số thực x
1
if (fMax<X[i])
fMax = X[i];
if (fMin>X[i])
fMin = X[i];
}
printf(‘Phần tử lớn nhất bằng : %f’, fMax);
printf(‘Phần tử bé nhất bằng : %f’, fMin);
nPos = 0;
nNeg = 0;
nZero = 0;
for (int i=0 ; i<n;i++)
{
if (X[i]>0)
nPos++;
else
if (X[i]<0)
nNeg++;
else
nZero++;
}
if ((nPos>nNeg) && (nPos>nZero))
printf(‘Số phần tử dương nhiều nhất.’);
else
if ((nNeg>nPos) && (nNeg>nZero))
printf(‘Số phần tử âm nhiều nhất.’);
else
printf(‘Số phần tử 0 nhiều nhất.’);
getch();
}
2.2. Tìm dãy số chẵn, lẻ từ một dãy số nguyên
}
cPos = 0;
lPos = 0;
for (i=0 ; i<n;i++)
{
if (x[i] % 2 == 1)
{
lPos++;
l[lPos] = x[i];
}
else
{
cPos++;
c[cPos] = x[i];
}
}
printf(‘Các số lẻ trong dãy :’);
for (i=0 ; i<lPos;i++)
printf(“%d “,l[i]);
printf(‘\n’);
printf(‘Các số chẵn trong dãy :’);
for (i=0 ; i<cPos;i++)
printf(“%d “,l[i]);
getch();
}
• Bài tập mở rộng :
Nhập một dãy số nguyên dương x
1
, x
2
• Đề bài :
Nhập một dãy số nguyên bất kỳ x1, x2, , xn.
1. In đảo ngược dãy đó, ví dụ cho dãy 1 5 3 8, in ra: 8 3 5 1.
2. Tìm một phần tử có tồn tại trong dãy.
3. Xoá một phần tử trong dãy.
4. Sắp xếp dãy tăng (giảm) dần, in dãy.
5. Chèn một phần tử vào dãy đã sắp xếp.
• Phân tích bài toán :
1. Với dãy được nhập, giả sử từ 1 đến N (như ví dụ 2.2), ta có thể giải quyết
câu 1 theo một số cách sau :
Cách 1 : Dùng vòng lặp chạy từ phần tử thứ N đến 1, sau đó xuất tuần
tự ra màn hình. Cách này không làm thay đổi vị trí các phần tử
trong dãy ban đầu. Các anh chị tự cài đặt chương trình này.
Cách 2 : Đảo vị trí các phần tử trong chuỗi, bằng cách hoán vị từng
cặp phần tử đầu với phần tử cuối.
2. Bằng cách dùng vòng lặp duyệt từ đầu đến cuối mảng, so sánh phần tử
đang duyệt với phần tử cần tìm : nếu có trong dãy thì thông báo và thoát
khỏi vòng lặp; nếu duyệt hết dãy mà không có thì thông báo phần tử
không tồn tại trong dãy. Đề nghị các anh chị tự cài đặt chương trình này.
3. Để xoá một phần tử trong dãy, trước hết duyệt tìm phần tử trong dãy (như
ở câu 2). Sau đó, loại phần tử ra khỏi dãy bằng cách gán tuần tự các phần
tử sau phần tử vừa xác định trên về trước một vị trí Ở đây, chúng ta giả
định chỉ xoá phần tử đầu tiên trong dãy có giá trị cần tìm.
4. Có nhiều cách sắp xếp một dãy tăng, giảm. Ở đây chúng tôi minh họa cách
sắp xếp tăng đơn giản như sau :
Tìm phần tử nhỏ nhất đưa về đầu dãy kết quả.
Dãy còn lại cần sắp xếp được thực hiện từ phần tử thứ 2. Ta tiếp tục
thực hiện thao tác tương tự như trên.
Lặp đến phần tử cuối cùng, ta được dãy sắp xếp tăng dần.
5. Với một dãy đã sắp xếp – giả sử tăng, để chèn một phần tử X vào dãy, ta