intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Hướng dẫn giải bài tập thực hành môn ngôn ngữ lập trình C

Chia sẻ: Vu Thanh Hai Hai | Ngày: | Loại File: DOC | Số trang:47

1.138
lượt xem
101
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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......

Chủ đề:
Lưu

Nội dung Text: Hướng dẫn giải bài tập thực hành môn ngôn ngữ lập trình C

  1. 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 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: X3 + Y2 - 2.X.Y + 10; sin(X); cos(X + Y); sin(2.X - Y); eX ; … 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: cuongntit@yahoo.com–cuongntit@gmail.com - Tel: 0912.402.279
  2. Trang 2 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 đổi khoảng thời gian tính bằng giây đó sang A giờ B phút và C giây (ví dụ: 1000 giay = 0 gio 16 phut 40 giay). Bài 1.07. Nhập vào 2 số x và y. Tính giá trị xy (x mũ y). PHẦN 2. CÂU LỆNH CÓ ĐIỀU KIỆN if, switch… case … Bài 2.01. Lập trình khai báo các biến a, b kiểu số thực. Giải phương trình a.x + b = 0, in kết quả nghiệm ra màn hình. Hướng dẫn giải: • Nhập vào 2 tham số a và b. • Nếu a = 0 o Nếu b = 0 =>> phương trình vô số nghiệm o Nếu b != 0 =>> phương trình vô nghiệm • Nếu a != 0 thì nghiệm là x = -b/a; Bài 2.02. Lập chương trình nhập vào một số thực biểu thị số đo của bán kính hình tròn. Kiểm tra xem số đó có là số dương hay không. Nếu có, tính ra chu vi và diện tích của nó rồi đưa kết quả ra màn hình. Nếu không thoả mãn. Cho biết hằng số có tên M_PI lưu giá trị của số π được định nghĩa sẵn. Bài 2.03. Lập trình khai báo các biến a, b, c kiểu số thực. Giải phương trình bậc hai một ẩn a.x2 + b.x + c = 0, in kết quả nghiệm ra màn hình. 1. Nếu a khác 0 thì có nghiệm ngay Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: cuongntit@yahoo.com–cuongntit@gmail.com - Tel: 0912.402.279
  3. Trang 3 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 2. Ngược lại (a==0) 2.1. Khả năng 1: nếu b==0 thì có vô số nghiệm 2.2. Ngược lại (b khác 0) => phương trình vô nghiệm Bài 2.04. Lập trình khai báo biến số nguyên a. Yêu cầu người dùng nhập vào 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(x0, y0), 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 ý S= p.( p − a ).( p − b).( p − c) và kiểm tra xem tam giác đó là tam giác vuông, cân, p = (a + b + c) / 2 ) trong đó đề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  1 x +b1 y =c1 a   2 x +b2 y =c2 a Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: cuongntit@yahoo.com–cuongntit@gmail.com - Tel: 0912.402.279
  4. 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 Bài 2.09. Lập chương trình yêu cầu người dùng phải nhập vào đúng 4 số nguyên dương. Sau đó tính tổng của 2 số lớn nhất và nhỏ nhất trong 4 số đó. In các kết quả ra màn hình. Bài 2.10. Hãy nhập vào một giá trị là D số KWh điện tiêu thụ trong 1 tháng. Tính tiền điện cần phải trả biết rằng: D ∈ [0..100] đơn giá 450 đ; D ∈ [101..150] đơn giá 600 đ; D ∈ [151..250] đơn giá 800 đ; từ 251 trở lên đơn giá 1000 đ. Bài 2.11. Thực hiện nhập vào 1 số biểu thị năm dương lịch. Hãy in ra màn hình cách đọc năm đó theo âm lịch tương ứng (ví dụ: 2006 – Binh Tuat, 2005 – At Dau, …) Biết năm thứ nhất sau công nguyên là năm Tân Dậu (Ví dụ: Nhập vào 1 thì in ra – Tan Dau). PHẦN 3. CÂU LỆNH LẶP for…, while…, do… while … Bài 3.01. Viết chương trình khai báo biến nguyên i làm biến chạy. In ra màn hình 10 dòng chữ có nội dung là họ tên sinh viên, lớp, khoa. Bài 3.02. Viết chương trình tính tổng của 100 số nguyên dương đầu tiên (bằng 3 kiểu vòng lặp). Bài 3.03. Đưa ra bảng nhiệt độ Celcius Tc từ 00C, 10 C, …1000C 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à a3 + b3 + c3 = 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: cuongntit@yahoo.com–cuongntit@gmail.com - Tel: 0912.402.279
  5. Trang 5 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 2x1=2 3x1=3 4x1=4 5x1=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 = 10 2 x 10 = 20 3 x 10 = 30 4 x 10 = 40 5 x 10 = 50 Tiếp theo là bảng 6 đến 10 Dòng 1: 6 x 1 = 6 7 x 1 = 7 8 x 1 = 8 9 x 1 = 9 10 x 1 = 10 Dòng 2: 6 x 2 = 12 7 x 2 = 14 8 x 2 = 16 9 x 2 = 18 10 x 2 = 20 Dòng 3: 6 x 3 = 18 7 x 3 = 21 8 x 3 = 24 9 x 3 = 27 10 x 3 = 30 … Dòng 10: 6 x 10 = 60 7 x 10 = 70 8 x 10 = 80 9 x 10 = 90 10 x 10 = 100 Để phù hợp màn hình, ta chỉ in 5 cột. Trên cùng 1 dòng thì chỉ số đứng trước tăng từ 1 đến 5, xuống dòng lại quay về tăng từ 1 đến 5. Trên cùng cột thì chỉ số đứng sau tăng từ 1 đến 10, trên cùng 1 dòng thì nó giữ nguyên. Áp dụng vòng for lồng nhau. Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: cuongntit@yahoo.com–cuongntit@gmail.com - Tel: 0912.402.279
  6. 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.06. Viết chương trình tăng lương. Khai báo và nhập vào giá trị cho biến số luong. Thực hiện tăng lương theo quy luật mỗi lần tăng thêm 200 đ, tăng cho đến khi luong ≥ 1500 đ. In ra màn hình lương cuối cùng và số lần tăng. Bài 3.07. Lập trình giải bài toán sau: Năm 1992 dân số nước ta là 72 triệu người, tốc độ tăng dân số là 1, 02 % / năm. Hỏi đến năm bao nhiêu thì dân số nước ta là 80 triệu người (có thể yêu cầu nhập số dân cuối cùng, thay cho 80 triệu, rồi in ra số năm). Bài 3.08. Nhập số thực a từ bàn phím. Hãy tìm số tự nhiên N nhỏ nhất thoả mãn:1 + 1/2 + 1/3 +…+ 1/n > a. Cho biết giá trị của tổng trên (chú ý kiểm tra điều kiện 1 n = 1 • Nếu a = 1,5 thì 1 + 1/2 = 1,5 = a => n = 2 • 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: cuongntit@yahoo.com–cuongntit@gmail.com - Tel: 0912.402.279
  7. Trang 7 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 3 5 7 x x x x Bài 3.09. Tính gần đúng tổng sau: T = + + ... Với số hạng cuối ++ 1! 3! 5! 7! 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; Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: cuongntit@yahoo.com–cuongntit@gmail.com - Tel: 0912.402.279
  8. Trang 8 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 1 1 1 1 Bài 3.10. Tính tổng S = 1 + 3! + 5! + .... + (2n + 1)! tới khi < a, với 0 < a < 0, 01 (2n + 1)! nhập từ bàn phím. Bài 3.11. Tính gần đúng giá trị của hàm số ex theo công thức: x x 2 x3 xn xn . Giá trị được tính cho tới khi với ep và x là các < ep , e =1+ + + + ... + x n! 1! 2! 3! n! số thực nhập từ bàn phím, (0
  9. 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 Bài 3.18. Thuật toán sau tìm ước chung lớn nhất của 2 số a và b (giả sử a > b) : UCLN(a, b) = UCLN(b, a-b). Viết chương trình tìm UCLN của 2 số a và b nhập vào từ bàn phím. Chương trình cho phép chạy nhiều lần. Bài 3.19. Số "hoàn hảo" là số mà tổng các ước số của nó lại bằng chính nó. Viết chương trình in ra các số hoàn hảo nhỏ hơn 10.000 ra màn hình. Chương trình cho phép chạy nhiều lần. 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
  10. Trang 10 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
  11. 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 printf(“\nBien chay vong for trong: j = %d”, j); } getch(); } //ket thuc chuong trinh Bài 3.22. Giải bài toán dân gian sau: "Vừa gà vừa chó. Bó lại cho tròn. 36 con. 100 chân chẵn. Hỏi mấy con chó, mấy con gà ?". Bài 3.23. Giải bài toán dân gian sau: "Trăm trâu, trăm cỏ. Trâu đứng ăn 5. Trâu nằm ăn 3. Lụ khụ trâu già. Ba con một bó. Hỏi số trâu mỗi loại ?". PHẦN 4. KIỂU MẢNG 1 CHIỀU Sinh giá trị ngẫu nhiên: Dùng hàm rand() để sinh giá trị ngẫu nhiên từ 0 đến 80’117’759 (kiểu long). Trước khi dùng hàm rand() thì cần có hàm randomize(); để khởi tạo bộ giá trị ngẫu nhiên và #include 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: cuongntit@yahoo.com–cuongntit@gmail.com - Tel: 0912.402.279
  12. Trang 12 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. Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: cuongntit@yahoo.com–cuongntit@gmail.com - Tel: 0912.402.279
  13. 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 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. Bài 4.02. Nhập vào số nguyên N và dãy số a 1, a2, …, an. Hãy tính trung bình cộng của dãy số. Tìm các số ai gần giá trị trung bình cộng nhất. Hướng dẫn giải: 1. Khai báo biến tbc, ban đầu gán tbc = 0; sau đó dùng vòng lặp cộng dồn các số trong mảng. // tbc = tbc + a[i] ; 2. Giá trị trung bình cộng = tổng / n; Tuy nhiên để tiết kiệm biến nhớ, ta tính tbc = tbc / n; 3. Số a[i] gần tbc nhất nghĩa là độ lệch ss = | a[i] – tbc | đạt min. a. Ban đầu ta gán ss = | a[0] – tbc |; // lệnh thật là ss = fabs( a[0] – tbc ); b. Duyệt từ a[1] đến a[n-1] nếu | a[i] – tbc | < ss thì gán lại giá trị ss = | a[i] – tbc | =>> lệnh thật là if ( fabs(a[i] – tbc) < ss ) ss = fabs(a[i] – tbc) ; 4. Tìm vị trí a[i] có độ lệch so với tbc nhỏ nhất bằng cách duyệt từ a[0] đ ến a[n-1] nếu fabs(a[i]-tbc) == ss thì ta in vị trí và giá trị của a[i] ra màn hình. Bài 4.03. Nhập giá trị hàm số y= x − e x với 8 giá trị của đối số x (trong đó x∈[0, 5]) Nhập từ bàn phím. Tìm giá trị x mà tại đó hàm số đạt giá trị lớn nhất. Hiển thị giá trị x, y tìm được lên 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: cuongntit@yahoo.com–cuongntit@gmail.com - Tel: 0912.402.279
  14. Trang 14 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 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; 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=X1+X1X2+X1X2X3 +…+X1X2…Xn trong đó N là số tự nhiên (n> tong = a[1] ; // i = 1 Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: cuongntit@yahoo.com–cuongntit@gmail.com - Tel: 0912.402.279
  15. 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 Lặp lần 2: In ra a[1] + a[2] =>> Ta cộng dồn tổng của bước trước với a[2] Lặp lần 3: In ra a[1] + a[2] + a[3] =>> Ta cộng dồn tổng của bước trước với a[3] … Lặp lần i: In ra a[1] + a[2] + … + a[i] =>> Ta cộng dồn tổng của bước trước với a[i] =>> Công thức tổng quát: tong = tong + a[i] ; Do là tổng cộng dồn nên ban đầu tong = 0 ; // nếu không khởi tạo, sẽ in ra giá trị bất kỳ (không xác định). Câu b) Đây là tích nhân dồn theo từng bước, theo Câu a) ta có: tich = tich * a[i] ; Nhưng do sau mỗi bước, tich đảo dấu nên công thức sẽ là tich = - tich * a[i] ; // ban đầu tich = 1 ; Bài 4.06. Nhóm 1 & Nhóm 2 Nhập từ bàn phím 10 đỉnh a1, a2, …, a10, trong đó ai = (xi, yi), i = 1…10. Tính độ dài đoạn thẳng khi biết toạ đ ộ hai điểm đ ầu mút. 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] ; Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: cuongntit@yahoo.com–cuongntit@gmail.com - Tel: 0912.402.279
  16. Trang 16 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 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]) =>> dd [1] = ( x1 − x2 ) 2 + ( y1 − y2 ) 2 . 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]) =>> dd [1] = ( x2 − x2 ) 2 + ( y3 − y3 ) 2 . Lệnh thật là: dd[2] = sqrt( pow(x[2] – x[3], 2) + pow(y[2] – y[3], 2) ) ; =>> 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 cạnh thứ luật Riêng 10 thì không theo quy trên vì: dd [10] = ( x1 − x10 ) 2 + ( y1 − y10 ) 2 . Lệnh thật là: dd[10] = sqrt( pow(x[1] – x[10], 2) + pow(y[1] – y[10], 2) ) ; Khoảng cách lớn nhất: =>> ta tìm giá trị max trong mảng dd. Hay tìm vị trí vt để dd[vt] đạt max. Bài 4.07. (Nhóm 1 & Nhóm 2) Nhập số tự nhiên N và dãy số a1, a2, …an. Tìm số lượng và tổng các thành phần của dãy chia hết cho 5 mà không chia hết cho 7. Các phần tử ak mà ak là số chính phương. In ra màn hình các số chính phương > X với X nhập từ bàn phím. Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: cuongntit@yahoo.com–cuongntit@gmail.com - Tel: 0912.402.279
  17. Trang 17 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 4.08. (Nhóm 1 & Nhóm 2) Nhập số tự nhiên N và dãy a1, a2, …an. 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 ai (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ị ai∉[-10, 10] và thay bằng 9. Bài 4.09. Nhập số tự nhiên N và dãy a1, a2, …an. Hãy tìm : max(a2, a4, a6, …) + min(a1, a3, a5, …) và max (a1, a2, …, an). Hiển thị kết quả lên màn hình. Hướng dẫn giải: Thực hiện duyệt từ đầu đến cuối mảng, nếu tìm max thì theo chỉ số chẵn (I xuất phát = 0; bước lặp là i = i + 2) nếu tìm min thì xuất phát i = 1 và b ước lặp i = i + 2; Tìm max cả mảng (maxall) thì ta duyệt từ đầu đến cuối mảng, bước lặp i++; Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: cuongntit@yahoo.com–cuongntit@gmail.com - Tel: 0912.402.279
  18. Trang 18 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 4.10. Phát sinh ngẫu nhiên hai véc tơ X = (x1, x2, …, xn), Y = (y1, y2, …yn), 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] > 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 = (x1, x2, …, xn), Y = (y1, y2, …yn), trong đó N là số tự nhiên nhỏ hơn 100 được nhập từ bàn phím. Tính Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: cuongntit@yahoo.com–cuongntit@gmail.com - Tel: 0912.402.279
  19. Trang 19 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 độ dài véctơ X theo công thức X = x12 + x22 + ..... + xn2 . Tìm tổng véctơ Z = X+Y (Z=(z1, z2, …zn)) theo công thức zi = xi+yi (i = 1..n). Tính tích vô hướng của hai véc tơ X và Y theo công thức X. Y = x1y1+x2y2+…+xnyn. Bài 4.12. Nhập từ bàn phím số tự nhiên N và hai dãy số nguyên a1, a2, …, an ; b1 , b2, …, bn, (với ai ≠ aj , bi≠bj, i≠j và (i, j =1…n). Tìm giao của hai dãy trên. Tìm hợp của hai dãy trên (các số bằng nhau chỉ lấy 1 lần). Bài 4.13. Nhập số tự nhiên N và dãy a1, a2, …, an, dãy ai (i = 1…n) được nhập ngẫu nhiên. Hãy tìm trung bình cộng của các số ai (i = 1…n) trong dãy mà ai∈[x, y], x < y là các số thực nhập từ bàn phím. Bài 4.14. Phát sinh ngẫu nhiên một dãy số nguyên dương N phần tử, N nhập từ bàn phím và 0 < N < 30. Sắp xếp chúng theo thứ tự tăng dần. Hiển thị cả hai dãy số lên màn hình (dãy ban đầu và dãy đã sắp xếp). Bài 4.15. Tìm giá trị nhỏ thứ k của dãy số x1, x2…, xn. Trong đó: n>1 là số tự nhiên nhập từ bàn phím, xi (i =1…n) là các số thực được phát sinh ngẫu nhiên. Hiển thị các kết quả lên màn hình. Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: cuongntit@yahoo.com–cuongntit@gmail.com - Tel: 0912.402.279
  20. Trang 20 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 4.16. Phát sinh ngẫu nhiên N số nguyên dương, N là số tự nhiên nhỏ hơn 100 được nhập từ bàn phím. Đếm những số chẵn và cho chúng vào mảng a. Sắp xếp những số lẻ theo thứ tự tăng dần. In các kết quả ra màn hình. Hướng dẫn giải: Số x là chẵn là số mà x % 2 == 0 Duyệt từ đầu mảng đến cuối mảng x, nếu x[i] % 2 == 0 thì ta cho x[i] vào mảng a, nghĩa là a[j] = x[i]. Số phần tử ở mảng chẵn a không đồng nhất với số phần tử ở mảng x ban đầu =>> Mỗi khi gặp x[i] chẵn thì ta phải tăng biến đếm của mảng a lên j = -1; // vì chỉ số mảng tính từ 0, ta coi j = -1 là không có phần tử nào for (i= 0; i < n; i++) if (x[i] % 2 == 0) { j ++; a[j] = x[i]; } // In mảng a với j + 1 phần tử if (j >= 0) { printf (“\n Mang %d so chan la: \n”, j +1 ); InMang (a, j); } else printf (“\n Mang ban dau khong co so chan. \n”); Giảng viên Th.S. Nguyễn Thế Cường - Khoa CNTT-ĐHHH, Email: cuongntit@yahoo.com–cuongntit@gmail.com - Tel: 0912.402.279
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2