

















Preview text:
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương
BÀI THỰC HÀNH SỐ 2 ---------o0o-------- MỤC TIÊU:
Phân loại cấu trúc điều khiển (điều khiển rẽ nhánh, điều khiển lặp)
Sử dụng thành thạo các câu lệnh rẽ nhánh (if, if ..else).
Vận dụng vòng lặp (for, while, do …while) để giải quyết bài toán.
Thực hiện các bài toán kết hợp lệnh lặp và điều kiện.
Hiểu ý nghĩa và thực hiện các bài toán dùng break và continue
I. MỘT SỐ VÍ DỤ MẪU
Ví dụ 1: Viết chương trình tìm số lớn nhất trong ba số thực a,b,c. #nclude #include int main (){ float a,b,c, max; printf(“Nhap a:”); scanf(“%f”,&a); printf(“\nNhap b:”); scanf(“%f”,&b); printf(“\nNhap c:”); scanf(“%f”,&c); max=a; if (maxmax=b; if (max TRANG 1
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương max=c;
printf(“\n So lon nhat trong 3 so %10.3f, %10.3f, %10.3f, la: %10.3f”, a,b,c,max); return 0; }
Ví dụ 2: Viết chương trình nhập vào hai số thực. Kiểm tra xem chúng có cùng dấu hay không? #include #include int main () { float a,b,c, max; printf(“Nhap a:”); scanf(“%f”,&a); printf(“\nNhap b:”); scanf(“%f”,&b); if (a*b>0)
printf(“\n%10.3f va %10.3f cung dau”,a,b); else
printf(“\n%10.3f va %10.3f khong cung dau”,a,b); return 0; } TRANG 2
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương
Ví dụ 3: Nhập vào tháng của một năm. Cho biết tháng thuộc quí mấy trong năm. #include #include int main () { int thang; printf(“Nhap thang:”); scanf(“%d”,&thang); switch (thang) { case 1: case 2: case 2: printf(“Qui mot”); break; case 4: case 5: case 6: printf(“Qui hai”); break; case 7: case 8: case 9: printf(“Qui ba”); break; case 10: case 11: case 12: printf(“Qui bon”); break; } TRANG 3
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương return 0; }
Ví dụ 4: Hãy sử dụng vòng lặp for để xuất tất cả các ký tự từ A tới Z. #include int main() { char kytu;
for(kytu= ‘A’; kytu<= ‘Z’; kytu++) { printf(“%c”, kytu); } return 0; }
Ví dụ 5: Viết chương trình nhập một dãy gồm n phần tử các số nguyên và:
- In mảng trên một dòng.
- Tính tổng và trung bình cộng các phần tử của mảng.
- Tìm giá trị lớn nhất, nhỏ nhất của mảng.
- Đếm trong mảng có bao nhiêu số chẵn, lẻ. - Đảo ngược mảng.
- Sắp xếp mảng theo thứ tự tăng dần. #include int main() { int n, i;
int a[100]; // mảng tối đa 100 phần tử // Nhập số phần tử
printf("Nhap so phan tu cua mang (n <= 100): "); scanf("%d", &n); // Nhập mảng TRANG 4
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương
printf("Nhap %d phan tu:\n", n); for(i = 0; i < n; i++) { printf("a[%d] = ", i); scanf("%d", &a[i]); } // Xuất mảng printf("\nMang vua nhap: "); for(i = 0; i < n; i++) { printf("%d ", a[i]); } printf("\n");
// 1. Tính tổng và trung bình int tong = 0; for(i = 0; i < n; i++) { tong += a[i]; } printf("Tong = %d\n", tong);
printf("Trung binh = %.2f\n", (float)tong/n);
// 2. Tìm giá trị lớn nhất, nhỏ nhất int max = a[0], min = a[0]; for(i = 1; i < n; i++) {
if(a[i] > max) max = a[i];
if(a[i] < min) min = a[i]; } printf("Max = %d\n", max); printf("Min = %d\n", min);
// 3. Đếm số chẵn, số lẻ int chan = 0, le = 0; TRANG 5
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương for(i = 0; i < n; i++) { if(a[i] % 2 == 0) chan++; else le++; }
printf("So phan tu chan = %d, le = %d\n", chan, le); // 4. Đảo ngược mảng printf("Mang dao nguoc: ");
for(i = n-1; i >= 0; i--) { printf("%d ", a[i]); } printf("\n");
// 5. Sắp xếp tăng dần (Bubble Sort)
for(int j = 0; j < n-1; j++) {
for(i = 0; i < n-1-j; i++) { if(a[i] > a[i+1]) { int tmp = a[i]; a[i] = a[i+1]; a[i+1] = tmp; } } }
printf("Mang sau khi sap xep tang dan: "); for(i = 0; i < n; i++) { printf("%d ", a[i]); } printf("\n"); return 0; } } TRANG 6
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương
Ví dụ 6: In tất cả các số nguyên dương lẻ nhỏ hơn 100. #include #include int main() { int i; i=1; while(i<1000) { printf(“%d\t”,i); i=i+2; } return 0; }
Ví dụ 7: Viết chương trình tìm số nguyên dương m lớn nhất sao cho 1+2+3+4+…+m#include #include int main() { int N,m,s; printf(“Nhap N:”); scanf(“%d”,&N); s=0; m=0; do { m=m+1; s=s+m;
}while (s+m+1printf(“So nguyen duong m la %d”,m); TRANG 7
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương return 0; }
Ví dụ 7: Viết chương trình in ra tất cả các số lẻ nhỏ hơn 100 trừ các số 5,7,93 #include #include int main() { int i; for(i=1;i<100;i+=2) {
if((i==5)|| (i==7) || (i==93)) continue; printf(“%5d”,i); } return 0; } II. BÀI TẬP CƠ BẢN
Bài 1: Viết chương trình nhập vào 3 số thực. Hãy in 3 số ấy ra màn hình theo thứ tự
tăng dần mà chỉ dùng tối đa 1 biến phụ.
Bài 2: Viết chương trình giải phương trình bậc 2.
Bài 3: Viết chương trình nhập tháng, năm. Hãy cho biết tháng đó có bao nhiêu ngày.
Bài 4: Viết chương trình nhập vào 1 ngày ( ngày, tháng, năm). Tìm ngày kế ngày vừa
nhập (ngày, tháng, năm).
Bài 5: Viết chương trình nhập vào 1 ngày ( ngày, tháng, năm). Tìm ngày trước ngày
vừa nhập (ngày, tháng, năm).
Bài 6: Viết chương trình nhập ngày, tháng, năm. Tính xem ngày đó là ngày thứ bao nhiêu trong năm. TRANG 8
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương
Bài 7: Viết chương trình nhập 1 số nguyên có 2 chữ số. Hãy in ra cách đọc của số nguyên này.
Bài 8: Viết chương trình nhập 1 số nguyên có 3 chữ số. Hãy in ra cách đọc của số nguyên này.
Bài 9: Viết chương trình in bảng cửu chương ra màn hình.
Bài 10: Cần có tổng 200000 đồng từ 3 loại giấy bạc 1000 đồng, 2000 đồng, 5000 đồng.
Lập chương trình để tìm ra tất cả các phương án có thể.
Bài 11: Viết chương trình in ra tam giác cân có độ cao h
a. Tam giác cân đặc nằm giữa màn hình Ví dụ: với h=4
b. Tam giác cân rỗng nằm giữa màn hình Ví dụ với h=4
c. Tam giác vuông cân đặc Ví dụ với h=4 TRANG 9
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương
d. Tam giác vuông cân rỗng Ví dụ với h=5
Bài 12: Lập chương trình tính sin(x) với độ chính xác 0.00001 theo công thức 𝑥3 𝑥5 𝑥2𝑛+1 𝑠𝑖𝑛(𝑥) = 𝑥 − + +. . . +(−1)𝑛 3! 5! (2𝑛 + 1)!
Bài 13: Nhập số nguyên dương n và số thực x. Tính giá trị biểu thức: sin x sin 2x sin nx S 2010 ... 2 4 2n
Bài 14: Cho dãy số gồm n số nguyên a1, a2, ..., an. Hãy 1.
Tìm giá trị lớn nhất của dãy số. Kiểm tra xem giá trị này có chia hết cho 5 không? 2.
Tính trung bình cộng các phần tử có giá trị âm và chẵn của dãy? Kiểm tra
xem giá trị trung bình cộng này có lớn hơn 4.0 không? 3.
Tính tổng các phần tử có giá trị hoặc chia hết cho 7 hoặc chia hết cho 8
của dãy. Kiểm tra xem tổng tìm được có chia hết cho 7 không? TRANG 10
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương 4.
Đếm số phần tử trong dãy có giá trị hoặc chia cho 5 dư 1 hoặc chia cho 5
dư 2? Kiểm tra xem số phần tử tìm được có chia hết cho 4 không? 5.
In ra màn hình dãy vừa nhập trên một dòng.
Bài 15: Cho dãy số gồm n số thực a1, a2, ..., an. Hãy 1.
Tìm giá trị lớn nhất và giá trị nhỏ nhất của dãy số trên. Kiểm tra xem hiệu
giữa giá trị lớn nhất và nhỏ nhất tìm được có lớn hơn 10 không? 2.
Đếm xem trong dãy có bao nhiêu cặp 2 phần tử liên tiếp mà phần tử đứng
sau có giá trị lớn hơn phần tử đứng trước. 3.
Tính trung bình cộng các phần tử có giá trị tuyệt đối lớn hơn 25.00. 4.
Trong số các cặp 2 phần tử liên tiếp, hãy tìm một cặp có tích nhỏ nhất. 5.
Tìm một phần tử lẻ có giá trị nhỏ nhất trong dãy. 6.
In ra màn hình dãy vừa nhập trên một dòng.
Bài 16: Cho dãy n số thực a ,…., a 1,a2 n. Hãy: 1.
Nhập dãy số từ bàn phím. 2. In dãy vừa nhập 3.
Tính tổng các phần tử của dãy. 4.
Tính tích các phần tử lẻ và có giá trị nhỏ hơn n của dãy. 5.
Đếm xem trong dãy có bao nhiêu phần tử âm. 6.
Tìm giá trị lớn nhất của dãy và vị trí của phần tử ấy. 7.
Tìm giá trị nhỏ nhất trong các phần tử âm của dãy. 8.
Tìm giá trị dương nhỏ nhất của dãy. 9.
Tính trung bình cộng của tất cả các phần tử nằm ngoài đoạn [-15.0, 27.5]? 10.
Sắp xếp dãy theo chiều tăng dần rồi in ra dãy đã sắp xếp. 11.
Sắp xếp dãy theo chiều giảm dần rồi in ra dãy đã sắp xếp. 12. Đảo ngược dãy. TRANG 11
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương 13.
Cho số thực x được nhập từ bàn phím. Tìm xem trong dãy có phần tử này không ?
Tìm phần tử nhỏ nhất của dãy và tính S=Min-a[k]. Với k được nhập từ bàn phím.
Bài 17: Cho dãy n số thực a ,…., a 1,a2 n. Hãy: 1.
Nhập dãy số từ bàn phím. 2. In dãy vừa nhập 3.
Tìm 3 số lớn nhất của dãy.
Bài 18: Cho dãy n số nguyên a ,…., a 1,a2 n. Hãy: 1.
Nhập dãy số từ bàn phím. 2. In dãy vừa nhập 3.
Kiểm tra xem dãy có phải là dãy đối xứng không? ( dãy đối xứng là dãy có an = a1, an-1= a2....)
Bài 19: Cho dãy n số thực a ,…., a 1,a2 n. Hãy: 1.
Nhập dãy số từ bàn phím. 2. In dãy vừa nhập
Xác định xem dãy có phải là dãy giảm dần không? (dãy giảm dần là dãy có a1>a2>..>an).
Bài 20: Nhập tọa độ n điểm trên mặt phẳng tọa độ (xOy). Hãy
1. In ra màn hình tọa độ các điểm đã nhập trên một dòng theo dạng (x1,y1) (x2,y2)….. (xn,yn).
2. Tính độ dài đường gấp khúc đi qua n điểm trên theo thứ tự 1,2…,n-1,n
3. Nhập số thực L>0, đếm xem có bao nhiêu đoạn thẳng tạo từ n điểm trên có độ dài >L
Nhập số thực r từ bàn phím. Đếm xem có bao nhiêu điểm nằm trong đường tròn tâm O (0,0) bán kính r. TRANG 12
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương Gợi ý: #include #include int main() { int n, i, j;
double x[100], y[100]; // mảng lưu tọa độ các điểm printf("Nhap so diem n: "); scanf("%d", &n); // Nhập tọa độ for(i = 0; i < n; i++) {
printf("Nhap toa do diem thu %d (x y): ", i+1);
scanf("%lf %lf", &x[i], &y[i]); } // 1. In ra các điểm
printf("\nCac diem da nhap:\n"); for(i = 0; i < n; i++) {
printf("(%.2f, %.2f) ", x[i], y[i]); } printf("\n");
// 2. Tính độ dài đường gấp khúc double tong = 0.0;
for(i = 0; i < n-1; i++) { double dx = x[i+1] - x[i]; double dy = y[i+1] - y[i]; tong += sqrt(dx*dx + dy*dy); }
printf("\nDo dai duong gap khuc = %.4f\n", tong);
// 3. Đếm số đoạn thẳng > L double L; TRANG 13
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương printf("\nNhap L > 0: "); scanf("%lf", &L); int dem = 0;
for(i = 0; i < n-1; i++) {
for(j = i+1; j < n; j++) { double dx = x[j] - x[i]; double dy = y[j] - y[i];
double d = sqrt(dx*dx + dy*dy); if(d > L) dem++; } }
printf("So doan thang co do dai > %.2f la: %d\n", L, dem);
// 4. Đếm số điểm trong đường tròn tâm O bán kính r double r;
printf("\nNhap ban kinh r: "); scanf("%lf", &r); int demTrong = 0; for(i = 0; i < n; i++) {
if(x[i]*x[i] + y[i]*y[i] <= r*r) { demTrong++; } }
printf("So diem nam trong duong tron tam O, ban
kinh %.2f la: %d\n", r, demTrong); return 0; }
Bài 21: Viết chương trình bằng ngôn ngữ C thực hiện yêu cầu sau:
Nhập số thực r và tọa độ của n điểm trên mặt phẳng xOy. Hãy: TRANG 14
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương 1.
Đếm số điểm nằm bên trong nửa đường tròn tâm O(0, 0) bán kính r và
nằm bên trên trục Ox của hệ tọa độ xOy. 2.
Đếm số điểm nằm ngoài đường tròn tâm O(0,0) bán kính r. Kiểm tra xem
số điểm tìm được có chia hết cho 6 không? 3.
In ra màn hình tọa độ các điểm đã nhập trên một dòng theo dạng (x1,y1) (x2,y2)….. (xn,yn).
Bài 22: Viết chương trình bằng ngôn ngữ C thực hiện yêu cầu sau:
Nhập tọa độ của n điểm trên mặt phẳng xOy. Hãy: 1.
Đếm số điểm không thuộc góc phần tư thứ nhất của hệ trục tọa độ xOy?
Kiểm tra xem số điểm tìm được có chia hết cho 5 không? 2.
Tìm tọa độ của một điểm thuộc góc phần tư thứ 4 của hệ trục tọa độ xOy
gần gốc tọa độ nhất. 3.
Tính độ dài đường gấp khúc đi qua n điểm theo thứ tự 1, 2, 3…n. 4.
Đếm xem có bao nhiêu đoạn thẳng tạo từ n điểm trên cắt trục Ox. 5.
Đếm xem có bao nhiêu điểm nằm trên (thuộc) đường thẳng y=ax+b. Với a,b nhập từ bàn phím. 6.
Đếm xem có bao nhiêu điểm nằm phía trên (không thuộc) trục Ox. 7.
In ra màn hình tọa độ các điểm vừa nhập.
Bài 23: Viết chương trình bằng ngôn ngữ C thực hiện yêu cầu sau:
Nhập tọa độ của n điểm trên mặt phẳng xOy. Hãy: 1.
Tính độ dài đường gấp khúc đi qua n điểm theo thứ tự 2, 3…n, 1. 2.
Xác định độ dài của một đoạn thẳng lớn nhất mà được tạo từ 2 trong n điểm trên. TRANG 15
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương 3.
In ra màn hình tọa độ các điểm vừa nhập.
Bài 24: Viết chương trình bằng ngôn ngữ C thực hiện yêu cầu sau:
Nhập tọa độ của n điểm trên mặt phẳng xOy. Hãy: 1.
Tìm diện tích đường tròn tâm O(0,0) nhỏ nhất chứa n điểm trên. 2.
In ra màn hình tọa độ các điểm vừa nhập. 3.
Tìm một điểm gần tâm O(0,0) nhất.
Bài 25: Viết chương trình bằng ngôn ngữ C thực hiện yêu cầu sau:
Nhập tọa độ của n điểm trên mặt phẳng xOy. Hãy:
1. Tìm diện tích hình chữ nhật nhỏ nhất chứa n điểm trên và có các cạnh xong
xong với các trục Ox, Oy.
2. In ra màn hình tọa độ các điểm vừa nhập.
3. Tìm tất cả các điểm gần điểm thứ 1 có tọa độ (x1,y1) III. BÀI TẬP NÂNG CAO
Bài 27: Viết chương trình thực hiện các yêu cầu sau: nhập mảng n số nguyên từ bàn
phím sao cho khi nhập xong các phần tử trong mảng được sắp theo thứ tự tăng dần
Bài 28: Viết chương trình sắp xếp các số dương trong mảng các số thực tăng dần
các số âm giữ nguyên vị trí của chúng trong mảng.
Bài 29: Cho đa thức Pn(x)=a0 + a1x + a2x2 + a3x3+....+anxn.
1. Nhập các hệ số của đa thức trên, in các hệ số vừa nhập trên một dòng.
2. Đếm số hệ số nhỏ hơn 0
3. Tính giá trị của đa thức tại giá trị x0 với x0 được nhập từ bàn phím.
4. Tính đạo hàm cấp 1 của đa thức, và in ra các hệ số của đa thức sau khi tính đạo hàm. TRANG 16
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương
Gợi ý làm các ý a, b, c #include #include int main() { int n, i, count= 0; double a[100], x0, P = 0;
// 1. Nhập bậc n và hệ số đa thức
printf("Nhap bac cua da thuc n: "); scanf("%d", &n);
printf("Nhap cac he so a0, a1, ..., an:\n");
for (i = 0; i <= n; i++) { printf("a[%d] = ", i); scanf("%lf", &a[i]); }
// In ra hệ số vừa nhập
printf("\nHe so da thuc Pn(x): ");
for (i = 0; i <= n; i++) { printf("%.2f ", a[i]); } printf("\n");
// 2. Đếm số hệ số < 0
for (i = 0; i <= n; i++) { if (a[i] < 0) count++; }
printf("So he so < 0 la: %d\n", count); // 3. Tính giá trị P(x0) printf("Nhap gia tri x0: "); scanf("%lf", &x0);
for (i = 0; i <= n; i++) { P += a[i] * pow(x0, i); }
printf("Gia tri cua P(%g) = %.4f\n", x0, P); TRANG 17
Khoa CNTT-Trường ĐH GTVT Thực hành Tin học đại cương return 0; }
Bài 30: Cho đa thức Pn(x)= a0 + a1x + a2x2 + a3x3+....+anxn Và
Qm(x)= b0 + b1x + b2x2 + b3x3+....+bmxm
1. Nhập các hệ số của 2 đa thức trên
2. Tính đa thức tổng và in ra các hệ số của đa thức tổng.
Bài 31: Cho đa thức Pn(x)=a0 + a1x + a2x2 + a3x3+....+anxn
Và Qm(x)=b0 + b1x + b2x2 + b3x3+....+bmxm
a. Nhập các hệ số của 2 đa thức trên
b. In các hệ số của 2 đa thức trên một dòng
c. Tính đa thức hiệu và in ra các hệ số của đa thức hiệu.
d. Đếm xem có bao nhiêu hệ số âm trong đa thức.
e. Tính giá trị của 2 đa thức tại giá trị x0 với x0 được nhập từ bàn phím. Và tính
P (x ) Q (x ) S= n 0 m o TRANG 18