Hướng dẫn giải bài tập ngôn ngữ lập trình c - Pdf 52

HƯỚNG DẪN GIẢI BÀI TẬP THỰC HÀNH MÔN HỌC NGÔN NGỮ LẬP TRÌNH C
PHẦN 1. CÂU LỆNH ĐƠN GIẢN scanf, printf
Bài 1.01. Lập chương trình khai báo các biến lưu điểm toán, lý, hoá của một
học sinh. Nhập vào các điểm số đó và đưa ra màn hình điểm tổng và điểm trung
bình cộng của 3 môn học.
Bài 1.02. Lập chương trình nhập vào số đo của bán kính hình tròn, tính ra chu vi
và diện tích của nó rồi đưa kết quả ra màn hình. Cho biết hằng số có tên M_PI
lưu giá trị của số π (≈ 3, 14142) được định nghĩa sẵn.
Bài 1.03. Lập chương trình nhập vào số đo 2 cạnh chiều dài, chiều rộng của
hình chữ nhật. Tính ra chu vi và diện tích của nó rồi đưa kết quả ra màn hình.
Bài 1.04. Lập trình nhập vào giá trị của 2 biến kiểu số thực có tên X và Y. Tính
và in ra màn hình giá trị của các biểu thức sau: X
3
+ Y
2
- 2.X.Y + 10; sin(X);
cos(X + Y); sin(2.X - Y); e
X
; … Chú ý in có định dạng.
Bài 1.05. Viết chương trình nhập vào 2 số bất kỳ và đổi giá trị của chúng cho
nhau. In các số trước và sau khi đổi giá trị ra màn hình (thử chương trình với 2
cách: dùng biến trung gian và không dùng biến trung gian – cho nhận xét về
giới hạn giá trị của 2 biến số trong 2 cách)
Cách 1: Dùng biến trung gian
tg = a; a = b; b = tg;
Cách 2: Không dùng biến trung gian:
a = a + b; b = a - b; a = a - b;
Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: [email protected][email protected] - Tel: 0912.402.279
Trang 1
HƯỚNG DẪN GIẢI BÀI TẬP THỰC HÀNH MÔN HỌC NGÔN NGỮ LẬP TRÌNH C
Bài 1.06. Nhập vào một giá trị số nguyên dương N và coi đó là đơn vị giây. Hãy

