Tải bản đầy đủ (.docx) (36 trang)

Bài tập kỹ thuật lập trình dễ hiểu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.45 MB, 36 trang )

Biên soạn: Nguyễn Kim Việt

Tuần 1
I. Nội dung:
1. Giới thiệu cơng cụ lập trình
2. Cấu trúc của chương trình C
3. Cách viết chương trình: soạn thảo, kiểm lỗi, biên dịch, thực hiện
chương trình
4. Lệnh xuất (printf)
5. Kiểu dữ liệu, khai báo biến, hằng, lệnh nhập (scanf)
6. Nhập, xuất, tính tốn II. Hướng dẫn:
1. Cơng cụ lập trình: Ngơn ngữ C.
Cụ thể, sử dụng Borland C++ 5.02, hoặc VS C++, hoặc Dev C++. VD:
với Dev C++, biểu tượng của chương trình như sau:

Giao diện:
- Trình soạn thảo:

-

Các biểu tượng:

 Compile: Ctrl F9
 Run: Ctrl F10
 Compile and Run: F9
 Rebuild All: Ctrl F11
 Debug: F8


Biên soạn: Nguyễn Kim Việt
2. Cấu trúc của chương trình C đơn giản:



Sinh viên tìm hiểu cách lưu bài (.cpp), sau đó biên dịch sẽ tạo file .exe (có
thể mở file exe để chạy chương trình). Nhưng nếu sau khi sửa nội dung
trong file cpp mà chưa biên dịch lại thì file exe chưa thay đổi.
3. Kiểu dữ liệu: C có 4 kiểu dữ liệu cơ bản: Kiểu
Độ lớn (Type) (Byte)
char
1
int
2
short
2
long
4

Kiểu Độ
(Byte)
unsigned
unsigned
unsigned
short
unsigned

lớn

–128 … +127
–32.768 … +32.767
–32.768 … +32.767
–2.147.483.648 …
+2.147.483.647


(Type)

char
int

1
2
2

Miền giá trị
(Range)
0 … 255
0 … 65.535
0 … 65.535

long

4

0 … 4.294.967.295

- Kiểu số thực
Kiểu Độ lớn (Type) (Byte)
float

Kiểu số nguyên:
Miền giá trị
(Range)


4

Miền giá trị (Range)
3.4*10
3.4*10

–38
38




Biên soạn: Nguyễn Kim Việt
double
1.7*10308

8

1.7*10–308 …

- Kiểu luận lý
 Đặc điểm

C ngầm định một cách không tường minh:
 false (sai): giá trị 0.
 true (đúng): giá trị khác 0, thường là 1.
◦ C++: bool
 Ví dụ

0 (false), 1 (true), 2 (true), 2.5 (true)


1 > 2 (0, false), 1 < 2 (1, true)
-

Kiểu ký tự: char (256 ký tự trong bảng mã ASCII)
Không lưu ký tự mà lưu mã ASCII của ký tự đó.

- Đổi kiểu giá trị (ép kiểu)
Cú pháp: (kiểu) biểu thức Ví dụ:
(float)(a+b)
Đổi thơng qua phép gán: int n; n =
15.6; (giá trị của n là 15) Chú ý thứ tự
ưu tiên:
(int) 1.4*10 = 1*10 = 10
(int)(1.4*10) = (int)(14.0) = 14
4. Hằng, biến
- Hằng: đại lượng không thay đổi trong q trình tính
tốn Cú pháp:
#define <tênhằng> <giá trị> hoặc sử
dụng từ khóa const.
Ví dụ:
#define MAX 100
#define PI 3.14
const int MAX = 100;
const float PI = 3.14;
-

Biến: đại lượng có thể thay đổi trong q trình tính
tốn Cú pháp:
<kiểu> <tên biến>;

<kiểu> <tên biến 1>, <tên biến 2>; Ví dụ:
int i;
int j, k= 1;
unsigned char dem;


Biên soạn: Nguyễn Kim Việt
float ketqua = 1.1, delta;
5. Toán tử
- Toán tử số học

-

