Tổng Hợp Bài Tập C Cơ Bản Phần 2

Trong bài này chúng ta cùng thực hành các bài tập C về sử dụng chuỗi, tính toán, hàm đệ quy và nâng cao hơn trong việc dùng con trỏ.

Bài 19 phần 2 trong Serie Học lập trình C từ A tới Z

Table of Contents

Toggle
  • Bài tập C về Chuỗi (không sử dụng hàm)
    • In một chuỗi
    • Tìm độ dài chuỗi (không sử dụng hàm)
    • Đếm số lần xuất hiện của một ký tự trong chuỗi
    • Đếm số nguyên âm, phụ âm trong chuỗi
    • Sắp xếp các ký tự của chuỗi
    • Sao chép chuỗi
    • Đảo ngược chuỗi
    • Tìm kiếm chuỗi
    • Tráo đổi hai chuỗi
    • So sánh hai chuỗi
    • Nỗi chuỗi
    • Kiểm tra xem hai chuỗi là anagram không
    • Đảo ngược các ký tự của từng từ trong một chuỗi dài
    • Đảo ngược thứ tự từ của một chuỗi dài
  • Bài tập C về Chuỗi (sử dụng hàm)
    • Sắp xếp tập hợp các chuỗi theo thứ tự chữ cái
    • Chuyển đổi chuỗi thành số nguyên
    • Biến đổi chuỗi thành chữ hoa
    • Biến đổi chuỗi thành chữ thường
    • Sao chép một chuỗi sang một chuỗi khác
    • Nối hai chuỗi
    • Tìm độ dài chuỗi
  • Một số bài tập tính toán trong C
    • Tính lập phương của một số
    • Kiểm tra số Armstrong
    • Kiểm tra số nguyên tố
    • Tính giai thừa
    • Dãy Fibonacci (không sử dụng đệ qui)
    • Tính trung bình
    • Tính phần trăm
    • Tìm căn bậc hai của một số (không sử dụng sqrt())
    • Tìm căn bậc ba của một số
    • Tính hoán vị
    • Tìm ước chung lớn nhất của hai số
    • Tìm bội chung nhỏ nhất của hai số
  • Bài tập C về Đệ qui
    • In dãy Fibonacci bởi sử dụng đệ qui
    • Tính tổng n số bởi sử dụng đệ qui
    • Giải bài toán Tháp Hà Nội (Tower of Hanoi)
    • Tính giai thừa bởi sử dụng đệ qui
  • Bài tập C về Con trỏ
    • Cộng hai số bởi sử dụng con trỏ
    • Tráo đổi hai giá trị bởi sử dụng con trỏ
    • Tính tổng giá trị các phần tử trong mảng bởi sử dụng con trỏ
    • Tìm độ dài chuỗi bởi sử dụng con trỏ
    • Sử dụng con trỏ đề duyệt một mảng các số nguyên và in các giá trị theo thứ tự đảo ngược
  • Bài tập C về toán tử sizeof
  • Lời Kết

Bài tập C về Chuỗi (không sử dụng hàm)

In một chuỗi

Bài tập đơn giản này giúp bạn hiểu cách khai báo một chuỗi và cách in một chuỗi trong C.

Chương trình C

Dưới đây là chương trình C để giải bài tập in một chuỗi trong C:

bai tap c

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2114

Tìm độ dài chuỗi (không sử dụng hàm)

Nhiều khi bạn cần sử dụng độ dài của một chuỗi để thực hiện hoạt động nào đó. Chương này minh họa cho bạn cách tìm độ dài chuỗi mà không cần sử dụng hàm xử lý chuỗi trong C.

Bạn cần lưu ý là phải kiểm tra phần tử null (ký tự ‘\0’) trong chuỗi.

Chương trình C

Dưới đây là chương trình C để giải bài tập tìm độ dài chuỗi trong C:

word image 2115

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2116

Đếm số lần xuất hiện của một ký tự trong chuỗi

Để giải bài tập C này bạn cần sử dụng vòng lặp và cần kiểm tra ký tự ‘\0’ (giá trị null) trong chuỗi.

Chương trình C

