Bài thực hành 2 Viết chương trình nhắc người dùng nhập 5 số nguyên, nhận dữ liệu nhập vào, và hiện tổng các số đó như sau.. Bài thực hành 3 Viết chương trình nhắc người dùng nhập 5 số ng
Trang 11 Module A – Mở đầu 3
1.1 Ví dụ Hello World 3
1.1.1 Ví dụ 1 3
1.1.2 Ví dụ 2 3
1.1.3 Ví dụ 3 4
1.2 Sử dụng Borland C++ 5.02 4
1.2.1 Chạy chương trình bằng C++ 5.02 4
1.2.2 Các lỗi 5
1.2.3 Tìm trợ giúp theo ngữ cảnh 5
1.3 Bài tập thực hành 6
2 Module B – Tính toán 6 2.1 Các ví dụ tính toán 6
2.1.1 Ví dụ 1 – Gán (=) và hàm in ra (printf) 6
2.1.2 Ví dụ 2 – Hàm Nhập vào (scanf) 7
2.1.3 Ví dụ 3 – Các biểu thức số học (+, - *, /, %) 7
2.1.4 Ví dụ 4 – Các biểu thức quan hệ (= =, >, >=, <, <=, !=) 8
2.1.5 Ví dụ 5 – Các biểu thức Logic (||, &&, !) 8
2.1.6 Ví dụ 6 – Kiểu dữ liệu hỗn hợp 9
2.1.7 Ví dụ 7 – Các toán hạng gán viết tắt (+=, -=, *=, /=, %=, ++, ) 10
2.1.8 Ví dụ 8 – Ép kiểu 10
2.2 Bài tập thực hành 11
2.2.1 Bài thực hành 1 11
2.2.2 Bài thực hành 2 11
2.2.3 Bài thực hành 3 11
2.2.4 Bài thực hành 4 11
3 Module C – Logic 12 3.1 Ví dụ 12
3.1.1 Ví dụ 1 – Một lệnh if 12
3.1.2 Ví dụ 2 – if else 12
3.1.3 Ví dụ 3 – if else if else 12
3.1.4 Ví dụ 4 – switch 13
3.1.5 Ví dụ 5 – Biểu thức điều kiện ? : 14
3.1.6 Ví dụ – while 14
3.1.7 Ví dụ 7 – do while 15
3.1.8 Ví dụ 8 – for 15
3.2 Bài tập thực hành 15
3.2.1 Bài thực hành 1 15
3.2.2 Bài thực hành 2 15
3.2.3 Bài thực hành 3 16
3.2.4 Bài thực hành 4 16
3.2.5 Bài thực hành 5 16
3.2.6 Bài thực hành 6 17
4.Module D – Các hàm 17 4.1 Ví dụ 17
4.1.1 Ví dụ 1 – Khai báo hàm, gọi hàm, định nghĩa hàm 17
4.1.2 Ví dụ 2 – Gọi hàm và nhận dữ liệu tham số theo địa chỉ 18
Trang 24.2 Bài tập thực hành 18
4.2.1 Bài tập thực hành 1 19
4.2.2 Bài tập thực hành 2 19
4.2.3 Bài tập thực hành 3 19
Trang 3In thông điệp “Hello, world” trên màn hình.
Tất cả các chương trình C đều có một hàm main(), theo sau là dấu bắt đầu “{“ và kết thúc bởi “}” Thực hiện chương trình C bắt đầu từ hàm main().
Một hay nhiều lệnh được chứa trong cặp dấu ngoặc nhọn (“{“ and “}”)
Hàm “printf” được sử dụng để hiện ra màn hình
Tuy nhiên, với chương trình trên, bạn không nhìn thấy dòng nào trên màn hình, bởi vì chương trình kết thúc ngay sau khi thông điệp được in ra
Chú thích được chứa trong cặp /* và */
Để chèn tệp “stdio.h” chứa hàm thư viện
“printf” được chương trình này sử dụng
Trang 52) Chọn File/New/Text Edit
3) Gõ chương trình như đã mô tả ở trên
4) Chọn Debug/Run để chạy chương trình
1.2.2 Các lỗi
Có ba kiểu lỗi: cú pháp, logic, và lỗi khi chạy :
1 Các lỗi cú pháp: Các lỗi này xẩy ra vì các lệnh bị gõ sai, không đúng quy định về
cú pháp của ngôn ngữ
Ví dụ, nếu bạn không đặt dấu chấm phẩy (;) sau lệnh như sau
printf(“Hello,world”) // lỗi cú pháp (thiếu dấu chấm phẩy)
printf("Hello,world"); // Lệnh đúng về cú pháp
2 Các lỗi logic: Các lỗi này xẩy ra khi các lệnh sai về logic trong chương trình
Ví dụ, giả thiết rằng trong một chương trình 1000 dòng, đáng nhẽ cần một lệnh nhân hai số bị viết nhầm thành cộng hai số Lệnh sai về logic này tạo ra kết quả sai Phát hiện các lỗi như vậy là rất khó
3 Các lỗi khi chạy: Các lỗi này xấy ra khi chạy chương trình không có lỗi cú pháp
và lỗi logic
Một số các nguyên nhân của các lỗi này là
a Khi truyền giá trị của biến “age”, mà không phải địa chỉ của biến cho hàm “scanf”, ví dụ scanf( "%d" , age);
b Khi bạn ra lệnh cho máy tính chia một số cho 0
c Khi bạn ra lệnh cho máy tính tìm logrit của một số âm
d Khi bạn ra lệnh cho máy tính tìm căn bậc hai của một số nguyên âm Nếu không chạy chương trình, bạn không có cơ hội để tìm thấy lỗi này
Trang 6Fulle name : Nguyen Duc Minh
Home address : No 5, Lane 6, Phan Dinh Phung street
Trang 7Số chữ số sau dấu chấm thập phân được hiện bởi %lf là 6 Nếu bạn muốn chỉ 2 chữ số sau dấu chấm thập phân được hiện, sử dụng %.2lf
Sau đây là danh sách các định dạng kiểu dữ liệu
%f=float, %lf = double, %c=char, %d = decimal, %x = hexadecimal, %o = octal
printf("Enter the boy\'s age : "); /* Nhắc nhập age */
scanf("%d", &age); /* Nhập vào age */
printf("Enter the cash fare :"); /* Nhắc nhập cash fare */
scanf("%lf", &cashFare); /* Nhập vào cash fare */ /* In ra */
printf("His age is %d\nThe cash fare is $%lf\n", age, cashFare); }
Nhận dữ liệu vào age và cashFare và lưu dữ liệu vào trong vị trí bộ nhớ tương ứng
printf("Enter the number of apples desired: ");
scanf("%d", &quantity); /* Nhập vào số lưựng */
printf("Enter the cost of one apple (in $):");
scanf("%lf", &cost); /* Nhập vào đơn giá */
Enter the number of apples desired: 5
Enter the cost of one apple (in $): 0.56
That will cost $2.800000
Nếu bạn muốn hiện 2 chữ số sau chấm thập phân thì thay đổi dòng cuối của chương trìnhthành :
Trang 8printf("That will cost $%.2lf\n", quantity * cost);
sẽ thay đổi dòng cuối in ra như sau:
That will cost $2.80
2.1.4 Ví dụ 4 – Các biểu thức quan hệ (= =, >, >=, <, <=, !=)
/* Các biểu thức quan hệ */
main( ) {
int age, childTicket, seniorTicket;
printf("What is your age ? ");
printf("You need a student Ticket (1 for yes, 0 for no) : %d\n", studentTicket);
printf("You need a senior Ticket (1 for yes, 0 for no) : %d\n", seniorTicket);
Trang 9printf("You need an adult Ticket (1 for yes, 0 for no) : %d\n", adultTicket);
}
Xem xét điều kiện cho adultTicket Điều kiện này là tương đương logic với
adultTicket = ! ( childTicket || studentTicket || seniorTicket );
Nếu khi chạy chương trình, chúng ta nhập vào 23, sẽ in ra là:
How many loonies do you have ? 23
Trang 10How much money do you have ? 23.45
You have 23 loonies.
piesPerPerson = (double) pies / persons;
printf("Each person receives %.2lf pies.\n", piesPerPerson);
}
Nếu khi chạy chương trình, chúng ta nhập 8 cho số bánh, và 6 cho số người, sẽ ịn ra là:
How many pies do you have ? 8
How many persons are there ? 6
Each person receives 1.33 pies.
Kết quả của phép chia sẽ là số double và phép gán đặt kết quả một số double (1.333333) vào piesPerPerson
Trang 11Chú ý, tuy nhiên
piesPerPerson = (double) (pies / persons);
đặt 1.0 vào piesPerPerson, chứ không phải 1.333333 Ở đây, kết quả của phép chia sốnguyên chứ không phải là chính pies được ép kiểu thành kiểu double
2.2 Bài tập thực hành
2.2.1 Bài thực hành 1
Viết chương trình nhắc người dùng nhập 5 ký tự, nhận dữ liệu nhập vào, và hiện các mã ASCII tương ứng như sau
Enter 5 characters separated by a space: A B C D E
Its ASCCI codes: 65 66 67 68 69
2.2.2 Bài thực hành 2
Viết chương trình nhắc người dùng nhập 5 số nguyên, nhận dữ liệu nhập vào, và hiện tổng các số đó như sau
Enter 5 integer numbers separated by a space: 12 34 23 10 23
Its sum is: 102
2.2.3 Bài thực hành 3
Viết chương trình nhắc người dùng nhập 5 số nguyên, nhận dữ liệu nhập vào, và hiện số các giá trị lẻ và số các giá trị chẵn như sau
Enter 5 integer numbers separated by a space: 12 34 23 10 25
The number of even values is : 3
The number of odd values is : 2
2.2.4 Bài thực hành 4
Viết chương trình C yêu cầu người dùng nhập số lượng các mặt hàng được mua và đơn giá, rồi hiện giá thành gốc, thuế đánh trên giá thành (hai loại thuế, PST là 8%, và GST là 7%), và tổng bao gồm cả thuế như sau
Enter the number of items purchases : 105
Trang 12printf ("I would like a pizza\n");
printf ("I would like another pizza\n");
printf ("I would like yet another pizza\n");
printf ("I would like a pizza\n");
printf ("I would like another pizza\n");
printf ("I would like yet another pizza\n");
} else {
printf ("I would like something nutritious\n");
printf ("I would now like a pizza\n");
printf ("I would now like another pizza\n");
}
Chương trình thực hiện các lệnh sau if, nếu điều kiện là true Chương trình thực hiện các lệnh sau else, nếu điều kiện là false
3.1.3 Ví dụ 3 – if else if else
Trang 13Chương trình thực hiện các lệnh sau if, nếu điều kiện đầu tiên là true hoặc sau else
if, nếu điều kiện đầu là false và điều kiện thúe hai là true Chương trình thực hiện các
lệnh sau else, nếu và chỉ nếu không có điều kiên nào là true
printf ("I would like a pizza\n");
printf ("I would like another pizza\n");
printf ("I would like yet another pizza\n");
} else if ( likeHamburger == 1 ) {
printf ("I would like a hamburger\n");
printf ("I would like another hamburger\n");
printf ("I would like yet another hamburger\n");
} else {
printf ("I would like something nutritious\n");
printf ("I would now like a pizza\n");
printf ("I would now like a hamburger\n");
Trang 143.1.5 Ví dụ 5 – Biểu thức điều kiện ? :
main()
{
int a, b, max, min;
printf("Enter two integer numbers separated by a space:");
scanf("%d %d", &a, &b);
max = a > b? a : b;
min = a < b? a : b;
printf("\nMaximum of %d and %d is %d", a, b, max);
printf("\nMinimum of %d and %d is %d", a, b, min);
getch();
}
? : là cách thay thế cho cấu trúc if else
Chương trình này nhắc người dùng nhập hai số nguyên cách nhau bởi dấu cách, nhận dữ liệu nhập vào và hiện số lớn nhất và số nhỏ nhất
Gulp! Slices left 3
Gulp! Slices left 2
Gulp! Slices left 1
Trang 15Gulp! Slices left 0
Cấu trúc while thực hiện tập lệnh của nó khi mà điều kiện kiểm tra thoả mãn
Cùng một kết quả, nếu bạn dùng for như sau
for ( slices = 4; slices >= 0; slices ) {
printf("Gulp! Slices left %d\n", slices - 1);
Trang 16The sum of numbers from 1 to 12 is : 55
Another run (y for yes and n for no)?:y
The sum of numbers from 1 to 7 is : 28
Another run (y for yes and n for no)?:n
3.2.4 Bài thực hành 4
Viết chương trình nhắc người dùng nhập một số nguyên dương, nhận số được nhập, rồi chuyển nó thành số ở hệ 7 và hiện nó như sau
Enter a positive integer number : 120
The number in the numbering system 7 : 231
Another run (y for yes and n for no)?:y
Enter a positive integer number : 100
The number in the numbering system 7 : 202
Another run (y for yes and n for no)?:n
3.2.5 Bài thực hành 5
Viết chương trình C yêu cầu người dùng, nhân viên bán hàng, nhập tiền bán hàng cho khách hàng Chương trình phản ứng (với thông báo lỗi thích hợp) bất kỳ giá thành nào nhỏ hơn không, buộc người dùng pahỉ nhập lại giá tiền Một khi giá tiền cho phép đã được nhập, chương trình hiện tiền khấu trừ, tổng sau khi khấu trừ, và hoa hồng cho người bán hàng, dựa trên thông tin sau:
Khấu trừ
- 0% trên tổng số, nếu tổng nhỏ hơn $1000
- 5% của tổng số nếu tổng nằm giữa $1000 và $20,000
- 10% của tổng số nếu tổng là lớn hơn $20,000
Hoa hồng - dựa trên tổng số trừ đi khấu trừ
- 5% của $10,000 đầu tiên
- 10% trên phần vượt quá $10,000
Trang 17Ví dụ, bán hàng $15,000 sẽ nhận được khấu trừ $750, được doanh thu thu về là $14,250
Hoa hồng sẽ là $925 (là 500 + 425)
3.2.6 Bài thực hành 6
Viết chương trình C yêu cầu người dùng nhập tổng số tiền, và hiện tuỳ chọn sau:
1 Tax Exempt (Miễn thuế)
2 PST only (8%)
3 GST only (7%)
4 Both PST and GST
Nếu người dùng nhập bất kỳ số nào khác 1-4, một thông báo lỗi hiện ra và anh ta/chi ta
buộc phải nhập lại cho đến khi một tuỳ chọn đúng được thực hiện
Chương trình hiện giá tiền gốc, thuế đánh trên tổng tiền này (nó phụ thuộc vào tuỳ chọn),
và tổng số bao gồm cả thuế
4 Module D – Các hàm
4.1 Ví dụ
4.1.1 Ví dụ 1 – Khai báo hàm, gọi hàm, định nghĩa hàm
/* Tính base luỹ thừa exp
answer = power ( base, exp );
printf("%d^%d is %d\n", base, exp, answer);
return 0;
}
/* power raises base to the power of exponent */
int power ( int base, int exponent ) {
int result, i;
result = 1;er
for (i = 1; i <= exponent; i++)
result = result * base;er
Khai báo hàm - khuôn dạng hàm: Hàm tên là power, có 2 tham số kiểu nguyên
và trả về giá trị nguyên
Gọi hàm: chuyển điều khiển thực hiện tới hàm power
ĐN hàm – Các lệnh thực hiện
Trang 18return result;
}
CHÚ Ý: Hàm power được gọi và nhận dữ liệu tham số theo giá trị, tức là nhận bản copy của dữ liệu từ đối số trong lời gọi hàm Bộ CT dịch cấp phát bộ nhớ cho mỗi tham số và đặt giá trị ban đầu cho mối tham số bằng giá trị của đối số tương ứng trong lời gọi hàm
Ví dụ base trong hàm power nằm ở vùng nhớ khác với base trong hàm main
Truyền theo giá trị là base trong hàm power nhận giá trị ban đầu bằng giá trị của basetrong hàm main, sau đó nó có thể thay đổi giá trị của mình trong hàm power nhiều lần, nhưngkhông làm thay đổi giá trị của đối số tương ứng base trong hàm main
4.1.2 Ví dụ 2 – Gọi hàm và nhận dữ liệu tham số theo địa chỉ
/* Trao đổi các giá trị dùng hàm
Địa chỉ của biến
Dữ liệu tại địa chỉ a là một số nguyên
Trang 194.2 Bài tập thực hành
4.2.1 Bài tập thực hành 1
Viết hàm giải hệ phương trình bậc hai có khai báo như sau
int root (double a, double b, double c, double *x1, double *x2);
Trong đó x1, x2 là địa chỉ chứa nghiệm của phương trình bậc hai ax2 + bx + c = 0 Hàm này trả về giá trị 0 nếu vô nghiêm, trả về giá trị 1 nếu có một nghiệm và nghiệm này nằm trong địa chỉ x1 và trả về giá trị 2 nếu có hai nghiệm
Sau đó viết chương trình kiểm thử hàm này như sau
Giải phương trình bậc hai
Viết hàm có khai báo như sau
int check_prime (int number);
Hàm này kiểm tra xem số number có phải là số nguyên tố hay không và trả lại giá trị 0 nếu number không phải là số nguyên tố, trả về giá trị 1 nếu number là số nguyên tốSau đó viết chương trình sử dụng hàm này Chương trình cho phép nhập số nguyên nhỏ nhất và số nguyên lớn nhất, rồi hiện bảng (bốn cột) các số nguyên tố nằm trong giới hạn
Trang 20Int gcd(int a, int b)
Hàm này trả về ước số chung lớn nhất của hai số a và b
Sau đó viết chưong trình kiểm thử hàm này như sau
Tìm ước số chung lớn nhất
========================
Nhập số nguyên a: 4
Nhập số nguyên b: 16
Ước số chung lớn nhất của 4 và 16 là 4
Ấn phím bấy kỳ để tiếp tục (Ctrl + C để thoát)!