[Slide tin học đại cương] Bài 7: Các cấu trúc lập trình trong C

THThiNganHang
1 lượt tải
23
0

Đang tạo bản xem trước...

Nội dung tài liệu

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 7. Các cấu trúc lập trình trong C Nội dung 7.1. Cấu trúc lệnh khối 7.2. Cấu trúc rẽ nhánh 7.2.1. Cấu trúc if, if … else 7.2.2. Cấu trúc lựa chọn switch ThiNganHang.com7.3. Cấu trúc lặp 7.3.1. Vòng lặp for 7.3.2. Vòng lặp while 7.4. Các lệnh thay đổi cấu trúc lập trình 7.4.1. continue 7.4.2. break 2 ThiNganHang.com 1

Trang 2

7.1. Cấu trúc lệnh khối • Thể hiện cấu trúc tuần tự • Lệnh khối là dãy các câu lệnh được đặt trong cặp dấu ngoặc nhọn {} { lenh_1; lenh_2; …. lenh_n; } • C cho phép khai báo biến trong lệnh khối, nhưng phần khai báo phải nằm trước câu lệnh. 3 7.1. Cấu trúc lệnh khối (2) • Lệnh khối lồng nhau: – Trong một lệnh khối có thể chứa lệnh khối khác – Sự lồng nhau là không hạn chế { lenh; ThiNganHang.com{ lenh; ... } … } 4 ThiNganHang.com 2

Trang 3

7.1. Cấu trúc lệnh khối (2) • Ví dụ: #include <conio.h> #include <stdio.h> void main() //Noi dung cua ham main() cung la mot khoi lenh { // khai bao bien int c = 10; printf(“Gia tri cua c = %d day la c ngoai”,c); // bat dau mot khoi lenh khac { int c = 10; printf(“\n Gia tri cua c = %d day la c trong”,c); printf(“\n Tang gia tri cua c them 10 don vi”); c = c + 10; printf(“\n Gia tri cua c = %d day la c trong”,c); } printf(“\n Gia tri cua c = %d day la c ngoai”,c); getch(); }// ket thuc khoi lenh cua ham main() 5 7.1. Cấu trúc lệnh khối (2) • Kết quả: Gia tri cua c = 10 day la c ngoai Gia tri cua c = 10 day la c trong Tang gia tri cua c them 10 don vi ThiNganHang.comGia tri cua c = 20 day la c trongGia tri cua c = 10 day la c ngoai 6 ThiNganHang.com 3

Trang 4

Nội dung 7.1. Cấu trúc lệnh khối 7.2. Cấu trúc rẽ nhánh 7.2.1. Cấu trúc if, if … else 7.2.2. Cấu trúc lựa chọn switch 7.3. Cấu trúc lặp 7.3.1. Vòng lặp for 7.3.2. Vòng lặp while 7.4. Các lệnh thay đổi cấu trúc lập trình 7.4.1. continue 7.4.2. break 7 Cấu trúc rẽ nhánh • Nếu biểu thức điều kiện • Nếu biểu thức điều kiện đúng (giá trị chân lý là đúng (giá trị chân lý là True) thực hiện công True) thực hiện công việc 1. việc 1. • Nếu biểu thức điều kiện sai (giá trị chân lý là ThiNganHang.comFalse) thực hiện côngviệc 2. 8 ThiNganHang.com 4

Trang 5

7.2.1. Cấu trúc if, if … else • Cú pháp cấu trúc if if (bieu_thuc_dieu_kien) lenh; • Cú pháp cấu trúc if … else if (bieu_thuc_đieu_kien) lenh_1; else lenh_2; 9 Biểu thức điều kiện • bieu_thuc_dieu_kien – Biểu thức logic : !, &&, || – Biểu thức quan hệ : ==, !=, >, >=, <, <= • Biểu thức số học ThiNganHang.com– Phức hợpif (bieu_thuc_so_hoc)if (bieu_thuc_so_hoc != 0)tương đương với • Kiểm tra điều kiện bộ 3 số (a,b,c) là số đo 3 cạnh của một tam giác (a < b + c) && (b < c + a) && (c < a + b) • Kiểm tra với 3 cạnh (a,b,c), tam giác có cân không ? (a == b) || (b == c) || (c == a) 10 ThiNganHang.com 5

Trang 6