Dưới đây là chương trình C để giải bài tập đếm số lần xuất hiện của một ký tự của chuỗi trong trong C:

word image 2117

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2118

Đếm số nguyên âm, phụ âm trong chuỗi

Các nguyên âm (vowels) là a, e, i, o, u. Bạn kiểm tra xem đó có là nguyên âm, nếu là true thì tăng biến đếm nguyên âm, nếu không thì tăng biến đếm phụ âm (consonants). Bạn lưu ý rằng là cần phải kiểm tra giá trị null (ký tự ‘\0’).

Chương trình C

Dưới đây là chương trình C để giải bài tập đếm số phụ âm, nguyên âm của một chuỗi trong C:

word image 2119

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2120

Sắp xếp các ký tự của chuỗi

Để giải bài tập C này bạn cần sử dụng hàm strlen() để tìm độ dài chuỗi. Sau đó sử dụng lồng vòng lặp cùng cách tráo đổi giá trị.

Chương trình C

Dưới đây là chương trình C để giải bài tập sắp xếp các ký tự của chuỗi theo thứ tự bảng chữ cái trong C:

word image 2121

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2122

Sao chép chuỗi

Cũng giống như sao chép mảng trong C, bạn sử dụng vòng lặp để duyệt qua từng ký tự trong chuỗi, sau đó sao chép vào trong chuỗi đích (chuỗi s2 chẳng hạn). Bạn cần lưu ý là chuỗi đích phải có độ dài bằng chuỗi ban đầu (chuỗi s1).

Chương trình C

Dưới đây là chương trình C để giải bài tập sao chép chuỗi trong C:

word image 2123

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2124

Đảo ngược chuỗi

Để thu được một chuỗi đảo ngược, bạn cần khai báo thêm một chuỗi đích có kích cỡ bằng kích cỡ với chuỗi ban đầu. Sử dụng vòng lặp để duyệt qua từng ký tự của chuỗi ban đầu rồi sau đó gán giá trị ký tự đó cho chuỗi đích. Kiểm tra khi nào gặp giá trị null (ký tự ‘\0’) thì kết thúc vòng lặp.

Chương trình C

Dưới đây là chương trình C để giải bài tập đảo ngược chuỗi trong C:

word image 2125

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2126

Tìm kiếm chuỗi

Yêu cầu bài tập là tìm kiếm một chuỗi con trong một chuỗi và đếm xem chuỗi con đó xuất hiện bao nhiêu lần.

Để giải bài tập C này, chúng ta cần sử dụng các vòng lặp cũng như cần nhớ kiểm tra điều kiện giá trị null (ký tự ‘\0’).

Chương trình C

Dưới đây là chương trình C để giải bài tập tìm kiếm từ hoặc ký tự trong một chuỗi trong C:

word image 2127

word image 2128

Biên dịch chương trình C trên sẽ cho kết quả:

Tìm kiếm chuỗi trong C

Tráo đổi hai chuỗi

Cũng tương tự như cách tráo đổi hai giá trị bởi sử dụng biến thứ ba, với bài tập C này, bạn sử dụng một biến tạm (biến thứ ba) để làm trung gian để tráo đổi hai chuỗi. Bạn sử dụng vòng lặp để duyệt qua tất cả các ký tự của hai chuỗi.

Chương trình C

Dưới đây là chương trình C để giải bài tập tráo đổi hai chuỗi trong C:

word image 2129

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2130

So sánh hai chuỗi

Yêu cầu bài tập C này là so sánh xem hai chuỗi có đồng nhất (giống nhau) hay không. Để giải bài tập C này bạn cần sử dụng vòng lặp để duyệt qua tất cả các ký tự của hai chuỗi và kiểm tra từng ký tự tương ứng với chỉ mục có giống nhau không.

Chương trình C

Dưới đây là chương trình C để giải bài tập so sánh hai chuỗi trong C:

word image 2131

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2132

Nỗi chuỗi

Bài tập C này có nhiều cách gọi: trộn hai chuỗi, nối hai chuỗi, ghép hai chuỗi hay cộng hai chuỗi, … Dù có nhiều cách gọi khác nhau đi chăng nữa thì đây cũng chỉ là một bài tập để nối ghép các ký tự của hai chuỗi để thành một chuỗi duy nhất.

