CÁC CÂU LỆNH LẶP

Bài tập có hướng dẫn

Nhập vào số nguyên dương n. Hãy tính và in ra các tổng sau:

a. s = 1*2 + 2*3 + ... + n*(n + 1)

b. s = 11 + 22 + ... + nn

c. s = 1 + 1/2+ 1/3 + ... +1/n

Hướng dẫn

//Câu 1a
s = 0;
for(i = 1; i <= n; i++)
	s += i * (i + 1);
//Câu 1b
s = 0;
for(i = 1; i <= n; i++)
	s += pow(i, i);
//Câu 1c
s = 0.0; //s kiểu thực
for(i = 1; i <= n; i++)
	s += 1.0/i;
		

Nhập vào một số nguyên dương n. Hãy tính và in ra giá trị của vế trái, vế phải của mỗi công thức sau đây và cho biết kết quả tính của hai vế có bằng nhau hay không?

a. 1.2 + 2.2 + ... + n.2 = n(n + 1)(2n + 1) / 6

b. 1/2! + 2/3! + ... + n/(n + 1)! = 1 – (1/(n + 1)!)

//Câu 2a
//Tính vế trái
vt = 0;
for(i = 1; i <= n; i++)
	vt += i * 2;
//Tính vế phải
vp = n * (n + 1) * (2*n + 1) / 6;
<In vt, vp>
//So sánh hai vế
if(vt == vp)
	<Hai ve bang nhau>
else <Hai ve khong bang nhau>
//Câu 2b
#define E 0.0001 //Độ chính xác
//Tính vế trái
vt = 0; gt = 1;
for(i = 1; i <= n; i++) {
	gt *= (i + 1);
	vt += (float)i/gt;
}
//Tính vế phải
vp = 1 – (1.0/gt);
//So sánh hai vế
if(fabs(vt – vp) < E)
	<Hai ve bang nhau>
else <Hai ve khong bang nhau>
		
Lưu ý: Các phép toán trên số thực trong máy tính đều có những sai số nhất định. Do đó khi so sánh hai giá trị thực a và b nên dùng biểu thức |a- b| < E, trong đó E gọi là độ sai số cho phép (còn gọi là độ chính xác).

Nhập vào x (theo radian). Hãy tính sin(x) theo công thức sau:

sin(x) = x – x3/3! + x5/5! - ... + (-1)n (x2n+1 /(2n+1)!) (độ chính xác là 0.0001)

Lưu ý: Tính sin(x) với độ chính xác là 0.0001 có nghĩa là sin(x) được tính đến số hạng thứ n nào đó sao cho trị tuyệt đối của số hạng đó nhỏ hơn 0.0001

#define E 0.0001
//độ chính xác
<Nhập x>
k = 1; y = x; sin = x;
while(fabs(y) >= E) {
	k += 2;
	y = -y * x * x / ((k – 1) * k);
	sin += y;
}
<In sin>
		

Hãy in bảng mã ASCII ra màn hình. Bảng được in ra theo từng trang màn hình sao cho người sử dụng có thể đọc được

Hướng dẫn

#define NUM_LINES 40
//Giả sử một trang màn hình có 40 dòng
for(i = 0; i < 256; i++) {
	printf(“%c: %d\n”, i, i);
	if((i + 1) % NUM_LINES == 0) {
		printf(“** Nhan phim bat ky de tiep tuc **\n”);
		_getch();
		//Dừng màn hình
	}
}
		

Nhập vào một số nguyên. Hãy kiểm tra xem số nguyên đó có phải là số nguyên tố hay không?

Biết rằng một số nguyên dương (khác số 1) được gọi là số nguyên tố nếu ngoài 1 và chính nó ra thì nó không chia hết cho một số nguyên dương nào khác. Chẳng hạn các số sau là nguyên tố: 2, 3, 5, 7, 11, . . .

Hướng dẫn

int n, nt = 1; 
//0: Không là nguyên tố
//1: Là nguyên tố (cờ hiệu)
<Nhap n>
if(n < 2)
	nt = 0; //Không là số nguyên tố
else {
	for(i = 2; i < n; i++) {
		if(n % i == 0) {
			nt = 0;
			break;
		}
	}
}
//In kết quả
if(nt) 
	<Day la so nguyen to>
else 
	<Day khong la so nguyen to>
		

Nhập vào một số nguyên. Hãy kiểm tra xem một số nguyên đó có phải là số hoàn chỉnh hay không? Biết rằng một số nguyên dương n được gọi là số hoàn chỉnh nếu tổng các ước số của n (không kể n) bằng chính nó. Chẳng hạn các số sau là hoàn chỉnh:

6, 28, 496, ...

