Tải bản đầy đủ (.pdf) (30 trang)

Bài giảng Ngôn ngữ lập trình C: Chương 3 - GV. Dương Khai Phong

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (202.5 KB, 30 trang )

TIN HỌC ĐẠI CƯƠNG
Ngơn ngữ lập trình: C
Lý thuyết: 6 buổi
Thực hành: 8 buổi
GVHD: Dương Khai Phong
Email:


NỘI DUNG CÁC BUỔI HỌC
1.
2.
3.
4.
5.
6.

Tổng quan về C (chương 1,2)
Các cấu trúc điều khiển trong C (chương 3)
Hàm và cấu trúc chương trình (chương 4)
Mảng, chuỗi và con trỏ (chương 5)
Kiểu cấu trúc, đệ qui, tập tin (chương 6,7,8)
Ôn tập


CHƯƠNG 3: CÁC CẤU TRÚC ĐIỀU KHIỂN
1.
2.
3.
4.
5.
6.



Câu lệnh , khối lệnh trong C
Cấu trúc điều khiển là gì?
Cấu trúc điều kiện: IF.. ELSE..
Cấu trúc rẽ nhánh: SWITCH..CASE..
Cấu trúc lặp: FOR, WHILE, DO..WHILE
Cấu trúc điều khiển GOTO


1. CÂU LỆNH , KHỐI LỆNH TRONG C
a. Khái niệm về câu lệnh:
Mỗi câu lệnh (code) thực hiện một chức năng nào đó (như lệnh
gán, xuất dữ liệu ra màn hình..). Mỗi câu lệnh có thể được viết
trên một dịng hoặc nhiều dòng và được kết thúc bằng dấu chấm
phẩy “;”.
b. Khái niệm về khối lệnh:
- Một dãy các câu lệnh được đặt trong cặp dấu ngoặc nhọn {
và } thì được gọi là một khối lệnh.
- Những câu lệnh của một hàm hay một cấu trúc có nhiều lệnh
phải được đặt trong dấu {..}
 Lưu ý:
- Khi muốn ghi chú một câu lệnh ta dùng dấu : // nội dung
- Khi muốn ghi chú một khối lệnh ta dùng dấu : /* nội dung */


2. CẤU TRÚC ĐIỀU KHIỂN TRONG C
a. Cấu trúc điều khiển là gì?
Là cách thức 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ể 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ó.

b. Phân loại:

Cấu trúc điều khiển
ĐIỀU KIỆN

IF
ELSE

SWITCH
CASE

LẶP

FOR

KẾT HỢP: GOTO

WHILE

DO
WHILE


3. CẤU TRÚC ĐIỀU KIỆN: IF.. ELSE
a. Cấu trúc 1:
if (<Biểu_thức_điều_kiện>)
{
<Khối lệnh>;
}
Ý nghĩa:

Nếu Biểu_thức_điều_kiện cho
kết quả khác không (tức điều
kiện đó là đúng) thì thực hiện
khối lệnh, ngược lại khơng thực
hiện.
Ta có thể lồng các câu lệnh if
vào nhau.

b. Cấu trúc 2:
if (<Biểu_thức_điều_kiện>)
{
<Khối lệnh 1>;
}
else
{
<Khối lệnh 2>;
}
Ý nghĩa:
Nếu Biểu_thức_điều_kiện cho
kết quả khác khơng (tức điều
kiện đó là đúng) thì thực hiện
khối_lệnh_1, ngược lại thực
hiện khối_lệnh_2.


3. CẤU TRÚC ĐIỀU KIỆN: IF.. ELSE
Một số ví dụ về if:
Ví dụ 1: Nếu tuổi của người nào đó trên 18 tuổi thì xuất
thơng báo “Bạn là thanh niên”?
int tuoi;

printf(“Cho biet tuoi:”);
scanf (“%d”,&tuoi);
if (tuoi>=18)
{
printf(“Ban la thanh nien”);
}

int tuoi;
printf(“Cho biet tuoi:”);
scanf (“%d”,&tuoi);
if (tuoi>=18)
printf(“Ban la thanh nien”);

Nếu khối lệnh sau if chỉ có 1 lệnh thì ta có thể khơng
cần dùng cặp dấu ngoặc nhọn {…}


3. CẤU TRÚC ĐIỀU KIỆN: IF.. ELSE
Một số ví dụ về if:
Ví dụ 2: Nếu tuổi của người nào đó trên 18 tuổi thì xuất thơng báo
“Bạn là thanh niên”, ngược lại “Bạn chưa đủ tuổi”?
int tuoi;
printf(“Cho biet tuoi:”);
scanf (“%d”,&tuoi);
if (tuoi>=18)
{
printf(“Ban la thanh nien”);
}
else
{

printf(“Ban la thanh nien”);
}

int tuoi;
printf(“Cho biet tuoi:”);
scanf (“%d”,&tuoi);
if (tuoi>=18)
printf(“Ban la thanh nien”);
else
printf(“Ban la thanh nien”);


