/*auto readmore*/ /*auto readmore*/ /* an hien script*/ // an hien password /*an hien ma chuong trinh cong tru */ /*Scrollbox thanh cuon*/ /***Nhung CODE***/ /* dòng xanh dòng trắng */ /* https://cdnjs.com/libraries/prism lay thu vien, can vao ten file ma goi 1. copy link vao vi du:prism-python.min.js 2. ten ngon nua la python */ /*=== New posts ===*/ /*header slider*/ /*=== bai viet lien quan===*/ /*===tabcode===*/

[Tự Học Lập Trình C - Qua Các Bài Tập] COM108_Nhập Môn Lập Trình - Bài 4 - WHILE DO-WHILE

MỤC TIÊU:
- Biết cách sử dụng vòng lặp while
- Biết cách sử dụng vòng lặp do while

LÝ THUYẾT:
while


Ví dụ:
/*
int ra màn hình 10 chữ Hello
*/
#include<stdio.h>
int main()
{
	int i;
	i = 0;
	while (i < 10) { //khi i < 10
		printf("\nHello %d", i); // xuất ra dòng chữ Hello
		i++;  // tăng i lên 1 đơn vị
	}
}

for 

Ví dụ:
/*
int ra màn hình 10 chữ Hello
*/
#include<stdio.h>
int main()
{
	int i;
	for (i = 0 ; i < 10 ; i++) { // tương tự như while, biến khởi tạo, điều kiện, bước nhảy nằm trên 1 dòng lệnh
		printf("\nHello %d", i);
	}
}


Cách chuyển đổi while sang for


do - while


Ví dụ:
#include<stdio.h>
int main()
{
	int a;
	a = 6;
 	do {
 		printf("\nHello %d", a);
 		a++;
	} while (a < 3); // điều kiện là a = 3, tuy nhiên chương trình vẫn in dữ liệu ra ngay cả a = 6
}

Khác nhau while và do while



break - continue  

Break: Câu lệnh break được sử dụng để thoát/nhảy ra khỏi vòng lặp (nếu có nhiều vòng lặp lồng nhau thì nó chỉ thoát ra vòng lặp gần nó nhất)

Ví dụ:
/*
int ra màn hình 10 chữ Hello
tuy nhiên gặp break nó phải thoát ra khỏi vòng lặp
Kết quả:
Hello 0
Hello 1
Hello 2
Hello 3
*/
#include<stdio.h>
int main()
{
	int i;
	for (i = 0 ; i < 10 ; i++) { 
		if (i == 4) // nếu i = 4 thì
			break; // thoát ra khỏi vòng lặp gần nó nhất
		printf("\nHello %d", i);
	}
}


Continue: Câu lệnh continue lệnh ngắt/bỏ qua một lần lặp và không thực hiện khối lệnh phía sau nó (trong vòng lặp), nếu một điều kiện cụ thể xảy ra và tiếp tục với lần lặp tiếp theo trong vòng lặp.

Ví dụ:
/*
int ra màn hình 10 chữ Hello
tuy nhiên gặp continue nó bỏ qua không thực hiện lệnh sau đó mà quay lại vòng lặp
Kết quả:
Hello 0
Hello 1
Hello 2
Hello 3
Hello 5
Hello 6
Hello 7
Hello 8
Hello 9
*/
#include<stdio.h>
int main()
{
	int i;
	for (i = 0 ; i < 10 ; i++) { 
		if (i == 4) // nếu i = 4 thì
			continue; // không in dòng Hello mà quay lại vòng lặp
		printf("\nHello %d", i);
	}
}


goto

goto: Câu lệnh goto cung cấp một bước nhảy vô điều kiện đến một câu lệnh có nhãn trong cùng một hàm

Noted: goto có nhiều hạn chế nên nó rất ít được sử dụng (chỉ dùng trong 1 vài trường hợp đặc biệt) trong nhiều ngôn ngữ.



YÊU CẦU:
Bài 1:  Tính trung bình tổng các số tự nhiên chia hết cho 2
Input: nhập từ bàn phím 2 giá trị min, max
Output: Trung bình tổng của các số tự nhiên chia hết cho 2 từ min tới max

 
Bài 2: Xác định số nhập vào có phải là số nguyên tố hay không
Input: Nhập vào từ bàn phím số x
Output: Kết luận x có phải là số nguyên tố hay không
Biết rằng: Số nguyên tố là số chỉ chia hết cho 1 và chính nó.

Bài 3: Xây dựng chương trình xây dựng số chính phương
Input: Nhập vào từ bàn phím số x
Output: Kết luận x có phải là số chính phƣơng hay không?
Biết rằng: Số chính phƣơng là một số mà giá trị của nó là bình phƣơng của một số tự nhiên. (ví dụ: 9 = 3 x 3; 16 = 4 x 4; 25 = 5 x 5; 1,000,000 = 1,000 x 1,000)