giá trị từ 0.. 10. In ra màn hình cách đọc số đó theo kiểu tiếng Việt không dấu.
Ví dụ: Nhập vào số 1 thì in ra MOT, nhập vào 2 in ra HAI.
Bài 2.05. Nhập vào tâm đường tròn O(x
0
, y
0
), bán kính R. Kiểm tra xem 1 điểm
(x, y) được đưa vào từ bàn phím có nằm trên, trong hoặc ngoài đường tròn đã
cho không?
Bài 2.06. Nhập vào từ bàn phím 3 cạnh a, b, c của hình hộp chữ nhật. Kiểm tra
xem có thoả mãn là số dương hay không. Nếu thoả mãn, tính thể tích các hình
hộp theo công thức V = a.b.c. Hiển thị kết quả lên màn hình, nếu không in ra
thông báo "KHONG THOA MAN LA SO DO CANH HINH HOP".
Bài 2.07. Nhập từ bàn phím các số thực x1, x2, x3, y1, y2, y3. Kiểm tra các
đỉnh có toạ độ (x1, y1), (x2, y2), (x3, y3) có lập thành một tam giác không. Nếu
đúng hãy tính: Chu vi, diện tích và các chiều cao tương ứng của tam giác đó.
Nếu không thì hiện thông báo lên màn hình (gợi ý
)).().(.( cpbpappS
−−−=
trong
đó
2/)( cbap
++=
) và kiểm tra xem tam giác đó là tam giác vuông, cân, đều hay
thường
Bài 2.08. Giải và biện luận phương trình bậc nhất hai ẩn: Các hệ số được nhập
từ bàn phím




0
C và nhiệt độ
tương ứng Ferengay Tf theo công thức chuyển đổi: Tf

= (9/5). Tc

+ 32. Biểu
diễn thành 2 cột tương ứng (chú ý in có định dạng).
Bài 3.04. Tìm các số có 3 chữ số abc, sao cho tổng các lập phương của các chữ
số bằng chính số đó (tức là a
3
+ b
3
+ c
3
= abc = 100.a + 10.b + c). In các kết quả
ra màn hình.
Hướng dẫn giải:
Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: [email protected][email protected] - Tel: 0912.402.279
Trang 4
HƯỚNG DẪN GIẢI BÀI TẬP THỰC HÀNH MÔN HỌC NGÔN NGỮ LẬP TRÌNH C
Ba chữ số a, b và c mỗi số có thể chạy từ 0 đến 9 và giá trị là từ 100 đến 999.
Bài 3.05. Viết chương trình in ra bảng cửu chương.
Dòng 1: 1 x 1 = 1 2 x 1 = 2 3 x 1 = 3 4 x 1 = 4 5 x 1 = 5
Dòng 2: 1 x 2 = 2 2 x 2 = 2 3 x 2 = 3 4 x 2 = 8 5 x 2 = 10
Dòng 3: 1 x 3 = 3 2 x 3 = 6 3 x 3 = 9 4 x 3 = 12 5 x 3 = 15

Dòng 10: 1 x 10 = 102 x 10 = 20 3 x 10 = 30 4 x 10 = 40 5 x 10 =
50
Tiếp theo là bảng 6 đến 10

• Nếu a = 2 thì biểu thức là: 1/1 + 1/2 +1/3 + 1/4 = 2,08333 > 2 =>> n = 4
• Nếu a = 2.2 thì biểu thức là: 1/1 + 1/2 +1/3 + 1/4 + 1/5 = 2,283 > 2.2 =>>
n = 5
=>> thuật toán sẽ là cứ cộng dồn theo từng bước cho đến khi tổng > a và
trước mỗi lần tăng thì n ++;
Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: [email protected][email protected] - Tel: 0912.402.279
Trang 6
HƯỚNG DẪN GIẢI BÀI TẬP THỰC HÀNH MÔN HỌC NGÔN NGỮ LẬP TRÌNH C
Bài 3.09. Tính gần đúng tổng sau:
...
!7!5!3!1
753
++++=
xxxx
T
Với số hạng cuối cùng
của tổng là số hạng đầu tiên có giá trị tuyệt đối < ep, x và ep được nhập từ bàn
phím.
• Lặp lần 1: T = x / 1! = x / 1;
• Lặp lần 2: T = x / 1! + x*x*x / 3! = T + x*x*x / 3!;
• Lặp lần 3: T = x / 1! + x*x*x / 3! + x.x.x.x.x/ 5! = T + x.x.x.x.x / 5!;
Phân số cuối cùng cũng được kế thừa nhau như sau:
Xét tử số: để ts = x thành ts = x.x.x thì ta lấy ts = ts * x * x;
Với mẫu số:
Ban đầu: ms = 1! = 1; // i = 1
Lặp lần 2: i = i + 2 = 3; để mẫu số: từ ms = 1 ! thành ms = 3! = 1.2.3 =>>
Nghĩa là: ms = ms * 2 * 3 hay ms = ms * (i -1) * i ;
Lặp lần 3: i = i + 2 ; // i = 3 + 2 = 5, thì mẫu số: từ ms = 3 ! thành ms = 5!
= 1.2.3.4.5 = 3! .4.5; =>> Do 3! = ms cũ nên ms mới sẽ tính là: ms = ms * (i -1)
* i;

!3!2!1
1
32
n
xxxx
e
n
x
+++++=
. Giá trị được tính cho tới khi
ep
n
x
n
<
!
, với ep và x là các số
thực nhập từ bàn phím, (0<ep<1).
Bài 3.12. Nhập số tự nhiên N từ bàn phím, có kiểm tra điều kiện n<10. Hãy tính
n! = 1.2.3.... n. Giai thừa cách n!! và (-1)
n
n!!. với n!! = 1.3… N khi N lẻ và n!!=
2.4.6…n khi N chẵn.
Bài 3.13. Tính giá trị của biểu thức y = 4x
3
- 2x
2
+5 trong đó giá trị của biến số x
chạy từ -3 đến 1 với bước nhảy 0.1.
Bài 3.14. Nhập vào số thực a từ bàn phím. Hãy tìm số tự nhiên N nhỏ nhất thoả

Phân tích tổng quan
Bài toán con 1: tìm ước số
Bài toán con 2: tìm tổng các ước
Nếu tổng các ước = chính số đó => số hoàn hảo
Giả sử có số n, thì ước của n chỉ nằm từ 1 đến n/2
=> để tìm ước của n thì dùng biến chạy i từ 1 đến n/2
Nếu n chia hết cho i thì cộng dồn tổng các ước
Sau khi cộng xong, nếu tổng các ước của n bằng chính n thì n là hoàn hảo
// không được cho lệnh tong = 0 ở đây vì mỗi lần thử tính hoàn hảo của n thì
phải gán tong = 0 từ đầu
for (n=2; n <= 10000; n ++) //== thử tất các các số từ 2 đến 10000
{
tong = 0;
//== dùng biến chạy i để kiểm tra ước số
for(i=1; i <n/2; i++)
Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: [email protected][email protected] - Tel: 0912.402.279
Trang 9
HƯỚNG DẪN GIẢI BÀI TẬP THỰC HÀNH MÔN HỌC NGÔN NGỮ LẬP TRÌNH C
if (n % i==0) tong = tong + i;
//== kiem tra tổng các ước có bằng n hay không?
if(tong == n) thì in ra n là hoàn hảo;
}
Bài 3.20. Lập trình giải phương trình bậc 3 một ẩn số a.x
3
+ b.x
2
+ c.x + d = 0
bằng phương pháp "chia đôi". Với các hệ số thực a, b, c, d nhập vào từ bàn
phím (sao cho dễ xác định khoảng nghiệm). Giải phương trình trên sao cho sai
số của nghiệm là nhỏ hơn ss, với ss là biến số thực nhập vào từ bàn phím (0 < ss

Sinh giá trị ngẫu nhiên cho mảng ta có lệnh sau:
randomize();
for (i=0; i < n; i++) a[i] = rand() % 32676 ;
// chia lấy phần dư cho số nguyên lớn nhất để tránh bị tràn số
Để khởi tạo giá trị ngẫu nhiên từ 0 đến 99 thì ta dùng: rand() % 100
Để khởi tạo giá trị ngẫu nhiên từ -99 đến 99 thì ta dùng: rand() % 200 – 100 ;
Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: [email protected][email protected] - Tel: 0912.402.279
Trang 11
HƯỚNG DẪN GIẢI BÀI TẬP THỰC HÀNH MÔN HỌC NGÔN NGỮ LẬP TRÌNH C
Khởi tạo ngẫu nhiên số thực:
tu = rand () % 200;
do
{ mau = rand () % 100 - 50 ;
} while (mau == 0) ;
a[i] = (float) tu / mau ;
Bài 4.01. Nhập vào dãy số thực gồm N phần tử. N nhập từ bàn phím. Hãy đổi
chỗ: Số lớn nhất cho số bé nhất. Cho biết vị trí của các phần tử trên trong dãy.
Hướng dẫn giải:
1. Khai báo biến n là chỉ số mảng, mảng số thực float a[]; // cho số phần tử là
không xác định trước.
2. Nhập vào biến n và xin cấp phát bộ nhớ cho mảng n phần tử số thực.
3. Với bài toán này, thay vì tìm giá trị max thì ta tìm vị trí của phần tử đạt giá trị
max (ký hiệu là vtmax – vị trí max). Khi đó max chính là a[vtmax].
4. Ban đầu ta gán vtmax = 0; // giả sử ban đầu ta coi vị trí 0 đạt max.
5. Duyệt từ vị trí 1 đến n-1, nếu thấy a[i] > a[vtmax] thì vtmax = i;
6. Tương tự cho min, ta tìm vtmin.
7. In các giá trị vtmax, a[vtmax], vtmin và a[vtmin] ra màn hình.
8. Đổi giá trị max và min cho nhau => ta dùng biết trung gian để đổi giá trị
a[vtmax] và a[vtmin] cho nhau.
9. In mảng kết quả ra màn hình.

thị giá trị x, y tìm được lên màn hình.
Hướng dẫn giải:
Khai báo và nhập vào mảng 8 số thực x[i]. Để tìm x[i] sao cho hàm
y(x[i]) đạt max => ta khai báo biến vt, ban đầu gán vt = 0; Duyệt từ x[1]
đến x[7] nếu y(x[i]) > y(x[vt]) thì vt = i;
// y(x[i]) thực chất chính là sqrt(x[i]) – exp(x[i])
vt = 0;
Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: [email protected][email protected] - Tel: 0912.402.279
Trang 13
HƯỚNG DẪN GIẢI BÀI TẬP THỰC HÀNH MÔN HỌC NGÔN NGỮ LẬP TRÌNH C
for (i = 1; i < 8; i++)
if ( sqrt(x[i]) – exp(x[i]) > sqrt(x[vt]) – exp(x[vt]) ) vt = i ;
In ra giá trị vt, x[vt] và sqrt(x[vt]) – exp(x[vt])
Bài 4.04. Tính tổng: S=X
1
+X
1
X
2
+X
1
X
2
X
3
+…+X
1
X
2
…X

1
+a
2
+…+a
n
.
b) -a
1
; a
1
*a
2
; -a
1
*a
2
*a
3
; ….; (-1)
n
.a
1
*a
2
*…*a
n
.
Hướng dẫn giải:
Câu a)
Lặp lần 1: In ra a[1] =>> tong = a[1] ; // i = 1

