Một số bài C++ - 2
1. Viết các hàm sau: kiểm tra số nguyên tố, kiểm tra số chính phương, kiểm tra số hoàn thiện.
2. Viết các hàm USCLL(a,b) và BSCNN(a,b) với a,b là số nguyên nhập từ bàn phím.
3. Viết hàm tính n! bằng hai cách, trong đó có một cách dùng hàm đệ qui.
4. Viết hàm nhận vào một số nguyên, và in ra màn hình dãy số ngược lại. ví dụ : nghichdao(x) với x = 12345 thì ta có kết quả trên màn hình là 54321.
5. Cho mảng A[i] có N phần tử, với N là số nguyên được nhập từ bàn phím (N < 1000) . Sắp xếp mảng theo thứ tự tăng dần trong đó có sử dụng hàm swap(a,b) để đổi chỗ hai phần tử trong mảng.
Lời giải
1. Viết các hàm sau: kiểm tra số nguyên tố, kiểm tra số chính phương, kiểm tra số hoàn thiện.
1: #include <iostream>
2: #include <math.h>
3:
4: using namespace std;
5:
6: bool nguyento(int n)
7: {
8: int i;
9: for (i = 2; i <= sqrt(n); i++)
10: {
11: if ((n % i) == 0) break;
12: }
13: if (i == n / 2) return 1;
14: else return 0;
15: }
16:
17: bool chinhphuong(double n)
18: {
19: double j;
20: j = sqrt(n);
21: if (n == round(j) * round(j)) return 1;
22: else return 0;
23: }
24:
25: bool hoanthien(int n)
26: {
27: int k, f;
28: k = 1;
29: for (f = 2; f <= (n / 2); f++)
30: {
31: if ((n % f) == 0) k += f;
32: }
33: if (k == n) return 1;
34: else return 0;
35: }
36: int main()
37: {
38: int n;
39: cout << "Nhap n: ";
40: cin >> n;
41: cout << "\n";
42: if (nguyento(n)) cout << "n la so nguyen to\n";
43: else cout << "n ko la so nguyen to\n";
44: if (chinhphuong(n)) cout << "n la so chinh phuong\n";
45: else cout << "n ko la so chinh phuong\n";
46: if (hoanthien(n)) cout << "n la so hoan thien \n";
47: else cout << "n ko la so hoan hien\n";
48: cout <<"\n";
49: system("PAUSE");
50: return 0;
51: }
2. Viết các hàm USCLL(a,b) và BSCNN(a,b) với a,b là số nguyên nhập từ bàn phím.
1: #include <iostream>
2: #include <math.h>
3:
4: using namespace std;
5:
6: int us(int a, int b)
7: {
8: while (a != b)
9: {
10: if (a < b) b = b - a;
11: else a = a - b;
12: }
13: return a;
14: }
15:
16: int bs(int a, int b)
17: {
18: return (a * b) / us(a, b);
19: }
20:
21: int main()
22: {
23: int a, b;
24: cout << "Nhap hai so a va b: ";
25: cin >> a >> b;
26: cout << "\n USCLN cua a,b la: " << us(a, b) << "\n";
27: cout << "\n BSCNN cua a,b la: " << bs(a, b) << "\n";
28: cout << "\n";
29: system("PAUSE");
30: return 0;
31: }
3. Viết hàm tính n! bằng hai cách, trong đó có một cách dùng hàm đệ qui.
1: #include <iostream>
2:
3: using namespace std;
4:
5: int giaithua(int x) // ham giai thua dung de qui
6: {
7: if (x == 0) return 1;
8: else return x * giaithua(x - 1);
9: }
10:
11: int giaithua1(int x) // ham giai thua ko dung de qui
12: {
13: int i, gt;
14: gt = 1;
15: for (i = 1; i <= x; i++)
16: {
17: gt *= i;
18: }
19: return gt;
20: }
21:
22: int main()
23: {
24: int x;
25: cout << "Nhap so can tinh giai thua: ";
26: cin >> x;
27: cout << x << " giai thua bang: " << giaithua(x) << "\n";
28: system("PAUSE");
29: return EXIT_SUCCESS;
30: }
4. Viết hàm nhận vào một số nguyên, và in ra màn hình dãy số ngược lại. ví dụ : nghichdao(x) với x = 12345 thì ta có kết quả trên màn hình là 54321.
1: #include <iostream>
2:
3: using namespace std;
4:
5: int contrary(int x) //ham tra lai gia tri cua so viet theo thu tu nguoc lai
6: {
7: int i = 0;
8: while (x != 0)
9: {
10: i = i * 10 + x % 10;
11: x /= 10;
12: }
13: return i;
14: }
15:
16: void printContrary(int x) //ham in ra day so nguoc lai
17: {
18: while (x != 0)
19: {
20: cout << x % 10;
21: x /= 10;
22: }
23: }
24: int main()
25: {
26: int x;
27: cout << "Nhap x: ";
28: cin >> x;
29: cout << "Day so nguoc lai: ";
30: printContrary(x);
31: cout << "\n";
32: system("PAUSE");
33: return EXIT_SUCCESS;
34: }
5. Cho mảng A[i] có N phần tử, với N là số nguyên được nhập từ bàn phím (N < 1000) . Sắp xếp mảng theo thứ tự tăng dần trong đó có sử dụng hàm swap(a,b) để đổi chỗ hai phần tử trong mảng.
1: #include <iostream>
2: using namespace std;
3:
4: void swap(int &a, int &b) //ham thay doi gia tri cua a,b
5: {
6: int t;
7: t = a;
8: a = b;
9: b = t;
10: }
11:
12: int main()
13: {
14: int arrays[1000];
15: int n, i, i1, i2;
16: cout << "So gia tri cua mang: ";
17: cin >> n;
18: for (i = 0; i <= n - 1; i++)
19: {
20: cout << "Nhap gia tri thu " << i << ": ";
21: cin >> arrays[i];
22: }
23: for (i1 = 0; i1 < n - 1; i1++)
24: {
25: for (i2 = i1 + 1; i2 <= n - 1; i2++)
26: {
27: if (arrays[i1] >= arrays[i2]) swap(arrays[i1], arrays[i2]);
28: }
29: }
30: cout << "Mang sau khi sap xep: ";
31: for (i = 0; i < n; i++)
32: {
33: cout << arrays[i] << ", ";
34: }
35: cout << "\n\n";
36: system("PAUSE");
37: return EXIT_SUCCESS;
38: }
Bài làm chỉ mang tính chất tham khảo, nghiêm cấm sao chép dưới mọi hình thức
February 28th, 2008 at 6:50 pm #mutinhoc
February 28th, 2008 at 10:47 pm #HKVN
Múa rìu qua mắt thợ thôi. Ngứa tay thì pót lên ý mà
March 1st, 2008 at 12:01 am #mutinhoc
March 1st, 2008 at 10:34 am #NHA_DIEN
Ừ, công nhận giờ buổi tối online ít thấy đèn nick ông sáng. Mà làm bài tập nhanh thế, tôi còn chưa đụng đến bài nào, zzz
March 1st, 2008 at 3:22 pm #HKVN
Mấy bài này từ tuần trước rồi. Tuần này tôi cũng đã động đc tẹo nào đâu.
Yahoo thỉnh thoảng tôi vào rồi invisible hoặc out luôn vì để cũng ko biết làm gì.
P/S: Sao ko ai dùng GAvatar à? Đều No Avatar thế nhỉ.
March 1st, 2008 at 8:10 pm #mutinhoc
gavatar là cái gì vậy
!? lớp CA học nhanh thế, đã học sang mảng và sâu kí tự rùi
hàm kiểm tra nguyên tố bị sai
March 1st, 2008 at 10:10 pm #HKVN
gavatar là một kiểu gavatar rất hay. Cậu lên gavatar đăng ký một tài khoản, add email của cậu vào. Khi comment trong blog của tớ hay rất nhiều blog khác, từ email sẽ tự động hiện ra avatar của cậu
Mãng vừa học tuần vừa rồi, còn sâu thì chưa nhưng cũng tự đọc được mà
March 2nd, 2008 at 11:20 am #entersadman
Cam ơn bác Thanh .Em đang cần tham khảo thuật toán bài 5 mà chưa biết tìm ở đâu.
March 2nd, 2008 at 7:34 pm #mutinhoc
gravatar này hay đấy, trước không để ý
hình như bo-blog cũng có hỗ trợ cái này thì phải 