Trong thời đại CNTT phát triển nhanh với tốc độ chóng mặt như hiện nay, Tin học Văn phòng là một trong những Kỹ năng mềm không thể thiếu được với mỗi sinh viên, nhân viên văn phòng,… Bất kỳ Nhà tuyển dụng nào cũng thường yêu cầu rất cao khả năng sử dụng thành thạo Tin học văn phòng như: Word, Excel, PowerPoint, Access,…Và trong những năm gần đây thì yêu cầu đó ngày càng cao hơn trước rất nhiều. Trang bị Kiến thức, kỹ năng sử Tin học văn phòng thành thạo là một việc rất cần thiết trước khi bạn tiến hành đi xin việc.
Trang 1ĐẠ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
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 x1, x2, , 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 x1, x2… xn được nhập và lưu trong mảng một chiều X
- Dùng vòng lặp duyệt từ đầu đến cuối mảng, đếm số phần tử dương, âm và 0, sau đó so sánh chúng để tìm ra loại nào nhiều nhất
Trang 2Lưu ý : Để đếm chính xác số phần tử từng loại trong mảng, trước khi đếm
cần phải khởi gán biến đếm bằng 0
Chương trình minh họa :
#include <stdio.h>
#include <conio.h>
#define MAX 100;
void main()
{
int n; // N là số phần tử trong dãy
float X[MAX];
int nPos, nNeg, nZero ; float fMax, fMin;
do
printf(‘ Nhập số phần tử của dãy :’);
scanf(“%d”, &n);
while ((N>0) && (n<=MAX));
for (int i=0 ; i<n;i++)
{
printf(‘Nhập phần tử thứ %d :’, i);
scanf(“%f”, &X[i]);
}
fMax = X[0];
fMin = X[0];
for (int i=0 ; i<n;i++)
{
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++;
}
Trang 3if ((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
Đề bài :
Nhập một dãy số nguyên x1, x2, , xn In riêng các số chẵn và các số lẻ, mỗi loại trên một dòng
Phân tích bài toán :
Duyệt dãy số nguyên x1, x2, , xn Chuyển các phần tử chẵn, lẻ vào hai mảng khác nhau Sau đó, in mỗi dãy trên một dòng
Chương trình minh họa :
#include <stdio.h>
#include <conio.h>
#define MAX 100;
void main()
{
int x[MAX][MAX], c[MAX][MAX], l[MAX][MAX];
int i, n, cPos, lPos;
do
printf(‘ Nhập số phần tử của dãy :’);
scanf(“%d”, &n);
while ((N>0) && (n<=MAX));
for (i=0 ; i<n;i++) }
printf(‘Nhập phần tử thứ %d :’, i);
scanf(“%f”, &x[i]);
}
cPos = 0;
lPos = 0;
for (i=0 ; i<n;i++) {
Trang 4if (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 x1, x2, , xn
- Tách dãy x thành hai dãy: dãy A gồm các số chẵn, dãy B gồm các số lẻ, sắp xếp dãy A tăng dần, dãy B giảm dần, in hai dãy A và B trên hai dòng khác nhau
- Nối hai dãy A và B theo thứ tự đó thành một dãy duy nhất và gán trở lại vào dãy x, in dãy x
Ví dụ nhập dãy x={ 5, 7, 0, 2, 1, 6, 4, 9 } thì dãy A={ 0, 2, 4, 6}, dãy B={ 9, 7, 5, 1}, và x={ 0, 2, 4, 6, 9, 7, 5, 1}
2.3 So sánh hai dãy số nguyên.
Đề bài :
Nhập vào hai dãy số nguyên A1, A2, …, An, và B1, B2, …, Bm
Xuất ra tập các số là hội của hai dãy A và B.
Xuất ra tập các số là hiệu của hai dãy A và B.
Phân tích bài toán :
Hội của hai dãy A và B là tập các số vừa tồn tại trong dãy A, vừa tồn tại trong dãy B Bằng cách duyệt từng phần tử Ai của A so sánh với tất cả các phần tử trong B Nếu Ai = Bj, ta được một phần tử thuộc tập hội
Tương tự, hiệu của A và B là tập các phần tử thuộc A nhưng không thuộc
B Chương trình VD3_2_3 minh họa phép hiệu (Đối với phép hội, đề nghị các bạn tự cài đặt)
Trang 52.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.
Đề 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
có thể duyệt tuần tự, tìm vị trí phần tử lớn nhất trong các phần tử trên dãy
mà bé hơn phần tử X; sau đó, chèn X vào sau phần tử này Lưu ý rằng, để chèn X, ta cần phải dời các phần tử sau X về sau một vị trí (bắt đầu từ vị trí cuối cùng trong dãy), nhằm tránh trường hợp xoá mất giá trị của các phần tử này Cách thực hiện tương tự ở câu 3, nhưng ngược lại Các anh chị tự cài đặt chương trình này