&
VC
ộ
N i dung
BB
Câu lệnh for
1
Câu lệnh while
2
Câu lệnh do… while
3
Một số kinh nghiệm lập trình
4
11
ệ
ặ
NMLT Câu l nh l p
&
VC
ề
ặ ấ Đ t v n đ
BB
Ví dụ
Viết chương trình xuất các số từ 1 đến 10
=> Sử dụng 10 câu lệnh printf
Viết chương trình xuất các số từ 1 đến 1000
=> Sử dụng 1000 câu lệnh printf !
Giải pháp
Sử dụng cấu trúc lặp lại một hành động trong khi
còn thỏa một điều kiện nào đó. 3 lệnh lặp: for, while, do… while
22
ệ
ặ
NMLT Câu l nh l p
&
VC
ệ Câu l nh for
BB
Sự thực hiện câu lệnh
B1: Thực hiện
khởi tạo các giá trị.
ả
Đ
<Đ/K l p>ặ
B2: Tính trị của <ĐK lặp>.
B3: Nếu trị của <ĐK lặp> = TRUE, thì
thực hiện
S
B4: Thoát khỏi vòng lặp, và chuyển quyền điều khiển sang câu lệnh sau lệnh for.
for (; <Đ/K lặp>; )
; , <Đ/K l p>ặ , ả :
ứ ăng riêng
33
ệ
ặ
NMLT Câu l nh l p
ố ệ ứ
ấ ỳ
ể
là bi u th c C b t k có ch c n
ặ
: đơn ho c kh i l nh.
&
VC
ệ Câu l nh for
BB
void main() {
int i; for (i = 0; i < 10; i++)
printf(“i=%d\n”, i);
for (int j = 0; j < 10; j = j + 1)
printf(“i=%d\n”,j);
for (int k = 0; k < 10; k += 2) {
printf(“k=%d”, k); printf(“\n”);
}
44
ệ
ặ
NMLT Câu l nh l p
}
&
VC
ệ Câu l nh for
BB
Chương trình tính tổng các số nguyên từ 1 tới n
Ví dụ:
#include
#include
void main()
{
int i, n, sum;
printf(”Input a number:”);
scanf(“%d”, &n; sum = 0; for (i=1 ; i<=n ; i++) sum += i;
printf(”Sum from 1 to %d is %d“ , n , sum);
55
getch(); }
&
VC
ộ ố ư
ệ
Câu l nh for M t s l u ý
BB
Câu lệnh for là một câu lệnh đơn và có thể lồng
nhau.
66
ệ
ặ
NMLT Câu l nh l p
&
VC
ộ ố ư
ệ
Câu l nh for M t s l u ý
BB
Trong câu lệnh for, có thể sẽ không có phần
int i; for (i = 0; i < 10; i++)
ả
printf(“i=%d\n”<< i;
int i = 0; for (; i < 10; i++)
Đ
<Đ/K l p>ặ
printf(“i=\n”,i);
S
77
ệ
ặ
NMLT Câu l nh l p
&
VC
ộ ố ư
ệ
Câu l nh for M t s l u ý
BB
Trong câu lệnh for, có thể sẽ không có phần
int i; for (i = 0; i < 10; i++)
ả
printf(“i=%d\n”,i);
for (i = 0; i < 10; ) {
Đ
<Đ/K l p>ặ
printf(“i=%d\n”,i);
i++;
S
88
ệ
ặ
NMLT Câu l nh l p
}
&
VC
ộ ố ư
ệ
Câu l nh for M t s l u ý
BB
Trong câu lệnh for, có thể sẽ không có phần
<Đ/K lặp>
int i; for (i = 0; i < 10; i++)
printf(“i=%d\n”,i);
for (i = 0; ; i++)
printf(“i=%d\n”,i);
for (i = 0; ; i++) {
if (i >= 10) break;
99
ệ
ặ
NMLT Câu l nh l p
printf(“i=%d\n”,i);
}
&
VC
ộ ố ư
ệ
Câu l nh for M t s l u ý
BB
Lệnh break làm kết thúc câu lệnh. Lệnh continue bỏ qua lần lặp hiện tại.
for (i = 0; i < 10; i++) {
if (i % 2 == 0)
break;
printf(“i=%d\n”,i);
}
for (i = 0; i < 10; i++) {
if (i % 2 == 0) continue; printf(“i=%d\n”,i);
1010
ệ
ặ
NMLT Câu l nh l p
}
&
VC
ộ ố ư
ệ
Câu l nh for M t s l u ý
BB
Không được thêm ; ngay sau lệnh lệnh for.
=> Tương đương câu lệnh rỗng. for (i = 0; i < 10; i++); {
printf(“i=%d\n”,i);
}
for (i = 0; i < 10; i++) { }; {
printf(“i=%d\n”,i);
1111
ệ
ặ
NMLT Câu l nh l p
}
&
VC
ộ ố ư
ệ
Câu l nh for M t s l u ý
BB
Các thành phần
Nếu có nhiều thành phần trong mỗi phần thì
được cách nhau bằng dấu ,
for (int i = 1, j = 2; i + j < 10; i++, j += 2)
1212
ệ
ặ
NMLT Câu l nh l p
printf(“i=%d\t j=%d\n”<< i < <Đ/K l p>ặ ể ứ ể ệ ế ấ ỳ
Bi u th c C b t k ,
thường là bi u th c
ứ
ả
quan h cho k t qu
0 (sai) và != 0 (đúng) ứ 1313 ệ ặ NMLT Câu l nh l p đơn ho cặ
Câu l nh ệ
ẹ
ệ
Câu l nh ph c (k p
gi a ữ { và }) int i = 0;
while (i < 10)
{ } for (int i = 0; i < 10; i++)
printf(“i=%d\n”,i); int i = 0;
for (; i < 10; )
{ 1414 ệ ặ NMLT Câu l nh l p } ố ổ ừ ớ ế ươ ụ
Ví d 2: Vi ng trình tính t ng các s nguyên t 1 t i n. t ch
#include sum += i;
i++; 1515 }
printf(“\n Tong =%d”,sum);
getch(); } Câu lệnh while là một câu lệnh đơn và có thể lồng nhau. 1616 ệ ặ NMLT Câu l nh l p Câu lệnh while có thể không thực hiện lần nào do điều kiện lặp ngay từ lần đầu đã không thỏa. void main()
{ int n = 1;
while (n > 10)
{ printf(“%d\n”,n);
n--; }
… 1717 ệ ặ NMLT Câu l nh l p } Không được thêm ; ngay sau lệnh lệnh while. int n = 0;
while (n < 10);
{ printf(“%d\n”,n);
n++; } while (n < 10)
{
};
{ printf(“%d\n”,n);
n++; 1818 ệ ặ NMLT Câu l nh l p } Câu lệnh while có thể bị lặp vô tận (loop) void main()
{ int n = 1;
while (n < 10)
{ printf(“ %d”, n);
n--; } n = 1;
while (n < 10) printf(“ %d”,n); 1919 ệ ặ NMLT Câu l nh l p } <Đ/K l p>ặ ứ đơn ho cặ
Câu l nh ệ
ẹ
ệ
Câu l nh ph c (k p
gi a ữ { và }) ể ứ ể ệ ế 2020 ệ ặ NMLT Câu l nh l p ấ ỳ
Bi u th c C b t k ,
thường là bi u th c
ứ
ả
quan h cho k t qu
0 (sai) và != 0 (đúng) int i = 0;
do
{ }
while (i < 10); int i = 0;
printf(“i=%d\n”,i);
i++;
for (; i < 10; )
{ 2121 ệ ặ NMLT Câu l nh l p } ố ổ ừ ớ ế ng trình tính t ng các s nguyên t 1 t i n. clrscr();
printf(”Input a positive number: “);
scanf(“%d”,&n);
sum=0;
i=1;
do
{ 2222 sum+=i;
i++;
} while(i<=n);
printf( ”Sum from 1 to %d =%d”, n,sum;
getch(); } Câu lệnh do… while là một câu lệnh đơn và có thể lồng nhau. int a = 1, b;
do
{ b = 1;
do
{ printf(“%d\n”, a + b);
b = b + 2; }
while (b < 20);
a++; 2323 ệ ặ NMLT Câu l nh l p }
while (a < 20); Câu lệnh do… while sẽ được thực hiện ít nhất 1 lần do điều kiện lặp được kiểm tra ở cuối. void main()
{ int n;
do
{ printf(“Nhap n: ”);
scanf(“%d”,&n); }
while (n < 1 || n > 100); 2424 ệ ặ NMLT Câu l nh l p } Câu lệnh do… while có thể bị lặp vô tận (loop) … int n = 1;
do
{ printf(“ %d”, n);
n--; }
while (n < 10); n = 1;
do printf(“ %d”,n); while (n < 10); 2525 ệ ặ NMLT Câu l nh l p … Đều có khả năng lặp lại nhiều hành động. int n = 10;
for (int i = 1; i <= n; i++)
printf(“%d\n”,i); int i = 1;
while (i <= n)
{ printf(“%d\n”,i); i++; } int i = 1;
do { printf(“%d\n”,i); i++; 2626 ệ ặ NMLT Câu l nh l p } while (i < n); Số lần lặp xác định ngay trong câu lệnh for int n = 10;
for (int i = 1; i <= n; i++) …; int i = 1;
while (i <= n)
{ …; } int i = 1;
do { …; 2727 ệ ặ NMLT Câu l nh l p } while (i > n); while có thể không thực hiện lần nào.
do… while sẽ được thực hiện ít nhất 1 lần. int n = 100;
while (n < 10)
{ …; }
…
do
{ printf(“Nhap n: ”);
scanf(“%d”,n); 2828 ệ ặ NMLT Câu l nh l p }
while (n > 10); Ví dụ: Đọc vào một mật khẩu người dùng tối đa attempts lần for (i=0; i printf( "Input a password: “);
scanf(“%d”,&passWord);
if (check(passWord)) // kiem tra mat khau đúng hay sai break; // thoát khỏi vòng lap printf("Password is wrong!“); } 2929 Ví dụ 2: Viết chương trình tính tổng các số nguyên được nhập từ bàn phím,
chương trình kết thúc khi nhập số âm. Viết lại nhưng không sử dụng lệnh
break. #include int num,sum=0;
clrscr();
while(1)
{ cout <<"Input a number (negative for exit): ";
cin >> num;
if (num < 0) break; sum += num; }
cout<<"\nSum all inputs is " << sum;
getch(); } 3030 1. Hãy chuyển đổi các câu lệnh for thành câu lệnh while: for ( int i = 0; i < 100; i++ ) printf(“%d\t”, i) ; for ( int i = 2000; i > 0; i /= 2 )
printf(“%d\t”, i) ; for ( int i = 0; i < 100; i++ )
{ for ( int j = 0; j < 200; j++ )
printf(“%d\t”, i*j) ;
printf(“\n”) ; } 3131 2. Hãy chuyển đổi các câu lệnh while thành câu lệnh for: int count = 0;
while ( count < 100 )
{ int count = 0;
while ( count < 100 )
{ count++;
printf(“%d”,count); printf(“%d”,count);
count++; } } int x =10, i = x, y = 0, j = 0;
while ( i > j )
{ y += i; i––; } 3232 3. Hãy chuyển đổi các câu lệnh while thành câu lệnh do…while: int x =10, i = x, y = 0, j = 0;
while ( i > j )
{ y += i; i––; } 3333 4. Xét các đoạn lệnh sau. Hãy cho biết kết quả xuất ra màn hình của các biến x, y. Giải thích.
…
int x = 0, y = 1;
for ( int i = 0; i < 5; i++ )
{ for ( int j = 0; j < 5; j++ )
if ( ( i + j ) % 2 == 0 )
x++; y += x; }
… 3434 5. Xét các đoạn lệnh sau. Hãy cho biết kết quả xuất ra màn hình của các biến x, y. Giải thích.
…
int x = 0, y = 1;
for ( int i = 0; i < 5; i++ ) for ( int j = 0; j < 5; j++ )
{ if ( ( i + j ) % 2 == 0 )
x++; y += x; } … 3535 6. Xét các đoạn lệnh sau. Hãy cho biết kết quả xuất ra màn hình của các biến x, y. Giải thích.
int x = 0, y = 1;
for ( int i = 0; i < 5; i++ )
{ for ( int j = 0; j < 5; j++ ) if ( (x + y ) % 2 == 0 ) x++; y += x; }
… 3636 7. Xét các đoạn lệnh sau. Hãy cho biết kết quả xuất ra màn hình của các biến x, y. Giải thích.
…
int x = 0, y = 1;
for ( int i = 0; i < 5; i++ ) for ( int j = 0; j < 5; j++ )
{ if ( ( i + j ) % 2 == 0 )
x++; else y += x; } … 3737 8. Xét các đoạn lệnh sau. Hãy cho biết kết quả xuất ra màn hình của các biến x, y. Giải thích.
…
int i = 0, x = 0;
do{ if ( x %5 == 0 )
{ x++;
printf(“%d\t”, x); }
i++; } while ( i < 20 );
… 3838 9. Hãy cho biết kết quả xuất ra màn hình của các biến x, y. Giải thích.
…
int i = 0, x = 0;
while ( i < 20 )
{ if ( x % 5 == 0 )
{ x += i;
printf(“%d”, x); }
i++; }
… 3939 10. Hãy cho biết kết quả xuất ra màn hình của các biến x, y. Giải thích.
…
int i, x = 0;
for ( i = 1; i < 10; i*=2 )
{ x++;
printf(“%d”,x); }
… 4040 11. Hãy cho biết kết quả xuất ra màn hình của các biến x, y. Giải thích.
…
int i, x = 0;
for (i = 1; i < 10; i++)
{ if ( i % 2 == 1 )
x += i; else x–– ;
printf(“%d”,x); }
… 4141 12. Hãy cho biết kết quả xuất ra màn hình của các biến x, y. Giải thích. …
int i, j, k, x = 0;
for ( i = 1; i < 5; i++ )
for ( j = 0; j < i; j++ )
{ k = (i + j – 1);
if ( k % 2 == 0 )
x += k; else if ( k % 3 ==0 ) x += k – 2; printf(“%d\t”, x); }
… 4242 12. Hãy cho biết kết quả xuất ra màn hình của các biến x, y. Giải thích. …
int i, j, k, x = 0;
for ( i = 1; i < 5; i++ )
for ( j = 0; j < i; j++ )
{ switch ( i + j – 1 )
case –1:
{
case 0: x += 1; break;
case 1:
case 2:
case 3: x += 2; break;
default: x += 3; }
printf(“%d\t”,x); }… 4343 3. Nhập một số nguyên dương n (n > 0). Hãy cho biết:
a. Có phải là số đối xứng? Ví dụ: 121, 12321, …
b. Có phải là số chính phương? Ví dụ: 4, 9, 16, …
c. Có phải là số nguyên tố? Ví dụ: 2, 3, 5, 7, …
d. Chữ số lớn nhất và nhỏ nhất?
e. Các chữ số có tăng dần hay giảm dần không? 4444 ệ ặ NMLT Câu l nh l p 4. Nhập một số nguyên dương n. Tính: a. S = 1 + 2 + … + n
b. S = 12 + 22 + … + n2
c. S = 1 + 1/2 + … + 1/n
d. S = 1*2*…*n = n!
e. S = 1! + 2! + … + n! 4. Nhập 3 số nguyên a, b và n với a, b < n. Tính tổng
các số nguyên dương nhỏ hơn n chia hết cho a
nhưng không chia hết cho b. 5. Tính tổng các số nguyên tố nhỏ hơn n (0 < n < 50) 4545 ệ ặ NMLT Câu l nh l p 7. Nhập một số nguyên dương n. Xuất ra số ngược lại. Ví dụ: Nhập 1706 Xuất 6071. 8. Tìm và in lên màn hình tất cả các số nguyên trong
phạm vi từ 10 đến 99 sao cho tích của 2 chữ số
bằng 2 lần tổng của 2 chữ số đó. 9. Tìm ước số chung lớn nhất của 2 số nguyên dương a và b nhập từ bàn phím. 10. Nhập n. In n số đầu tiên trong dãy Fibonacy. a. a0 = a1 = 1
b. an = an – 1 + an – 2 4646 ệ ặ NMLT Câu l nh l p void main()
{ int n, sogoc, sodao, donvi;
cout<<“Nhap n: ”;
cin>>n; sogoc = n; sodao = 0;
while (sogoc > 0)
{ donvi = sogoc % 10;
sodao = sodao*10 + donvi;
sogoc = sogoc / 10; }
if (sodao == n) cout<<“DX”;
else cout<<“Khong doi xung”; 4747 ệ ặ NMLT Câu l nh l p } #include void main()
{ int n, n_can_nguyen; cout<<“Nhap n: ”;
cin>>n; n_can_nguyen = int(sqrt(n));
if (n_can_nguyen*n_can_nguyen == n) cout< else cout< 4848 ệ ặ NMLT Câu l nh l p } void main()
{ int n, i, souoc; cout<<“Nhap n: ”;
cin>>n; souoc = 0;
for (i = 1; i <= n; i++) if (n % i == 0) souoc++; if (souoc == 2) cout< else 4949 ệ ặ NMLT Câu l nh l p cout< } void main()
{ int n, min, max, donvi;
…
min = n % 10;
max = min;
n = n / 10; while (n>0)
{ 5050 ệ donvi = n % 10;
n = n / 10;
if (donvi < min) min = donvi;
if (donvi > max) max = donvi; }
cout<<“So NN = < void main()
{ int n, sotruoc, sosau;
// Nhập n
…
sotruoc = n % 10;
do
{ sosau = sotruoc;
n = n / 10;
sotruoc = n % 10; } while (n != 0 && sotruoc < sosau); if (sotruoc < sosau) cout<<“Cac chu so tang dan”; else 5151 ệ ặ NMLT Câu l nh l p cout<<“Cac chu so ko tang dan”; } void main()
{ int n, i, s; cout<<“Nhap n: ”;
cin>>n; s = 0;
for (i = 1; i <= n; i++) s = s + i; cout<<“1 + 2 + … +”< 5252 ệ ặ NMLT Câu l nh l p } void main()
{ int n, i, s; cout<<“Nhap n: ”;
cin>>n; s = 0;
for (i = 1; i <= n; i++)
s = s + i*i; cout<<“1^2 + 2^2 + … + “< 5353 ệ ặ NMLT Câu l nh l p } void main()
{ int n, i;
float s; cout<<“Nhap n: ”;
cin>>n; s = 0;
for (i = 1; i <= n; i++) s = s + 1.0/i; cout<<“1 + 1/2 + … + 1/”< 5454 ệ ặ NMLT Câu l nh l p } void main()
{ int n, i, s; cout<<“Nhap n: ”;
cin>>n; s = 1;
for (i = 2; i <= n; i++) s = s * i; cout< 5555 ệ ặ NMLT Câu l nh l p } void main()
{ int n, i, j, igt, s;
cout<<“Nhap n: ”;
cin>>n; s = 0;
for (i = 1; i <= n; i++)
{ igt = 1;
for (j = 2; j <= i; j++) igt = igt * j; s = s + igt; }
cout<<“1! + 2! + … + “< 5656 ệ ặ NMLT Câu l nh l p } void main()
{ int a, b, n, i, s;
do
{ cout<<“Nhap a, b, n: ”;
cin>>a>>b>>n; } while (a >= n || b >= n); s = 0;
for (i = 1; i <= n – 1; i++) if (i % a == 0 && i % b != 0) s = s + i; cout<<“Tong cac thoa yeu cau la ”<< s; 5757 ệ ặ NMLT Câu l nh l p } void main()
{ int n, i, j, souoc, s;
do
{ cout<<“Nhap n: ”;
cin>>n; } while (n <= 0 || n >= 50);
s = 0;
for (i = 2; i <= n – 1; i++)
{ // Đếm số ước của i …
if (souoc == 2) // Là số nguyên tố s = s + i; 5858 ệ ặ NMLT Câu l nh l p }
cout<<“Tong cac so nt = “<< s; } void main()
{ int n, donvi; cout<<“Nhap n: ”;
cin>>n; cout<<“So dao la ”;
while (n > 0)
{ donvi = n % 10;
n = n / 10;
cout< } 5959 ệ ặ NMLT Câu l nh l p } void main()
{ int n, i, donvi, chuc; cout<<“Cac so thoa yeu cau la: ”;
for (i = 10; i <= 99; i++)
{ donvi = i % 10;
chuc = i / 10;
if (chuc*donvi == 2*(chuc + donvi)) cout<
} 6060 ệ ặ NMLT Câu l nh l p } Ví dụ: a = 12, b = 8
Cách 1: Cho 1 biến i chạy từ 8 trở về 1, nếu cả a và b
đều chia hết cho i thì dừng và i chính là uscln. 8, 7, 6, 5, 4 => USCLN của 12 và 8 là 4. Cách 2: USCLN của a & b (a khác b), ký hiệu (a, b) là: (12, 8) = (4, 8) = (4, 4) = 4 6161 ệ ặ NMLT Câu l nh l p • (a – b, b) nếu a > b
• (a, b – a) nếu b > a void main()
{ int a, b, uscln; cout<<“Nhap a va b: ”;
cin>>a>>b; if (a < b) uscln = a;
else uscln = b; while (a % uscln != 0 || b % uscln != 0) uscln--;&
VC
ệ
Câu l nh while
BB
Đ
S
while (<Đ/K lặp>)
&
VC
ệ
Câu l nh while
BB
printf(“i=%d\n”,i);
i++;
printf(“i=%d\n”,i);
i++;
&
VC
ệ
Câu l nh while
BB
&
VC
ộ ố ư
ệ
Câu l nh while M t s l u ý
BB
&
VC
ộ ố ư
ệ
Câu l nh while M t s l u ý
BB
&
VC
ộ ố ư
ệ
Câu l nh While M t s l u ý
BB
&
VC
ộ ố ư
ệ
Câu l nh while M t s l u ý
BB
&
VC
ệ
Câu l nh do… while
BB
Đ
S
do
while (<Đ/K lặp>);
&
VC
ệ
Câu l nh do… while
BB
printf(“i=%d\n”,i);
i++;
printf(“i=%d\n”,i);
i++;
&
VC
Câu l nh do… while
ệ
ươ
BB
ụ
t ch
Ví d 2: Vi
#include
&
VC
ộ ố ư
ệ
Câu l nh do… while M t s l u ý
BB
&
VC
ộ ố ư
ệ
Câu l nh do… while M t s l u ý
BB
&
VC
ộ ố ư
ệ
Câu l nh do… while M t s l u ý
BB
&
VC
for, while, do… while
BB
&
VC
for, while, do… while
BB
&
VC
while & do… while
BB
&
VC
ụ ộ ố ệ
ặ
ệ
BB
Ví d M t s l nh đ c bi
t
&
VC
ụ ộ ố ệ
ặ
ệ
BB
Ví d M t s l nh đ c bi
t
&
VC
ỏ
ậ
BB
Câu h i và bài t p
&
VC
ỏ
ậ
BB
Câu h i và bài t p
&
VC
ỏ
ậ
BB
Câu h i và bài t p
&
VC
ỏ
ậ
BB
Câu h i và bài t p
&
VC
ỏ
ậ
BB
Câu h i và bài t p
&
VC
ỏ
ậ
BB
Câu h i và bài t p
&
VC
ỏ
ậ
BB
Câu h i và bài t p
&
VC
ỏ
ậ
BB
Câu h i và bài t p
&
VC
ỏ
ậ
BB
Câu h i và bài t p
&
VC
ỏ
ậ
BB
Câu h i và bài t p
&
VC
ỏ
ậ
BB
Câu h i và bài t p
&
VC
ỏ
ậ
BB
Câu h i và bài t p
&
VC
ỏ
ậ
BB
Câu h i và bài t p
&
VC
ự
ậ
Bài t p th c hành
BB
&
VC
ự
ậ
Bài t p th c hành
BB
&
VC
ự
ậ
Bài t p th c hành
BB
&
VC
ậ
Bài t p 3a
BB
&
VC
ậ
Bài t p 3b
BB
&
VC
ậ
Bài t p 3c
BB
&
VC
ậ
Bài t p 3d
BB
&
VC
ậ
Bài t p 3e
BB
&
VC
ậ
Bài t p 4a
BB
&
VC
ậ
Bài t p 4b
BB
&
VC
ậ
Bài t p 4c
BB
&
VC
ậ
Bài t p 4d
BB
&
VC
ậ
Bài t p 4e
BB
&
VC
Bài t p 5ậ
BB
&
VC
Bài t p 6ậ
BB
&
VC
Bài t p 7ậ
BB
&
VC
Bài t p 8ậ
BB
&
VC
Bài t p 9ậ
BB
&
VC
Bài t p 9ậ
BB