Để giải bài tập C này, bạn sử dụng hàm strlen() để tìm độ dài chuỗi. Sử dụng vòng lặp để lặp qua tất cả ký tự của chuỗi.

Chương trình C

Dưới đây là chương trình C để giải bài tập nối chuỗi trong C:

word image 2133

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2134

Kiểm tra xem hai chuỗi là anagram không

Anagram là thuật ngữ để chỉ hai chuỗi có số ký tự và các ký tự giống nhau, nhưng thứ tự của các ký tự trong chuỗi có thể khác nhau.

Ví dụ: hai chuỗi listen và sliten là anagram.

Để giải bài tập C này, trước hết bạn cần so sánh độ dài của hai chuỗi (sử dụng hàm strlen() để tìm độ dài). Tiếp đó, bạn sắp xếp hai chuỗi theo thứ tự chữ cái (bạn có thể tham khảo cách sắp xếp ở chương sắp xếp các ký tự của chuỗi trong C), và cuối cùng sử dụng vòng lặp để duyệt qua hai chuỗi đã sắp xếp và so sánh xem từng ký tự của hai chuỗi này có giống nhau không.

Chương trình C

Dưới đây là chương trình C để giải bài tập kiểm tra anagram trong C:

word image 2135

word image 2136

word image 2137

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2138

Đảo ngược các ký tự của từng từ trong một chuỗi dài

Yêu cầu bài tập là với một chuỗi dài, ví dụ Toi yeu Viet Nam, bạn đảo ngược các ký tự của từng từ của chuỗi đó, thành ioT uey teiV maN.

Đây là một bài tập C khá phức tạp yêu cầu bạn cần tốn thời gian suy nghĩ. Hãy thử sức nhé!

Chương trình C

Dưới đây là chương trình C để giải bài tập đảo ngược các ký tự của từng từ của chuỗi trong C:

word image 2139

word image 2140

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2141

Đảo ngược thứ tự từ của một chuỗi dài

Yêu cầu bài tập là đảo ngược thứ tự của các từ trong một chuỗi dài. Ví dụ, bạn đảo chuỗi ban đầu Toi yeu Viet Nam thành Nam Viet yeu Toi.

Đây là một bài tập C khá phức tạp yêu cầu bạn cần tốn thời gian suy nghĩ. Hãy thử sức nhé!

Chương trình C

Dưới đây là chương trình C để giải bài tập đảo ngược thứ tự từ của chuỗi trong C:

word image 2142

word image 2143

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2144

Bài tập C về Chuỗi (sử dụng hàm)

Sắp xếp tập hợp các chuỗi theo thứ tự chữ cái

Nhiều khi bạn cần sắp xếp một tập hợp các chuỗi theo thứ tự chữ cái. Chương này minh họa cho bạn cách sắp xếp các chuỗi bởi sử dụng hàm strcmp() trong C.

Chương trình C

Dưới đây là chương trình C để giải bài tập sắp xếp các chuỗi theo thứ tự chữ cái trong C:

word image 2145

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2146

Chuyển đổi chuỗi thành số nguyên

Nhiều khi bạn cần lấy giá trị nguyên từ trong một chuỗi để thực hiện hoạt động nào đó. Giả sử như có trường hợp bạn nhập điểm thi của sinh viên dưới dạng chuỗi và do đó không thể thực hiện phép tính toán trên điểm thi này.

Chương này minh họa cách chuyển đổi chuỗi thành số nguyên bởi sử dụng hàm atoi() trong C. Hàm atoi() nhận tham số là một chuỗi và trả về dạng số nguyên.

Chương trình C

Dưới đây là chương trình C để minh họa cách chuyển đổi chuỗi thành số nguyên trong C:

word image 2147

Biên dịch chương trình C trên sẽ cho kết quả:

Chuyển đổi chuỗi thành số nguyên trong C

Biến đổi chuỗi thành chữ hoa

