Viết chương trình tính tổng các số nguyên dương lẻ từ 1 đến N với N được nhập vào từ bàn phím

Trong quá trình học mới một ngôn ngữ lập trình thì việc làm các bài tập lập trình đơn giản là rất cần thiết để rèn luyện kỹ năng lập trình, thành thạo ngôn ngữ lập trình. Sau đây VniTeach sẽ giới thiệu các bài tập lập trình đơn giản tuyển chọn hay nhất theo các chủ đề.

Viết chương trình tính tổng các số nguyên dương lẻ từ 1 đến N với N được nhập vào từ bàn phím
Tuyển tập các bài tập lập trình cơ bản hay nhất

1. Nhập xuất cơ bản

Câu 1: Viết chương trình xuất ra màn hình nhiệt độ (oK) tương ứng khi nhập vào nhiệt độ (oC)?

c = float(input('Mời nhập nhiệt độ C: ')) k = c + 273.15 print(c,'độ C tương ứng với',k,'nhiệt độ K')

Câu 2: Viết chương nhập vào 2 số nguyên dương m và n (m>n), hãy in ra màn hình phần nguyên và phần dư của m chia cho n?

m = int(input('Mời nhập số nguyên dương m: ')) n = int(input('Mời nhập số nguyên dương n: ')) print(m,'chia cho',n,'có phần nguyên là',m//n) print(m,'chia cho',n,'có phần nguyên là',m%n)

Câu 3: Viết chương trình tính diện tích hình tròn, với bán kính nhập vào từ bàn phím?

r = float(input('Mời nhập bán kính R: ')) s = 3.14*r*r print('Diện tích của hình tròn là',s)

Câu 4: Viết chương trình tính vận tốc của vật khi rơi tự do từ độ cao h (m)? Biết vận tốc v được tính theo công thức $v = \sqrt {2gh} $ và g = 9.8 m/s2 , với độ chính xác 2 chữ số thập phân.

h = float(input('Mời nhập độ cao của vật: ')) g = 9.8; import math v = math.sqrt(2*g*h) print(f'Vận tốc của vật rơi là {v:.2f}')

Câu 5: Viết chương trình nhập ba số thực dương a, b, h từ bàn phím lần lượt là độ dài đáy lớn, đáy bé và chiều cao của một hình thang. Tính diện tích hình thang và in kết quả ra màn hình.

a = float(input('Mời nhập đáy lớn: ')) b = float(input('Mời nhập đáy bé: ')) h = float(input('Mời nhập chiều cao: ')) s = (a + b)*h/2 print('Diện tích của hình thang là',s)

Câu 6: Viết chương trình nhập vào độ dài 3 cạnh của một tam giác, tính và xuất ra màn hình chu vi và diện tích của tam giác đó (lấy độ chính xác 02 số thập phân).

a, b, c = map(float,input('Mời nhập độ dài 3 cạnh: ').split()) chuvi = a + b + c p = chuvi/2; import math dientich = math.sqrt(p*(p-a)*(p-b)*(p-c)) print(f'Chu vi tam giác là {chuvi:.2f}') print(f'Diện tích tam giác là {dientich:.2f}')

2. Cấu trúc rẽ nhánh

Câu 1: Viết chương trình nhập vào số nguyên dương n, kiểm tra và xuất ra màn hình n là số chẵn hay số lẻ?

n = int(input('Mời nhập số nguyên dương n: ')) if n%2!=0: print(n,'là số lẻ') else: print(n,'là số chẵn')

Câu 2: Cho biểu thức $f(x,y) = \frac{{\sin x}}{{\frac{{2x + y}}{{\cos x}} – \frac{{{x^y}}}{{x – y}}}}$
Viết chương trình tính giá trị của biểu thức f(x,y) tại x, y nhập vào từ bàn phím.

x, y = map(float,input('Mời nhập x, y: ').split()) import math f = math.sin(x)/((2*x+y)/math.cos(x)-x**y/(x-y)) print('Giá trị của biểu thức là',f)

Câu 3: Viết chương trình nhập vào năm bất kỳ (ví dụ 2021), hãy cho biết năm đó có phải năm nhuận hay không?

nam = int(input('Mời nhập năm: ')) #Năm nhuận là năm chia hết cho 400 hoặc chia hết cho 4 nhưng không chia hết cho 100 if nam%400==0 or (nam%4==0 and nam%100!=0): print('Năm',nam,'là năm nhuận') else: print('Năm',nam,'không phải là năm nhuận')

Câu 4: Em hãy viết đoạn chương trình để xuất ra màn hình xếp loại học lực của học sinh theo giá trị điểm của học sinh?

diem = float(input('Mời nhập điểm học tập: ')) if diem<0 or diem>10: print('Điểm bạn nhập không hợp lệ') elif diem>=8: print('Xếp loại Giỏi') elif diem>=6.5: print('Xếp loại Khá') elif diem>=5: print('Xếp loại Trung bình') elif diem>=3.5: print('Xếp loại Yếu') else: print('Xếp loại Kém')

Câu 5: Viết chương trình giải phương trình bậc nhất một ẩn ax + b = 0, với hệ số a, b nhập vào từ bàn phím.

a = float(input('Mời nhập hệ số a: ')) b = float(input('Mời nhập hệ số b: ')) if a!=0: print('Phương trình có nghiệm x =',-b/a) elif b==0: print('Phương trình có vô số nghiệm') else: print('Phương trình vô nghiệm')

Câu 6: Viết chương trình giải phương trình bậc hai ax2 + bx + c = 0 ($a \ne 0$), với hệ số a, b, c nhập vào từ bàn phím.

a, b, c = map(float,input('Mời nhập hệ số a, b, c: ').split()) delta = b*b - 4*a*c if delta<0: print('Phương trình vô nghiệm') elif delta==0: print('Phương trình có nghiệm kép x1 = x2 =',-b/(2*a)) else: print('Phương trình có 2 nghiệm phân biệt') import math x1 = (-b - math.sqrt(delta))/(2*a) x2 = -b/a - x1 print('x1 =',x1,'x2 =',x2)

Câu 7: Viết chương trình kiểm tra xem điểm M(x,y) có nằm trong hình tròn tâm I(a,b) và bán kính R bằng cách xuất ra giá trị True nếu điểm M nằm trong hoặc trên hình tròn và False nếu nằm ngoài hình tròn, với x, y, a, b, R nhập vào từ bàn phím?

a, b = map(float,input('Mời nhập tọa độ tâm I: ').split()) r = float(input('Mời nhập bán kính R: ')) x, y = map(float,input('Mời nhập tọa độ điểm M: ').split()) #Khoảng cách từ điểm I đến điểm M import math d = math.sqrt((x-a)**2 + (y-b)**2) if dCâu 8: Viết chương trình nhập vào các số a, b, c, sau đó kiểm tra bộ ba số a, b, c vừa nhập vào là bộ ba cạnh của tam giác thường, tam giác vuông, tam giác cân, tam giác vuông cân, tam giác đều hay không phải là bộ ba cạnh của tam giác.

a, b, c = map(float,input('Mời nhập độ dài các cạnh: ').split()) if a + b < c or a + c < b or b + c < a: print('Đây không phải là độ dài 3 cạnh của tam giác') elif a==b or a==c or b==c: if a==b==c: print('Đây là tam giác đều') elif a*a == b*b + c*c or b*b == a*a + c*c or c*c == a*a + b*b: print('Đây là tam giác vuông cân') else: print('Đây là tam giác cân') elif a*a == b*b + c*c or b*b == a*a + c*c or c*c == a*a + b*b: print('Đây là tam giác vuông') else: print('Đây là tam giác thường')

3. Cấu trúc lặp

Câu 1: Viết chương trình tính tổng các số từ 1 đến n, với n là số nguyên dương nhập vào từ bàn phím?

n = int(input('Mời nhập số nguyên dương n: ')) s = 0 for i in range(1,n+1): s = s + i print('Tổng các số từ 1 đến',n,'là',s)

Câu 2: Viết chương trình tính tổng của bình phương các số lẻ từ 1 đến n, với n là số nguyên dương nhập vào từ bàn phím?

Cách 1: Sử dụng bước nhảy trong câu lệnh for

n = int(input('Mời nhập số nguyên dương n: ')) s = 0 for i in range(1,n+1,2): s = s + i*i print('Tổng bình phương các số lẻ từ 1 đến',n,'là',s)

Cách 2: Sử dụng câu lệnh if để kiểm tra số lẻ

n = int(input('Mời nhập số nguyên dương n: ')) s = 0 for i in range(1,n+1): if i%2!=0: s = s + i*i print('Tổng bình phương các số lẻ từ 1 đến',n,'là',s)

Câu 3: Viết chương trình nhập vào hai số nguyên dương m và n (m>n), xuất ra màn hình ước chung lớn nhất và bội chung nhỏ nhất của 2 số đó?

m, n = map(int,input('Mời nhập 2 số nguyên dương m, n: ').split()) a, b = m, n while a!=b: if a>b: a = a - b else: b = b - a print('Ước chung lớn nhất của',m,'và',n,'là',a) print('Bội chung nhỏ nhất của',m,'và',n,'là',int(m*n/a))

Câu 4: Viết chương trình kiểm tra số nguyên dương n nhập vào từ bàn phím có phải là số hoàn hảo hay không?

n = int(input('Mời nhập số nguyên dương n: ')) s = 0 for i in range(1,n): if n%i==0: s = s + i if s==n: print(n,'là số hoàn hảo') else: print(n,'không phải là số hoàn hảo')

Câu 5: Viết chương trình đếm các số nguyên tố nhỏ hơn n, với n là số nguyên dương nhập vào từ bàn phím?

n = int(input('Mời nhập số nguyên dương n: ')) dem = 0 #Cho i chạy từ 2 tới n-1 để kiểm tra i for i in range(2,n): #Kiểm tra i có phải là số nguyên tố không kt = True; j = 2; import math while j<=math.ceil(math.sqrt(i)) and kt: if i%j==0 and i!=2: kt = False j = j + 1 #kt bằng True nghĩa là i là số nguyên tố if kt: dem = dem + 1 print('Có',dem,'số nguyên tố nhỏ hơn',n)

Câu 6: Viết chương trình tính tổng:$S = \frac{1}{a} + \frac{1}{{a + 1}} + \frac{1}{{a + 2}} + … + \frac{1}{{a + n}} + …$Cho đến khi $\frac{1}{{a + n}} < 0,0001$

Với a là số thực bất kỳ nhập vào từ bàn phím

a = int(input('Mời nhập số thực a: ')) S = 0; n = 0; while not (1/(a+n)<0.0001): S += 1/(a+n) n += 1 print('Tổng cần tính là',S)

Câu 7: Viết chương trình giải bài toán cổ:
Trăm trâu trăm bó cỏ
Trâu đứng ăn năm
Trâu nằm ăn ba
Lụ khu trâu già
Ba con một bó
Hỏi có bao nhiêu trâu đứng, trâu nằm và trâu già?

print('Số lượng trâu đứng, trâu nằm và trâu già:') for x in range(1,100//5): for y in range(1,100//3): z = 100 - (x + y) if 15*x + 9*y + z == 300: print(f'{x} {y} {z}')

Câu 8: Nhập vào một số nguyên dương, hãy phân tích số nguyên dương đó thành tích các thừa số nguyên tố.

Cách 1: Sử dụng chương trình con và chưa tối ưu

#Kiểm tra n có phải là số nguyên tố không def isPrime(n): if n<2: return False kt = True; i = 2; import math while i<=math.ceil(math.sqrt(n)) and kt: if n%i==0 and n!=2: kt = False i = i + 1 return kt n = int(input('Mời nhập số nguyên dương n: ')) for i in range(2,n): while (n%i==0 and isPrime(i)): print(i,end=' ') n = n / i

Cách 2: Không sử dụng chương trình còn và tối ưu hơn

n = int(input('Mời nhập số nguyên dương n: ')) print(n,'được phân tích ra thừa số nguyên tố là:') for i in range(2,n): while n%i==0: print(i,end=' ') n = n / i

4. Chương trình con

Câu 1: Viết chương trình có sử dụng hàm lambda để trả về số giây tương ứng với các tham số giờ, phút, giây tương ứng nhập vào từ bàn phím.

h, m, s = map(int,input('Mời nhập giờ, phút, giây: ').split()) toSecond = lambda h, m, s: h*60*60 + m*60 + s print('Số giây tương ứng là',toSecond(h,m,s))

Câu 2: Viết chương trình tính tổng sau: S = 1! + 2! + … + n!, với n là số nguyên dương nhập vào từ bàn phím.

#Hàm giai thừa của số nguyên dương n def factorial(n): gt = 1; i = 1 for i in range(2,n+1): gt = gt *i return gt #Chương trình chính n = int(input('Mời nhập số nguyên dương n: ')) s = 0 for i in range(1,n+1): s = s + factorial(i) print('Tổng cần tính là',s)

Câu 3: Viết chương trình để in ra màn hình các số nguyên tố từ 1 đến n, với n là số nguyên dương nhập vào từ bàn phím.

#Kiểm tra n có phải là số nguyên tố không def isPrime(n): if n<2: return False kt = True; i = 2; import math while i<=math.ceil(math.sqrt(n)) and kt: if n%i==0 and n!=2: kt = False i = i + 1 return kt #Chương trình chính n = int(input('Mời nhập số nguyên dương n: ')) import math print('Dãy các số nguyên tố từ 1 đến',n,'là:') for i in range(2,n+1): if isPrime(i): print(i,end=' ')

Câu 4: Viết chương trình giải bài toán Tháp Hà Nội
Bài toán Tháp Hà Nội (Tower of Hanoi) là một trò chơi toán học bao gồm 3 cột và với số đĩa nhiều hơn 1. Các đĩa có kích cỡ khác nhau và xếp theo tự tự tăng dần về kích cỡ từ trên xuống: đĩa nhỏ hơn ở trên đĩa lớn hơn. Nhiệm vụ của trò chơi là di chuyển các đĩa có kích cỡ khác nhau sang cột khác sao cho vẫn đảm bảo thứ tự ban đầu của các đĩa: đĩa nhỏ nằm trên đĩa lớn.

Viết chương trình tính tổng các số nguyên dương lẻ từ 1 đến N với N được nhập vào từ bàn phím
Mô phỏng bài Tháp Hà Nội

#Hàm di chuyển các đĩa def move(n,col1,col2,col3): if n==1: print('Di chuyển',col1,'qua',col3) else: move(n-1,col1,col3,col2) move(1,col1,col2,col3) move(n-1,col2,col1,col3) #Chương trình chính n = int(input('Mời nhập số đĩa: ')) col1, col2, col3 = 1, 2, 3 move(n,col1,col2,col3)

Lưu ý: Trong chương trình trên có sử dụng thuật toán Đệ quy quay lui

5. Kiểu dữ liệu xâu

Câu 1: Viết chương trình “chuẩn hóa” họ và tên khi người dùng nhập vào họ tên bất kỳ từ bàn phím?

hoten = input("Mời nhập họ và tên: ") s = hoten.lower().title() print("Xâu chuẩn hóa là:",s)

Câu 2: Viết chương trình nhập vào một xâu bất kỳ, xuất ra màn hình xâu đó sau khi đã xóa đi các ký tự số?

s1 = input('Mời nhập xâu bất kỳ: ') s2 = '' for ch in s1: if ord(ch)<49 or ord(ch)>58: s2 = s2 + ch print('Xâu sau khi xóa các số:',s2)

Câu 3: Viết chương trình nhập vào một xâu bất kỳ, xuất ra màn hình xâu sau khi đã xóa các ký tự giống nhau liền kề.

s1 = input('Mời nhập xâu: ') k = ''; s2 = '' for x in s1: if x!=k: s2 = s2 + x; k = x print('Xâu kết quả là:',s2)

6. Kiểu dữ liệu tệp

Câu 1: Viết chương trình tính tổng các số lẻ trong tệp DATA.INP gồm 1 dòng duy nhất chứa dãy các số nguyên dương cách nhau bởi dấu cách. Xuất kết quả ra tệp DATA.OUT

fin = open('DATA.INP','r'); fout = open('DATA.OUT','w'); line = fin.readline(); arr = line.split(); a = [int(x) for x in arr] s = 0 for x in a: if x%2 != 0: s = s + x fout.write(str(s)) fin.close(); fout.close();

Câu 2: Viết chương trình lọc các số ở văn bản gồm có nhiều dòng trong tệp DATA.INP và xuất ra tệp DATA.OUT gồm dãy các số của từng dòng tương ứng ở trong tệp DATA.INP

#Mở tệp fin = open('DATA.INP','r') fout = open('DATA.OUT','w') #Duyệt theo từng dòng cho đến cuối tệp for line in fin: for ch in line: if ord(ch)>=48 and ord(ch)<=57: fout.write(ch) fout.write('\n') #Đóng tệp fin.close(); fout.close()

7. Kiểu dữ liệu mảng

Câu 1: Viết chương trình nhập vào mảng gồm n số nguyên dương, hãy xuất ra màn hình tổng của các số lẻ trong mảng đó, với n>2

Cách 1: Dạng biết trước số phần tử của mảng

n = int(input('Mời nhập số phần tử của mảng: ')) a = list(map(int,input('Mời nhập dãy số nguyên dương: ').split())) s = 0 for i in range(0,n): if a[i]%2!=0: s = s + a[i] print('Tổng của các số lẻ là',s)

Cách 2: Dạng không biết trước số phần tử của mảng

a = list(map(int,input('Mời nhập dãy số nguyên dương: ').split())) s = 0 for x in a: if x%2!=0: s = s + x print('Tổng của các số lẻ là',s)

Câu 2: Viết chương trình nhập vào dãy các số bất kỳ, tìm số lớn nhất trong dãy số đó và xuất ra màn hình?

a = list(map(float,input('Mời nhập dãy số: ').split())) max = a[0] for x in a: if maxCâu 3: Viết chương trình dung phương pháp list comprehension để tạo các list sau:
a) Dãy các số là bội của 3 và nhỏ hơn 100

a = [x for x in range(0,100) if x%3==0]

b) Dãy 10 số chính phương đầu tiên

