You are on page 1of 37

MÔN HỌC

Giảng viên: Nguyễn Đức Hoàng


Bộ môn Điều Khiển Tự Động
Khoa Điện – Điện Tử
Đại Học Bách Khoa Tp.HCM
Email: ndhoang@hcmut.edu.vn
CHƯƠNG 8

CÁC LỆNH ĐIỀU KHIỂN


VÀ VÒNG LẶP
Nội dung chương 8
8.1 Lệnh đơn và lệnh phức
8.2 Lệnh IF
8.3 Lệnh SWTICH-CASE
8.4 Lệnh WHILE
8.5 Lệnh DO-WHILE
8.6 Lệnh FOR
8.7 Lệnh BREAK-CONTINUE
8.8 Lệnh RETURN
8.9 Lệnh GOTO
8.10 Lệnh RỖNG
Lệnh đơn và lệnh phức
Lệnh đơn
Lệnh đơn là một biểu thức thuộc loại bất kì kết thúc
bằng ;
VD: a += 1;
b = a + 1;
c = !a&&b ;

03/25/24 5
Lệnh phức
Lệnh phức bao gồm một hay nhiều lệnh đơn nằm trong
dấu { }
VD: {
a += 1;
b = ++a;
c = a>=b ;
}

03/25/24 6
Lệnh IF
Lệnh if có các cấu trúc sau:

03/25/24 7
Lệnh IF
Câu lệnh điều kiện if
if (<dieu kien>)
{
/* cac lenh thuc hien
True False
neu dieu kien dung */ expression

}
… statement(s)

Next statement

03/25/24 8
Lệnh IF
Ví dụ
1. #include <stdio.h>

2. int main() {
3. int b;

4. printf("Enter a value:");
5. scanf("%d", &b);
6. if (b < 0)
7. printf("The value \
is negative\n");
8. return 0;
9. }
03/25/24 9
Lệnh IF
if … else …
if (<dieu kien>)
{
/* cac lenh thuc hien neu dieu kien dung */
}
else
True False
{ expression

/* cac lenh thuc hien


statement1 statement2
neu dieu kien sai */
}
… Next statement

03/25/24 10
Lệnh IF
Ví dụ

printf(“1/X is: “);
if(X)
printf(“ %f \n”, 1/X);
else
printf(“ undefined \n”);

03/25/24 11
Lệnh IF
Lỗi đơn giản nhưng dễ phạm
1. #include <stdio.h>

