5.1 Add2Integer (Input)
Viết chương trình có tên Add2Integers
nhắc nhở người dùng nhập hai số nguyên. Chương trình sẽ đọc hai số nguyên như int
; tính tổng của chúng; và in kết quả. Ví dụ,
Enter first integer: 8
Enter second integer: 9
The sum is: 17
Hints
import java.util.Scanner;
public class Add2Integers {
public static void main (String[] args) {
int number1, number2, sum;
Scanner in = new Scanner(System.in);
System.out.print("Enter first integer: ");
number1 = in.nextInt();
......
sum = ......
System.out.println("The sum is: " + sum);
in.close();
}
}
5.2 SumProductMinMax3 (Arithmetic & Min/Max)
Viết chương trình có tên SumProductMinMax3
nhắc nhở người dùng cho ba số nguyên. Chương trình sẽ đọc các đầu vào như int
; tính tổng, tích, tối thiểu và tối đa của ba số nguyên; và in kết quả. Ví dụ như,
Enter 1st integer: 8
Enter 2nd integer: 2
Enter 3rd integer: 9
The sum is: 19
The product is: 144
The min is: 2
The max is: 9
Hints
int number1, number2, number3;
int sum, product, min, max;
Scanner in = new Scanner(System.in);
......
sum = ......
product = ......
min = number1;
if (number2 < min) {
min = number2;
}
if (number3 < min) {
min = number3;
}
......
......
Thử
- Viết chương trình gọi là
SumProductMinMax5
nhắc nhở người dùng cho năm số nguyên. Chương trình sẽ đọc các đầu vào như int
; tính tổng, tích, tối thiểu và tối đa của năm số nguyên; và in kết quả. Sử dụng năm int
biến: number1
,, number2
..., number5
để lưu trữ các đầu vào.
- .
5.3 CircleComputation (double & printf())
Viết chương trình có tên CircleComputation
nhắc nhở người dùng về bán kính hình tròn theo số dấu phẩy động. Chương trình sẽ đọc đầu vào như double
; tính đường kính, chu vi và diện tích hình tròn trong double
; và in các giá trị được làm tròn đến 2 chữ số thập phân. Sử dụng hằng số Math.PI
do hệ thống cung cấp cho pi. Các công thức là:
diameter = 2.0 * radius;
area = Math.PI * radius * radius;
circumference = 2.0 * Math.PI * radius;
Hints
double radius, diameter, circumference, area;
......
System.out.print("Enter the radius: ");
radius = in.nextDouble();
// Compute in "double"
......
System.out.printf("Diameter is: %.2f%n", diameter);
......
Thử
1. Viết chương trình có tên SphereComputation
nhắc nhở người dùng radius
về hình cầu trong số dấu phẩy động. Chương trình sẽ đọc đầu vào như double
; tính thể tích và diện tích bề mặt của quả cầu trong double
; và in các giá trị được làm tròn đến 2 chữ số thập phân. Các công thức là:
surfaceArea = 4 * Math.PI * radius * radius;
volume = 4 /3 * Math.PI * radius * radius * radius;
2. Lưu ý rằng bạn không thể đặt tên biến surface area
bằng dấu cách hoặc surface-area
dấu gạch ngang. Quy ước đặt tên của Java là surfaceArea
. Các ngôn ngữ khác đề nghị surface_area
với một dấu gạch dưới.
3. Viết chương trình có tên CylinderComputation
nhắc nhở người dùng cho cơ sở radius
và height
của hình trụ theo số dấu phẩy động. Chương trình sẽ đọc các đầu vào như double
; tính diện tích cơ sở, diện tích bề mặt và thể tích của hình trụ; và in các giá trị được làm tròn đến 2 chữ số thập phân. Các công thức là:
baseArea = Math.PI * radius * radius;
surfaceArea = 2.0 * Math.PI * radius + 2.0 * baseArea;
volume = baseArea * height;
5.4 Swap2Integers
Viết chương trình có tên Swap2Integers
nhắc nhở người dùng cho hai số nguyên. Chương trình sẽ đọc các đầu vào là int
, lưu trong hai biến được gọi number1
và number2
; hoán đổi nội dung của hai biến; và in kết quả. Ví dụ như,
Enter first integer: 9
Enter second integer: -9
After the swap, first integer is: -9, second integer is: 9
Gợi ý
Để hoán đổi nội dung của hai biến x
và y
, bạn cần giới thiệu một bộ lưu trữ tạm thời, nói temp
và làm : temp ⇐ x
; x ⇐ y
; y ⇐ temp
.
5.5 IncomeTaxCalculator (Decision)
Thuế suất thuế thu nhập lũy tiến được quy định như sau:
Taxable Income | Rate (%) |
First $20,000 | 0 |
Next $20,000 | 10 |
Next $20,000 | 20 |
The remaining | 30 |
Ví dụ, giả sử rằng thu nhập chịu thuế là $85000
, thuế thu nhập phải nộp là $20000*0% + $20000*10% + $20000*20% + $25000*30%
.
Viết một chương trình được gọi là IncomeTaxCalculator
đọc thu nhập chịu thuế (in int
). Chương trình sẽ tính thuế thu nhập phải nộp (bằng double
); và in kết quả làm tròn đến 2 chữ số thập phân. Ví dụ như,
Enter the taxable income: $41234
The income tax payable is: $2246.80
Enter the taxable income: $67891
The income tax payable is: $8367.30
Enter the taxable income: $85432
The income tax payable is: $13629.60
Enter the taxable income: $12345
The income tax payable is: $0.00
Hints
final double TAX_RATE_ABOVE_20K = 0.1;
final double TAX_RATE_ABOVE_40K = 0.2;
final double TAX_RATE_ABOVE_60K = 0.3;
int taxableIncome;
double taxPayable;
......
if (taxableIncome <= 20000) {
taxPayable = ......;
} else if (taxableIncome <= 40000) {
taxPayable = ......;
} else if (taxableIncome <= 60000) {
taxPayable = ......;
} else {
taxPayable = ......;
}
System.out.printf("The income tax payable is: $%.2f%n", ...);
Thử
Giả sử rằng một 10%
khoản giảm thuế được thông báo cho thuế thu nhập phải nộp, giới hạn $1,000
, sửa đổi chương trình của bạn để xử lý khoản giảm thuế. Ví dụ, giả sử rằng số thuế phải nộp là $12,000
, giảm giá là $1,000
, như 10%
của $12,000
quá nắp.
5.6 IncomeTaxCalculatorWithSentinel (Decision & Loop)
Dựa trên bài tập trước, hãy viết một chương trình được gọi IncomeTaxCalculatorWithSentinel
sẽ lặp lại phép tính cho đến khi người dùng nhập -1
. Ví dụ,
Enter the taxable income (or -1 to end): $41000
The income tax payable is: $2200.00
Enter the taxable income (or -1 to end): $62000
The income tax payable is: $6600.00
Enter the taxable income (or -1 to end): $73123
The income tax payable is: $9936.90
Enter the taxable income (or -1 to end): $84328
The income tax payable is: $13298.40
Enter the taxable income: $-1
bye!
Giá trị -1
được gọi là giá trị sentinel . (Wiki: Trong lập trình, giá trị sentinel , còn được gọi là giá trị cờ, giá trị chuyến đi, giá trị giả mạo, giá trị tín hiệu hoặc dữ liệu giả, là một giá trị đặc biệt sử dụng sự hiện diện của nó làm điều kiện chấm dứt.)
Gợi ý
Mẫu mã để xử lý đầu vào với giá trị sentinel như sau:
final int SENTINEL = -1;
......
int taxableIncome;
double taxPayable;
......
System.out.print("Enter the taxable income (or -1 to end): $");
taxableIncome = in.nextInt();
while (taxableIncome != SENTINEL) {
......
......
System.out.print("Enter the taxable income (or -1 to end): $");
taxableIncome = in.nextInt();
}
System.out.println("bye!");
Hãy lưu ý rằng chúng tôi lặp lại các câu lệnh đầu vào bên trong và bên ngoài vòng lặp. Lặp đi lặp lại tuyên bố KHÔNG phải là một thực hành lập trình tốt. Điều này là do nó dễ lặp lại (Cntl-C / Cntl-V), nhưng khó duy trì và đồng bộ hóa các câu lệnh lặp lại. Trong trường hợp này, chúng tôi không có lựa chọn nào tốt hơn!
5.7 PensionContributionCalculator (Decision)
Cả người sử dụng lao động và người lao động đều được ủy thác đóng góp một tỷ lệ phần trăm nhất định tiền lương của nhân viên vào quỹ hưu trí của nhân viên. Tỷ lệ được lập bảng như sau:
Employee's Age | Employee Rate (%) | Employer Rate (%) |
55 and below | 20 | 17 |
above 55 to 60 | 13 | 13 |
above 60 to 65 | 7.5 | 9 |
above 65 | 5 | 7.5 |
Tuy nhiên, sự đóng góp phải chịu mức trần của $6,000
. Nói cách khác, nếu một nhân viên kiếm được $6,800
, chỉ $6,000
thu hút sự đóng góp của nhân viên và chủ nhân, thì phần còn lại $800
thì không.
Viết một chương trình được gọi là PensionContributionCalculator
đọc mức lương hàng tháng và tuổi (trong int
) của một nhân viên. Chương trình của bạn sẽ tính toán nhân viên, người sử dụng lao động và tổng đóng góp (trong double
); và in kết quả làm tròn đến 2 chữ số thập phân. Ví dụ như,
Enter the monthly salary: $3000
Enter the age: 30
The employee's contribution is: $600.00
The employer's contribution is: $510.00
The total contribution is: $1110.00
Hints
final int SALARY_CEILING = 6000;
final double EMPLOYEE_RATE_55_AND_BELOW = 0.2;
final double EMPLOYER_RATE_55_AND_BELOW = 0.17;
final double EMPLOYEE_RATE_55_TO_60 = 0.13;
final double EMPLOYER_RATE_55_TO_60 = 0.13;
final double EMPLOYEE_RATE_60_TO_65 = 0.075;
final double EMPLOYER_RATE_60_TO_65 = 0.09;
final double EMPLOYEE_RATE_65_ABOVE = 0.05;
final double EMPLOYER_RATE_65_ABOVE = 0.075;
int salary, age;
int contributableSalary;
double employeeContribution, employerContribution, totalContribution;
......
contributableSalary = ......
if (age <= 55) {
......
} else if (age <= 60) {
......
} else if (age <= 65) {
......
} else {
......
}
5.8 PensionContributionCalculatorWithSentinel (Decision & Loop)
Dựa trên trước đó PensionContributionCalculator
, hãy viết một chương trình được gọi là PensionContributionCalculatorWithSentinel
sẽ lặp lại các phép tính cho đến khi người dùng nhập -1 cho mức lương. Ví dụ như,
Enter the monthly salary (or -1 to end): $5123
Enter the age: 21
The employee's contribution is: $1024.60
The employer's contribution is: $870.91
The total contribution is: $1895.51
Enter the monthly salary (or -1 to end): $5123
Enter the age: 64
The employee's contribution is: $384.22
The employer's contribution is: $461.07
The total contribution is: $845.30
Enter the monthly salary (or -1 to end): $-1
bye!
Hints
System.out.print("Enter the monthly salary (or -1 to end): $");
salary = in.nextInt();
while (salary != SENTINEL) {
System.out.print("Enter the age: ");
age = in.nextInt();
......
......
System.out.print("Enter the monthly salary (or -1 to end): $");
salary = in.nextInt();
}
5.9 SalesTaxCalculator (Decision & Loop)
Thuế doanh thu 7%
được đánh vào tất cả hàng hóa và dịch vụ được tiêu thụ. Điều bắt buộc là tất cả các thẻ giá phải bao gồm thuế bán hàng. Ví dụ: nếu một mặt hàng có thẻ giá $107
, giá thực tế là $100
và $7
đi đến thuế bán hàng.
Viết chương trình sử dụng vòng lặp để liên tục nhập giá đã bao gồm thuế (tính bằng double
); tính giá thực tế và thuế bán hàng (bằng double
); và in kết quả làm tròn đến 2 chữ số thập phân. Chương trình sẽ chấm dứt để đáp ứng với đầu vào của -1
; và in tổng giá, tổng giá thực tế và tổng thuế bán hàng. Ví dụ như,
Enter the tax-inclusive price in dollars (or -1 to end): 107
Actual Price is: $100.00, Sales Tax is: $7.00
Enter the tax-inclusive price in dollars (or -1 to end): 214
Actual Price is: $200.00, Sales Tax is: $14.00
Enter the tax-inclusive price in dollars (or -1 to end): 321
Actual Price is: $300.00, Sales Tax is: $21.00
Enter the tax-inclusive price in dollars (or -1 to end): -1
Total Price is: $642.00
Total Actual Price is: $600.00
Total Sales Tax is: $42.00
Hints
final double SALES_TAX_RATE = 0.07;
final int SENTINEL = -1;
double price, actualPrice, salesTax;
double totalPrice = 0.0, totalActualPrice = 0.0, totalSalesTax = 0.0;
......
System.out.print("Enter the tax-inclusive price in dollars (or -1 to end): ");
price = in.nextDouble();
while (price != SENTINEL) {
......
......
......
System.out.print("Enter the tax-inclusive price in dollars (or -1 to end): ");
price = in.nextDouble();
}
......
5.10 ReverseInt (Loop with Modulus/Divide)
Viết chương trình nhắc người dùng về số nguyên dương. Chương trình sẽ đọc đầu vào như int
; và in "đảo ngược" của số nguyên đầu vào. Ví dụ như,
Enter a positive integer: 12345
The reverse is: 54321
Hints
Sử dụng mẫu mã sau đây sử dụng vòng lặp while với các hoạt động mô đun / phân chia lặp lại để trích xuất và thả chữ số cuối của số nguyên dương.
int inNumber;
int inDigit;
......
while (inNumber > 0) {
inDigit = inNumber % 10;
......
inNumber /= 10;
}
......
5.11 SumOfDigitsInt (Loop with Modulus/Divide)
Viết chương trình nhắc người dùng về số nguyên dương. Chương trình sẽ đọc đầu vào như int
; tính toán và in tổng của tất cả các chữ số của nó. Ví dụ như,
Enter a positive integer: 12345
The sum of all digits is: 15
Hints
See "ReverseInt
".
5.12 InputValidation (Loop with boolean flag)
Chương trình của bạn thường cần xác thực các đầu vào của người dùng, ví dụ: các dấu sẽ nằm trong khoảng từ 0 đến 100.
Viết chương trình nhắc người dùng cho một số nguyên giữa 0-10
hoặc 90-100
. Chương trình sẽ đọc đầu vào như int
; và lặp lại cho đến khi người dùng nhập một đầu vào hợp lệ. Ví dụ như,
Enter a number between 0-10 or 90-100: -1
Invalid input, try again...
Enter a number between 0-10 or 90-100: 50
Invalid input, try again...
Enter a number between 0-10 or 90-100: 101
Invalid input, try again...
Enter a number between 0-10 or 90-100: 95
You have entered: 95
Hints
Sử dụng mẫu mã sau đây sử dụng vòng lặp do-while được điều khiển bởi boolean
cờ để xác thực đầu vào. Chúng ta sử dụng vòng lặp do-while thay vì vòng lặp while-do vì chúng ta cần thực thi phần thân để nhắc và xử lý đầu vào ít nhất một lần.
int numberIn;
boolean isValid;
......
isValid = false; // default assuming input is not valid
do {
......
if (numberIn ......) {
isValid = true;
} else {
System.out.println(......);
}
} while (!isValid);
......
5.13 AverageWithInputValidation (Loop with boolean flag)
Viết chương trình nhắc người dùng đánh dấu (giữa 0-100
in int
) của 3 sinh viên; tính trung bình (tính bằng double
); và in kết quả được làm tròn đến 2 chữ số thập phân. Chương trình của bạn cần thực hiện xác nhận đầu vào. Ví dụ như,
Enter the mark (0-100) for student 1: 56
Enter the mark (0-100) for student 2: 101
Invalid input, try again...
Enter the mark (0-100) for student 2: -1
Invalid input, try again...
Enter the mark (0-100) for student 2: 99
Enter the mark (0-100) for student 3: 45
The average is: 66.67
Hints
final int NUM_STUDENTS = 3;
int numberIn;
boolean isValid;
int sum = 0;
double average;
......
for (int studentNo = 1; studentNo <= NUM_STUDENTS; ++studentNo) {
......
isValid = false;
do {
......
} while (!isValid);
sum += ......;
}
......
Đăng nhận xét