Chương 2. Cơ bản về ngôn ngữ lập trình C/C++
2.4. Các lệnh xuất nhập dữ liệu
2.4.1. Xuất dữ liệu ra màn hình với hàm printf() Cú pháp của hàm printf() như sau:
int printf( const char *format [,arg,...]);
Chuỗi format có dạng: %[flags][width][.prec][l,L]<type>
flags: nếu không có: dữ liệu được in ra canh phải - : dữ liệu được in ra canh trái
+ : dữ liệu được in ra có dấu phụ.
blank: dữ liệu được in ra có dấu âm, nếu là dương thì dấu + được thay bằng khoảng trắng
# : đổi dạng biểu diễn (chuyển đúng kiểu với mã đổi kiểu ở đối số sau).
width: chỉ độ rộng tối thiểu để in dữ liệu. Nếu số chữ số của dữ liệu bé hơn width thì các khoảng thừa được lắp đầy bởi các khoảng trắng. Nếu width là 0n: tương tự như trên nhưng thay vì khoảng trắng, bây giờ là số 0.
prec: dạng số thực. Số con số có ý nghĩa sau dấu chấm thập phân.
[l,L]: hai đối số để đổi dữ liệu thành long, L dùng cho kiểu double.
type: mã định dạng, được liệt kê bởi bảng sau:
Kiểu Đối số Dạng xuất
d f c s
số nguyên số thực
ký tự chuỗi ký tự
int (decimal)
float, double (dấu . tĩnh) char
chuỗi ký tự Ví dụ 2.12: Với khai báo:
int a=5, b=7;
thì lệnh:
printf(“Tong cua %d va %d = %d”,a,b,a+b);
sẽ in ra màn hình
Tong cua 5 va 7 = 12
2.4.2. Nhập dữ liệu từ bàn phím với hàm scanf() Cú pháp của hàm scanf() như sau:
int scanf(const char *format [,adds,...]);
Chuỗi format có dạng: %[width][l,L]<type>.
adds có dạng như sau &<biến>. Các đối số này là địa chỉ các biến tương ứng với chuỗi định dạng.
Phép toán lấy địa chỉ: & để lấy địa chỉ của một biến. Giả sử x là biến thì &x địa chỉ của biến x.
Ví dụ 2.13: Nhập dữ liệu cho hai biến x và y:
int x; float y;
scanf(“%d%f”,&x,&y);
Chú ý: Không nên sử dụng hàm scanf() để nhập chuỗi có chứa ký tự trắng (space).
Ví dụ 2.14:
1. #include <stdio.h>
2. int main() 3. {
4. char st [50];
5. scanf("%s",st); /* nhập vào dòng DEV C++ */
6. printf("\n%s",st);
7. scanf("%s",st); /* không dừng lại để nhập */
8. printf("\n%s",st);
9. return 0;
10. }
Kết quả chạy chương trình:
DEV C++ <Enter>
DEV C++
2.4.3. Xuất/nhập dữ liệu trong C++
Đối với C++, ta có thể xuất/nhập dữ liệu với hai phương thức sau (cung cấp bởi thư viện <iostream.h>):
cin>>x1>>...>>xn;
// nhập dữ liệu từ bàn phím lưu vào các biến x1,...,xn
cout<<value_1<<…<<value_n;
//xuất các value_1, 2,…,n ra màn hình Ví dụ 2.15:
1. #include <iostream>
2. using namespace std;
3. int main() 4. {
5. int x;
6. cout<<endl<<”Nhap x = “; cin>>x;
7. cout<<endl<<x<<” binh phuong = “<<x*x;
8. return 0;
9. }
Để định dạng số thực hiển thị ra màn hình với p chữ số sau dấu chấm thập phân, ta sử dụng đồng thời các hàm sau (được cung cấp bởi
<iomanip>):
fixed;
setprecision(p);
Các hàm này cần đặt trong phép toán xuất như sau:
cout<<fixed<<setprecision(p);
Câu lệnh trên sẽ có hiệu lực đối với tất cả các phép toán xuất tiếp theo cho đến khi gặp một câu lệnh định dạng mới.
Ví dụ 2.16:
1. #include <iostream>
2. #include <iomanip>
3. using namespace std;
4. int main() 5. {
6. float x = 123.45;
7. cout<<fixed<<setprecision(3);
8. cout<<x; //123.450 9. return 0;
10. }
BÀI TẬP
Bài tập 2.1: (STAMGIAC) Viết chương trình nhập vào độ dài hai cạnh của tam giác và góc giữa hai cạnh đó, sau đó tính và in ra màn hình diện tích của tam giác.
Input: a, b và theta (theo độ)
Output: S là diện tích tam giác, làm tròn đến 2 chữ số thập phân Ví dụ:
INPUT OUTPUT
3 4 90 6.00
Ý tưởng:
Công thức tính diện tích tam giác: S = . .sin( ) 2
1ab với a,b là độ dài 2 cạnh và là góc kẹp giữa 2 cạnh a và b.
* Bài giải mẫu: (dùng để chấm bài tự động)
Đặt tên file đúng với mã đề bài (STAMGIAC.CPP)
Xuất nhập vừa đủ, không thừa 1. #include <iostream>
2. #include <math.h>
3. #include <iomanip>
4. using namespace std;
5. #define PI 3.1416 6. int main()
7. {
8. float a,b,angle,s;
9. cin>>a>>b>>angle; //Nhập vào vừa đủ, không thừa 10. s = a*b*sin(angle*PI/180)/2;
11. cout<<fixed<<setprecision(2); //Lấy 2 chữ số thập phân 12. cout<<s; //Xuất ra vừa đủ, không thừa 13. return 0;
14. }
Bài tập 2.2: (CANBACN) Viết chương trình tính n x, x>0.
Input: x và n
Output: S căn bậc n của x, làm tròn đến 2 chữ số thập phân Ví dụ:
INPUT OUTPUT
9 2 3.00
Ý tưởng:
Ta có: n x = xn
1
= enlnx
1
Bài tập 2.3: (SWAP) Viết chương trình nhập vào 2 số nguyên a, b.
Sau đó hoán đổi giá trị của 2 số đó:
a/ Cho phép dùng biến trung gian.
b/ Không được phép dùng biến trung gian.
Input: a, b ≤ 1018 Output: b, a Ví dụ:
INPUT OUTPUT
3 5 5 3
Bài tập 2.4: (HERONG) Viết chương trình tính siện tích tam giác theo công thức sau:
S = p p( a p)( b p)( c) với p = 1
2(a+b+c) Input: Các số thực a, b và c
Output: S là diện tích tam giác, làm tròn đến 2 chữ số thập phân Ví dụ:
INPUT OUTPUT
3 4 5 6.00
Bài tập 2.5: (HINHHOP) Biết diện tích 3 mặt của một hình hộp chữ nhật: S1, S2 và S3. Viết chương trình tính tổng chu vi 3 mặt của hình hộp chữ nhật.
Input: Các số nguyên S1, S2, S3 ≤ 106 Output: Tổng chu vi T
Ví dụ:
INPUT OUTPUT
1 1 1 12
Bài tập 2.6: (LOWER) Đổi chữ cái in hoa ra chữ cái thường tương ứng.
Input: Chữ cái hoa
Output: Chữ cái thường tương ứng Ví dụ:
INPUT OUTPUT
A a
Bài tập 2.7: (UPPER) Đổi chữ cái thường ra chữ cái in hoa tương ứng.
Input: Chữ cái thường
Output: Chữ cái in hoa tương ứng Ví dụ:
INPUT OUTPUT
a A
Bài tập 2.8: (BEHIND) Cho chữ cái hoa A và số nguyên dương N≤10.
In ra chữ cái hoa đứng sau chữ cái A N đơn vị (chú ý: các chữ cái xếp theo vòng tròn, vì vậy nếu A = ‘Z’ và N = 1 thì đáp án là ‘A’).
Input: Chữ cái hoa A và số nguyên dương N Output: Chữ cái thỏa mãn đề bài.
Ví dụ:
INPUT OUTPUT
B 1 C
Bài tập 2.9: (SUMQR) Cho hai số nguyên dương n,k. Gọi n = q*k + r.
Tính tổng q+r.
Input: n, k ≤ 1018 Output: q+r Ví dụ:
INPUT OUTPUT
5 3 3
Bài tập 2.10: (CVTRON) Cho đường tròn bán kính R ≤ 106. Tính chu vi hình tròn (làm tròn đến hai chữ số thập phân).
Input: R
Output: T là chu vi Ví dụ:
INPUT OUTPUT
3 18.85
Bài tập 2.11: (DISTANCE) Cho 2 điểm A(x1,y1) và B(x2,y2). Tính khoảng cách giữa A và B (làm tròn đến hai chữ số thập phân).
Input: x1, y1, x2, y2 ≤ 106 Output: D là khoảng cách Ví dụ:
INPUT OUTPUT
0 0 0 1 1.00
Bài tập 2.12: (VECTOR) Cho vector 𝑎⃗ =(a1,a2). Tính modul của vector theo công thức sau a a12a22 (làm tròn đến hai chữ số thập phân).
Input: a1, a2 ≤ 106
Output: S là modul của vector Ví dụ:
INPUT OUTPUT
0 1 1.00
Bài tập 2.13: (SCALAR) Cho 2 vector 𝑎⃗ =(a1,a2) và 𝑏⃗⃗ =(b1,b2).
Tính tích vô hướng của hai vector (làm tròn đến hai chữ số thập phân).
Input: a1, a2, b1, b2 ≤ 106 Output: S là tích vô hướng Ví dụ:
INPUT OUTPUT
1 0 0 1 0.00
Bài tập 2.14: (COSVEC) Cho 2 vector 𝑎⃗ =(a1,a2) và 𝑏⃗⃗ =(b1,b2). Tính Cos(a
,b
) (làm tròn đến hai chữ số thập phân).
Input: a1, a2, b1,b2 ≤ 106 Output: C là Cos(a
,b
)
Ví dụ:
INPUT OUTPUT
0 1 1 0 0.00
Bài tập 2.15: (MIDPOINT) Cho 2 điểm A(x1,y1) và B(x2,y2). Tìm tọa độ trung điểm M của AB (làm tròn đến hai chữ số thập phân).
Input: x1, y1, x2, y2 ≤ 106
Output: x, y là tọa độ của điểm M Ví dụ:
INPUT OUTPUT
0 0 2 2 1.00 1.00
Bài tập 2.16: (LINEAR) Phương trình tổng quát của đường thẳng có dạng Ax + By + C = 0 (A và B không đồng thời bằng 0). Cho 2 điểm P(x1,y1) và Q(x2,y2). Tìm phương trình đường thẳng qua PQ (làm tròn đến hai chữ số thập phân).
Input: x1, y1, x2, y2 ≤ 106
Output: A, B, C là các hệ số của phương trình đường thẳng.
Ví dụ:
INPUT OUTPUT
0 1 1 1 0.00 -1.00 1.00
Bài tập 2.17: (PTOLINE) Cho đường thẳng : Ax + By + C = 0 và điểm M(x0;y0). Tính khoảng cách từ M đến đường thẳng (làm tròn đến hai chữ số thập phân).
Input: A, B, C, x0, y0 ≤ 106 Output: D là khoảng cách Ví dụ:
INPUT OUTPUT
0 1 -1 0 0 1.00
Bài tập 2.18: (ANGLE) Cho hai đường thẳng D1: A1x + B1y + C1 = 0 và D2: A2x + B2y + C2 = 0. Tính cos(D1,D2) (làm tròn đến hai chữ số thập phân).
Input: A1, B1, C1, A2, B2, C2 ≤ 106 Output: cos(D1,D2)
Ví dụ:
INPUT OUTPUT
0 1 -1 1 0 -1 0.00
Gợi ý:
1 2 1 2
2 2 2 2
1 1 2 2
cos
. A A B B
A B A B
Bài tập 2.19: (TAMDTRON) Cho 3 điểm A(x1,y1), B(x2,y2) và C(x3,y3). Tìm tọa độ tâm đường tròn ngoại tiếp tam giác ABC (làm tròn đến hai chữ số thập phân).
Input: x1, y1, x2, y2, x3, y3 ≤ 106
Output: x, y là tọa độ tâm của đường tròn Ví dụ:
INPUT OUTPUT
0 0 0 2 2 0 1.00 1.00
Bài tập 2.20: (MAXIMA) Cho số nguyên dương n ≤ 106. Tách n thành 2 số a, b sao cho tích P=a*b2 đạt cực đại.
Input: n ≤ 106 Output: a, b Ví dụ:
INPUT OUTPUT
6 2 4
Gợi ý:
Gọi x là số thứ hai thì số thứ nhất là: (n-x). Theo đề ta có:
P(x) = x2.(n-x).
Hàm P đạt cực đại khi P’(x) = -3x2 + 2nx = 0 x = 2n/3.
CHƯƠNG 3