tổng hợp các bài tập C# cơ bản
ĐẠI HỌC HUẾ Trường Đại học Kinh tế Khoa Hệ thống thông tin Kinh tế Cơ sở lập trình Thực hành 3 : Các cấu trúc điều khiển Giảng viên: Lê Viết Mẫn Email: lvman@hce.edu.vn Lệnh điều kiện Câu 1 Viết lại câu 3 bài thực hành 3 để kiểm tra xem kích cỡ giày có trong khoảng 17-46 hay không. Nếu kích cỡ giày nằm ngoài khoảng này thì thông báo “Đây không phải là kích cỡ giày của người Châu Á”. Câu 2 Tiền vé vào cửa ở một viện bảo tàng địa phương được tính như sau : miễn phí cho trẻ em dưới 5 tuổi, từ 65 tuổi trở lên là $1.50 và những người khác là $2.50. Viết một lệnh if để in ra entryFee (tiền vào cửa) có kiểu float theo giá trị nhập vào ageOfEntrant (tuổi của người vào cửa) theo kiểu int. Câu 3 Các bản tin dự báo thời tiết thường đề cập tới nhiệt độ trong ngày. Với nhiệt độ theo độ Fahrenheit có công thức tính như sau : 65 − (Nhiệt độ cao trong ngày + Nhiệt độ thấp trong ngày)/2 Biểu thức trên là dương thì đó là ngày nhiệt độ nóng, còn nếu là âm thì đó là ngày nhiệt độ lạnh. Viết một lệnh if đưa ra ngày nhiệt độ nóng hay ngày nhiệt độ lạnh. Sử dụng các biến nguyên highTemp và lowTemp, các biến thực degDays, heatingDegDays và coolingDegDays. Câu 4 Chỉ số lạnh (wind-chill index) dưới -25 là nguy hiểm, dưới -75 là vô cùng nguy hiểm. Sửa chương trình tính chỉ số gió lạnh để in ra câu cảnh báo thích hợp. 1 Câu 5 Một chỉ số về thời tiết ấm giống chỉ số gió lạnh là chỉ số khó chịu (discomfort index) cũng được gọi là chỉ số nhiệt độ - độ ẩm, được định nghĩa bằng : discomfortIndex = 0.4(dryTemp + wetT emp) + 15 Trong đó, dryTemp - “Nhiệt độ khô trên nhiệt kế” là nhiệt độ thông thường đo theo độ Fahrenheit và wetTemp - “Nhiệt độ ẩm trên nhiệt kế” là nhiệt độ theo độ Fahrenheit mà không khí có thể làm mát bằng cách làm bay hơi nước trong một áp suất không đổi. Chỉ số lớn hơn 85 là rất khó chịu. Viết một chương trình C# tính toán và in ra chỉ số khó chịu với các biến dryTemp và wetTemp nhập từ bàn phím và in ra một câu cho biết thời tiết có dễ chịu hay không. Chương trình khi chạy sẽ có dạng như sau : DISCOMFORT INDEX DETERMINATION The dry-bulb temperature today is : 76 The wet-bulb temperature today is : 65 The discomfort index today is 71.4, a pleasant day. DISCOMFORT INDEX DETERMINATION The dry-bulb temperature today is : 106 The wet-bulb temperature today is : 90 The discomfort index today is 93.4, very uncomfortable. Câu 6 Chỉ số độ ẩm H được định nghĩa : H = T + h trong đó T là nhiệt độ hiện tại đo bằng ◦ F và h là số độ ẩm được định nghĩa h = e − 10 trong đó e là áp suất hơi nước theo millibar (1013.25 millibar = 760 millimet thủy ngân). Vùng khó chịu của độ ẩm là : 85 Mức độ khó chịu trung bình 100 Khó chịu với mọi người 115 Tất cả mọi hoạt động nên được hạn chế 2 Viết một chương trình C# để tính và in ra độ ẩm, với việc nhập vào nhiệt độ và áp suất hơi nước. Cũng in thêm một thông báo cho biết mức độ khó chịu. Câu 7 Sau đây là những quy định đối với thành viên quốc hội của Mỹ, được trích dẫn từ mục I trong hiến pháp Mỹ : Người được chọn vào Hạ Nghị Viện phải là một người ít nhất 25 tuổi, có 7 năm là công dân Mỹ và không phải là dân di cư đến bang họ được chọn ( eligibleForHouse : đủ tư cách vào hạ nghị viện). Thượng nghị sĩ Mỹ phải là người ít nhất 30 tuổi, có 9 năm là công dân Mỹ và không phải dân di cư tới bang họ được chọn ( eligileForSenate : đủ tư cách làm thượng nghị sĩ). Với age là tuổi của người ứng cử và lengthOfCitizenShip là số năm là công dân Mỹ. Sử dụng biến nguyên age và lengthOfCitizenShip, viết các biểu thức để tính các giá trị đúng cho các biến eligibleForHouse và eligibleForSenate. Sử dụng chúng viết một chương trình C# kiểm tra tiêu chuẩn ứng cử vào quốc hội (bỏ qua điều kiện về bang cư trú) khi chạy chương trình sẽ cho kết quả đầu ra dạng như sau : CONGRESS ELIGIBILITY Enter age of candidate : 37 Enter years of U.S. citizenship : 3 The candidate is not eligible for election to either the House of Representative or the Senate. CONGRESS ELIGIBILITY Enter age of candidate : 47 Enter years of U.S. citizenship : 8 The candidate is eligible for election to the House of Representative but not eligible for election to the Senate. CONGRESS ELIGIBILITY Enter age of candidate : 35 Enter years of U.S. citizenship : 25 The candidate is eligible for election to both the House of Representative and the Senate. 3 Câu 8 Trung tâm kiểm soát bệnh tật ở Atlanta, thuộc bang Georgia, xác định độ béo phì (obese) của một người thông qua chỉ số khối lượng cơ thể (body mas index) của người đó. Chỉ số này bằng trọng lượng (kg) chia cho bình phương chiều cao (m). Đối với một người đàn ông có chỉ số là 27.8 hay hơn thì đã bị coi là béo. Còn với một người phụ nữ không có thai thì giới hạn là 27.3. Viết chương trình đọc vào thông tin của một người theo : sex (giới tính), height (chiều cao), weight (cân nặng), tính ra chỉ số bodyMassIndex và đưa ra thông báo về mức độ béo. Dựa trên chỉ số trên hãy thông báo nguy cơ bị đau tim. Nếu bodyMassIndex nhỏ hơn 25 là nguy cơ bị đau tim thấp, từ 25 đến dưới 30 là nguy cơ bị đau tim trung bình và lớn hơn 30 là nguy cơ bị đau tim cao. Chú ý : trong chương trình khi nhập vào theo inch và pound nên cần đổi về mét và kilogram (1 mét = 39.37 inch, 1 kg = 2.20 pound). Chương trình khi thực hiện sẽ cho kết quả đầu ra có dạng như sau : OBESITY CALCULATION Enter your sex (0 for male, 1 for female) : 0 Enter the height in inches : 68 Enter the weight in pounds : 154 Your body-mass-index 24.1851, you are not obese. Your risk of heart disease is very low to low. Lệnh lựa chọn Câu 1 Viết một chương trình đọc vào một số nguyên n ≥ 0 và viết n thành số thứ tự với hậu tố là : “th”, “st”, “sd” hay “nd”. Chương trình khi chạy cho kết quả đầu ra có dạng : Enter an integer >= 0 : 3 The ordinal form is 3 rd . Câu 2 Giá bưu phẩm được tính theo quy tắc sau (với 1 ounce = 28,35 g) : Loại một, trong nước : $0.32 cho ounce đầu tiên, $0.23 cho mỗi ounce sau Loại thư gửi nước ngoài : $0.50 cho một nửa ounce Bưu thiếp trong nước : $0.20 Gửi sách : $1.24 cho pound đầu tiên, 2-7 pounds $0.50 cho mỗi pound thêm, $0.31 cho mỗi pound thêm từ pound thứ 7 trở đi. Viết một câu lệnh switch để tính giá bưu phẩm khi gửi một món hàng với trọng lượng tính theo ounce (16 ounces = 1 pound) và các loại ở trong biến kiểu liệt kê postalClass. 4 Câu 3 Có các kiểu ngộ độc sau : thuốc cảm, rượu, thuốc lá, cờlo, thuốc diệt chuột, axit mạnh, kiềm mạnh, strychnine, xăng dầu. Ngoại trừ ngộ độc vì trong axit mạnh, kiềm mạnh, strychinine và xăng dầu, để giải độc nói chung, cần phải cho uống một lượng lớn những thứ gây nôn mửa và các loại thuốc giải độc phổ biến. Ngộ độc bởi axit mạnh, cho uống nước và sau đó là thuốc muối magie-cacbonat hoặc natri cacbonat hòa tan; không được gây nôn. Ngộ độc bởi kiềm mạnh, cho uống nước và sau đó là dấm hay nước chanh; không được gây nôn. Nếu ngộ độc strychinine hay xăng dầu, không được gây nôn, gọi bác sĩ ngay lập tức ! Viết một câu lệnh switch sử dụng kiểu liệt kê poisonType (kiểu độc tố) để in ra cách điều trị thích hợp với từng loại ngộ độc. Câu 4 Nhà toán học nổi tiếng Carl Friedrich Gauss đề ra một cách tính ngày lễ phục sinh theo lịch hiện hành (lịch Gergorian) của năm N (nhỏ hơn hoặc bằng 1999). Định nghĩa : M = 15 + C − floor(C/4) − floor(8C + 13)/25 và L = 4 + C − floor(C/4) trong đó C là chỉ số thế kỷ của năm N hay : C = floor(N/100) Chia N cho 4, 7 và 19 được lần lượt các số dư a, b, c. Chia 19C + M cho 30 được số dư d. Chia 2a + 4b + 6d + L cho 7 được số dư e. Sau đó ta có ngày lễ phục sinh là ngày (22 + d + e) của tháng 3 nếu d + e ≤ 9 nếu không ngày lễ phục sinh là ngày (d + e − 9) của tháng 4. Với các ngoại lệ : 1. d = 29 và e = 16. Ngày lễ phục sinh diễn ra sớm hơn một tuần vào ngày 19/04 2. d = 28 và e = 6 và m = 2, 5, 10, 13, 16, 21, 24, hay 29. Ngày lễ phục sinh được diễn ra sớm hơn một tuần vào ngày 18/04. Viết một chương trình tính ngày lễ phục sinh. Khi chạy chương trình cho kết quả như sau : CALCULATION OF THE DATE OF EASTER Enter the year : 1986 The date of Easter is March 30. CALCULATION OF THE DATE OF EASTER 5 Enter the year : 1985 The date of Easter is April 7. Câu 5 Viết một chương trình tính ngày sau ngày đã nhập. Chương trình cần phải tính toán các năm nhuận. Chương trình cần kiểm tra tính hợp lệ của ngày nhập vào. Chương trình khi thực hiện cho kết quả như sau : TOMORROW’S DATE Enter the day for today’s date : 22 Enter the month for today’s date : 10 Enter the year for today’s date : 1986 Tomorrow’s date is 23/10/1986 TOMORROW’S DATE Enter the day for today’s date : 31 Enter the month for today’s date : 12 Enter the year for today’s date : 1886 Tomorrow’s date is 1/1/1887 Câu 6 Một dược phẩm cho trẻ em được quy định : ở dạng nước chứa 1.23 gren (1 gren = 0.0648 gam) một ống, dạng xiro chứa 2.46 gren một thìa cà phê và ở dạng viên thuốc nhai chứa 1.23 gren một viên. Liều lượng qui định là 0.0931 gren một pound đối với trẻ nặng 7-110 pound. Nếu dạng ống, cho uống mỗi lần nữa ống nhưng không được vượt quá 3 ống đầy. Nếu dạng xiro, mỗi lần từ một phần tư thìa cà phê tới một thìa hoặc từng nữa thìa một nếu uống nhiều hơn một thìa. Thuốc viên không được bẻ vỡ và không dùng cho trẻ dưới 27 pounds. Liều lượng thuốc cho phép được dao động quanh giá trị quy định gần nhất (ví dụ : quy định 0.65 thìa xiro thì có thể được tới 0.75). Viết một chương trình đọc vào cân nặng đứa trẻ theo pound và in ra liều lượng đúng của dược phẩm (thuốc nước : drop, xiro : syrup, thuốc viên : tablet). Sau đây là kết quả thực hiện chương trình : DOSAGE CALCULATOR Enter the child’s weight in pounds : 38 Recommended dosage is 3.0 droppers of drops or 1.5 teaspoons of syrup or 3 tablets. 6 Câu lệnh lặp - for Câu 1 Viết chương trình in ra nhiệt độ Fahrenheit tương ứng với các nhiệt độ từ -10 ◦ C đến 10 ◦ C. Chú ý : xem lại câu 1 bài thực hành 3. Câu 2 Viết chương trình in lịch theo tháng, năm và kiểu lịch như sau : October, 1948 Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Các giá trị cần phải biết để có thể in lịch : 1. Tính số ngày từ 01/01 của năm in lịch đến ngày 01 tháng cần in lịch (gọi số ngày này là dayNumber) 2. Tính số ngày tuyệt đối (absoluteDay) - là số ngày từ ngày đầu tiên sau công nguyên đến ngày 01 tháng năm cần in lịch, theo công thức sau : absoluteDay = dayNumber+365∗(year−1)+(year−1)/4−(year−1)/100+(year−1)/400 3. Tính thứ của ngày đầu tiên trong tháng dựa vào số ngày tuyệt đối (chia cho 7 lấy phần dư) và ngày của thứ bảy đầu tiên trong tháng 4. Tính số ngày trong tháng (lastDay = 28, 29, 30 hay 31) Câu 3 Viết chương trình tính giá trị n i=1 √ i Câu 4 Một trường đại học nổi tiếng thường gửi các hóa đơn thanh toán cho các khoa vào ngày 21 hàng tháng. Nếu ngày 21 rơi vào thứ bảy hoặc chủ nhật thì hóa đơn được gửi vào ngày thứ 6 trước đó. Viết một chương trình in ra danh sách các thứ và ngày hóa đơn gửi của các tháng trong năm được nhập vào. Chú ý : cần xác định xem ngày 21 mỗi tháng là thứ mấy (xem lại câu 2 ở trên). Câu 5 Dãy số Fibonacci : 0, 1, 1, 2, 3, 5, 8, . được xác định theo quy luật là số sau bằng tổng của hai số đứng trước. Viết một chương trình in ra 20 số Fibonacci đầu tiên (sử dụng hằng maxNumber = 20) và cứ 4 số nằm trên 1 dòng. 7 Câu 6 Viết một chương trình đọc vào 1 năm, xác định tháng nào sẽ có thứ sáu vào ngày 13. Kết quả ra có dạng : OCCURRENCES OF FRIDAY THE 13TH Enter a year : 1903 Friday the 13th occurs in February March November OCCURRENCES OF FRIDAY THE 13TH Enter a year : 1975 Friday the 13th occurs in June Câu 7 Viết chương trình in các thứ trong tuần và số lần ngày sinh nhật của một người trùng với thứ đó tính từ năm 2000 đến 2999. Câu 8 Viết chương trình in ra tổng các chữ số của mỗi số nguyên từ 150 đến 180. Kết quả có dạng SUM OF DIGITS number sum 150 6 151 7 . . 180 9 Câu 9 Viết chương trình liệt kê tất cả các số nhỏ hơn 3000 thỏa mãn điều kiện : số đó bằng tổng lập phương các chữ số của nó. Ví dụ : 153 = 1 3 + 5 3 + 3 3 Câu lệnh lặp - while Câu 1 Bài toán cổ về bà già và rổ trứng : Một kỵ sĩ va phải một bà già đang trên đường ra chợ làm vỡ toàn bộ số trứng trong rổ. Anh ta muốn đền rổ trứng nhưng bà già không biết chính xác mình có bao nhiêu trứng. Bà già chỉ biết nếu bỏ trứng vào rổ 2 quả một thì lẻ 1 quả, tương tự nếu bỏ 3 quả một, 4 quả một, 5 quả một và 6 quả một thì đều lẻ 1 quả còn nếu bỏ 7 quả một thì vừa chẵn. Hỏi bà già có thể mang ít nhất bao nhiêu quả trứng. Lập trình giải bài toán trên. Câu 2 Viết chương trình reverseDigits đọc vào một số nguyên và in ra một số là số nguyên ban đầu với các chữ số bị đảo ngược thứ tự. Kết quả ra có dạng : DIGIT REVERSAL 8 Enter a positive integer : 12345 The integer with digits reversed is : 54321 Chương trình phải bỏ qua các chữ số 0 ở đầu nếu có. Ví dụ : đọc vào 12000 thì in ra 21. Câu 3 Một số mà bằng với số đảo ngược của số đó thì được gọi là palindrome. Ví dụ 121 là số palindrome còn 41 thì không. Sử dụng câu 2 ở trên để viết chương trình cho phép nhập vào một số và thông báo số đó có phải là số palindrome hay không. Câu 4 Xét quá trình sau : bắt đầu từ một số nguyên dương không phải là số palindrome, giả sử số 48. Lấy 48 + 84 = 132. Vì 132 không phải số palindrome nên ta lấy 132 + 231 = 363 là số palindrome và dừng lại. Viết chương trình đọc vào một số nguyên và áp dụng quá trình trên cho đến khi tìm được số palindrome. Chú ý điều kiện dừng của vòng lặp trước khi một số nguyên vượt quá giới hạn kiểu int trong máy tính. Ví dụ nếu bắt đầu bằng 89 thì với các số nguyên 32-bit không thể tìm được số palindrome. Câu 5 Xét một quá trình áp dụng cho một số nguyên dương : Nếu số đó là lẻ thì nhân lên 3 rồi cộng 1. Nếu số đó là chẵn thì chia nó cho 2. Quá trình này lặp đến khi số nguyên còn lại là 1. Ví dụ : với số 34, ta phải tiến hành 13 bước và có kết quả là 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1. Viết chương trình áp dụng quá trình trên cho các số nguyên từ 1 đến 1000. Sau đó, đưa ra số bước lớn nhất cần cho quá trình, số trung gian lớn nhất được tạo ra. Tổng hợp Câu 1 Bài toán thị trường chứng khoán : đọc vào giá trị của cổ phiếu cho các ngày liên tiếp nhau và tìm ra 2 ngày tốt nhất để bán và mua cổ phiếu sao cho thu lợi cao nhất. Kết quả ra có dạng : STOCK MARKET PROBLEM Enter value of stock on day 1 : $ 17 Enter value of stock on day 1 : $ 18 Enter value of stock on day 1 : $ 16 Enter value of stock on day 1 : $ 17 Enter value of stock on day 1 : $ 21 Enter value of stock on day 1 : $ 19 Enter value of stock on day 1 : $ 20 Enter value of stock on day 1 : $ ^D Maximum profit from buying on day 3 and selling on day 5. 9 Câu 2 Một bảng khấu hao vốn biểu diễn lịch trả tiền lãi hàng tháng cho một khoản vay. Ta có công thức tính phần lãi tháng : L˜ai = Số dư x L˜aisuất 12 và phần được áp dụng cho vốn gốc là V ốn gốc = Nợ đã trả - Lãi và số dư sẽ là Số dư còn lại = Số dư - Vốn gốc Ví dụ : Với lãi suất 5.5% của khoản vay $20178.45 và số tiền thực trả hàng tháng là $187.35, chương trình cần ra kết quả như sau : Enter amount of loan : $ 20178.45 Enter interest rate : 0.055 Enter monthly payment : $ 187.35 Schedule of direct reduction loan Loan : $ 20178.45 Rate : 5.5% Monthly Payment : $ 187.35 Payment Interest Principal Balance 20178.45 1 92.48 94.87 20083.58 2 92.5 95.30 19988.28 3 91.61 95.74 19892.54 . 146 3.24 184.11 523.20 147 2.40 184.11 338.25 148 1.55 185.80 152.45 149 0.70 152.45 153.15 Chúc các bạn thực hành tốt ! 10