a = [x**2 for x in range(0,10)]

Câu 4: Viết chương trình nhập vào dãy các số nguyên bất kỳ, kiểm tra và xuất ra màn hình xem dãy số đó có tạo thành cấp số cộng hay không?

a = list(map(int,input('Mời nhập dãy số nguyên: ').split())) d = a[1] - a[0] i = 0; kt = True while iCâu 5: Viết chương trình nhập vào bàn phím số nguyên dương n, xuất ra màn hình dãy số Fibonaxi. Biết rằng dãy Fibonaxi có dạng như sau: F0 = 1, F1 = 1, Fn = Fn-1 + Fn-2 với n>1

n = int(input('Mời nhập số nguyên dương n: ')) f = [1, 1]; i = 1 while iCâu 6: Viết chương trình nhập vào dãy gồm n số nguyên cách nhau bởi dấu cách. Sau đó đếm và xuất ra màn hình xem trong dãy vừa nhập có bao nhiêu số nguyên tố.

n = int(input('Mời nhập số phần tử: ')) a = list(map(int,input('Mời nhập dãy gồm '+str(n)+' phần tử: ').split())) import math; dem = 0; for x in a: kt = True; i = 2; while i<=math.ceil(math.sqrt(x)) and kt: if x%i==0 and x!=2: kt = False i = i + 1 if kt: dem = dem + 1 print('Có',dem,'số nguyên tố trong dãy số vừa nhập')

