Bai Tap NMLT 22 23 Student

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

CÁC BÀI TOÁN TUẦN TỰ

1. Viết chương trình nhập 2 điểm A(x1,y1) và B(x2,y2) trên hệ trục tọa độ Descartes. Tính và in
khoảng cách giữa 2 điểm đó theo công thức:

2. Nhập tọa độ 3 đỉnh của một tam giác. Tính và in diện tích tam giác theo công thức:

Trong đó side là độ dài các cạnh.

CÁC BÀI TOÁN RẼ NHÁNH

1. Nhập một số nguyên. Kiếm tra xem số là chẵn hay lẻ


2. Viết chương trình giải phương trình bậc nhất
3. Viết chương trình giải phương trình bậc hai.
4. Nhập một hệ phương trình tuyến tính 2 ẩn. Giải hệ bằng qui tắc Cramer:

Chương trình thông báo Phương trình vô nghiệm nếu ad – bc=0

5. Năm nhuận là năm thỏa một trong 2 điều kiện


 Chia hết cho 4 và không chia hết cho 100
 Chia hết cho 400.
Nhập một năm, xác định năm nhập là nhuận hay thường.

6. Nhập số nguyên, kiểm tra xem số có:


1. Chia hết cho 5 và 6
2. Chia hết cho 5 hoặc 6
3. Không chia hết cho số nào (5,6)
Ví dụ với các giá trị nhập 10, 30 và 23 chương trình cho kết quả:
10 chia hết cho 5 hoặc 6
30 chia hết cho cả 5 và 6
23 không chia hết cho 5 hoặc 6
7. (*) Nhập tọa độ một điểm trên hệ trục tọa độ Descartes. Kiểm tra xem điểm đó có nằm trong
đường tròn tâm (0,0), bán kính 10.

8. (*) Nhập tọa độ một điểm (x,y), kiểm tra xem điểm đó có nằm trong hình chữ nhật tâm
(0,0) , chiều dài 10 và chiều cao 5
Hướng dẫn: Một điểm nằm trong hình chữ nhật nếu độ đo theo trục ngang đến điểm
(0,0) nhỏ hơn hoặc bằng 10/2 và độ đo theo trục dọc đến điểm (0,0) nhỏ hơn hoặc bằng
5/2.
9. Nhập tọa độ một điểm p. Kiểm tra xem điểm đó nằm trong hay nằm ngoài hình tam giác
vuông như hình vẽ

10. (*) Nhập tọa độ một điểm (x,y), kiểm tra xem điểm đó có nằm trong phần hình tô
sọc chéo như hình bên phải

CÁC BÀI TÍNH TỔNG :

S(n) = n!=1*2*3*…*n, n >=1


1 3 5 (2𝑛 + 1)
1)𝑆 = + + + ...+
1 1+3 1+3+5 1 + 3 + ⋯ + (2𝑛 + 1)
1 2 1+3 2+4 𝑚(𝑛)
2)𝑆 = + + + + ...+ ,
2 3 2+4 1+3+5 𝑀(𝑛+1)

m(n) = Tổng các số chẵn từ 0 đến n, nếu n chẵn ,


m(n) = Tổng các số lẻ từ 0 đến n, nếu n lẻ,

M(n) = Tổng các số chẵn từ 0 đến n+1, nếu n+1 chẵn ,


M(n) = Tổng các số lẻ từ 0 đến n+1, nếu n+1 lẻ,
1! 3! 5! (2𝑛+1)!
3)𝑆 = + + + ...+
1 1+3 1+3+5 1+3+⋯+(2𝑛+1)

𝑥2 𝑥4 𝑥 2𝑛
4)𝑆 = + + ...+
2! 4! (2𝑛)!
THUẬT TOÁN TRÊN CHỮ SỐ