3. CẤU TRÚC ĐIỀU KIỆN: IF.. ELSE
Một số ví dụ về if:
Ví dụ 3: Giải ptb1 ax+b=0 với a,b là số nguyên nhập từ bàn phím
int a,b; float x;
printf(“Cho biet a=”);scanf (“%d”,&a);
printf(“Cho biet b=”);scanf (“%d”,&b);
if (a==0)
if (b==0)
printf(“pt VSN”);
else
printf(“pt VN”);
else
{
x=(float)a/b;
printf(“pt co nghiem x=%f”,x);
}



4. CẤU TRÚC RẼ NHÁNH: SWITCH..CASE
Cấu trúc chung:
switch (<Biểu_thức>)
{
case giá_trị_1:
<Khối_lệnh_1>;
[break;]

case giá_trị_2:
<Khối_lệnh_2>; [break;]

case giá_trị_k:
<Khối_lệnh_k>; [break;]

[default:
<Khối_lệnh_2>;]

}

* Lưu ý:
- Kết quả của biểu thức tính tốn
phải là giá trị ngun, ký tự.
- Các giá trị 1,2,..,k: phải là hằng
nguyên, ký tự.
- Khi giá trị biểu thức khác tất cả
các giá trị 1,2,..,k thì câu lệnh sau
default được thực hiện.
- Câu lệnh break dùng để thoát khỏi
lệnh switch sau khi thực hiện xong
1 trường hợp case (nếu khơng có

break thì các lệnh bên dưới sẽ
được thực hiện mà không xét lại
điều kiện).


4. CẤU TRÚC RẼ NHÁNH: SWITCH..CASE
Một số ví dụ về switch:
Ví dụ 1: Viết chương trình nhập vào 1 số nguyên từ 0..9 và cho biết
cách đọc số đó.
* Cách 2: dùng switch
* Cách 1: dùng if
int so;
printf(“Nhap vao 1 so nguyen:”);
scanf (“%d”,&so);
if (so==0)
printf(“khong”);
if (so==1)
printf(“mot”);

if (so==9)
printf(“chin”);

int so;
printf(“Nhap vao 1 so nguyen:”);
scanf (“%d”,&so);
switch (so){
case 0:
printf(“khong”);break;
case 1:
printf(“mot”);break;


case 9:
printf(“chin”);break;
default:
printf(“Khong biet”);
}


5. CẤU TRÚC LẶP: FOR, WHILE, DO..WHILE
Nhận xét: khi một lệnh / khối lệnh phải thực hiện nhiều
lần thì ta dùng cấu trúc lặp để tránh viết lại lệnh / khối
lệnh nhiều lần. Ta có các cấu trúc lặp sau:
a/ FOR:
 Công dụng: cấu trúc lặp for cho biết trước số lần sẽ
được lặp.
 Cú pháp chung:
for (giá_trị_bắt_đầu;biểu_thức_đk_dừng;bước_lặp)
{
<Khối_lệnh>;
}


5. CẤU TRÚC LẶP:

for

Ví dụ 1: xuất các số nguyên từ 1..100
* Cách 1:
printf(“1“);
printf(“2“);


printf(“100“);

* Cách 2.1:
int i;
for (i=0;i<=100;i=i+1)
{
printf(“%d “,i);
}

* Cách 2.2:
int i;
for (i=1;i<=100;i++)
{
printf(“%d “,i);
}

* Cách 2.3:
for (int i=1;i<=100;i++)
{
printf(“%d “,i);
}


5. CẤU TRÚC LẶP:

for

Ví dụ 2: xuất các số nguyên chẵn từ 0..100
* Cách 1:

int i;
for (i=0;i<=100;i=i+2)
{
printf(“%d “,i);
}

* Cách 2:
int i;
for (i=0;i<=100;i++)
{
if (i%2==0)
printf(“%d “,i);
}

Ví dụ 3: xuất các số nguyên lẻ từ 0..100


5. CẤU TRÚC LẶP:

for