Chương này minh họa cách biến đổi một chuỗi thành dạng chuỗi chữ hoa bởi sử dụng hàm strupr() trong C. Hàm strupr() nhận một chuỗi làm tham số và biến đổi tất cả các chữ cái trong chuỗi thành chữ hoa.

Ghi chú:Sử dụng hàm gets(string) để nhập các chuỗi bao gồm cả khoảng trống (không giống hàm scanf()).

Chương trình C

Dưới đây là chương trình C để giải bài tập biến đổi chuỗi thành chữ hoa trong C:

word image 2148

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2149

Biến đổi chuỗi thành chữ thường

Chương này minh họa cách biến đổi một chuỗi thành dạng chuỗi chữ thường bởi sử dụng hàm strlwr() trong C. Hàm strlwr() nhận một chuỗi làm tham số và biến đổi tất cả các chữ cái trong chuỗi thành chữ thường.

Ghi chú:Sử dụng hàm gets(string) để nhập các chuỗi bao gồm cả khoảng trống (không giống hàm scanf()).

Chương trình C

Dưới đây là chương trình C để giải bài tập biến đổi chuỗi thành chữ thường trong C:

word image 2150

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2151

Sao chép một chuỗi sang một chuỗi khác

Chương này minh họa cách sao chép nội dung từ chuỗi này sang chuỗi khác bởi sử dụng hàm strcpy(str2, str1) trong C. Hàm strcpy(str2, str1) nhận hai chuỗi làm tham số, trong đó: chuỗi str1 là chuỗi ban đầu, chuỗi str2 là chuỗi có nội dung sao chép từ chuỗi str1.

Chương trình C

Dưới đây là chương trình C để giải bài tập sao chép chuỗi trong C:

word image 2152

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2153

Nối hai chuỗi

này minh họa cách nối hai chuỗi thành một chuỗi bởi sử dụng các hàm strcpy() và strcat() trong C.

Giả sử bạn cần nối hai chuỗi là str1 và str2. Bạn cần khai báo thêm một chuỗi str3 có độ dài bằng tổng độ dài của str1 và str2. Sau đó:

  • Sử dụng hàm strcpy(str3, str1) để sao chép chuỗi str1 vào str3.
  • Sử dụng hàm strcat(str3, str2) để nối chuỗi str2 với str1 vừa được sao chép.

Chương trình C

Dưới đây là chương trình C để giải bài tập nối chuỗi trong C:

word image 2154

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2155

Tìm độ dài chuỗi

Đôi khi bạn cần tìm độ dài của một chuỗi để thực hiện hoạt động nào đó. Ngôn ngữ C cung cấp hàm strlen(str) nhận một chuỗi làm tham số và trả về độ dài của chuỗi đó.

Chương trình C

Dưới đây là chương trình C để giải bài tập tìm độ dài chuỗi trong C:

word image 2156

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2157

Một số bài tập tính toán trong C

Tính lập phương của một số

Tính lập phương của một số là bài toán đơn giản trong C và không có nhiều điều cần chú ý về bài tập này. Bài tập này với mục đích là giúp bạn làm quen với cấu trúc chương trình C và cách khai báo và sử dụng các biến, các phép tính toán trên biến.

Chương trình C

Dưới đây là chương trình C để giải bài tập tính lập phương trong C:

word image 2158

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2159

Kiểm tra số Armstrong

Một số armstrong là số có giá trị bằng tổng lập phương các chữ số của số đó. Ví dụ, 153 là một số armstrong bởi vì:

word image 2160

Chương trình C

Dưới đây là chương trình C để giải bài tập kiểm tra số Armstrong trong C:

word image 2161

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2162

Kiểm tra số nguyên tố

Số nguyên tố chỉ chia hết cho 1 và chính nó. Ví dụ các số nguyên tố 1, 2, 3, 5 , 7, 11 …

Để giải bài tập C này, bạn sử dụng vòng lặp để kiểm tra phép chia số cần kiểm tra với các giá trị tăng dần từ 1 tới số đó. Sử dụng biến đếm để đếm số ước (hay số phép chia hết).

Chương trình C

Dưới đây là chương trình C để giải bài tập kiểm tra số nguyên tố trong C:

word image 2163

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2164