Toán tử so sánh và luận lý:

- Toán tử gán:
Cú pháp : < biến> = < biểu thức>
Ví dụ: x = y, x = 2, y = 3
Cú pháp: < biến> = < biểu thức1, biểu thức2>
Ví dụ : m = (t=2, t * t + 3)  t = 2
và m = 12
- Toán tử
Cú pháp : <điều kiện> ? <biểu thức1> : <biểu thức2> Trong biểu thức
<điều kiện>, nếu đúng (1) sẽ tính và lấy kết quả của
<biểu thức1>, ngược lại tính lấy kết quả của <biểu thức 2>
Ví dụ: i=6
m = (i>=5) ? 1 : -1  m = 1
6. Lệnh xuất printf



Biên soạn: Nguyễn Kim Việt
Cú pháp: printf(“chuỗi định dạng”, <danh sách biến>); Chuỗi
định dạng có thể là:
• Văn bản thường (đoạn text cần xuất)
• Ký tự điều khiển (\n, \t, \a, \b, \\,\?, \”)
• Đặc tả định dạng (dùng để xuất giá trị của biến)
Mã định
Ý nghĩa
dạng
%3d
Số ngun có kích thước tối đa 3 ký số
%6f

Số thực có kích thước tối đa 6 ký số

%.2f