Câu 7: Viết chương trình nhập vào 2 ma trận số nguyên kích thước mxn, sau đó xuất ra màn hình tổng của 2 ma trận đó?

m, n = map(int,input('Mời nhập kích thước ma trận: ').split()) #Nhập ma trận thứ 1 print('Mời nhập ma trận thứ nhất:') a = [] for i in range(0,m): print('Dòng thứ',i+1,': ',end='') line = list(map(float,input().split())) a.append(line) #Nhập ma trận thứ 2 print('Mời nhập ma trận thứ hai:') b = [] for i in range(0,m): print('Dòng thứ',i+1,': ',end='') line = list(map(float,input().split())) b.append(line) #Tổng của 2 ma trận c = [] for i in range(0,m): line = [] for j in range(0,n): line.append(a[i][j] + b[i][j]) c.append(line) #In kết quả của ma trận tổng print('Tổng của 2 ma trận là:') for i in range(0,m): for j in range(0,n): print(c[i][j],end=' ') print()

Câu 8: Viết chương trình nhập vào danh sách gồm n người, mỗi người sẽ có các thông tin như: họ và tên, tuổi, giới tính và quê quán. Sau đó xuất ra màn hình thông tin của từng người đã nhập.

n = int(input('Mời nhập số người: ')) #Nhập thông tin từng người a = [] for i in range(0,n): print('Nhập thông tin người thứ',i+1,':') line = [] print('Họ và tên:',end=' '); line.append(input()) print('Tuổi:',end=' '); line.append(int(input())) print('Giới tính:',end=' '); line.append(input()) print('Quê quán:',end=' '); line.append(input()) a.append(line) #In ra danh sách vừa nhập for x in a: for y in x: print(y,end='\t\t') print()