Tính giai thừa

Giai thừa của một số n là tích các số từ 1 tới n. Ví dụ, giai thừa của 4 là (4 * 3 * 2 * 1 = 24). Đây là bài tập C khá đơn giản giúp bạn làm quen với cách sử dụng vòng lặp trong C.

Chương trình C

Dưới đây là chương trình C để giải bài tập tính giai thừa trong C:

word image 2165

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2166

Dãy Fibonacci (không sử dụng đệ qui)

Dãy Fibonacci là dãy số được tạo bằng cách: số kế tiếp bằng tổng của hai số liền trước. Dãy Fibonacci bắt đầu từ hai số F0 & F1. Giá trị ban đầu của F0 & F1 có thể tương ứng là 0, 1 hoặc 1, 1.

Điều kiện của dãy Fibonacci có thể tổng quát lại như sau:

word image 2167

Dưới đây là ví dụ hai Fibonacci

F8 = 0 1 1 2 3 5 8 13

hoặc:

F8 = 1 1 2 3 5 8 13 21

Trong chương này chúng ta sẽ giải bài tập C này bởi không sử dụng khái niệm đệ qui. Mời bạn theo dõi chương trình C dưới đây.

Chương trình C

Dưới đây là chương trình C để giải bài tập in dãy Fibonacci trong C:

word image 2168

Biên dịch chương trình C trên sẽ cho kết quả:

Dãy fibonacci trong C

Tính trung bình

Giá trị trung bình của các số bằng tổng giá trị chia cho số các số. Đây là bài tập C khá cơ bản giúp bạn làm quen với các toán tử số học trong C.

Chương trình C

Dưới đây là chương trình C để giải bài tập tính giá trị trung bình trong C:

word image 2169

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2170

Tính phần trăm

Tương tự như bài tập tính giá trị trung bình trong C, đây là một bài tập khá cơ bản giúp bạn làm quen với các toán tử số học trong C.

Chương trình C

Dưới đây là chương trình C để giải bài tập tính giá trị phần trăm trong C:

word image 2171

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2172

Tìm căn bậc hai của một số (không sử dụng sqrt())

Đây có thể là một trong các bài tập mà các bạn nhận được từ Giảng viên. Bài tập C này có thể được giải theo hai bước:

  • Tìm phân nguyên
  • Tìm phần thập phân

Đây chỉ là cách giải cho kết quả xấp xỉ, và độ chính xác phụ thuộc vào số các số sau dấu thập phân.

Bạn theo dõi phần code dưới đây để hiểu cách tìm căn bậc hai của một số bất kỳ (tất nhiên không phải là số âm rồi) mà không sử dụng hàm sqrt() trong C.

Chương trình C

Dưới đây là chương trình C để giải bài tập tìm căn bậc hai của một số trong C:

word image 2173

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2174

Tìm căn bậc ba của một số

Tương tự như cách tìm căn bậc hai (không sử dụng hàm sqrt()), bài tập C này có thể được giải theo hai bước:

  • Tìm phân nguyên
  • Tìm phần thập phân

Đây chỉ là cách giải cho kết quả xấp xỉ, và độ chính xác phụ thuộc vào số các số sau dấu thập phân.

Bạn theo dõi phần code dưới đây để hiểu cách tìm căn bậc ba của một số bất kỳ trong C.

Chương trình C

Dưới đây là chương trình C để giải bài tập tìm căn bậc ba của một số trong C:

word image 2175

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2176

Tính hoán vị

Hoán vị là khái niệm được sử dụng trong xác suất thống kế. Công thức tính hoán vị như sau:

word image 2177

Đây là bài tập C khá đơn giản giúp bạn làm quen với cách sử dụng đệ qui để tính giai thừa trong C.

Chương trình C

Dưới đây là chương trình C để giải bài tập tìm hoán vị trong C:

word image 2178

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2179

Tìm ước chung lớn nhất của hai số

Chắc mình sẽ không cần nhắc lại khái niệm ước số chung lớn nhất (USCLN) của hai hay nhiều số. Ví dụ, ước số chung lớn nhất của 12 và 16 là 4.