1. Tính tổng các chữ số của một số nguyên dương. VD : n=3412 thì tổng là 3+4+1+2=10.
2. Đếm số chữ số của một số nguyên dương .
3. Đếm số chữ số chẵn của một số nguyên dương.
4. Đếm số chữ số lẻ của một số nguyên dương.
5. Tính tổng các chữ số chẵn của một số nguyên dương.
6. Tính tổng các chữ số lẻ một số nguyên dương.
7. Nhập một số nguyên dương. In ra số viết ngược lại của số nhập.
Ví dụ: Số nhập 39845 thì số in ra là 54893
KIỂM TRA MỘT (NHIỀU) SỐ THỎA MỘT SỐ ĐIỀU KIỆN :
1. Kiểm tra một số có phải là số nguyên tố.
2. Số hoàn chỉnh là số bằng tổng các ước số của nó (không kể chinh nó). Kiểm tra xem một
số n có phải là số hoàn chỉnh.
3. Nhập số nguyên dương n. Viết ra màn hình các số hoàn chỉnh  n.
4. Kiểm tra một số có phải là số chính phương. Số chính phương = bình phương của một số
nguyên.

KHÁC :
1. Viết chương trình trò chơi đoán số: Cho máy sinh ra một số (x) ngẫu nhiên trong phạm vi
từ 0 đến 99. Người chơi được quyền đoán số đó trong 7 lần. Chương trình thông báo kết
quả so sánh số nhập (y) với số của máy (x).
Hướng dẫn: Sử dụng hàm rnd để sinh số thực ngẫu nhiên trong phạm vi từ 0 đến 1. Biểu
thức int(100 x rnd) cho giá trị ngẫu nhiên trong phạm vi từ 0 đến 99.
2. Nhập một số nguyên dương. In ra số nhị phân của số đó.
3. Nhập hai số nguyên dương. In ra ước số chung lớn nhất của hai số đó.
4. Nhập hai số nguyên dương. In ra bội số chung nhỏ nhất của hai số đó.
bội số chung nhỏ nhất của a, b = a*b / ước số chung lớn nhất của
5. Nhập ba số nguyên dương. In ra ước số chung lớn nhất của ba số đó.
6. Viết chương trình nhập các số nguyên. Việc nhập sẽ được kết thúc khi nhập giá trị 0.
Tính tổng các số vừa nhập.
7. Dùng vòng lặp tạo dãy : 1 9 25 49 81 121 169 225 289 361 441 529
625.
8. Tương tự bài tập 7. Nhưng chỉ viết ra màn hình các giá trị nhỏ hơn số m cho trước.

MẢNG

1. Tổng mảng n phần tử kiểu nguyên.


2. Tổng các số chẵn trong mảng.
3. Tổng các số lẻ trong mảng.
4. Tổng các số nguyên tố trong mảng.
5. Tính tổng các số chính phương. Giả sử các giá trị  1.
6. Kiểm tra gía trị x có trong mảng không.
7. In ra chỉ số của phần tử đầu tiên có giá trị bằng x.
8. In ra chỉ số của phần tử cuối có giá trị bằng x.
9. In ra chỉ số của phần tử đầu tiên có giá trị lẻ (mảng kiểu nguyên).
10. In ra chỉ số của phần tử đầu tiên có giá trị chẵn (mảng kiểu nguyên).
11. In ra chỉ số của phần tử cuối có giá trị chẵn (mảng kiểu nguyên).
12. In ra chỉ số của phần tử thứ hai có giá trị lẻ (mảng kiểu nguyên).
13. Đếm số lần x xuất hiện trong mảng (số phần tử a[i] có giá trị bằng x).
14. Đếm số giá trị chẵn có trong mảng.
15. Tìm giá trị lớn nhất trong mảng kiểu số nguyên.
16. Sắp xếp mảng theo chiều tăng dần.
Giải :
B1. Nhập mảng a
B2. For i = 1 To n-1
For j = i +1 To n
If ( a[i] > a[j] )
Hoán vị a[i], a[j]
17. Sắp xếp mảng theo chiều giảm dần.
18. Sắp xếp mảng theo chiều tăng (giảm) dần các giá trị chẵn.
19. Tìm giá trị chẵn lớn nhất .
HD : Sắp xếp mảng tăng dần , tìm phần tử chẵn cuối cùng (áp dụng bài tập 8).
20. Tìm giá trị lẻ bé nhất .
21. Tìm số nguyên tố lớn nhất.
22. Tìm số chính phương nhỏ nhất.
23. Mảng đối xứng.
Ví dụ :
 21 , 12 , 3 , 3 , 12 , 21 là hai dãy đối xứng, (1)
 21 , 12 , 3 , 3 , 11 , 21 là hai dãy không đối xứng, (2)
 21 , 12 , 3 , 5 , 3 , 12 , 21 là hai dãy đối xứng. (3)