2. int main() {
3. int b;

4. printf("Enter a value:");
5. scanf("%d", &b);
6. if (b == 5)
7. printf(“b is "); printf( “5 \n”);
8. return 0;
9. }

03/25/24 12
Lệnh IF
Lỗi đơn giản nhưng dễ phạm
1. printf(“1/X is: “);
2. if(X < 0) ;
3. printf(“ X is negative \n”);
4. …

03/25/24 13
Lệnh IF
Ví dụ: Kiểm tra nhiều điều kiện
1. #include <stdio.h>
2. int main() {
int b;

3. printf("Enter a value:");
4. scanf("%d", &b);
5. if (b < 0)
6. printf("The value is negative\n");
7. else if (b == 0)
8. printf("The value is zero\n");
9. else
10. printf("The value is positive\n");
11. return 0;
12. }

03/25/24 14
Điều kiện lồng nhau
 Câu lệnh if có thể được lồng vào nhau.
1. if ( X >= 0 ) {
2. if ( Y < 0 )
3. Y = Y + sqrt(X);
4. }
5. else
6. Y = Y + sqrt(-X);

 Tuy nhiên, cần chú ý đến thứ tự các cặp lệnh if … else … khi lồng các
lệnh if. Nếu không sẽ phát sinh lỗi.
1. if ( X >= 0 )
2. if ( Y < 0 )
3. Y = Y + sqrt(X);
4. else
5. Y = Y + sqrt(-X);

03/25/24 15
Ví dụ lệnh IF
1. Viết chương trình nhập 2 số và in ra số nhỏ nhất
và lớn nhất ?
2. Viết chương trình giải phương trình bậc 2
3. Nhập vào số nguyên dương n với 0 < n < 8.Tùy
theo n hãy in ra các chữ Sunday, Monday,
…,Saturday
4. Nhập vào 3 cạnh của tam giác. In ra tam giác đó
loại gì ? (thường, vuông, đều, cân, vuông cân)

03/25/24 16
Lệnh SWITCH-CASE
Cú pháp: switch(bieuthuc)
{ case hang_1:
lenh_1;
break;

case hang_n:
lenh_n;
break;
default:
lenh;
break;
03/25/24 } 17
Lệnh SWITCH-CASE
Ví dụ: Đổi 1 số nguyên sang chuỗi ký tự là tên các môn học
#include<stdio.h>
#include<conio.h>
main( )
{ int ma ;
printf(" \n cho mã cần chuyển "); scanf(" %d ", &ma);
switch(ma)
{
case 0 : printf(" \n lớp tin học a ");
break;
case 1 : printf( " \n lớp tin học b");
break;
case 2 : printf(" \n lớp trung cấp ");
break;
default : printf( " \n lớp thiếu tiền học phí");
}
}
03/25/24 18
Lệnh WHILE
Cú pháp: while (biểu thức 1) lệnh 1 ;
- Nguyên tắc thực hiện :
+B1. Tính giá trị của biểu thức 1
+B2. Nếu giá trị của biểu thức 1 sai ( = 0 ) thì chương
trình ra khỏi vòng while
+B3. Nếu giá trị của biểu thức đúng thì thực hiện lệnh 1
và quay lại bước 1(b1)
- Chú ý : Biểu thức 1 có thể gồm nhiều biểu thức nhưng
tính đúng sai phụ thuộc vào biểu thức cuối cùng
03/25/24 19
Lệnh WHILE
Ví dụ: Tính tổng S = 1+2+3+…+N
#include < stdio.h >
main (){
int N, S=0, i = 0 ;
printf(“Nhap so nguyen duong: “); scanf(“%d”,&N);
while ( i <= N){
S=S+i;
i ++ ;
}
printf(“Tong = %d”, S);
}
03/25/24 20
Lệnh WHILE
Ví dụ: Tính tổng S = 1+2+3+…+N
#include < stdio.h >
main ()
{
int N, S=0, i = 0 ;
printf(“Nhap so nguyen duong: “); scanf(“%d”,&N);
while ( i <= N) S+=i++;
printf(“Tong = %d”, S);
}

03/25/24 21
Lệnh WHILE
Ví dụ: Tính tổng S = 1+2+3+…+N
#include < stdio.h >
main ()
{
int N, S=0, i = 0 ;
printf(“Nhap so nguyen duong: “); scanf(“%d”,&N);
while (S+=i++; i <= N) ;
printf(“Tong = %d”, S);
}

03/25/24 22
Lệnh DO WHILE
Cú pháp: do lệnh 1 ; while (biểu thức 1);
- Nguyên tắc thực hiện :
+B1. Máy thực hiện lệnh 1
+B2. Sau đó tính giá trị của biểu thức 1, nếu giá trị của
biểu thức 1 sai thì chương trình thoát ra khỏi vòng lặp.
Nếu giá trị của biểu thức 1 đúng thì quay lại bước 1.
Chú ý : - while : Ðiều kiện được kiểm tra trước, nếu đúng
mới thực hiện. - do while : câu lệnh được thực hiện
trước khi kiểm tra. Câu lệnh thực hiện bao giờ ít nhất là 1
lần.
03/25/24
Biểu thức 1 có thể gồm nhiều biểu thức nhưng tính đúng23
Lệnh DO WHILE
Ví dụ : tính pi với sai số eps = 1E - 4 , pi = 4 - 4/3 + 4/5 - 4/7 + ...eps
#include < stdio.h >
main () {
float pi, dau, i , eps, saiso ;
i=1.0; dau = -1; saiso = 1e -4 ;
pi = 4.0;
printf ( "\n đang xử lý vui lòng đợi !");
do
{
eps = 4.0 / ( 2.0 * i + 1.0 );
pi + = dau * eps ; dau = dau * - 1.0 ; i + = 1.0;
}
while ( eps > saiso );
printf ("\n số pi là : " % f ", pi ) ;
}
03/25/24 24
Lệnh FOR
Cú pháp: for (bt1;bt2;bt3) lệnh ;
- Nguyên tắc thực hiện :
+B1. Tính giá trị của bt1
+B2. Tính giá trị của bt2
+B3. Nếu giá trị của bt2 sai (==0) thì thoát khỏi vòng for;
nếu bt2 đúng (!=0) thì thực hiện lệnh
+B4. Tính giá trị của bt3, quay lại kiểm tra bt2
- Chú ý : bt2 vắng mặt thì nó được coi luôn đúng

03/25/24
bt1,bt2,bt3 có thể là các biểu thức phẩy 25
Lệnh FOR
Ví dụ1: Tính tổng S = 1+2+3+…+N

for(i=0,S=0;i<=N;i++) S+=i;
for(i=0,S=0;i<=N; ) S+=i++;
for(i=0,S=0;i<=N;S+=i,i++) ;
for(i=0,S=0;i<=N;S+=i++) ;

Ví dụ2: Tính tổng


S=1! + (1+2)! + ....+ ( 1+2+....i )! .....( 1 + 2 + ..n)!

03/25/24 26
Lệnh FOR
Ví dụ2: Tính tổng
S=1! + (1+2)! + ....+ ( 1+2+....i )! .....( 1 + 2 + ..n)!
#include <stdio.h>
main(){
int i, j, t, n ; double gt, s;
printf ("nhập n= "); scanf(" %d ", &n);
for (s= 0,t= 0,i=1; i<=n ; ++i )
{
t=t+i;
for ( gt=1,j=1; j<=t ; ++j)
gt = gt*j ; s = s+gt;
}
printf ( " tong s = %15.0f ", s);
03/25/24 } 27
Lệnh FOR
Ví dụ2: Tính tổng
S=1! + (1+2)! + ....+ ( 1+2+....i )! .....( 1 + 2 + ..n)!
#include <stdio.h>
main()
{
int i, j, t, n ; double gt, s;
printf ("nhập n= "); scanf(" %d ", &n);
for ( s=0, t=1, i=1; i<=1; ++i , t = t + 1)
{
for ( gt=1,j=1;j<=t; ++j)
gt*=j; s+= gt;
}
printf ( " tong s = %15.0f ", s);
03/25/24 } 28
Lệnh FOR
Ví dụ2: Tính tổng
S=1! + (1+2)! + ....+ ( 1+2+....i )! .....( 1 + 2 + ..n)!
#include <stdio.h>
main()
{
int i, j, t, n ; double gt, s;
printf ("nhập n= "); scanf(" %d ", &n);
for (s=0, t=1,i=1; i<=n; ++i, t=t+i,s+=gt)
for( gt=1,j=1; j<=t; gt* = j , ++j );
printf ( " tong s = %15.0f ", s);
}

03/25/24 29
Lệnh FOR
Ví dụ2: Tính tổng
S=1! + (1+2)! + ....+ ( 1+2+....i )! .....( 1 + 2 + ..n)!
#include <stdio.h>
main()
{
Int i=1, j=1, t=1, n ; double gt = 1, s= 0 ;
printf ("nhập n= "); scanf(" %d ", &n);
for ( ; i<=n ; ++i, t = t + i , s+ = gt)
{
for ( ; j<=t ;
gt* = j ++ /* gt = j ; ++j */
}
printf ( " tong s = %15.0f ", s);
03/25/24 } 30
Bài tập
1. Tìm các số nằm trong khoảng từ 150 đến 1400 thoả
tính chất số bằng tổng lập phương các chữ số của
chúng :
Ví dụ : 153 = 13 + 53 + 33 hoặc 370 = 33 + 73 + 03
2. S1 = 1 * 3 * 5 * 7 * 9* . . .*(2n - 1)
S2 = 2 * 4 * 6 * 8 *…*(2n)
3. S1 = 1 – 2 + 3 – 4 + 5 – 6 + 7 – 8 +

03/25/24 31
Lệnh BREAK & CONTINUE
Cú pháp: break;
Dùng để thoát khỏi vòng lặp. Khi gặp câu lệnh này trong
vòng lặp, máy ra khỏi và chỉ đến câu lệnh sau các lệnh trên.
Nếu nhiều vòng lặp ----> break sẽ thoát ra khỏi vòng lặp gần
nhất.

Cú pháp: continue;
Khi gặp lệnh này trong các vòng lặp, máy sẽ bỏ qua phần còn
lại trong vòng lặp và tiếp tục thực hiện vòng lặp tiếp theo.
- Ðối với lệnh for máy sẽ tính lại biểu thức 3 (bt3) và quay lại
bước 2.
- Ðối với lệnh while, do while máy sẽ tính lại giá trị của biểu
03/25/24 32
Lệnh BREAK & CONTINUE
Ví dụ : Nhập 1 ký tự kể cả ký tự trống và bỏ qua các ký tự
không hợp lệ và kết thúc khi ấn ESC .
char kytu ;
while (1) /* luôn luôn đúng vòng lặp vĩnh cửu */
{
kytu = getch ( ) ;
if ( kytu = = 27 ) break ;
if ( kytu > 122 || kytu < 65 ) continue ;
printf(“c”,kytu);
}
03/25/24 33
Lệnh RETURN
Cú pháp: return;
return bieuthuc;
return (bieuthuc);
Lệnh này dùng để thoát ra khỏi hàm hiện thời để trở về hàm
đã gọi nó, có thể trả về trị. Lệnh này sẽ kết thúc hàm dù nó
nằm ở đâu trong thân hàm. Khi gặp lệnh này C sẽ không
thực hiện lệnh nào sau lệnh return
VD:
int so_sanh (int a, int b)
{
return (a > b) ? 1 : (a == b) ? 0 : -1;
}
03/25/24 34
Lệnh GOTO & RỖNG
Cú pháp: goto nhan;
nhan: lenh;
CHÚ Ý : PHẠM VI NHÃN TRONG CÙNG 1 HÀM

03/25/24 35
Lệnh GOTO & RỖNG
Ví dụ2: Tính tổng
S=1! + (1+2)! + ....+ ( 1+2+....i )! .....( 1 + 2 + ..n)!
#include <stdio.h>
main(){
int i=1,j=1,t=1,n; float gt=1,s=0;
scanf("%d",&n);
for(;;)
{for(;;)
{gt*=j++;
if (j>t) goto tong;}
tong: s+=gt;++i,t=t+i;
if (i>n) goto KT;}
KT:printf("Tong = %6.0f\n",s);
03/25/24 } 36
03/25/24 37

You might also like