Tìm ước số chung lớn nhất là bài tập khá đơn giản và có thể là bài tập về nhà của các bạn. Để giải bài tập C này, đơn giản bạn sử dụng vòng lặp để cùng kiểm tra phép chia hai số cho các số từ 1 tới số đó.

Chương trình C

Dưới đây là chương trình C để giải bài tập tìm ước số chung lớn nhất trong C:

word image 2180

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2181

Tìm bội chung nhỏ nhất của hai số

Chắc mình không cần nhắc lại khái niệm bội số chung nhỏ nhất (BSCNN) của hai hay nhiều số. Ví dụ: bội số chung nhỏ nhất của 3 và 4 là 12

Tìm bội số chung nhỏ nhất là bài tập khá đơn giản và có thể là bài tập về nhà của các bạn. Để giải bài tập C này, đầu tiên bạn tìm số lớn nhất trong hai số, gán giá trị lớn nhất cho một biến tạm và kiểm tra xem số này có chia hết cho số còn lại không, nếu chia hết thì bội số chung nhỏ nhất chính là số lớn nhất đó.

Nếu không chia hết, tiếp tục cộng giá trị của số lớn hơn vào biến tạm, và thực hiện như trên. Bạn sử dụng vòng lặp để thực hiện các phép toán trên.

Chương trình C

Dưới đây là chương trình C để giải bài tập tìm ước số chung lớn nhất trong C:

word image 2182

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2183

Bài tập C về Đệ qui

In dãy Fibonacci bởi sử dụng đệ qui

Dãy Fibonacci là dãy số được tạo bằng cách: số kế tiếp bằng tổng của hai số liền trước. Dãy Fibonacci bắt đầu từ hai số F0 & F1. Giá trị ban đầu của F0 & F1 có thể tương ứng là 0, 1 hoặc 1, 1.

Điều kiện của dãy Fibonacci có thể tổng quát lại như sau:

word image 2184

Dưới đây là ví dụ hai Fibonacci

F8 = 0 1 1 2 3 5 8 13

hoặc:

F8 = 1 1 2 3 5 8 13 21

Trong chương này chúng ta sẽ giải bài tập C này bởi sử dụng khái niệm đệ quy. Mời bạn theo dõi chương trình C dưới đây.

Chương trình C

Dưới đây là chương trình C để giải bài tập in dãy Fibonacci sử dụng đệ quy trong C:

word image 2185

Biên dịch và thực thi chương trình C trên sẽ cho kết quả sau:

word image 2186

Tính tổng n số bởi sử dụng đệ qui

Đây là bài tập C khá đơn giản giúp bạn hiểu cách sử dụng đệ quy trong ngôn ngữ lập trình C.

Chương trình C

Dưới đây là chương trình C để giải bài tập tính tổng n số sử dụng đệ quy trong C:

word image 2187

word image 2188

Biên dịch chương trình C trên sẽ cho kết quả:

Tính tổng từ 1 tới n trong C

Giải bài toán Tháp Hà Nội (Tower of Hanoi)

Trước khi tìm hiểu lời giải cho bài toán Tháp Hà Nội (Tower of Hanoi), mình xin nhắc lại một số qui tắc của trò chơi toán Tháp Hà Nội này:

Tháp Hà Nội (Tower of Hanoi) là gì ?

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.

Dưới đây là hình minh họa bài toán Tháp Hà Nội (Tower of Hanoi) với trường hợp có 3 đĩa.

Tháp Hà Nội (Tower of Hanoi)

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. Với số đĩa khác nhau thì ta có các bài toán Tháp Hà Nội (Tower of Hanoi) khác nhau, tuy nhiên lời giải cho các bài toán này là tương tự nhau. Lời giải tối ưu cho bài toán Tháp Hà Nội (Tower of Hanoi) là khi trò chơi chỉ có 3 cọc. Với số cọc lớn hơn thì lời giải bài toán vẫn chưa được khẳng định.

