Bài giảng Cơ sở kỹ thuật lập trình - Chương 3: Các toán tử điều khiển và hàm nhập xuất - Trương Vĩnh Trường Duy

 Câu lệnh và khối lệnh  Toán tử if  Toán tử switch  Toán tử while và do…while  Toán tử for  Các hàm nhập xuất trong stdio.h và conio.h Câu lệnh – khối lệnh  Mỗi câu lệnh thực hiện một chức năng nào đó được kết thúc bằng dấu ;  Dãy các câu lệnh được đặt trong cặp dấu { và } được gọi là một khối lệnh và được xem như một câu lệnh riêng lẻ  Những câu lệnh của một hàm, những câu lệnh của một cấu trúc phải được đặt vào dấu {}  Các toán tử điều khiển cho phép thay đổi trật tự thực hiện các câu lệnh (khối lệnh) do đó máy có thể đang từ một câu lệnh này nhảy tới thực hiện một câu lệnh ở trước, hoặc sau nó

pdf29 trang | Chia sẻ: candy98 | Lượt xem: 678 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Cơ sở kỹ thuật lập trình - Chương 3: Các toán tử điều khiển và hàm nhập xuất - Trương Vĩnh Trường Duy, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 3: Các toán tử điều khiển và hàm nhập xuất Biên soạn: Trương Vĩnh Trường Duy (duytvt@ptithcm.edu.vn) Từ tài liệu trên Internet và các nguồn khác CƠ SỞ KỸ THUẬT LẬP TRÌNH Nội dung  Câu lệnh và khối lệnh  Toán tử if  Toán tử switch  Toán tử while và dowhile  Toán tử for  Các hàm nhập xuất trong stdio.h và conio.h Câu lệnh – khối lệnh  Mỗi câu lệnh thực hiện một chức năng nào đó được kết thúc bằng dấu ;  Dãy các câu lệnh được đặt trong cặp dấu { và } được gọi là một khối lệnh và được xem như một câu lệnh riêng lẻ  Những câu lệnh của một hàm, những câu lệnh của một cấu trúc phải được đặt vào dấu {}  Các toán tử điều khiển cho phép thay đổi trật tự thực hiện các câu lệnh (khối lệnh) do đó máy có thể đang từ một câu lệnh này nhảy tới thực hiện một câu lệnh ở trước, hoặc sau nó Toán tử if  if (biểu_thức_điều_kiện) khối_lệnh; Nếu biểu thức cho kết quả khác 0 thì thực hiện khối lệnh  if (biểu_thức_điều_kiện) khối_lệnh_1; else khối_lệnh_2; Nếu biểu thức cho kết quả khác 0 thì thực hiện khối lệnh 1, ngược lại thực hiện khối lệnh 2  C cho phép các cấu trúc if lồng nhau if () { /* cac lenh thuc hien neu dieu kien dung */ } expression statement(s) Next statement True False Toán tử if if () { /* cac lenh thuc hien neu dieu kien dung */ } else { /* cac lenh thuc hien neu dieu kien sai */ } expression statement1 Next statement True False statement2 Toán tử if #include int main() { int b; printf("Enter a value:"); scanf("%d", &b); if (b < 0) printf("The value \ is negative\n"); return 0; } printf(“1/X is: “); if(X) printf(“ %f \n”, 1/X); else printf(“ undefined \ \n”); Toán tử if Toán tử switch  switch (biểu_thức_điều_kiện) { case n1: khối_lệnh_1; case n2: khối_lệnh_2; case nk: khối_lệnh_k; [default: khối_lệnh_default;] }  Nếu biểu thức điều kiện = ni (ni là các hằng số nguyên, ký tự) thì thực hiện khối lệnh sau case ni, nếu không thực hiện khối lệnh sau default nếu có hoặc thoát khỏi switch  Phải dùng break cuối mỗi khối lệnh để chương trình thoát khỏi switch sau khi thực hiện xong 1 trường hợp #include #include #include int main(void) { int n; int n_even = n_odd = n_zero = 0; randomize(); for(int i=0; i<1000; i++) { n = random(1000); switch (n%10) { case 2: case 4: case 6: case 8: n_even++; break; Toán tử switch case 1: case 3: case 5: case 7: n_odd++; break; case 0: n_zero++; break; } } // print out the summary printf(“ Number of even_eding number: %d\n”\ Number of odd_ending number: %d\n”\ Number of zero_ending number: %d\n”, n_even, n_odd, n_zero); return 0; } Toán tử switch Toán tử while và dowhile  while (biểu_thức_điều_kiện) khối_lệnh;  Nếu biểu thức còn khác 0 thì còn thực hiện khối lệnh của vòng lặp  do khối_lệnh; while (biểu_thức_điều_kiện)  Thực hiện khối lệnh cho đến khi biểu thức có giá trị bằng 0 while (expression) {statement(s)}  Khi biểu thức điều kiện (expression) còn khác 0, lệnh (statement) tiếp tục được thực hiện. Nếu expression bằng 0, lệnh while dừng và chương trình sẽ gọi lệnh kế tiếp sau while  Nếu lúc đầu expression bằng 0 thì (statement) trong while không bao giờ được gọi thực hiện expression statement(s) Next statement True False Toán tử while và dowhile do {statement(s)} while (expression) ;  Thực hiện lệnh (statement). Kiểm tra biểu thức điều kiện (expression). Nếu (expression) bằng 0, dừng. Nếu không, thực hiện (statement)  Lệnh do while thực hiện (statement) ít nhất một lần expression statement(s) Next statement True False Toán tử while và dowhile Toán tử while và dowhile  Khi gặp câu lệnh continue bên trong thân của while hoặc do while, máy sẽ chuyển đến xác định giá trị biểu thức sau từ khóa while, và sau đó tiến hành kiểm tra điều kiện kết thúc chu trình  Trường hợp gặp câu lệnh break, máy sẽ thoát khỏi vòng while hay do..while ngay lập tức  In bảng đổi nhiệt độ từ độ Fahrenheit (oF) sang độ Celcius (oC). #include int main() { int a; a = 0; while (a <= 100) { printf("%4d degrees F = %4d degrees C\n", a, (a - 32) * 5 / 9); a = a + 10; } return 0; } Toán tử while và dowhile #include #include #define PTB1 1 #define PTB2 2 #define STOP 3 int main() { int i; do { clrscr(); // xoa man hinh printf(“ Chuong trinh giai phuong trinh\ bac thap \n”); Toán tử while và dowhile printf(“ 1. Giai phuong trinh bac 1: \ ax + b = 0 \n”); printf(“ 2. Giai phuong trinh bac 2 : \ ax^2 + bx + c = 0 \n”); printf(“ 3. Thoat chuong trinh \n\n”); printf(“ Chon muc so (1/2/3) ? “); scanf(“%d”, &i); if(i == PTB1) printf(“Giai phuong trinh bac 1: \ hien chua co\n”); else if(i == PTB2) printf(“Giai phuong trinh bac 2: \ chua cai dat\n\n”); } while (i != STOP); return 0; } Toán tử while và dowhile Toán tử for  for (biểu_thức_1;biểu_thức_2;biểu_thức_3) khối_lệnh_1; 1. Tính giá trị biểu thức 1 2. Tính giá trị biểu thức 2 3. Nếu biểu thức 2 khác 0 thì cho thực hiện các lệnh của vòng lặp, ngược lại cho thoát khỏi lệnh for 4. Tính giá trị biểu thức 3 rồi quay lại bước 2  Khi gặp câu lệnh break bên trong thân của toán tử for, máy sẽ thoát khỏi vòng for ngay lập tức  Khi gặp câu lệnh continue bên trong thân của toán tử for, máy sẽ chuyển đến bước khởi đầu lại (bước 4) for (initialization; test; adjustment) {statement(s)}  Khởi động. Sau đó, nếu điều kiện (test) khác 0: lệnh (statement) được thi hành, lệnh điều chỉnh lại “biến đếm” được gọi thi hành test statement(s) Next statement True False adjustment initialization Toán tử for  Bài toán đổi nhiệt độ. Yêu cầu: hiển thị nhiệt độ chính xác đến con số thập phân sau dấu phẩy. #include int main() { float a; int i; a = 0; for(i=0; i<=100; i+=10) { printf("%6.2f degrees F = %6.2f degrees C\n", a, (a - 32.0) * 5.0 / 9.0); a = a + 10; } return 0; } Toán tử for Toán tử goto  goto nhan;  Khi gặp toán tử này máy sẽ nhảy tới thực hiện câu lệnh viết sau từ khóa goto  Nhãn có cùng dạng như tên biến và có dấu : đứng sau. Nhãn có thể được gán cho bất kỳ câu lệnh nào trong chương trình. Ví dụ: t:s+=a; int s=1,a=3; goto t; ++a; t: s+=a  Không cho phép dùng toán tử goto nhảy từ ngoài vào trong một khối lệnh, tuy nhiên nhảy từ trong ra ngoài khối lệnh là hoàn toàn hợp lệ Hàm nhập xuất trong stdio.h  printf(“Dòng điều khiển”,[các biểu thức]);  Dòng điều khiển gồm 3 loại:  Chuỗi ký tự mang tính chất thông báo (hằng chuỗi)  Các ký tự điều khiển( \n, \r, \t..)  Các mã đặc tả để in các biểu thức tương ứng (mỗi biểu thức khi in phải có một đặc tả)  printf("gia tri 92 dung truong kieu d = %d. \n", 92); Hàm nhập xuất trong stdio.h  Các đặc tả được dùng trong hàm printf như sau Hàm nhập xuất trong stdio.h  scanf(“các đặc tả”,<danh sách đia chỉ các biến tương ứng với các đặc tả>);  Mỗi biến muốn nhập giá trị phải có một đặc tả tương ứng. VD: scanf("%f", &value); scanf(“%[^\n]”,a))  Các đặc tả được dùng trong hàm scanf Hàm nhập xuất trong stdio.h  gets(Tên của mảng ký tự);  Hàm này cho phép nhận một chuỗi từ bàn phím cho đến khi gặp ký tự \n (cho phép nhập khoảng trắng giữa các từ)  VD: gets(a);  getchar(void)  Nhận một ký tự từ bàn phím và trả về ký tự nhận được  VD: j=getchar();  Nếu trong chương trình có sử dụng các lệnh scanf, getchar thì các lệnh sử dụng sau sẽ bị trôi (không có tác dụng) do mã phím \n còn lại trong stdin của lệnh scanf hoặc getchar trước đó, do đó phải khử ký tự \n còn trong stdin bằng lệnh fflush(stdin) sau lệnh scanf Hàm nhập xuất trong stdio.h  int putchar(int ch)  Xuất một ký tự lên màn hình. Kết quả của hàm trả về là ký tự xuất nếu thành công, ngược lại cho kết quả EOF (-1)  VD: char c=’A’; putchar(c);/*in ra màn hình ký tự A*/  int puts(char *s)  Xuất một chuỗi lên màn hình với *s là con trỏ kiểu char trỏ tới ô nhớ đầu của vùng nhớ chứa chuỗi ký tự muốn xuất. Hàm này khi xuất sẽ đưa thêm ký tự \n vào cuối, kết quả của hàm =\n nếu thành công ngược lại = EOF Hàm nhập xuất trong conio.h  int getch(void)  int getche(void)  Hai hàm này chờ nhận một ký tự trực tiếp từ bộ đệm bàn phím. Nếu bộ đệm rỗng thì chờ. Khi một phím được ấn thì nhận ngay ký tự đó mà không cần phải enter như các hàm nhập từ stdin  Hàm getche() cho hiện ký tự lên màn hình còn getch() thì không  Kết quả trả về của hàm là ký tự được ấn  Với các phím đặc biệt khi được ấn thì có hai giá trị được gửi lên bộ đệm bàn phím. Ví dụ khi ta ấn phím F1 thì giá trị đầu là 0, và giá trị kế là 59 được gửi lên bàn phím. Vì vậy để nhận được mã của các phím này ta phải đọc bộ đệm bàn phím thêm một lần nữa Hàm nhập xuất trong conio.h  cprintf có cú pháp giống như printf nhưng màu của nội dung được in được ấn định bởi hàm textcolor  cscanf có cú pháp và công dụng như hàm scanf, nhưng khác nhau ở hai điểm: nội dung nhập có màu được ấn định bởi hàm textcolor; nhận nội dung trực tiếp từ bộ đệm bàn phím, vì vậy với hàm cscanf cũng phải khử ký tự \n trong bộ đệm  VD textcolor(YELLOW); /*Đặt mầu chữ*/ textbackground(BLUE); /*Đặt mầu nền*/ cprintf("\nNhap mot so: "); cscanf("%d%*c",&a); Hàm nhập xuất trong conio.h  clrscr(); là hàm xóa toàn bộ màn hình và sau khi xóa con trỏ sẽ ở vị trí góc phía bên trái  gotoxy(int x, int y); là hàm đặt con trỏ màn hình vào tọa độ X, Y của màn hình. Tọa độ X là tọa độ cột, tính từ 1 đến 80, tọa độ Y là tọa độ dòng, tính từ 1 đến 25. Màn hình gồm 25 dòng và 80 cột  Ví dụ: gotoxy (30,10);  void textbackground(int color); đặt màu nền cho văn bản. Color là một biểu thức nguyên có giá trị từ 0 đến 7  void textcolor(int newColor); đặt màu ký tự mới newColor là một biểu thức nguyên có giá trị từ 0 đến 15