Biểu thức điều kiện (tiếp) • bieu_thuc_dieu_kien – Kết quả thực hiện 1 lệnh khác dưới dạng lời gọi hàm: • Thành công : trả về giá trị khác 0 • Có lỗi : trả về giá trị = 0 printf(“Hay nhap 1 so nguyen : "); if (scanf("%d",&a)) printf("\n a = %d",a); else { printf("Loi nhap du lieu!!!\n"); printf(“So ban da nhap khong phai so nguyen”); } 11 Kết hợp lệnh khối if (bieu_thuc_dieu_kien) { Khoi_lenh_1; } ThiNganHang.comelse{ Khoi_lenh_2; } 12 ThiNganHang.com 6

Trang 7

Cấu trúc if...else if • “Rẽ” nhiều nhánh if (bieu_thuc_dieu_kien_1) { Khoi_lenh_1; } else if (bieu_thuc_dieu_kien_2) { Khoi_lenh_2; } ... else if (bieu_thuc_dieu_kien_n) { Khoi_lenh_n; } else { Khoi_lenh_cuoi_cung; } 13 7.2.1. Cấu trúc if, if … else (2) • Ví dụ: Bài toán tìm số lớn nhất trong 2 số thực a và b: #include <conio.h> #include <stdio.h> void main() { // khai bao bien float a, b, max; ThiNganHang.comprintf(“scanf(“%f %f”,&a,&b);if(a<b) max = b;else Nhap giamax = a;tri a va b: “); printf(“\n So lon nhat trong 2 so %.0f va %.0f la %.0f “,a,b,max); getch(); } //ket thuc ham main() • Kết quả: Nhap vao 2 gia tri a va b: 23 247 So lon nhat trong hai so 23 va 247 la 247 14 ThiNganHang.com 7

Trang 8

//Khai báo tệp tiêu đề #include <stdio.h> #include <conio.h> //Nội dung chương trình chính void main { float x,y; //khai báo 2 biến đầu vào float thuong; //Khai báo thương 2 số if (y==0) printf(“Loi chia cho 0”); else { thuong = x/y; printf(“Ket qua la : %f”,thuong); } getch(); } 15 Ví dụ 1. Giải PT bậc 2 trên tập số thực ax2 + bx + c = 0 (a ≠ 0) ThiNganHang.com2. Cải tiến 1 : giải trên tập số phức 3. Cải tiến 2 : kiểm tra điều kiện của a 16 ThiNganHang.com 8

Trang 9

Chú ý • Tương đương ? if (dieu_kien) if (dieu_kien) Cong_viec_1 Cong_viec_1; else Cong_viec_2; if (! dieu_kien) Cong_viec_2; if (dieu_kien_1){ if (dieu_kien_2) Cong_viec_1; if (dieu_kien_1) else if (dieu_kien_2) Cong_viec_2;} Cong_viec_1; ? else if (dieu_kien_1){ Cong_viec_2; if (dieu_kien_2) Cong_viec_1;} else Cong_viec_2; 17 Bài tập Viết chương trình có những chức năng sau: 1. Hiển thị một bảng chọn sau ThiNganHang.com 2. Cho phép người dùng nhập 2 số nguyên dương 3. Cho phép người dùng đưa ra lựa chọn 1 chức năng. Tùy theo lựa chọn của người dùng, hãy thực hiện công việc tương ứng. Nếu người dùng nhấn 1 phím khác hãy thông báo và dừng chương trình. 18 ThiNganHang.com 9

Trang 10

7.2.2. Cấu trúc lựa chọn switch • Cú pháp cấu trúc switch switch (bieu_thuc) { case gia_tri_1: lenh_1; break; case gia_tri_2: lenh_2; break; … case gia_tri_n: lenh_n; break; default: lenh_n+1; break; } • Giá trị của biểu thức kiểm tra (bieu_thuc) phải là số nguyên: – Phải có kiểu dữ liệu là char, int, long. • Tương ứng các giá trị sau case (gia_tri_1, gia_tri_2,…) cũng phải là số nguyên. • Case chỉ đóng vai trò là “nhãn”, lệnh break được sử dụng để thoát ra khỏi cấu trúc switch 19 7.2.2. Cấu trúc lựa chọn switch (3) • Ví dụ: Nhập vào số nguyên không âm, đưa ra ngày trong tuần tương ứng (theo số dư khi chia cho 7). #include <conio.h> ThiNganHang.com#includevoid{ main()<stdio.h> int a; printf(“\nNhap mot gia tri so nguyen khong am: “); scanf(“%d”,&a); 20 ThiNganHang.com 10

Trang 11

7.2.2. Cấu trúc lựa chọn switch (4) • Ví dụ (tiếp): switch(a % 7) { case 0: printf(“ Chu nhat”); case 1: printf(“ Thu Hai”); break; case 2: printf(“ Thu Ba”); break; case 3: printf(“ Thu Tu”); break; case 4: printf(“ Thu Nam”); break; case 5: printf(“ Thu Sau”); break; case 6: printf(“ Thu Bay”); break; } getch(); } 21 7.2.2. Cấu trúc lựa chọn switch (5) • Bài tập: – Trong một năm các tháng có 30 ngày là 4, 6, 9, 11 còn các tháng có 31 ngày là 1, 3, 5, 7, 8, 10, 12. Riêng tháng hai có thể có 28 hoặc 29 ThiNganHang.comngày. – Hãy viết chương trình nhập vào 1 tháng, sau đó đưa ra kết luận tháng đó có bao nhiêu ngày. 22 ThiNganHang.com 11