Qui tắc trò chơi toán học Tháp Hà Nội (Tower of Hanoi)

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. Dưới đây là một số qui tắc cho trò chơi toán học Tháp Hà Nội (Tower of Hanoi):

  • Mỗi lần chỉ có thể di chuyển một đĩa từ cột này sang cột khác.
  • Chỉ được di chuyển đĩa nằm trên cùng (không được di chuyển các đĩa nằm giữa).
  • Đĩa có kích thước lớn hơn không thể được đặt trên đĩa có kích thước nhỏ hơn.

Dưới đây là hình minh họa cách giải bài toán Tháp Hà Nội (Tower of Hanoi) với trường hợp có 3 đĩa.

Tháp Hà Nội (Tower of Hanoi)

Bài toán Tháp Hà Nội (Tower of Hanoi) với số đĩa là n có thể được giải với số bước tối thiểu là 2n−1. Do đó, với trường hợp 3 đĩa, bài toán Tháp Hà Nội (Tower of Hanoi) có thể được giải sau 23−1 = 7 bước.

Phần dưới đây mình trình bày hai cách giải: sử dụng đệ quy và KHÔNG sử dụng đệ quy trong C.

Chương trình C: sử dụng đệ quy

Dưới đây là chương trình C để giải bài toán Tháp Hà Nội (Tower of Hanoi) sử dụng đệ quy trong C trong C:

word image 2189

Biên dịch chương trình C trên sẽ cho kết quả:

Giải bài toán tháp hà nội trong C

Chương trình C: Không sử dụng đệ quy

word image 2190 word image 2191 word image 2192

Kết quả

Biên dịch và chạy chương trình C trên sẽ cho kết quả:

Bài toán Tháp Hà Nội (Tower of Hanoi) trong C

Tính giai thừa bởi sử dụng đệ qui

Giai thừa của một số n là tích các số từ 1 tới n. Ví dụ, giai thừa của 4 là (4 * 3 * 2 * 1 = 24). Đây là bài tập C khá đơn giản giúp bạn làm quen với cách sử dụng đệ quy trong C.

Chương trình C

Dưới đây là chương trình C để giải bài tập tính giai thừa bởi sử dụng đệ quy trong C:

word image 2193

Biên dịch và thực thi chương trình C trên sẽ cho kết quả sau:

word image 2194

Bài tập C về Con trỏ

Cộng hai số bởi sử dụng con trỏ

Đây là bài tập C khá đơn giản minh họa giúp bạn cách khai báo con trỏ và cách thực hiện các phép toán trên con trỏ trong C.

Chương trình C

Dưới đây là chương trình C để giải bài tập cộng hai số bởi sử dụng con trỏ trong C:

word image 2195

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2196

Tráo đổi hai giá trị bởi sử dụng con trỏ

Để tráo đổi giá trị, ngoài cách sử dụng con trỏ, chúng ta còn có các cách khác, chẳng hạn bởi sử dụng biến thứ ba hay bởi không sử dụng biến thứ ba.

Tuy nhiên, giải bài tập C cơ bản này bởi sử dụng con trỏ giúp bạn hiểu hơn về cách sử dụng con trỏ trong C.

Chương trình C

Dưới đây là chương trình C để giải bài tập tráo đổi giá trị bởi sử dụng con trỏ trong C:

word image 2197

Biên dịch chương trình C trên sẽ cho kết quả:

Tráo đổi giá trị bởi sử dụng con trỏ trong C

Tính tổng giá trị các phần tử trong mảng bởi sử dụng con trỏ

Không có gì phức tạp với bài tập C này. Bài tập C này chỉ là một trong các ví dụ đơn giản giúp bạn hiểu cách sử dụng vòng lặp và đặc biệt là con trỏ trong C.

Chương trình C

Dưới đây là chương trình C để giải bài tập tính tổng các phần tử mảng bởi sử dụng con trỏ trong C:

word image 2198

Biên dịch chương trình C trên sẽ cho kết quả:

Tính tổng các phần tử của mảng bởi sử dụng con trỏ trong C

Tìm độ dài chuỗi bởi sử dụng con trỏ

Chúng ta đã có các cách ngắn hơn để tìm độ dài chuỗi là: tìm độ dài chuỗi (không sử dụng hàm) và tìm độ dài chuỗi (sử dụng hàm).