HD : Đếm số cặp đối xứng có giá trị bằng nhau. Nếu số cặp đối xứng là n \ 2 thì mảng là
đối xứng. Ngược lại mảng không đối xứng. Các cặp đối xứng là : (a(1), a(n)), (a(2), a(n-
1)), . . . , (a(n\2), a(n - n\2 + 1) ), công thức tổng quát là (a(i), a(n-i+1)), i=1, 2, . . ., n\2.

24. Kiểm tra mảng có tăng dần không ?


25. Phát sinh 20 số nguyên ngẫu nhiên trong khoảng {0, 1, 2, . . ., 9}. Xác định loại phần tử
và số phần tử của mỗi loại.
Thuật toán : mảng a có 21 phần tử
B1. Nhập mảng a
(Hoặc Phát sinh 20 số nguyên ngẫu nhiên chứa vào mảng a)

B3. Sắp xếp mảng a tăng dần


B4. a[20] = a[20] + 1, d = 1 ( biến đếm )
B5. Với i = 0, 2, 3, . ., 19
If (a[i] == a[i+1]) d=d+1
else
{
Viết a[i], d
d=1
}

26. Tính giá trị trung bình của mảng(GTTB) mảng a kiểu số thực . GTTB =( a[0] + . . . . + a[n-1] ) /
n
27. Tính giá trị lệch chuẩn của mảng(GTLC) mảng a kiểu số thực . GTLC = ( (a[0]-GTTB)2 + . . . .
+ (a[n-1]-GTTB)2 ) / n
28. Nhập mảng số thực dương. Tìm số nguyên bé nhất M sao cho a[i] ≤ M , với mọi i = 1, 2, . . . n.

HD :

Hàm double floor(double x) trong <math.h> trả về giá trị nguyên lớn nhất nhỏ hơn hoặc bằng x.

VD : floor(4.6)  4.

Hàm double ceil(double x) trong <math.h> trả về giá trị nguyên nhỏ nhất lớn hơn hoặc bằng x.

VD : ceil(4.6)  5.

29. Nhập mảng số thực dương a. Tìm số nguyên lớn nhất m sao cho a[i]  m , với mọi i = 1,
2, . . . n.

CHUỖI : Giả sử chuỗi nhập khác rỗng và khác chuỗi chỉ toàn khoảng trắng.

1. Tìm vị trí của khoảng trắng đầu tiên trong chuỗi.


2. Giả sử chuỗi nhập không có khoảng trắng 2 đầu. Viết ra từ đầu tiên của chuỗi.
3. Viết ra từ cuối cùng của chuỗi. (Tìm khoảng trắng cuối).
4. (*) Hoán vị từ đầu và từ cuối. Giả sử chuỗi có ít nhất 2 từ. Chuỗi không có khoảng
trắng thừa.
Giải :
#include <string.h>
#include <stdio.h>
using namespace std;