Bài 4: Xây dựng menu cho 3 bài tập trên
Yêu cầu:
- Nếu người dùng nhập từ bàn phím số 1: -> Chạy chương trình bài 1
- Nếu người dùng nhập từ bàn phím số 2: -> Chạy chƣơng trình bài 2
- Nếu người dùng nhập từ bàn phím số 3: -> Chạy chƣơng trình bài 3
- Nếu người dùng nhập từ bàn phím số 4: -> Thoát khỏi chương trình
- Nếu người dùng nhập từ bàn phím số khác: Hiển thị menu như cũ

Gợi ý: Sử dụng vòng lặp do while kết hợp với cách tạo menu thông thường để làm bài tập số 4


THỰC HIỆN:

Bài 1:  Tính trung bình tổng các số tự nhiên chia hết cho 2
Input: nhập từ bàn phím 2 giá trị min, max
Output: Trung bình tổng của các số tự nhiên chia hết cho 2 từ min tới max

code:
/*
Bài 1:  Tính trung bình tổng các số tự nhiên chia hết cho 2
Input: nhập từ bàn phím 2 giá trị min, max
Output: Trung bình tổng của các số tự nhiên chia hết cho 2 từ min tới max
*/
#include<stdio.h>
int main()
{
    int min, max;
    int tong = 0,  trungBinhTong = 0;
    int bienDem = 0;

    printf("Nhap vao so min: ");
    scanf("%d", &min);
    printf("Nhap vao so max: ");
    scanf("%d", &max);

	int i = min;

    while (i <= max)
    {
        if (i % 2 == 0) // chia lấy dư
        {
            tong = tong + i; // tong +=i
            bienDem ++; // tăng biến đếm lên 1
        }
        i ++; // tăng i lên 1, đây là điều kiện dừng nếu không tăng thì chương trình lặp vô hạn
    }
    trungBinhTong = tong/bienDem;
    printf("\n============================\n");
    printf("Trung binh tong so chia het cho 2 la: %d", trungBinhTong);
}

 

Bài 2: Xác định số nhập vào có phải là số nguyên tố hay không
Input: Nhập vào từ bàn phím số x
Output: Kết luận x có phải là số nguyên tố hay không
Biết rằng: Số nguyên tố là số chỉ chia hết cho 1 và chính nó.

code:
/*
Kiểm tra nguyên tố
Input: Nhập vào từ bàn phím số x
Output: Kết luận x có phải là số nguyên tố hay không
Biết rằng: Số nguyên tố là số chỉ chia hết cho 1 và chính nó (phải đảm bảo 2 điều kiện).


*/
#include<stdio.h>
int main(){
    int x;
    int bienDem = 0;
    // bool kiemTra = true; // giả thiết số nhập vào là số nguyên tố
    printf("Nhap vao so can kiem tra X: ");
    scanf("%d", &x);

    for (int i = 2; i < x; i++){
        if (x % i == 0)
        {
            bienDem ++; // mục đích là đánh dấu số chia hết i 
            // kiemTra = false;
            break; // nếu chia hết cho bất kỳ số nào trong khoảng từ i đến x là có thể khẳng định KHÔNG phải là số nguyên tố
         }
    }
    if (bienDem == 0)
   // if (kiemTra == true)
    {
        printf("%d la so NGUYEN TO!", x);
    } 
    else {
        printf("%d KHONG PHAI so nguyen to!", x);
    }

}
 

Bài 3: Xây dựng chương trình xây dựng số chính phương
Input: Nhập vào từ bàn phím số x
Output: Kết luận x có phải là số chính phương hay không?
Biết rằng: Số chính phương là một số mà giá trị của nó là bình phương của một số tự nhiên. (ví dụ: 9 = 3 x 3; 16 = 4 x 4; 25 = 5 x 5; 1,000,000 = 1,000 x 1,000)

code:
/*
Kiểm tra số chính phương
Input: Nhập vào từ bàn phím số x
Output: Kết luận x có phải là số chính phƣơng hay không?
Biết rằng: Số chính phƣơng là một số mà giá trị của nó là bình phƣơng của một số
tự nhiên. (ví dụ: 9 = 3 x 3; 16 = 4 x 4; 25 = 5 x 5; 1,000,000 = 1,000 x 1,000)
*/

#include<stdio.h>
int main(){
    int x;
    
    printf("Nhap vao so can kiem tra X: ");
    scanf("%d", &x);

    int i;
    int bienDem = 0;
    // char kiemTra = 'k'; // đánh dấu biến kiểm tra 'k' 
    for ( i = 1; i < x; i++)
    {
        if (i * i == x)
        {
            bienDem = 1;
            // kiemTra = 'c'; // đánh dấu = 'c' là số chính phương
            break;
        }
    }
    if (bienDem == 1)
    // if (kiemTra == 'c')
    {
        printf("%d la so CHINH PHUONG!", x);
    }
    else
    {
        printf("%d KHONG PHAI so chinh phuong!", x);
    }   
}