int n;
int hc; //0: Không là số hoàn chỉnh, 1: Là số hoàn chỉnh (cờ hiệu)
<Nhap n>
if(n < 1)
	hc = 0; //Không là số hoàn chỉnh
else {
	//Tính tổng các ước số của n
	s = 0;
	for(i = 1; i < n; i++)
		if(n % i == 0) 
			s += i;
	//Kiểm tra
	hc = (s == n ? 1 : 0);
}
//In kết quả
if(hc)
	<Day la so hoan chinh>
else 
	<day khong la so hoan chinh>
		

Nhập vào một số nguyên. Hãy kiểm tra xem số nguyên đó có phải là số chính phương hay không? Biết rằng một số nguyên dương n được gọi là số chính phương nếu nó bằng bình phương của một số nguyên. Chẳng hạn các số sau là chính phương:

1, 4, 9, 16, 25, ...

int n;
int cp;
//0: Không là số cphương, 1: Là số cphương (cờ hiệu)
<Nhap n>
if(n < 1)
	cp = 0;	// Không là số chính phương
else {
	cp = 0;	//Giả sử không là số chính phương
	for(i = 1; i <= sqrt(n); i++) {
		if(n == i * i) {
			p = 1;//Là số chính phương
			break;
		}
	}
}
//In kết quả
if(cp) 
	<Day la so chinh phuong>
else 
	<Day khong la so chinh phuong>
		

Nhập vào một số nguyên. Hãy kiểm tra xem số nguyên đó có phải là số đối xứng hay không? Biết rằng một số nguyên n được gọi là đối xứng nếu số đảo của n bằng chính n. Chẳng hạn các số sau là đối xứng

1, 44, 161, 2552, ...

int n;
int m; //Lưu lại giá trị của n
int dao; //Số đảo
int dx; //0: Không là số đối xứng, 1: Là số đối xứng (cờ hiệu)
int d;
<nhap n>
m = n;
//Tìm số đảo của m
dao = 0;
while(m > 0) {
	d = m % 10;// Lấy chữ số phải nhất của m
	dao = 10*dao + d; //// Thêm chữ số phải nhất vào dao
	m /= 10; // Xóa chữ số phải nhất của m
}
dx = (dao == n ? 1: 0);
//Kiểm tra đối xứng
if(dx == 1)
	<Day la so doi xung>
else 
	<Day la so khong doi xung>
		

Nhập vào hai số nguyên a và b. Hãy tìm và in ra ước số chung lớn nhất của a và b. Áp dụng giải thuật Euclide sau (chỉ áp dụng cho hai số nguyên dương):

(1) Lấy số lớn trừ số nhỏ

(2) Đặt số lớn bằng hiệu số của phép trừ ở buớc (1)

(3) Lặp lại buớc (1) cho đến khi hai số bằng nhau

Giá trị bằng nhau đạt được chính là ước số chung lớn nhất của hai số đã cho.

Hướng dẫn:
int a, b;
int uscln;
//Ước số chung lớn nhất
<Nhap a, b>
if(a < 0) 
	a = -a;
if(b < 0) 
	b= - b;
if(a == 0 || b == 0)
	uscln = a + b;
else {
	while(a != b) {
		if(a > b) 
			a = a – b;
		else 
			b = b – a;
	}
	uscln = a; //hoặc b
}
<In uscln>
		

Bài tập luyện tập

Nhập vào một số nguyên dương n. Hãy tính và in ra giá trị của vế trái, vế phải của mỗi công thức sau đây và cho biết kết quả tính của hai vế có bằng nhau hay không?

a. 1.2.3 + 2.3.4 + ... + n(n + 1)(n + 2) = n(n + 1)(n + 2)(n + 3)/4

b. 1(1!) + 2(2!) + ... + n(n!) = (n + 1)! – 1

Nhập vào x (tính theo radian). Hãy tính e(x) và cos(x) theo các công thức sau:

e(x) = 1 + x + x 2 /2 ! + ... + x n /n ! (độ chính xác là 0.0001)

cos(x) = 1 – x 2 /2! + x 4 /4! - ... + (-1) n (x n /2n!) (độ chính xác là 0.0001)

Hãy in toàn bộ bảng cửu chương từ hai đến chín ra màn hình. Bảng được in ra theo từng trang màn hình sao cho người sử dụng có thể đọc được

Nhập vào số nguyên dương n. Hãy tìm và in ra các số nguyên tố trong khoảng từ 1 đến n.

Nhập vào số nguyên dương n. Hãy tìm và in ra các số hoàn chỉnh trong khoảng từ 1 đến n.

Nhập vào số nguyên dương n. Hãy tìm và in ra các số chính phương trong khoảng từ 1 đến n.

Nhập vào số nguyên dương n. Hãy tìm và in ra các số đối xứng trong khoảng từ 1 đến n.