Chương trình tìm độ dài chuỗi bởi sử dụng con trỏ thì rườm rà hơn nhưng đây là bài tập C minh họa cách sử dụng con trỏ trong C. Cho nên mình cho rằng bạn nên theo dõi để hiểu thêm về cách dùng con trỏ trong ngôn ngữ lập trình C.

Chương trình C

Dưới đây là chương trình C để giải bài tập tìm độ dài chuỗi bởi sử dụng con trỏ trong C:

word image 2199

Bạn nhớ là nên kiểm tra giá trị null (ký tự ‘\0’) của chuỗi nhé.

Biên dịch chương trình C trên sẽ cho kết quả:

word image 2200

Sử dụng con trỏ đề duyệt một mảng các số nguyên và in các giá trị theo thứ tự đảo ngược

Đây là bài tập C minh họa cách duyệt một mảng và in mảng theo chiều đảo ngược bằng cách sử dụng con trỏ trong C. Bạn tìm hiểu chương trình C dưới đây để hiểu cách làm việc của con trỏ trên mảng.

Chương trình C

Dưới đây là chương trình C để giải bài tập duyệt và in mảng theo chiều đảo ngược bởi sử dụng con trỏ trong C:

word image 2201

Biên dịch chương trình C trên sẽ cho kết quả:

Duyệt và in mảng bởi sử dụng con trỏ trong C

Bài tập C về toán tử sizeof

Mặc dù toán tử sizeof có cú pháp là:

word image 2202

Nhưng sizeof là một toán tử chứ không phải là một hàm trong C. Toán tử sizeof nhận một tham số là bất kỳ kiểu dữ liệu nào và trả về kích cỡ của kiểu dữ liệu đó.

Cách sử dụng toán tử sizeof trong C

1. Chương trình C dưới đây minh họa cách sử dụng của toán tử sizeof để trả về kích cỡ của các kiểu dữ liệu trong C

word image 2203

Chạy chương trình C trên sẽ cho kết quả:

Toán tử sizeof trong C

2. Các chương trình C dưới đây minh họa cách sử dụng của toán tử sizeof để trả về kích cỡ của các con trỏ tới các kiểu dữ liệu khác nhau: int, float, char, struct, …. Bạn lưu ý là các ví dụ về con trỏ tới kiểu dữ liệu nhé, KHÔNG phải là kích cỡ của kiểu dữ liệu.

Lưu ý: Kích thước của một biến con trỏ tùy thuộc vào Hệ điều hành, do đó với các ví dụ dưới đây, nếu bạn có thực hành mà ra kết quả khác thì bạn cũng đừng lo lắng.

Sử dụng toán tử sizeof tìm kích cỡ của struct trong C

word image 2204

Chạy chương trình C trên sẽ cho kết quả:

Toán tử sizeof trong C

Sử dụng toán tử sizeof tìm kích cỡ của con trỏ tới struct trong C

word image 2205

Chạy chương trình C trên sẽ cho kết quả:

Toán tử sizeof trong C

Sử dụng toán tử sizeof tìm kích cỡ của của con trỏ tới float trong C

word image 2206

Chạy chương trình C trên sẽ cho kết quả:

Toán tử sizeof trong C

Sử dụng toán tử sizeof tìm kích cỡ của của con trỏ tới int trong C

word image 2207

Chạy chương trình C trên sẽ cho kết quả:

Toán tử sizeof trong C

Sử dụng toán tử sizeof tìm kích cỡ của của con trỏ tới char trong C

word image 2208

Chạy chương trình C trên sẽ cho kết quả:

Toán tử sizeof trong C

Lời Kết

Hi vọng, sau khi các bạn học các bài tập C này đã có thể sử dụng thành thạo chúng trong tính toán và xử lý chuỗi. Ngoài ra hiểu rõ hơn về hàm đệ qui và cách sử dụng con trỏ.

Nếu cảm thấy bài viết có ích hay đánh giá và chia sẻ cho bạn bè. Đừng quên tham gia nhóm Nghiện lập trình để cùng trao đổi và kết nối nhé!

Rate this post

Từ khóa » độ Dài Chuỗi C