int main()
{
char S[50],KQ1[50],KQ2[50], KQ3[50];
int i1, i2, i;

cin.getline(S,50);

for (i=0; i<strlen(S); i++)


if (S[i]==' ')
{
i1=i;
break;
}

strncpy(KQ1, S, i1);
KQ1[i1]=0;

for (i=strlen(S)-1; i>=0; i--)


if (S[i]==' ')
{
i2=i;
break;
}

strcpy(KQ2, S+i2+1 );

if (i2-i1-1>=1)
{
strncpy(KQ3,S+i1+1,i2-i1-1);
KQ3[i2-i1-1]=0;
cout<<KQ2<<" "<<KQ3<<" "<<KQ1<<"\n";
}
else cout<<KQ2<<" "<<KQ1<<"\n";

}
5. Trích các từ trong chuỗi S (có ít nhất 1 từ) và ghép các từ này theo thứ tự ngược với S
(Dùng strtok).
6. Đếm số từ trong một chuỗi. Giả sử chuỗi không có khoảng trắng ở 2 đầu, giữa 2 từ chỉ
có 1 khoảng trắng.
7. (*) Đếm số từ trong một chuỗi. Chuỗi được nhập tùy ý.
8. Nhập chuỗi. Viết ra từ thứ hai của chuỗi. Giả sử chuỗi không có khoảng trắng ở 2 đầu,
giữa 2 từ chỉ có 1 khoảng trắng.
9. (*)Như bài 8. Nhưng chuỗi nhập tùy ý. (dùng strtok, không dùng strtok)
10. Nhập chuỗi.Viết ra các từ, mỗi từ trên một dòng (Dùng strtok, không dùng strtok: thay
khoảng trắng bởi ‘\n’).
11. Nhập chuỗi. Đổi ký tự đầu mỗi từ thành ký tự IN. Giả sử chuỗi không có khoảng trắng
ở 2 đầu, giữa 2 từ chỉ có 1 khoảng trắng.
HD : dùng toupper(char ch) (trong thư viện <ctype.h>), hàm này sẽ cho ký IN nếu ch là
ký tự thường, các trường hợp còn lại sẽ cho ký tự ch.
12. (*) Nhập chuỗi. Đổi ký tự cuối mỗi từ thành ký tự IN.
13. Nhập chuỗi. Đổi ký tự thứ hai mỗi từ thành ký tự IN , giả sử các từ có ít nhất 2 ký tự.
14. (**CƠ BẢN)Xóa khoảng trắng hai đầu và giữa mỗi từ cách nhau một khoảng trắng.
KQ : chuỗi kết quả;
Nhập S;
vt = Tìm vị trí đầu tiên trong S khác khoảng trắng;
Qvt=0;
for (i=vt; i < strlen(S+vt); i++)
if (S[i]!='' )
KQ[Qvt++]=S[i];
else if(S[i-1]!='')
KQ[Qvt++]='';

KQ[Qvt]=0;

15. (**CƠ BẢN) Nhập một chuỗi. Giả sử chuỗi không có khoảng trắng ở 2 đầu, giữa 2 từ
chỉ có 1 khoảng trắng. Cho a là mảng các chuỗi. Gán từ thứ nhất vào phần tử a[0], gán
từ thứ hai vào phần tử a[2], . . ., gán từ thứ n vào phần tử a[n-1] (Dùng strtok, không
dùng strtok).

KQ : mảng các chuỗi;


printf("Nhap chuoi :");
gets(S);

Thêm khoảng trắng vào cuối S;


j = -1;
i = 0;
for (; i < strlen(S); i++)
if (S[i]=='' ) {
KQ[++j] = i ký tự đầu tiên của S;
S = Chuỗi S kể từ ký tự thứ i + 1;
i=0;
}

16. Nhập 1 chuỗi in ra từ thứ k trong chuỗi.


17. Nhập chuỗi S. Nhập chuỗi t. Kiểm tra t có trong s không. Cho biết vị trí đầu tiên của t.

Nếu có t (đầu tiên) trong S kể từ ký tự thứ vt trong S :