Sau đó tính chu vi đa giác có 10 đỉnh theo đúng thứ tự ở trên. Xác định cặp đỉnh
có khoảng cách lớn nhất.
Hướng dẫn giải:
Khai báo 2 mảng số thực lưu tọa độ của 10 đỉnh float x[11], y[11] ; // để ta
tính thứ tự từ x[1] đến x[10], bỏ qua phần tử x[0] và y[0].
Để đo độ dài 10 cạnh, khai báo mảng dd[11] ;
Như vậy, độ dài cạnh 1 là khoảng cách cặp tọa độ (x[1], y[1]) với (x[2],
y[2]) =>>
2
21
2
21
)()(]1[ yyxxdd
−+−=
. Lệnh thật là: dd[1] = sqrt( pow(x[1] – x[2],
2) + pow(y[1] – y[2], 2) ) ; // chú ý cặp mở đóng ngoặc tương ứng.
Độ dài cạnh 2 là khoảng cách cặp tọa độ (x[2], y[2]) với (x[3], y[3]) =>>
2
33
2
22
)()(]1[ yyxxdd
−+−=
. Lệnh thật là: dd[2] = sqrt( pow(x[2] – x[3], 2) +
pow(y[2] – y[3], 2) ) ;
Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: [email protected][email protected] - Tel: 0912.402.279
Trang 15
HƯỚNG DẪN GIẢI BÀI TẬP THỰC HÀNH MÔN HỌC NGÔN NGỮ LẬP TRÌNH C
=>> Công thức tổng quát: // có thể cho vào vòng for
dd[i] = sqrt( pow(x[i] – x[i+1], 2) + pow(y[i] – y[i+1], 2) ) ; // i = 1 .. 9

n
. Sau đó
thực hiện các công việc sau: Nhập một số tự nhiên Q từ bàn phím. Kiểm tra
trong dãy a
i
(i = 1... n) ở trên có phần tử nào bằng Q không? Nếu có tính tổng từ
phần tử đó đến cuối dãy. Nếu không thì hiện thông báo lên màn hình. Tìm tất cả
các giá trị a
i
∉[-10, 10] và thay bằng 9.
Bài 4.09. Nhập số tự nhiên N và dãy a
1
, a
2
, …a
n
. Hãy tìm : max(a
2
, a
4
, a
6
, …) +
min(a
1
, a
3
, a
5
, …) và max (a

trong đó N nguyên nhập từ bàn phím và 0 < N < 30 Tìm véctơ tổng và tính tích
vô hướng của hai véctơ trên. Tìm tất cả các số nguyên tố trong véctơ tổng trên.
Hiện các kết quả lên màn hình.
Hướng dẫn giải:
Khai báo 2 mảng x chỉ vector 1 và y chỉ vector 2, vttong. Các giá trị x[0], x[1],
… x[n-1] là tọa độ của vector x. Tương tự cho vector y.
Tọa độ vector tổng: vttong[i] = x[i] + y[i] ;
Tích vô hướng là 1 giá trị: tvh = x[0].y[0] + x[1].y[1] + … + x[n-1].y[n-1] ;
Khai báo biến dem để đếm các số nguyên tố trong tọa độ vector tổng.
Kiểm tra từng tọa độ của vector tổng, nếu giá trị vttong[i] nào là nguyên tố thì
tăng biến đếm thêm 1 và in số đó ra màn hình.
Với mỗi giá trị vttong[i] ta xét như sau:
• Dùng biến kt để ghi lại xem vttong[i] có là nguyên tố hay không?
• Ban đầu kt = 1;
• // Nếu vttong[i] <= 3 thì đương nhiên là số nguyên tố =>> ta chỉ xét với
các giá trị >= 4 trở đi
Bài 4.11. Phát sinh ngẫu nhiên toạ độ hai véc tơ X = (x
1
, x
2
, …, x
n
), Y = (y
1
, y
2
,
…y
n
), trong đó N là số tự nhiên nhỏ hơn 100 được nhập từ bàn phím. Tính độ


Nhờ tải bản gốc
Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status