Trang 12

7.2.2. Cấu trúc lựa chọn switch (6) #include <conio.h> #include <stdio.h> void main () { int thang; clrscr(); printf("\n Nhap vao thang trong nam "); scanf("%d",&thang); switch(thang) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf("\n Thang %d co 31 ngay ",thang); break; 23 7.2.2. Cấu trúc lựa chọn switch (7) case 4: case 6: case 9: case 11: printf("\n Thang %d co 30 ngay ",thang); break; ThiNganHang.comcase 2:default :printfbreak; ("\ Thang 2 co 28 hoac 29 ngay"); printf("\n Khong co thang %d", thang); break; } getch(); } 24 ThiNganHang.com 12

Trang 13

Bài tập 25 Bài tập (tiếp) Bài 4: Để đánh giá mức độ gầy hay béo của một người, các nhà khoa học sử dụng chỉ số BMI được tính theo công thức BMI = Cân nặng/(Chiều cao)2 Trong đó Chiều cao tính bằng đơn vị mét. Ví dụ một người cao 1.70 m, nặng 65kg có chỉ số BMI = 65/1.702 = 22.5. ThiNganHang.comKết quả đánh giá như sau:BMI < 18Chỉ số Người gầyĐánh giá 18 ≤ BMI <25 Cân nặng bình thường 25 ≤ BMI < 30 Thừa cân BMI ≥ 30 Béo phì Viết chương trình kiểm tra chỉ số BMI của một người. 26 ThiNganHang.com 13

Trang 14

Bài 5: Đơn giá điện sinh hoạt được tính theo bảng sau Mức tiêu thụ (kWh) Giá tiền 0 đến 50 1000 đồng 51 đến 100 1200 đồng 101 đến 150 1500 đồng Trên 150 2000 đồng Viết chương trình tính số tiền điện phải trả của một gia đình trong tháng. 27 Nội dung 7.1. Cấu trúc lệnh khối 7.2. Cấu trúc rẽ nhánh 7.2.1. Cấu trúc if, if … else 7.2.2. Cấu trúc lựa chọn switch ThiNganHang.com7.3. Cấu trúc lặp 7.3.1. Vòng lặp for 7.3.2. Vòng lặp while 7.4. Các lệnh thay đổi cấu trúc lập trình 7.4.1. continue 7.4.2. break 28 ThiNganHang.com 14

Trang 15

Cấu trúc lặp • Nếu biểu thức điều kiện còn • Thực hiện công việc trong vòng đúng, thực hiện công việc trong lặp 1 lần vòng lặp Khi biểu thức điều kiện còn đúng, thực hiện công việc trong việc trong vòng lặp 29 7.3.1. Vòng lặp while và do...while • Mục đích: – Dùng để thực hiện lặp đi lặp lại một công việc trong khi còn thỏa mãn điều kiện nào đó. • 2 cấu trúc: ThiNganHang.comwhile (bieu_thuc_dieu_kien) { Khoi_lenh; } hoặc do { Khoi_lenh; } while (bieu_thuc_dieu_kien); 30 ThiNganHang.com 15

Trang 16