{
KQ = Chuỗi S kể từ ký tự vt;
vt=strlen(S)-strlen(KQ);
printf("%d, ", vt);
}
Ngược lại : printf("Không có);
18. Nhập chuỗi S. Nhập chuỗi t. Đếm số lần t có trong s.

dem=0;
vt=0;
do
{
Nếu có t (đầu tiên) trong S kể từ ký tự thứ vt trong S :
{
dem++;
KQ = Chuỗi S kể từ ký tự vt;
vt=strlen(S)-strlen(KQ);
vt++;
}
else break;
}while (1);

19. Nhập chuỗi S. Nhập chuỗi t. In ra các vị trí của t.


20. Nhập chuỗi. Đếm số ký tự thường, IN, ký số.
HD : kt là biến ký tự , char kt;
kt là ký tự thường : ‘a’ <= kt <= ‘z’
kt là ký tự IN : ‘A’ <= kt <= ‘Z’
kt là ký số : ‘0’ <= kt <= ‘9’

21. Nhập một chuỗi có dạng S1#S2#S3#.....#S2, Si không có ký tự #, Si có thể rỗng hay chỉ toàn
khoảng trắng , được gọi là chuỗi rỗng(như bài 19). Hãy viết các Si khác rỗng ra màn hình mỗi
chuỗi trên một dòng.
22. Nhập chuỗi s. Đổi ký tự alphabet trong s thành ký tự đứng ngay sau nó trong bảng ký tự
alphabet. VD : ABC  BCD, EFZ  FGA
23. Viết chương trình nhập một chuỗi S viết ra màn hình các dòng, mỗi dòng là 5 ký tự của
S.
ĐỊNH NGHĨA CHƯƠNG TRÌNH CON :

1. Định nghĩa hàm kiểm tra số nguyên tố.


2. Sử dụng hàm kiểm tra số nguyên tố để định nghĩa hàm tính tổng các số nguyên tố trong
một mảng .
3. Sử dụng hàm kiểm tra số nguyên tố để định nghĩa hàm tìm số nguyên tố nhỏ trong một
mảng. Nếu trong mảng không có số nguyên tố thì hàm trả về giá trị 0.
4. Định nghĩa hàm kiểm tra số chính phương ( Số chính phương = Bình phương của một
số nguyên).
5. Sử dụng hàm kiểm tra số chính phương để định nghĩa hàm tính tổng các số chính
phương trong một mảng .
6. Sử dụng hàm kiểm tra số chính phương để định nghĩa hàm tìm số chính phương lớn
trong một mảng. Nếu trong mảng không có số nguyên tố thì hàm trả về giá trị 0.
7. Định nghĩa hàm kiểm tra số hoàn hảo (Số hoàn hảo = tổng các ước của nó (ước nhỏ
hơn nó) VD 6 = 1+2 +3).
8. Định nghĩa hàm cho từ đầu của chuỗi. Chuỗi không có khoảng trắng 2 đầu, hai từ kế
nhau cách nhau một khoảng trắng.
9. Định nghĩa hàm cho từ cuối của chuỗi. Chuỗi không có khoảng trắng 2 đầu, hai từ kế
nhau cách nhau một khoảng trắng.
10. Định nghĩa hàm (thông số mảng ) cho một chuỗi là các số chẵn có trong mảng.
HD : sprintf(chuỗi, “chuỗi format”, các biến);
VD :
#include <stdio.h>
#include <string.h>
int main()
{
char S[100];
float a=3.2, b=7.6, c;
c=a+b;
sprintf(S, "%0.3f + %0.3f=%0.3f",a, b, c );
printf("%s", S);
}
(Sinh viên tìm hiểu thêm hàm đổi chuỗi thành số (int, float)
11. Định nghĩa hàm cho một chuỗi là các số lẻ có trong mảng.
12. Định nghĩa hàm cho một chuỗi là các số nguyên tố (sử dụng hàm kiểm tra số nguyên
tố) có trong mảng.
13. Định nghĩa hàm cho một chuỗi là các phần tử của mảng a với các số nguyên tố được
sắp xếp tăng dần.
VD : mảng a có giá trị 8, 11, 4, 9, 7, 12, 3, 5, 10 và
Kết quả của hàm : 8, 3, 4, 9, 5, 12, 7, 11, 10
14. Định nghĩa hàm cho một chuỗi là các số chính phương có trong mảng.
15. Định nghĩa hàm cho một chuỗi là các phần tử của mảng a với các số chính phương
được sắp xếp giảm dần.

You might also like