Cú pháp mở rộng:
for (biểu thức 1;biểu_thức 2;biểu thức 3)
{
<Khối_lệnh>;
}
Trong đó:
Bất kỳ biểu thức 1,2,3 nào đều có thể vắng
dấu chấm phẩy (Vd: for(i=1;++i Hoạt động của cấu trúc lặp for:

 B1: tính giá trị biểu thức 1
 B2: tính giá trị biểu thức 2
 B3: nếu giá trị biểu thức 2 <> 0 thì
thực hiện khối lệnh, ngược lại thốt.
 B4: tính giá trị biểu thức 3 rồi quay lại B2


mặt nhưng phải có
biểu thức 1;
for (;biểu_thức 2;)
{
<Khối_lệnh>;
biểu thức 3;
}


5. CẤU TRÚC LẶP:


Các lệnh dùng kết hợp với cấu trúc lặp: (xem trang 70,71)
 break: dùng để để thoát khỏi vòng lặp for ngay lặp tức.
 continue: dùng để bắt đầu thực hiện một vịng lặp mới của chu
trình bên trong nhất chứa nó (khơng thực hiện những lệnh sau nó)

Ví du: break
void main()
{
int dem;
for (dem=0;dem<5;dem++)
{

printf(“dem = %d”,dem);
break;
printf(“Thu nghiem break”);
}
}
=> KQ chỉ xuất dịng : dem = 1


for

Ví du: continue
Viết CT xuất các số lẻ nhỏ hơn 20 trừ các
số 5,11
void main()
{
int dem;
for (dem=0;dem<=20;dem++)
{
if ((dem==5) || (dem==11))
continue;
printf(“dem = %d”,dem);
}
}




5. CẤU TRÚC LẶP:

while


Ví dụ: viết CT cho phép nhập một số nguyên trong
khoảng 10, nếu nhập lớn hơn thì bắt nhập lại.
=> Nhận xét: chương trình có tính chất lặp đi lặp lại
nhiều lần nhưng số lần lặp không xác định trước => while
int main()
{
int so=11;
while (so>10)
{
printf(“Nhap mot so trong khoang 0..9: ”);
scanf(“%d”,&so);
}
printf(“So ban da nhap chinh xac la %d”,so);
}


5. CẤU TRÚC LẶP:


while

Cú pháp: while

while (biểu thức)
{
<Khối lệnh>;
<Cập nhật lại giá trị biểu thức>;
}



Nhận xét:
 Nếu biểu thức còn khác 0 (hay biểu thức có giá trị
true) thì cịn thực hiện khối lệnh của vòng lặp.
 Vòng lặp while thường được sử dụng khi số lần lặp
không xác định trước.
 Số lần lặp tối thiểu là 0 lần


5. CẤU TRÚC LẶP:

do..while

Ví dụ: viết lại CT cho phép nhập một số nguyên trong
khoảng 0..9, nếu nhập ngoài khoảng này thì bắt nhập lại.
int main()
{
int so;
do
{
printf(“Nhap mot so trong khoang 0..9: ”);
scanf(“%d”,&so);
} while (so>=0 && so<=9);
printf(“So ban da nhap chinh xac la %d”,so);
}


5. CẤU TRÚC LẶP:



do .. while

Cú pháp: do .. while

do
{
<Khối lệnh>;
<Cập nhật lại giá trị biểu thức>;
} while (biểu thức);


Nhận xét:
Thực hiện khối lệnh của vòng lặp cho đến khi biểu
thức có giá trị bằng 0 (hay biểu thức có giá trị false).
 Vòng lặp do .. while cũng thường được sử dụng khi
số lần lặp không xác định trước.
 Số lần lặp tối thiểu là 1 lần.


5. CẤU TRÚC LẶP:


while, do..while

Các lệnh dùng kết hợp với cấu trúc lặp: (xem trang

74)


break: dùng để để thoát khỏi vòng lặp ngay lặp tức.




continue: dùng để bắt đầu thực hiện một vịng lặp

mới của chu trình bên trong nhất chứa nó (khơng thực
hiện những lệnh sau nó)
Ví du: xem thêm trang 75,76


5. CẤU TRÚC ĐIỀU KHIỂN:


goto

Cấu trúc điều khiển goto: là sự thể hiện giữa cấu trúc

điều kiện và cấu trúc lặp, được sử dụng kết hợp với nhãn
lệnh theo cú pháp sau:
goto <Tên_nhãn>;


Lưu ý:


Các lệnh goto và nhãn phải nằm trong cùng 1 hàm



Không cho phép dùng goto nhảy từ ngồi vào trong


1 khối lệnh nhưng ngược lại thì hợp lệ.


5. CẤU TRÚC ĐIỀU KHIỂN:


Ví dụ:

int main(){
int s=1,a=3;

goto

Lệnh goto nhảy đến
nhãn lệnh t mà không
thực hiện lệnh ++a

goto t;
++a;
t: s+=a;
}

Nhãn lệnh t;


PHẦN BÀI TẬP ÔN TẬP
CHƯƠNG 1,2,3



Bài 1/ trang 77: cho biết kết quả thực thi CT
#include “stdio.h”
#include “conio.h”
main()
{
int a,b=4;
switch ((a=2)?5:2)
{
case 5: b+=2;
default: a-b--;
case 2: a--;
}
printf (“%d %d”,a,--b);
}

Kết quả in ra:
1 4

a = giá trị rác (-8599…)
Dịng này có 3 phép tốn:
Phép tốn: ()
Phép tốn điều kiện: ?
Phép toán gán: =
=> Thứ tự ưu tiên các phép toán (tr34)
( ) => = => gán a=2
? => đây là một biểu thức hợp lệ => giá trị
của biểu thức là true => nhận giá trị 5
b+=2 => b=b+2 => b=6
Do khơng có break nên các lệnh sau nó
được thực hiện tiếp:

a-b-- => b=b-1 và a-b => b=5
a-- => a=a-1 => a=1
--b=> b=b-1 => b=4


×