7.3.2. Vòng lặp while và do ... while (2) • while: • do{…} while: – Kiểm tra giá trị của – Thực hiện Khoi_lenh bieu_thuc_dieu_kien trước rồi mới kiểm tra trước rồi mới thực hiện bieu_thuc_dieu_kien Khoi_lenh của vòng lặp. – Các câu lệnh có thể không – Các câu lệnh được thực được thực hiện lần nào. hiện ít nhất 1 lần. 31 7.3.2. Vòng lặp while và do...while (3) • bieu_thuc_dieu_kien – Biểu thức logic : !, &&, || – Biểu thức quan hệ : ==, !=, >, >=, <, <= • Biểu thức số học while (bieu_thuc_so_hoc) tương đương với ThiNganHang.comwhile (bieu_thuc_so_hoc != 0) – Phức hợp • Sau mỗi bước lặp, kiểm tra lại giá trị của bieu_thuc_dieu_kien 32 ThiNganHang.com 16

Trang 17

7.3.2. Vòng lặp while (4) • Ví dụ: Nhập vào điểm của một sinh viên, nếu điểm đó không  [0, 10] thì thông báo cho người dùng nhập lại. • Nhận xét: – Nếu dùng lệnh if  Chỉ kiểm tra được 1 lần – Chưa biết trước số lần lặp, người dùng được nhập ít nhất 1 lần 33 7.3.1. Vòng lặp while (5) • Sử dụng cấu trúc do {...} while do { printf("Nhap diem (0<=diem<=10):"); scanf("%f",&diem); if ((diem < 0) || (diem > 10)) printf("\nBan nhap khong dung! Hay nhap lai\n"); ThiNganHang.com• Sử dụng cấu trúc}//nhập lần đầu tiênwhile ((diem < 0)while {...}|| (diem > 10)); printf("Nhap diem (0<=diem<=10):"); scanf("%f",&diem); //kiểm tra while ((diem < 0) || (diem > 10)){ printf("\nBan nhap khong dung! Hay nhap lai\n"); printf(“Nhập điểm(0<=diem<=10):"); scanf("%f",&diem); } 34 ThiNganHang.com 17

Trang 18

Ví dụ • Cài đặt thuật toán • Bổ sung 1 : kiểm tra giá trị n • Bổ sung 2 : cho người dùng thực hiện lại cho đến khi nhấn phím ‘X’ • Bổ sung 3 : Kiểm tra tính hoàn hảo của n 35 Thảo luận • Vòng lặp vô hạn : Khi nào xảy ra? Tác hại? – Trong một số trường hợp cần dùng while (1) {...} thì trong vòng lặp phải có các câu lệnh thay đổi cấu trúc để thoát ra ngoài. • Vòng lặp hữu hạn : làm thế nào để điều kiện dừng xảy ra ? ThiNganHang.com•tương đương vớiwhile(dieu_kien1Nhận xét || dieu_kien2) { } while (1) { if (! (dieu_kien1 || dieu_kien2) exit; } while(dieu_kien1 && dieu_kien2) {} Tương đương với ? 36 ThiNganHang.com 18

Trang 19

7.3.2. Vòng lặp for • Mục đích – Dùng để thực hiện lặp đi lặp lại một công việc nào đó (thông thường với số lần lặp xác định) • Cú pháp: for(bieu_thuc_1;bieu_thuc_2;bieu_thuc_3) { Khoi_lenh; } • Trong đó: – bieu_thuc_1: Khởi tạo giá trị ban đầu cho vòng lặp – bieu_thuc_2: Điều kiện tiếp tục vòng lặp – bieu_thuc_3: Thực hiện bước tăng của vòng lặp – Chú ý các biểu thức 1, 2, 3 có thể có hoặc không 37 7.3.2. Vòng lặp for (2) • Ví dụ: Đưa ra màn hình các số nguyên lẻ nhỏ hơn 100 #include <stdio.h> #include <conio.h> void main() ThiNganHang.com{ int i; for(i = 1;i<100;i++) { if(i%2 == 1) printf(“%5d”,i); if((i+1)%20 ==0) printf(“\n”); } getch(); } 38 ThiNganHang.com 19

Trang 20

7.3.2. Vòng lặp for (3) • Ví dụ: Đưa ra màn hình các số nguyên lẻ nhỏ hơn 100 #include <stdio.h> #include <conio.h> void main() { int i; for(i = 1;i<100;i+=2) { printf(“%5d”,i); if((i+1)%20 ==0) printf(“\n”); } getch(); } 39 7.3.2. Vòng lặp for (4) • Kết quả thực hiện 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 ThiNganHang.com6181 6383 6585 6787 6989 7191 7393 7595 7797 7999 40 ThiNganHang.com 20

Hiển thị 20 trang đầu. Tải tài liệu để xem đầy đủ.

Bình luận (0)

Đăng nhập để tham gia bình luận

Chưa có bình luận nào. Hãy là người đầu tiên!