8. Kiểu dữ liệu từ điển

Câu 1: Viết chương trình nhập vào một xâu bất kỳ, xuất ra màn hình số lần lặp của các từ đơn trong xâu vừa nhập.

s = input('Mời nhập vào xâu bất kỳ: ') #Tách thành các từ riêng lẻ thành mảng kiểu xâu A = s.split() dic = {} #Tạo biến kiểu từ điển rỗng #Duyệt qua từng phần tử của mảng A for w in A: # Nếu có khóa w thì tăng 1 đơn vị, không có thì thêm vào dic[w] = dic.get(w,0) + 1 #Xuất ra màn hình các từ với số lần lặp for key in dic: print(key, dic[key])

9. Kiểu dữ liệu xâu

Câu 1: Viết chương trình nhập vào 2 xâu bất kỳ có ký tự số, xuất ra màn hình các số có đồng thời trong cả 2 xâu đó và có tổng cộng bao nhiêu số như vậy?

#Nhập 2 xâu chứa ký tự số s1 = input('Mời nhập xâu thứ nhất: ') s2 = input('Mời nhập xâu thứ hai: ') #Tạo tập hợp chỉ gồm các ký tự số st1 = {ch for ch in s1 if ord(ch)>=48 and ord(ch)<=57} st2 = {ch for ch in s2 if ord(ch)>=48 and ord(ch)<=57} #Giao của hai tập hợp st = st1.intersection(st2) #Các số có đồng thời ở cả 2 xâu print('Có',len(st),'ký tự số có đồng thời ở 2 xâu') for x in st: print(x,end=' ')

10. Hướng đối tượng

Câu 1: Xây dựng lớp tam giác kế thừa từ lớp đa giác

class DaGiac: def __init__(self, socanh): self.n = socanh self.canh = [0 for i in range(socanh)] def nhapcanh(self): self.canh = [float(input("Bạn hãy nhập giá trị cạnh " + str(i + 1) + ": ")) for i in range(self.n)] def hienthicanh(self): for i in range(self.n): print("Giá trị cạnh", i + 1, "là", self.canh[i]) class TamGiac(DaGiac): def __init__(self): DaGiac.__init__(self, 3) def dientich(self): a, b, c = self.canh # Tính nửa chu vi s = (a + b + c) / 2 area = (s * (s - a) * (s - b) * (s - c)) ** 0.5 print('Diện tích của hình tam giác là %0.2f' % area) t = TamGiac() t.nhapcanh() t.hienthicanh() t.dientich()