Số thực có 2 số lẻ (phần ngun khơng quy định

%f

Số thực kích thước căn cứ vào giá trị thực tế

%o

Số nguyên hệ 8

%x

Số nguyên hệ 16


%c

Ký tự

%s

Chuỗi ký tự

%lf

Số thực kiểu double

%ld

Số nguyên kiểu long

Ví dụ: xuất chuỗi Hello World
 printf(“Hello ”); printf(“World”);
 printf(“Hello World”);
Xuất chuỗi a + b  printf(“a + b”);
Xuống dòng  printf(“\n”); Xuất giá
trị của biến: int a = 7, b = 5;
 printf(“a + b = %d + %d = %d”, a, b, a+b); (xuất: a + b = 7 + 5 =
12)
 printf(“a/b = %d/%d = %f”, a, b, (float)a/b);
(xuất: a/b = 7/5 = 1.4)
7. Lệnh nhập scanf
Cú pháp: scanf(“chuỗi định dạng”, danh sách biến);
Chuỗi định dạng là đặc tả định dạng cho biến (được đặt trong dấu ngoặc

kép “”)
Danh sách các biến cách nhau bởi dấu phẩy , và trước nó phải có dấu & Số
đặc tả phải tương ứng với số biến cần nhập.
Ví dụ:
 scanf(“%d”, &a); nhập giá trị cho biến a kiểu
nguyên  scanf(“%f”, &b); nhập giá trị cho biến b
kiểu số thực


Biên soạn: Nguyễn Kim Việt
 scanf(“%d%f”, &a, &b); nhập lần lượt cho biến a,
biến b
III. Bài tập
1. Viết chương trình xuất ra màn hình câu sau: Chao ban!
Ban hay lam bai tap C dau tien!
2. Viết chương trình in ra màn hình hình chữ nhật (ngang: 10 hình sao,
dọc 4 hình sao) như sau:

*
*
*
*

*********
*
*
*********
3. Viết chương trình nhập vào một số nguyên a, xuất ra màn hình giá trị
của a. (vd: nhập 5, xuất a = 5)
4. Nhập vào n là năm sinh của một người. Tính tuổi của người đó.

5. Viết chương trình nhập vào 2 số ngun a, b. Tính tổng, hiệu, tích,
của 2 số đó.
6. Viết chương trình nhập vào bán kính r của hình trịn. Tính chu vi, diện
tích hình trịn đó.
7. Viết chương trình nhập vào tên mặt hàng, số lượng, đơn giá của mặt
hàng đó. Xuất thơng tin của mặt hàng, tổng tiền, thuế VAT. Với:
Tổng tiền = số lượng * đơn giá
Thuế VAT = 10% tổng tiền
8. Viết chương trình nhập vào điểm của 3 mơn Tốn, Lý, Hóa. Tính và
xuất điểm trung bình của sinh viên với Tốn hệ số 2, Lý và Hóa hệ số
1.
9. Viết chương trình nhập vào 2 số nguyên a, b. Tính và xuất giá trị min,
max của 2 số đó (khơng dùng hàm if)
10. Viết chương trình nhập vào 3 số ngun a, b, c. Tính và xuất giá trị
min, max của 3 số đó (khơng dùng hàm if)
11. Viết chương trình nhập vào số n (4 chữ số) là số xe của bạn. Cho
biết xe bạn có bao nhiêu nút?


Biên soạn: Nguyễn Kim Việt
12. Nhập từ bàn phím số nguyên n là 1 số tiền (ngàn đồng), đổi tiền với
các mệnh giá tương ứng: 200, 100, 50, 10, 1.
Ví dụ: n = 956 
4
t

2
0
0
1

t

1
0
0
1
t

5
0
0
t

1
0
6
t

1


Biên soạn: Nguyễn Kim Việt

Tuần 2
I.
Nội dung:
1.Cấu trúc rẽ nhánh if…else
2.Cấu trúc rẽ nhánh switch…case
3.Lệnh break, continue, goto II. Hướng dẫn:
1. Cấu trúc rẽ nhánh if…else Cú

pháp:
- if thiếu:
if (biểu thức logic)
<khối lệnh 1>;
Kết quả của biểu thức logic phải là đúng (#0) hoặc sai (=0)
trở lên phải đặt cả khối lệnh trong dấu ngoặc { }
- if đủ:
if (biểu thức logic)
<khối lệnh 1>; else //ngược lại
<khối lệnh 2>;
Ví dụ:
if (a>b)

Khối lệnh từ 2 lệnh

max=a;
else

max=b;
Tương đương: max = (a>b) ? a:b;
- if lồng nhau:
Dùng if lồng

Dùng if đơn


Biên soạn: Nguyễn Kim Việt
if (DTB<5)
printf("\nDat loai Yeu");
else if (DTB<7)

printf("\nDat loai TB"); else
if (DTB<8)
printf("\nDat loai Kha");
else
if (DTB<9)
printf("\nDat loai Gioi");
else
printf("\nDat loai Xuat sac");

-

if (DTB<5)
printf("\nDat
loai Yeu"); if
(DTB>=5 &&
DTB<7)
printf("\nDat
loai TB"); if
(DTB>=7 &&
DTB<8)
printf("\nDat
loai Kha"); if
(DTB>=8 &&
DTB<9)
printf("\nDat loai
Gioi");
if (DTB>9)
printf("\nDat loai Xuat
sac");


Lưu ý:
Câu lệnh if và if…else là câu lệnh đơn
if có thể lồng vào nhau và else sẽ tương ứng với if gần nó nhất
Nên dùng else để loại trừ trường hợp
Không thêm dấu chấm phẩy ; sau điều kiện if
2. Cấu trúc rẽ nhánh switch…
case: Cấu trúc
switch… case:

-Kết quả của biểu thức trong switch(bieu thuc) phải là giá trị hằng nguyên, tức phải
có giá trị cụ thể.
-Khi giá trị của biểu thức bằng giá trị i thì lệnh i sẽ được thực hiện.
-Nếu sau lệnh i khơng có lệnh break thì sẽ tiếp tục thực hiện lệnh i+1, ngược lại nếu
có lệnh break thì sẽ thốt khỏi cấu trúc switch.
-Lệnh 1,2,…,n có thể bao gồm nhiều lệnh, và khơng cần đặt trong dấu {}
Ví dụ: Nhập vào số i là 1 hoặc 2 hoặc 3. In ra số sao (*) tương ứng
//nhập i (1 hoặc 2 hoặc 3)
switch (i)
{


Biên soạn: Nguyễn Kim Việt

case 3: printf(“*”);
case 2: printf(“*”);
case 1: printf(“*”);
}
Trong chương trình trên khi nhập vào i = 2 lệnh printf("*") ở dòng case 2 được thi
hành, nhưng do khơng có lệnh break sau đó nên lệnh printf("*") ở dòng case 1 tiếp
tục được thi hành.

Kết quả in ra **
- Cấu trúc switch... case...default:

-Chọn thực hiện 1 trong n+1 lệnh cho trước.
-Khi giá trị của biểu thức bằng giá trị i thì lệnh i sẽ được thực hiện.
-Nếu giá trị của biểu thức không trùng với bất kỳ giá trị i nào thì lệnh tương ứng với
default sẽ được thực hiện.
Ví dụ: Viết CT nhập vào tháng và in ra quý của tháng tương ứng.


Biên soạn: Nguyễn Kim Việt

Có sử dụng default:


Biên soạn: Nguyễn Kim Việt
3. Lệnh break, continue, goto:
- Lệnh break: dùng để thốt khỏi vịng lặp của các lệnh for, while, do…
while và cấu trúc switch…case
- Lệnh continue: dùng để bắt đầu một vịng lặp chứa nó. Khi gặp
continue, máy sẽ bỏ qua các lệnh còn lại trong vòng lặp để trở về bắt
đầu vòng lặp.
- Lệnh goto: dùng để chuyển quyền điều khiển đến một câu lệnh nào đó
được chỉ định bởi nhãn. Cú pháp: goto nhan;
…….
nhan: lệnh; Ví dụ: tt:
// nhập số nguyên i
switch (i)
{
case 0: printf(“\nXin chao quy ba!”);

break;
case 1: printf(“\nXin chao quy
ong!”); break;
case 2: printf(“\nXin chao quy co!”);
break;
case 3: printf(“\nXin chao quy
cau!”); break;
default: printf(“\nXin chao moi
nguoi!”) ;
}
printf(“Tiep tuc hay khong?”);
printf(“Bam so (1) de tiep tuc, so (0) de dung lai”);
scanf(“%d”, &k);
if (k==1)
goto tt;
Ví dụ: Xuất 10 9 8 7 6 4 3 2 1 (bỏ qua số 5)
for (i = 10; i>=1; i--)
{
if (i==5)
continue;
printf(“%d ”, i);
}
III. Bài tập
1.Viết chương trình nhập vào số thực, tính căn bậc 2 của số này. Lưu ý: nếu số nhập
vào lớn hơn hoặc bằng 0 thì tính căn và in ra.
2.Viết chương trình nhập vào 2 số nguyên a, b. Tìm giá trị min, max của 2 số a và b.
3.Viết chương trình nhập vào 3 số nguyên a, b và c. Tìm giá trị min, med, max của 3 số
a, b và c.
4.Viết chương trình nhập vào 4 số nguyên a, b, c và d. Tìm giá trị min, med1, med2 và
max của 4 số a, b, c và d.

5.Viết chương trình nhập vào số nguyên n. Kiểm tra n có chia hết cho 3
hay khơng.


Biên soạn: Nguyễn Kim Việt
6.Viết chương trình nhập vào một tháng nào đó. Cho biết tháng thuộc quý mấy trong
năm.
7.Viết chương trình nhập vào một ký tự. Kiểm tra xem nếu ký tự nhập vào là chữ
thường nằm trong khoảng từ a đến z thì đồi sang chữ hoa và in ra màn hình.
Ngược lại xuất thơng báo “ky tu vua nhap la …”
8.Viết chương trình nhập vào số nguyên dương n. Kiểm tra n có phải là số chính
phương hay khơng. (Số chính phương là số có được từ bình phương của một số,
VD các số sau là số chính phương 2, 9, 16, 25, 36).
9.Viết chương trình nhập vào 3 giá trị nguyên dương a, b, c.
Kiểm tra xem a, b, c có phải là 3 cạnh của tam giác khơng?
Nếu là 3 cạnh của tam giác thì tính diện tích của tam giác theo cơng thức sau:

với p là 1/2 chu vi của tam giác.
Hướng dẫn: a, b, c là 3 cạnh của tam giác thì phải thỏa điều kiện sau: (a + b) > c và (a + c) >
b và (b + c) > a
10. Viết chương trình tính dãy số S = 1 + 2 + 3 + … + n, với n là số nguyên dương nhập
từ bàn phím.


Biên soạn: Nguyễn Kim Việt

Tuần 3
I.
Nội dung:
1.Cấu trúc vòng lặp for

2.Cấu trúc vòng lặp while
3.Cấu trúc vòng lặp do… while II. Hướng dẫn:
1. Cấu trúc vòng lặp for
a.Cú pháp:
for (biểu_thức_1; biểu_thức_2; biểu_thức_3)
{
lệnh;
….
[break;]
….
}
b.Giải thích:
-Đây là cấu trúc sẽ thực hiện phần thân lệnh một số lần lặp lại tùy thuộc vào ba biểu
thức, cho nên thường có một biến để đếm số lần thực hiện của vòng lặp và một
biến để giới hạn số lần thực hiện tối đa.
-biểu_thức_1 chứa lệnh gán giá trị khởi động cho biến đếm.
-biểu_thức_2 là biểu thức so sánh giữa biến đếm với giới hạn số lần lặp tối đa phải
thực hiện.
-biểu_thức_3 là bước chạy dùng để đếm số lần đã thực hiện (có thể đếm tăng
hoặc giảm).
-lệnh break có thể sử dụng để thốt sớm khỏi vịng lặp for.
2.Cấu trúc while:
a.Cú pháp:
while (biểu_thức)
Lệnh;
b.Giải thích:
-Vịng lặp while sẽ còn lặp lại lệnh cho đến khi nào biểu_thức vẫn còn khác 0
(TRUE). Nếu biểu_thức bằng 0 (FALSE) thì vịng lặp while sẽ chấm dứt. Lệnh có
thể là một lệnh đơn hoặc khối lệnh. Nếu là khối lệnh thì phải đặt trong cặp dấu {}.



Biên soạn: Nguyễn Kim Việt
-Trong phần thân của vòng lặp while có thể dùng lệnh break sẽ cho kết thúc sớm
vòng lặp mặc dù biểu_thức vẫn còn khác 0 (TRUE).
3.Cấu trúc do…while
a.Cú pháp:
do
{
Lệnh;
….
} while (biểu_thức);
b.Giải thích:
-Đầu tiên cấu trúc do…while sẽ thực hiện lệnh một lần sau đó mới xét biểu_thức.
-Nếu biểu_thức khác 0 (TRUE) thì sẽ quay lên thực hiện lại lệnh, và cứ như thế
cho đến khi biểu_thức bằng 0 (FALSE) thì chấm dứt vịng lặp.
-Trong phần thân lệnh của vịng lặp do…while có thể dùng lệnh break sẽ cho kết
thúc sớm vòng lặp mặc dù giá trị biểu_thức vẫn cịn khác
0.

III.

Bài tập:

1.Viết chương trình xuất ra màn hình Hình chữ nhật các ngơi sao. Hình chữ nhật có m
dịng và n cột, với giá trị m và n được nhập từ bàn phím.

2.Viết chương trình xuất ra màn hình tam giác vng cân như dưới đây, với cạnh góc
vng m được nhập từ bàn phím.



Biên soạn: Nguyễn Kim Việt
3.In ra bảng mã ASCII cho các ký tự từ a đến z, và từ A đến Z theo định dạng như sau:

4.In ra bảng cửu chương của một số nguyên nhập từ bàn phím. Ví dụ: nhập n =9. Xuất
kết quả như sau:

5.Viết chương trình nhập số nguyên n. Xuất các thông tin sau:
- Tất cả các ước số của n
- Tổng tất cả các ước số của n
- Cho biết có bao nhiêu ước số


Biên soạn: Nguyễn Kim Việt

6.Viết chương trình nhập số nguyên dương n (dùng do...while kiểm tra điều kiện nhập
n có đúng hay khơng). Kiểm tra xem n có phải là số chính phương hay khơng? Ví
dụ: 4, 9, 16, 25, 36, 49 là các số chính phương.
7.Viết chương trình nhập vào ba số nguyên dương a,b,n với ado...while kiểm tra điều kiện nhập có đúng hay khơng).
Liệt kê và tính tổng các số nhỏ hơn n mà chia hết cho a, nhưng không chia hết cho
b.
8.Viết chương trình nhập vào một số nguyên dương n (dùng do...while kiểm tra điều
kiện nhập có đúng hay khơng). Kiểm tra xem n có phải là số ngun tố hay khơng?
9.Viết chương trình nhập vào một số nguyên dương n (dùng do...while kiểm tra điều
kiện nhập có đúng hay khơng).
- Liệt kê các số nguyên tố nhỏ hơn n.
- Tính tổng các số nguyên tố nhỏ hơn n.
- Tính tích các số nguyên tố nhỏ hơn n.
10. Viết chương trình nhập số nguyên dương n với điều kiện nhập 0do...while kiểm tra điều kiện nhập có đúng hay khơng). Tính giá trị cho các dãy số

sau:
(Bạn cài đặt cả 2 vịng lặp for và while => Cho nhận xét gì về giá trị khởi tạo, điều
kiện lặp, bước tăng của các dãy số?).
- S= 1 + 2 + 3 + ... + n
- S= 12 + 22 + 32 + ... + n2
- S= 1 + 1/2 + 1/3 + ... + 1/n
- S= 1 * 2 * 3 * ... * n
- S= 2 * 4 * 6 * ... * n (nếu n chẵn) S= 1 * 3 * 5 * ... * n (nếu n lẻ) - S= 1! * 2! *
3! * ... * n!


Biên soạn: Nguyễn Kim Việt

Tuần 4
I.

Nội dung:
1. Định nghĩa
- Hàm là đoạn chương trình thực hiện trọn vẹn một cơng việc nhất định,
có tên, đầu vào và đầu ra.
- Hàm chia cắt việc lớn bằng nhiều việc nhỏ. Nó giúp cho chương trình
sáng sủa, dễ sửa, nhất là đối với các chương trình lớn.
- Có chức năng giải quyết một số vấn đề chun biệt cho chương trình
chính.
- Được gọi nhiều lần với các tham số khác nhau.
- Được sử dụng khi có nhu cầu:
• Tái sử dụng.
• Sửa lỗi và cải tiến.
2. Ví dụ:
Ví dụ:

Xét bài tốn tính tổng S=1+2+3+…+n
#include <stdio.h>
#include <conio.h>
void main()
{
int n, s=0;
printf(“Nhap
n=”); scanf(“%d”,
&n);
for (i=1; i<=n; i++)
s=s+i;
printf(“Tong s=%d”, s);
getch();
}

#include <stdio.h> #include
<conio.h>
void tong()
{
int n, s=0;
printf(“Nhap n=”);
scanf(“%d”, &n);
for (i=1; i<=n; i++)
s=s+i;
printf(“Tong s=%d”, s);
}// ket thuc ham tinh tong
void main()//chuong trinh chinh
{
tong();
getch();

}


Biên soạn: Nguyễn Kim Việt
3.

Viết hàm
a.Các bước tiến hành:
Đ ầ u vào 1
Đ ầ u vào 2
Đ ầ u vào n

Tên hàm

Các công việ c
s ẽ th ự c hiệ n

Đ ầ u ra (nế u có)

b.Ví dụ:

Tên hàm:

XuatTong
Cơng việc: ◦ tính và xuất
tổng 2 số nguyên
Đầu vào: hai ◦ số
ngun x và y
Đầu ra:


◦ khơng có

void XuatTong(int x, int y)
{
int s; s
= x + y;
printf(“%d cong %d
bang %d”, x, y, s);
}






Tên hàm:

TinhTong
Cơng việc: ◦ tính và trả
về tổng 2 số nguyên
Đầu vào: hai ◦ số
nguyên x và y
Đầu ra: một ◦ số nguyên
có giá trị x + y
int TinhTong(int x, int y)
{
int s; s
= x + y;
return s;
}


Tên hàm:
NhapXuatTong
Công việc:
nhập và xuất tổng 2 số
ngun
Đầu vào: khơng có
Đầu ra: khơng có

void NhapXuatTong()
{
int x, y;
printf(“Nhap 2 so
nguyen: ”);
scanf(“%d%d”, &x,
&y);
printf(“%d cong %d
bang %d”, x, y, x + y);
}


Biên soạn: Nguyễn Kim Việt
c. Khai báo

-

-

d. Gọi hàm
Gọi hàm: Yêu cầu thực thi 1 tác vụ (hàm) với dữ liệu cụ thể Cú

pháp gọi hàm: Tênhàm (các dữ liệu cho từng tham số) Các trị
cho từng tham số cần thiết:
• Đủ tham số
• Đúng kiểu tham số đã khai báo trong hiện thực hàm
Có thể gọi hàm lồng nhau

e. Lưu ý:
- Hàm không trả trị không gọi trong hàm printf
- Hàm trả trị có thể gọi trong hàm printf hoặc phát biểu đơn\
e. Tham trị và tham biến:
Chương trình hoán vị 2 số:


Biên soạn: Nguyễn Kim Việt

II.

Bài tập
1. Viết lại chương trình tính và xuất tổng của 2 số ngun có sử dụng
hàm theo ví dụ trên.
2. Viết hàm tìm số lớn nhất trong 2 số x, y. Viết chương trình nhập vào 3
số nguyên a, b, c. Sử dụng hàm trên để tìm số lớn nhất trong 3 số này.
3. Viết hàm tính n! (kết quả trả về là một số kiểu long). Viết chương trình
chính nhập vào số ngun, sử dụng hàm trên để tính giai thừa.
4. Viết hàm hốn đổi giá trị của 2 số a, b
5. Viết chương trình nhập vào số thực x và số nguyên n. Tính x n có sử
dụng hàm.
6. Viết hàm tính n!!, biết: n!!= 1 * 3 * 5 * … * n nếu n lẻ
n!!= 2 * 4 * 6 * … * n nếu n chẵn
7. Viết hàm tính giai thừa của một số nguyên k (k!). Sử dụng hàm này để

tính dãy số S dưới đây:
S = 1! + 2! + 3! + … + n!
8. Viết chương trình nhập một số nguyên n và số thực x. Tính tổng sau:
S = 1 + x/1 + x2/2! + x3/3! + … + xn/n!


Biên soạn: Nguyễn Kim Việt
(Gợi ý: có thể viết 2 hàm tính lũy thừa xk và hàm tính giai thừa k! rồi
áp dụng để tính tổng trên).
9. Viết chương trình dạng hàm tìm BSCNN và USCLN của 2 số nguyên
a,b với yêu cầu các hàm được viết như sau:
a. Hàm tìm USCLN với đầu vào là a và b, hàm trả về giá trị là
USCLN;
b. Hàm tìm BSCNN với đầu vào là a và b,hàm trả về giá trị là
BSCNN;
c. Hàm vừa tìm BSCNN và USCLN với đầu vào là a và b, hàm trả
về hai giá trị là BSCNN và USCLN.
10. Viết chương trình dạng hàm thực hiện các công việc sau đây:
a. Nhập một số nguyên dương n.
b. Kiểm tra xem n có phải là số nguyên tố hay khơng.
c. Liệt kê (in ra màn hình) các số nguyên tố nhỏ hơn n.
d. Đếm số lượng các số nguyên tố nhỏ hơn n.
e. Tính tổng các số nguyên tố nhỏ hơn n.
f. Liệt kê n SNT đầu tiên.


Biên soạn: Nguyễn Kim Việt

Tuần 5
I.


Nội dung:
1. Mảng 1 chiều

II.

Hướng dẫn:
1. Định nghĩa
• Array: là một nhóm các phần tử có cùng kiểu và chung tên
• Element: phần tử của mảng. Có thể là những kiểu dữ liệu cơ bản như
int, long, char,… hoặc các kiểu do người dùng định nghĩa
• Index: số ngun thể hiện vị trí của phần tử xác định. Trong C chỉ số
(index) bắt đầu bằng 0
• Demension: chiều của mảng, cũng chính là số lượng các chỉ số giúp
ta xác định một phần tử của mảng. Mảng 1 chiều cần 1 chỉ số, 2 chiều
cần 2 chỉ số…
2. Ví dụ mảng 1 chiều:

3. Khai báo mảng:

4. Khởi tạo cho mảng 1 chiều:
Khởi tạo = Khai báo + Gán giá trị cho mảng
Vd: int a[5] = {4,6,3,8,9};


Biên soạn: Nguyễn Kim Việt
5. Duyệt mảng 1 chiều

III.


Bài tập
1. Viết chương trình dạng hàm thực hiện các cơng việc nhập và xuất mảng
một chiều các số nguyên như sau:
a. Nhập mảng số nguyên có n phần tử bằng cách gán giá trị trực tiếp
cho các phần tử của mảng.
b. Xuất mảng theo thứ tự xuôi.
c. Xuất mảng theo thứ tự ngược.
d. Nhập mảng số nguyên có n phần tử bằng cách cho người dùng
nhập giá trị cho từng phần tử mảng.
e. Nhập mảng số nguyên có n phần tử bằng cách nhập tự động sao
cho giá trị của từng phần tử mảng nằm trong khoảng [-100,100].
f. Nhập mảng số nguyên có n phần tử bằng cách nhập tự động sao
cho giá trị của từng phần tử mảng là các số lẻ bất kỳ có các giá trị
nằm trong khoảng [1,99].
g. Nhập mảng số nguyên có n phần tử bằng cách nhập tự động sao
cho giá trị của từng phần tử mảng là các số chẵn liên tiếp nhau
bắt đầu từ 0. Ví dụ: n=7 thì a={0,2,4,6,8,10,12}.
h. Nhập mảng số nguyên có n phần tử bằng cách sao chép nội dung
từ một mảng khác đã có sẵn. Ví dụ: mảng a có 7 phần tử có các
giá trị như sau: {0,2,4,6,8,10,12}. Sao chép các giá trị này cho
mảng b.
2. Viết chương trình dạng hàm tìm phần tử lớn nhất / nhỏ nhất có trong
mảng 1 chiều các số nguyên.
3. Viết chương trình dạng hàm tìm vị trí của phần tử lớn nhất / vị trí của
phần tử nhỏ nhất có trong mảng 1 chiều các số nguyên.


Biên soạn: Nguyễn Kim Việt
4. Viết chương trình dạng hàm tìm phần tử lớn nhất và nhỏ nhất có trong
mảng 1 chiều các số nguyên, với yêu cầu tìm phần tử max và min viết

chung trong 1 hàm.
5. Viết chương trình dạng hàm tìm vị trí của phần tử lớn nhất và vị trí của
phần tử nhỏ nhất có trong mảng 1 chiều các số nguyên, với yêu cầu tìm
vị trí max và vị trí min viết chung trong 1 hàm.
6. Viết chương trình dạng hàm tìm phần tử lớn nhất và lớn thứ nhì có trong
mảng 1 chiều các số ngun.
7. Viết chương trình dạng hàm tìm vị trí của phần tử lớn nhất và vị trí của
phần tử lớn thứ nhì có trong mảng 1 chiều các số nguyên.
8. Viết chương trình dạng hàm để xử lý các công việc sau trên mảng 1
chiều các số nguyên:
a. Tổng các phần tử của mảng
b. Trung bình các phần tử của mảng
c. Tổng các phần tử lẻ/ chẵn/ âm, dương
d. Đếm các phần tử không âm
e. Xuất các phần tử là số nguyên tố
f. Xuất các phần tử là số chính phương
g. Kiểm tra xem x có xuất hiện trong mảng hay khơng
h. Kiểm tra xem mảng có đối xứng hay khơng
i. Kiểm tra mảng có chứa tồn số dương/ âm hay khơng
j. Kiểm tra mảng có phải mảng tăng/ giảm hay không
k. Đếm số lần xuất hiện của x trong mảng
l. Sắp xếp mảng tăng/ giảm dần


×