CHƯƠNG 2 CÁC KIỂU DỮ LIỆU
2.6 Nhập xuất dữ liệu
Nhập xuất dữ liệu là cỏch chỳng ta ủưa dữ liệu vào chương trỡnh và ủưa ra kết quả của chương trỡnh. Thụng thường, dữ liệu ủược ủưa vào thụng qua bàn phớm và kết quả ủược ủưa ra màn hình.
2.6.1 ðưa kết quả ra màn hình
Cú thể ủưa ra màn hỡnh một dũng chữ, hoặc cỏc giỏ trị số bằng lệnh printf. Lệnh printf cú dạng:
printf (<chuỗi ủiều khiển>, bt1, bt2, ..., btn);
Ở ủõy bt1, bt2,..., btn là cỏc biểu thức mà giỏ trị của chỳng cần ủược ủưa ra màn hỡnh.
Trong chuỗi ủiều khiển, cú thể chứa:
- Ký tự ủiều khiển.
- Các ký tự hiển thị.
- Cỏc ký tự dựng ủể mụ tả kiểu cỏch ủưa ra của cỏc biến, ta sẽ gọi chỳng là cỏc ủặc tả.
Một số ký tự ủiều khiển ủược ủịnh nghĩa trước, thường cú dấu \ phớa trước, vớ dụ ký tự ủiều khiển xuống dũng là \n, ký tự tab là \t.
Cỏc ký tự hiển thị sẽ ủược ủưa ra giống như khi chỳng xuất hiện ở trong chuỗi ủiều khiển.
Cỏc ủặc tả sẽ chỉ ra cỏch mà giỏ trị của cỏc biểu thức sẽ ủược ủưa ra. Mỗi biểu thức cần phải cú một ủặc tả tương ứng. Khi in ra màn hỡnh, giỏ trị của cỏc biểu thức sẽ ủược thay thế tương ứng vào vị trớ cỏc ủặc tả.
Sau ủõy là một số dạng thường dựng của cõu lệnh printf.
ðưa ra một thông báo
http://www.ebook.edu.vn 53
đôi khi chúng ta chỉ muốn ựưa ra một thông báo, một câu hướng dẫn, khi ựó chỉ cần ựưa vào chuỗi ủiều khiển khụng chứa cỏc ủặc tả. Nội dung của xõu sẽ ủược ủưa ra màn hỡnh.
Vớ dụ, ủể ủưa ra một thụng bỏo nhắc người dựng nhập vào hệ số của ủa thức, cú thể dựng lệnh:
printf(“\nNhap he so da thuc: ”);
Khi ủú trờn màn hỡnh sẽ xuất hiện:
Nhap he so da thuc:
ðưa ra các giá trị nguyên
Khi muốn ủưa ra cỏc kết quả là cỏc giỏ trị nguyờn, chỳng ta dựng ủặc tả %d. Sau ủõy chỳng ta sẽ xột một số vớ dụ ủể cú thể hiểu ủược hoạt ủộng của ủặc tả này.
Vớ dụ, ủoạn mó sau ủưa ra tổng của hai số nguyờn:
int a, b;
a = 10;
b = 25;
printf(“Tong cua %d va %d la %d”, a, b, a + b);
Cõu lệnh printf sẽ thay thế cỏc ủặc tả %d bằng giỏ trị cỏc biểu thức tương ứng theo thứ tự ủưa vào. Trong ủoạn mó trờn, giỏ trị của a, b và a + b sẽ lần lượt ủược thay thế vào cỏc vị trớ
%d trong chuỗi ủiều khiển, kết quả ủưa ra màn hỡnh như sau:
Tong cua 10 va 25 la 35
Trong ví dụ trên, giá trị của các biểu thức có bao nhiêu chữ số thì bấy nhiêu vị trí trên màn hỡnh ủược sử dụng ủể in giỏ trị, vớ dụ giỏ trị 10 cần hai vị trớ thỡ mỏy sẽ dành ủỳng hai vị trớ ủể in ra giỏ trị 10.
Tuy nhiên, trong một số trường hợp, như in ra các giá trị của một ma trận, hoặc in các giá trị theo dạng cột, thỡ chỳng ta cần dành một số vị trớ nhất ủịnh cho một giỏ trị, mặc dự số vị trớ cần thiết ủể in ra giỏ trị ủú cú thể nhỏ hơn.
Vớ dụ, ủoạn chương trỡnh sau in ra giỏ trị cỏc luỹ thừa của 2 theo dạng cột:
#include <stdio.h>
void main() {
int i, a;
a = 1;
for (i = 1; i <= 10; i++) {
a*= 2;
printf("2 ^ %2d = %4d\n", i, a);
} }
Kết quả ủưa ra như sau:
2 ^ 1 = 2 2 ^ 2 = 4 2 ^ 3 = 8 2 ^ 4 = 16 2 ^ 5 = 32 2 ^ 6 = 64 2 ^ 7 = 128 2 ^ 8 = 256 2 ^ 9 = 512 2 ^ 10 = 1024
http://www.ebook.edu.vn 54
Trong vớ dụ trờn, ta ủó dành 2 vị trớ cho việc in số mũ và dành 4 vị trớ ủể in ra cỏc luỹ thừa, bất kể các giá trị này bằng bao nhiêu. Trường hợp giá trị cần in ra có số chữ số lớn hơn 4 vị trớ, mỏy sẽ chuẩn bị số vị trị vừa ủủ cho giỏ trị ủú.
ðưa ra các giá trị thực
ðể ủưa ra cỏc giỏ trị thực, chỳng ta dựng ủặc tả %f. Vớ dụ sau tớnh diện tớch của một hỡnh trũn và ủưa kết quả ra màn hỡnh.
#include <stdio.h>
void main() {
float r;
r = 2.34f;
printf("Dien tich hinh tron ban kinh %f la %f\n", r, 3.14*r*r);
}
Kết quả in ra là:
Dien tich hinh tron ban kinh 2.340000 la 17.193383
Tuy nhiờn, ủụi khi ta khụng cần kết quả gồm nhiều chữ số thập phõn như thế, mà chỉ cần lấy một số lượng chữ số sau dấu phảy nhất ủịnh.
Cõu lệnh printf sau sẽ thay thế cho cõu lệnh printf trong ủoạn mó trờn ủể ủưa ra cỏc kết quả lấy hai chữ số sau dấu phảy, và dành 6 ký tự cho việc in ra mỗi giá trị.
printf("Dien tich hinh tron ban kinh %6.2f la %6.2f\n", r, 3.14*r*r);
Kết quả là:
Dien tich hinh tron ban kinh 2.34 la 17.19
Một trường hợp nữa là chúng ta vẫn muốn lấy một số lượng chữ số sau dấu phẩy nhất ủịnh, nhưng khụng cú ý ủịnh dành sẵn một số vị trớ xỏc ủịnh, khi ủú trong ủặc tả cú thể vắng mặt số phía trước dấu chấm.
Sau ủõy là cõu lệnh printf thường dựng nhất cho cỏc bài dạng trờn:
printf("Dien tich hinh tron ban kinh %.2f la %.2f\n", r, 3.14*r*r);
Kết quả là:
Dien tich hinh tron ban kinh 2.34 la 17.19
ðưa ra các xâu ký tự
Khi muốn ủưa ra cỏc giỏ trị là cỏc xõu ký tự, vớ dụ như họ và tờn hay ủịa chỉ, dựng ủặc tả
%s.
Ví dụ sau yêu cầu nhập vào tên và in ra lời chào.
#include <stdio.h>
void main() {
char szHoTen[100];
printf("Nhap ten ban: ");
fflush(stdin);
gets(szHoTen);
printf("Xin chao %s", szHoTen);
}
Khi chạy, nhập vào một tên và máy sẽ in ra lời chào tương ứng.
Nhap ten ban: Minh Quang Xin chao Minh Quang
http://www.ebook.edu.vn 55
Với ủặc tả %s, ta cũng cú thể dành sẵn ủộ rộng cho giỏ trị in ra, sử dụng trong cỏc trường hợp như in họ tờn theo cột. Việc chỉ ủịnh ủộ rộng giống như ủối với trường hợp số nguyờn.
2.6.2 Nhập dữ liệu từ bàn phím
Nhập dữ liệu từ bàn phớm là một cỏch thụng dụng ủể nạp giỏ trị cho cỏc biến hoặc mảng.
Trong phần này, chúng ta sẽ tìm hiểu cách nhập liệu cho các biến nguyên, biến thực và xâu ký tự.
Nhập số nguyên, số thực bằng scanf
Cõu lệnh scanf cú thể dựng ủể nhập dữ liệu cho cỏc biến nguyờn, thực. Một cỏch tổng quát câu lệnh scanf có dạng:
scanf("t1t2...tk", &b1,&b2,...,&bk);
Trong ủú b1, b2,..., bk là cỏc biến (kiểu int và kiểu float) cũn t1, t2,..., tk là cỏc ủặc tả tương ứng. Dựng ủặc tả %d ủối với biến nguyờn và %f ủối với biến thực.
Một vài chú ý:
- Trong cõu lệnh scanf, khụng dựng tờn biến như trong cõu lệnh printf mà dựng ủịa chỉ của biến bằng cỏch ủặt phộp toỏn & trước tờn biến.
- Mỗi biến ứng với một ủặc tả. Như vậy số ủặc tả bằng số biến.
- Trong chuỗi ủiều khiển chỉ nờn chứa cỏc ủặc tả và cỏc ủặc tả nờn viết liền nhau.
Vớ dụ, ủể vào 3 giỏ trị: 25, -137, 45.3 cho hai biến nguyờn m, n và một biến thực f, dựng lệnh:
scanf(“%d%d%f”, &n, &m, &f);
Khi gặp cõu lệnh này, mỏy sẽ dừng ủể ủợi thao tỏc viờn vào số liệu từ bàn phớm. Cỏc giỏ trị cần ủược phõn cỏch nhau bởi một hoặc vài khoảng trắng (ở ủõy khoảng trắng ủược hiểu là dấu cách hoặc dấu xuống dòng).
Thao tác viên có thể sử dụng một trong các cách bấm phím sau:
Cách 1: Mỗi giá trị trên một dòng, bằng cách nhấn phím Enter sau mỗi số.
25 -137 45.3
Cách 2: ðặt cả 3 giá trị trên một dòng, cách nhau bằng các dấu cách.
25 -137 45.3
Sau khi nhập xong, n nhận giá trị 25, m nhận giá trị -137 và f nhận giá trị 45.3.
Nhập xâu ký tự bằng gets
ðể nhập xâu ký tự, có thể dùng lệnh gets. Lệnh gets có dạng:
gets(<xâu ký tự>)
Ở ủõy, xõu ký tự là một mảng kiểu char.
Chỳ ý: Nếu trước lệnh gets mà cú cỏc lệnh scanf, thỡ cú thể khụng nhập ủược xõu do ký tự return cũn ở trong bộ ủệm. Vỡ vậy ủể sử dụng ủỳng ủắn cõu lệnh gets, nờn thờm lệnh fflush(stdin) trước lệnh gets trong mọi trường hợp, ủể làm sạch bộ ủệm (xúa hết cỏc ký tự cũn trong ủú) trước khi ủưa (nhập) giỏ trị mới.
http://www.ebook.edu.vn 56