Tham khảo thêm kiểm tra số chính phương KHÔNG DÙNG VÒNG LẶP:
#include<stdio.h>
#include<math.h>

int main(){
    int n;
    int kiemTra = 0;
    printf("\nNhap so can kiem tra: ");scanf("%d", &n);
//    n = 9;
	int canBacHai = sqrt(n);
    
	if(canBacHai * canBacHai == n){
    	kiemTra = 1;
    }
       
    if(kiemTra == 1){
        printf("%d la SO CHINH PHUONG!\n", n);
    }else{
        printf("%d KHONG PHAI so chinh phuong!\n", n);
    }
}
 

Bài 4: Xây dựng menu cho 3 bài tập trên
Yêu cầu:
- Nếu người dùng nhập từ bàn phím số 1: -> Chạy chương trình bài 1
- Nếu người dùng nhập từ bàn phím số 2: -> Chạy chƣơng trình bài 2
- Nếu người dùng nhập từ bàn phím số 3: -> Chạy chƣơng trình bài 3
- Nếu người dùng nhập từ bàn phím số 4: -> Thoát khỏi chương trình
- Nếu người dùng nhập từ bàn phím số khác: Hiển thị menu như cũ

Gợi ý: Sử dụng vòng lặp do while kết hợp với cách tạo menu thông thường để làm bài tập số 4

code:
/*Xây dựng menu cho 3 bài trên
Yêu cầu:
-Nếu ngƣời dùng nhập từ bàn phím số 1: -> Chạy chƣơng trình bài 1
-Nếu ngƣời dùng nhập từ bàn phím số 2: -> Chạy chƣơng trình bài 2
-Nếu ngƣời dùng nhập từ bàn phím số 3: -> Chạy chƣơng trình bài 3
-Nếu ngƣời dùng nhập từ bàn phím số 4: -> Thoát khỏi chƣơng trình
-Nếu ngƣời dùng nhập từ bàn phím số khác: Hiển thị menu nhƣ cũ
*/
#include<stdio.h>

// trung bình tổng chẳn
int bai_01()
{
    int min, max;
    int tong = 0,  trungBinhTong = 0;
    int bienDem = 0;

    printf("Nhap vao so min: ");
    scanf("%d", &min);
    printf("Nhap vao so max: ");
    scanf("%d", &max);

	int i = min;

    while (i <= max)
    {
        if (i % 2 == 0) // chia lấy dư
        {
            tong = tong + i; // tong +=i
            bienDem ++; // tăng biến đếm lên 1
        }
        i ++; // tăng i lên 1, đây là điều kiện dừng nếu không tăng thì chương trình lặp vô hạn
    }
    trungBinhTong = tong/bienDem;
    printf("\n============================\n");
    printf("Trung binh tong so chia het cho 2 la: %d", trungBinhTong);
}

// kiểm tra nguyên tố
int bai_02(){
    int x;
    int bienDem = 0;
    printf("Nhap vao so can kiem tra X: ");
    scanf("%d", &x);

    for (int i = 2; i < x; i++){
        if (x % i == 0)
        {
            bienDem ++; // mục đích là đánh dấu số chia hết i
            break;
        }
    }
    if (bienDem == 0)
    {
        printf("%d la so NGUYEN TO!", x);
    } 
    else {
        printf("%d KHONG PHAI so nguyen to!", x);
    }

}

// kiểm tra số chính phương
int bai_03(){
    int x;
    
    printf("Nhap vao so can kiem tra X: ");
    scanf("%d", &x);

    int i;
    int bienDem = 0;
    for ( i = 1; i < x; i++)
    {
        if (i * i == x)
        {
            bienDem = 1;
            break;
        }
    }
    if (bienDem == 1)
    {
        printf("%d la so CHINH PHUONG!", x);
    }
    else
    {
        printf("%d KHONG PHAI so chinh phuong!", x);
    }   
}

// hàm chính
int main()
{
    int luaChon;
    do
    {
        printf("\n=========== MENU LUA CHON =========\n");
        printf("1. Trung Binh Tong\n");
        printf("2. Kiem Tra Nguyen To\n");
        printf("3. Kiem Tra Chinh Phuong\n");
        printf("0. THOAT CHUONG TRINH!\n");
        printf("\n");
        printf("Lua chon cua ban la: ");
        scanf("%d", &luaChon);
        printf("==================================\n");
        switch (luaChon)
        {
        case 1:
            bai_01(); // gọi hàm bai_1 phía trên hàm main()
            break;
        case 2:
            bai_02();
            break;
        case 3:
            bai_03();
            break;
        case 0: 
            break;
        default:
            printf("Lua chon KHONG DUNG!\n");
            break;
        }
    } while (luaChon != 0);
    
}   
    

Xong!

No comments:

Post a Comment

/*header slide*/