Bài giảng Tin học đại cương 2 - Chương 2: Nhập xuất dữ liệu và các lệnh điều khiển được biên soạn với các nội dung nhập/xuất dữ liệu; các lệnh điều khiển; hàm xuất có định dạng Printf; đặc tả định dạng; các kí tự điều khiển và kí tự đặc biệt; hàm xuất kí tự...
Trang 2Hàm nhập/xuất kí tự
Hàm xuất/nhập chuỗi: puts và gets
Các lệnh điều khiển
Câu lệnh rẽ nhánh: if, switch Câu lệnh lặp: while, do…while, for Câu lệnh nhảy: break, continue, goto
Trang 32.1 Nhập xuất dữ liệu
Thiết bị xuất (màn hình) Thiết bị nhập (bàn phím)
Ở chương này chúng ta sẽ chỉ nghiên cứu các lệnhnhập/xuất với các thiết bị tương ứng là bàn phím và màn hình
Để sử dụng các lệnh xuất/nhập dữ liệu thì cần khai báo tiền xử
lý #include <stdio.h> ở đầu chương trình
Trang 4- Danh sách đối số là tùy ý, có thể không có đối số nào cả Nếu có
nhiều đối số thì chúng phải được viết tách nhau bởi dấu phẩy
Trang 5- \n : Nhảy xuống dòng kế tiếp canh về cột đầu tiên;
- \t : Canh cột tab ngang;
- \b : Backspace xóa lùi một kí tự trước vị trí con trỏ;
- \r : Nhảy về đầu dòng, không xuống dòng;
- \a : Âm thanh báo;
Trang 6Dạng tổng quát của đặc tả định dạng:
Một số kí tự định kiểu:
- c : Kí tự đơn ;
- s : Chuỗi ;
- d, ld : Số nguyên thập phân có dấu: char(dạng số), int, long;
- f, lf, Lf : Số thực dạng dấu phẩy tĩnh:float,double,long double ;
- e, le,Le : Số thực có mũ: float,double,long double;
- X, x : Số nguyên hệ 16 không dấu ;
- u, lu : Số nguyên không dấu ( unsigned int, unsigned long) ;
Đặc tả định dạng
%[cờ_hiệu][độ_rộng][.độ_chính_xác]kí_tự_định_kiểu
Mô tả cách thức hiển thị giá trị của các đối số trong phần
“danh sách đối số” Khi in ra màn hình thì vị trí của đặc tả sẽđược thay thế bằng giá trị của các đối số
Trang 7Cờ hiệu
Nếu không
có Mặc định dữ liệu được canh lề phải
- Dữ liệu được canh lề trái
+ In dữ liệu với dấu tương ứng (+ hoặc -)
#
Phụ thuộc vào kí tự định kiểu, nếu:
• o : Chèn thêm 0 trước giá trị > 0
• X, x : Chèn thêm 0X hoặc 0x trước số này
• e, f : Luôn có dấu chấm thập phân kể cả
khi không cần thiết
Trang 9- s: chỉ ra số kí tự tối đa có thể in ra được của một chuỗi.
.* Độ chính xác dựa vào đối số tương ứng
Trang 11Cú pháp sử dụng:
Ví dụ: Nhập dữ liệu cho biến nguyên x và y như sau:
scanf(“%d%d”, &x, &y);
2.1.2 Hàm nhập có định dạng scanf
scanf ( “ chuỗi định dạng” , danh sách đối số );
Các đối số là địa chỉ của các biến dùng để lưu trữ dữ liệu
khi nhập vào được viết sau toán tử “&”, các đối số viết tách nhau
bởi dấu phẩy;
Chú ý: Để tránh lỗi nhập dữ liệu không đúng khi nhập chuỗi thì
trước khi dùng lệnh nhập, ta nên thêm vào dòng lệnh
“fflush ( stdin ) ; ” để xóa toàn bộ dữ liệu trong bộ nhớ đệm.
Trang 12Lưu ý: Để sử dụng hàm getch() và hàm getche () cần phải khai
báo tiền xử lý #include<conio.h> , biến sử dụng thuộc kiểu kí tự.
Trang 13Cú pháp sử dụng:
2.1.4 Hàm xuất kí tự
Hàm putch() và hàm putchar() dùng để hiển thị một kí tự
ra màn hình Riêng hàm putch() để sử dụng thì cần khai báo
#include<conio.h>
putch(Tên_biến);
putchar(Tên_biến);
Trang 142.1.5 Hàm xuất/nhập chuỗi
- Hàm nhập chuỗi gets() : Nhập 1 chuỗi từ bàn phím kể cả
khoảng trắng, hàm dừng đọc khi ấn phím enter
gets(Tên_biến_kiểu_chuỗi) ;
Chú ý: Để tránh xảy ra trường hợp không nhập được chuỗi, cần
thêm lệnh fflush ( stdin ); trước khi gọi hàm gets ()
- Hàm xuất chuỗi puts() : hiển thị một chuỗi kí tự ra màn
hình và sau đó đưa con trỏ lệnh xuống dòng mới Mỗi lần nó chỉ
có thể hiển thị một chuỗi duy nhất
puts(Tên_biến_kiểu_chuỗi) ;
Hoặc:
puts(“ Chuỗi ”) ;
Trang 15Kết quả khi chạy chương trình :
-Ví dụ về xuất nhập chuỗi :
Trang 16Nội dung chính :
2.2 Các lệnh điều khiển
Trang 172.2.1 Lệnh điều kiện if
if ( Điều_kiện ) {
lệnh_1 ; }
else {
lệnh_2 ; }
Dạng đầy đủ if…else: Cách thức hoạt động:
Trang 18if ( Điều_kiện ) {
lệnh ; }
Trang 19Kết quả chạy chương trình khi nhập vào số -3:
-Ví dụ 1: Sử dụng if dạng đầy đủ
Trang 20Kết quả chạy chương trình khi nhập vào 3 số 2, 3, 4:
-Ví dụ 2: Sử dụng if lồng nhau
Trang 21sẽ được thực hiện chođến khi nào gặp lệnh
break hoặc dấu } thì
thoát khỏi switch Ngược
lại thì lệnh_n sau từ khóa
default sẽ được thựchiện
Trang 222.2.2 Lệnh rẽ nhánh switch
Lưu ý :
Biến hoặc biểu thức trong cặp ngoặc ( ) của switch phải có
giá trị là hằng nguyên hoặc kí tự;
Sau các từ khóa case có thể có nhiều lệnh mà không cần để
trong cặp dấu { } ;
Lệnh default là tùy chọn, có thể có hoặc không có và nằm ở
bất cứ vị trí nào trong switch ;
Nếu vắng lệnh default và các giá trị sau từ khóa case không
trùng với giá trị của biến/biểu_thức chỉ ra trong switch thì
lệnh switch coi như không thực hiện.
Trang 23Kết quả khi chạy chương trình :
-Ví dụ về sử dụng cấu trúc switch
Trang 24Cấu trúc sử dụng: Hoạt động:
Trang 252.2.3 Vòng lặp while
Chú ý:
Lệnh while có thể lồng bên trong nó một lệnh while khác;
Vòng lặp sẽ lặp vô hạn nếu điều_kiện _lặp luôn có giá trị
đúng;
Thân vòng lặp có thể không được thực hiện lần nào nếu
điều_kiện_lặp nhận giá trị sai ngay từ đầu.
Trang 26Kết quả khi chạy chương trình:
-Ví dụ về sử dụng vòng lặp while
Trang 27while ( điều_kiện_lặp );
Cấu trúc sử dụng: Hoạt động:
Bắt đầu
Điều_kiện_lặp Lệnh
Kết thúc Đúng
Sai
Trang 28Kết quả khi chạy chương trình:
-Ví dụ về sử dụng vòng lặp do…while
Trang 29Cấu trúc sử dụng: Hoạt động:
Bắt đầu
Điều_kiện_lặp Khởi tạo
Kết thúc
Đúng
Sai Lệnh
Cập_nhật
Trang 302.2.5 Vòng lặp for
Chú ý:
Thân vòng lặp có thể không được thực hiện lần nào nếu
điều_kiện_lặp nhận giá trị sai ngay từ đầu;
Một câu lệnh for có thể lồng bên trong nó một lệnh for khác;
Ba thành phần trong lệnh for có thể vắng, nhưng vẫn phải có
đủ hai dấu chấm phẩy ;
Các thành phần trong lệnh for có thể là các biểu thức ghép.
Mỗi biểu thức ghép phân cách nhau bởi toán tử phẩy và được
thực hiện từ trái sang phải (xem Ví dụ 2 ).
Trang 31Kết quả khi chạy chương trình:
-Ví dụ 1: Sử dụng vòng lặp for
Trang 32Kết quả khi chạy chương trình:
-Ví dụ 2: Sử dụng vòng lặp for với hai biến điều khiển
Trang 332.2.6 Lệnh nhảy break
Cách dùng:
Sử dụng trong một cấu trúc lặp để kết thúc sớm vòng lặp
trước khi điều_kiện_lặp nhận giá trị sai ;
Sử dụng trong cấu trúc switch để kết thúc việc xử lí của mỗi
case thỏa mãn và bỏ qua các case còn lại trong switch;
Trong trường hợp lệnh break nằm trong các lệnh lặp lồng
nhau thì nó chỉ có tác dụng với lệnh lặp trong cùng chứa nó
break ;
Trang 34Kết quả khi chạy chương trình:
-Ví dụ : Kiểm tra số nguyên n có phải số nguyên tố không ?
Trang 352.2.7 Lệnh continue
Cách dùng:
Lệnh continue chỉ được sử dụng trong các cấu trúc lặp để
kết thúc lần lặp hiện hành và chuyển sang lần lặp kế tiếp;
Đối với vòng lặp while và do…while thì chương trình sẽ
chuyển sang kiểm tra biểu thức điều_kiện_lặp;
Đối với lệnh for thì sẽ chuyển đến thực hiện biểu thức
cập_nhật rồi mới kiểm tra điều_kiện_lặp.
continue ;
Trang 36Kết quả khi chạy chương trình:
-Ví dụ : In ra các số là bội của 3 trong đoạn [1,20]
Trang 372.2.8 Lệnh goto
Cách dùng:
Nhảy chương trình về thực hiện lệnh từ vị trí nhãn;
Trong đó nhãn có dạng như tên biến và có dấu “:” phía sau,
nhãn có thể được gán cho bất kì câu lệnh nào trong chương
trình;
Lệnh goto và nhãn cần nằm chung trong một hàm;
Không cho phép dùng goto để nhày từ ngoài vào một khối
lệnh tuy nhiên việc nhảy từ khối lệnh ra ngoài là hợp lệ
goto nhãn ;
Trang 38Kết quả khi chạy chương trình:
-Ví dụ : Tính tổng 10 số nguyên dương đầu tiên
Trang 39Bài 1: Nhập vào ngày, tháng, năm và xuất ra màn hình dưới dạng
"ngay/thang/nam" (chỉ lấy 2 số cuối của năm).
Bài 2: Viết chương trình nhập vào hai số nguyên x, y Xuất ra màn
hình giá trị của các biểu thức sau:
Trang 40Bài tập luyện tập
Bài 3: Viết chương trình nhập vào hai số thực x và y Xuất ra màn
hình kết quả của các biểu thức sau:
a) x/y – Kết quả làm tròn đến 4 chữ số thập phân.
b) sinx – Để sử dụng hàm sin() cần khai báo #include<math.h>
đầu chương trình.
c) x – Nếu x>=0 (hàm tính căn bậc hai là sqrt(), cần khai báo
thư viện #include<math.h> ).
#include<math.h>.
Bài 4: Viết chương trình nhập vào một góc với số đo x có đơn vị
là là độ Tính và xuất ra màn hình giá trị của biểu thức cos(2x+1) ?
Trang 41Bài tập luyện tập
Bài 5: Viết chương trình nhập vào họ và tên, giới tính và năm sinh
của một người Xuất ra màn hình họ và tên, giới tính và tuổi củangười đó theo định dạng như ví dụ dưới:
Bài 6: Nhập vào số giây từ 0 đến 86399, đổi số giây nhập vào và
xuất ra màn hình theo dạng "gio:phut:giay", mỗi thành phần là một
số nguyên có 2 chữ số
Trang 42Bài tập luyện tập
Bài 7: Viết chương trình nhập vào tọa độ cho ba điểm A, B, C
nằm trong mặt phẳng với hệ trục tọa độ Đề-Các vuông góc Oxy.Hỏi ba điểm A, B, C đó có phải là ba đỉnh của một tam giáckhông ? Nếu phải, hãy giải tam giác ABC ( tính các cạnh, các góc,chu vi, diện tích, tam giác đó cân, vuông hay đều)
Bài 8: Nhập vào 3 số, in ra số lớn nhất.
Bài 9: Giải hệ phương trình bậc nhất: + =
Bài 10: Giải biện luận phương trình trùng phương: ax4+bx2+c=0
Bài 11: Viết chương trình nhập vào thứ trong tuần Xuất ra màn
hình thời khóa biểu của thứ đó ?
Trang 43Bài tập luyện tập
Bài 12: Viết chương trình nhập vào tháng trong năm Xuất ra màn
hình mùa tương ứng với tháng đó
Bài 13: Nhập vào tên của sinh viên A và điểm thi của A In ra màn
hình xếp loại tổng kết của A trong đó: dưới 5 điểm ( không qua), 5hoặc 6 ( trung bình), 7( khá), 8 hoặc 9( giỏi), 10 ( xuất sắc)
Bài 14: Tính chỉ số BMI và in ra kết qủa đánh giá.
Hướng dẫn: BMI = cân nặng(kg)/(chiều cao(m))2
BMI < 18: Người gầy
BMI = 18 - 24,9: Người bình thường
BMI = 25 - 29,9: Người béo phì độ I
BMI = 30 - 34,9: Người béo phì độ II
BMI > 35: Người béo phì độ III
Trang 44Bài tập luyện tập
Bài 15: Nhập số nguyên có 4 chữ số In ra các số hàng nghìn,
trăm, chục và đơn vị
Bài 16: Tìm các số tự nhiên có 4 chữ số sao cho chia hết cho 3
nếu là số lẻ và chia hết cho 7 nếu là số chẵn
Bài 17: Viết chương trình lặp lại công việc tính giai thừa của một
số nguyên (nếu tồn tại) Để kết thúc việc lặp lại đó và dừng
chương trình thì người dùng ấn phím ‘t’
Bài 18: Viết chương trình xuất ra màn hình tất cả các số nguyên
dương gồm 4 chữ số thỏa mãn điều kiện tổng của chữ số hàng
nghìn và chữ số hàng đơn vị luôn bằng tổng của chữ số hàng trăm
và chữ số hàng chục ?
Trang 45c) Tổng các số tự nhiên chẵn nhỏ hơn hoặc bằng n ?
d) Cho biết n có phải là số nguyên tố hay không ?
e) Số n có phải là số chính phương hay không ?
f) Số n có mấy chữ số ?
g) Tổng các chữ số của n ?
Trang 46Bài tập luyện tập
Bài 20: Hãy viết lại chương trình sau, sử dụng cấu trúc while :
#include<stdio.h>
main() {
int i, n, s=0;
printf("Nhap vao so nguyen : n = ");
scanf("%d",&n);
if(n>0) for(i=1; i<=n; i++) s+=2*n;
printf("s=%d", s);
}
Trang 47Bài tập luyện tập
Bài 21: Viết chương trình cho thuật toán sau :
Trang 48Bài tập luyện tập
Bài 22: Hãy viết chương trình in ra màn hình n phần tử đầu tiên
của dãy Fibonacci (dãy Fibonacci là dãy vô hạn các số tự nhiên,bắt đầu từ số 0 và số 1, các số sau đó được tính bắng tổng các sốliền kề trước nó Một số phần tử đầu tiên của dãy Fibonacci : 0,
1, 1, 2, 3, 5, 8,…)
Bài 23: Xuất ra màn hình các số có 3 chữ số trong đó tổng ba chữ
số của nó luôn chẵn