Vấn đề 1 - Cấu trúc điều khiển

Vấn đề 1 - Cấu trúc điều khiển

Một số bài tập lập trình C căn bản

Bài toán số 1.1: Tính tổng của các số tự nhiên từ 1 đến N.

S = 1 + 2 + … + N

Ví dụ : N = 5, S = 1 + 2 + 3 + 4 + 5 = 15

Yêu cầu: Input: N, là số tự nhiên bất kỳ.

Output: S, là tổng của các số từ 1 đến N

Hướng dẫn:

Bài toán được thực hiện qua 3 bước cụ thể như sau:

          Thông báo nhập liệu, và nhập dữ liệu vào cho N

          Tiến hành tính tổng S:

o       Khởi gán giá trị ban đầu cho tổng S

o       Tiến hành tính tổng, cộng dồn với các giá trị của i vào S (với i được lặp từ 1 cho đến N)

          Xuất kết quả của tổng S ra màn hình.

Giải quyết bài toán với ngôn ngữ C

          Khai báo các thư viện sử dụng

          Định nghĩa hàm main( ) là hàm chính của chương trình có mục tiêu là giải quyết bài toán với 3 bước trên.

Chương trình:

#include <stdio.h> // Khai bao thu vien nhap xuat chuan

#include <conio.h> // Khai bao thu vien cho ham getch( )

void main( ) // Dinh nghia ham main ( )

{

int N; // Khai bao bien su dung

long S = 0;

 

printf( "Nhap gia tri N:" ); // Thong bao nhap lieu

scanf( "%d", &N ); // Nhap gtri N, (voi &N la lay d/c bien N)

 

S = 0; // Khoi gan gia tri ban dau cho S

for ( int i = 1; i <= N; i++ ) // Lap voi moi i co gia tri tu 1 den N

S = S + i; // Tinh tong cong don i vao S

 

printf( "Tong tinh duoc la: %d", S ); // Xuat ket qua tong S ra man hinh

 

getch( ); //Lenh cho nhan phim ENTER,

} // ==> dung chuong trinh de xem ket qua

 

Các phiên bản khác nhau của bài toán là:

- Tính tổng (với giả sử N là số lẻ)

- Tính tổng các số tự nhiên lẻ nhỏ hơn hoặc bằng N.

- Tính tổng các số tự nhiên chia hết cho 5 như 5, 10, 15, 20, 25, 30….N

 

Hướng dẫn:

- Điều chỉnh bước lặp cho phù hợp.

- Trước khi cộng dồn giá trị của i vào tổng S, phải kiểm tra điều kiện giá trị của i có thỏa mãn điều kiện bài toán hay không.

Cụ thể là:

* for ( int i = 1; i <= N; i = i+2 ) // Lap voi moi i co gia tri tu 1 den N

S = S + i / (float)(i+1); // Tinh tong cong don i/(i+1) vao S

(Luu y, truong hop nay bien S phai duoc khai bao kieu du lieu la float)

 

* for ( int i = 1; i <= N; i++ ) // Lap voi moi i co gia tri tu 1 den N

if ( i % 2 == 1) // Kiem tra i co’ phai la so le hay khong

S = S + i; // Dung ==> Tinh tong cong don i vao S

 

Å for ( int i = 1; i <= N; i++ ) // Lap voi moi i co gia tri tu 1 den N

if ( i % 5 == 0) // Kiem tra i co’ phai la 5, 10, 15… hay khong

S = S + i; // Dung ==>Tinh tong cong don i vao S

Bài toán số 1.2: Kiểm tra số N có phải là số nguyên tố hay không.

Ví dụ: N = 19 Kết quả là: 19 la so nguyen to

Yêu cầu: Input: N, là số tự nhiên bất kỳ.

Output: Trả lời “N la so nguyen to” hoặc “N khong phai la so nguyen to” tùy theo N

Lưu ý: Số nguyên tố là số chỉ có thể chia hết cho 1 và chính nó ( N ).

Ngược lại, N là không phải là số nguyên ==> N chia hết cho một số trong khoảng từ 2 đến (N-1).

Hướng dẫn:

Bài toán được thực hiện qua 3 bước cụ thể như sau:

          Thông báo nhập liệu, và nhập dữ liệu vào cho N

          Tiến hành kiểm tra N có phải là số nguyên tố hay không:

o       Khởi gán giá trị ban đầu cho ktrSNT là đúng (ktrSNT = 1)

o       Tiến hành kiểm tra có chia hết cho số nào từ 2 cho đến N-1 hay không. Nếu có thì ktrSNT là sai (ktrSNT = 0)

          Xuất câu trả lời “N la so nguyen to” hoặc “N khong phai la so nguyen to” tùy theo giá trị của biến ktrSNT.

Giải quyết bài toán với ngôn ngữ C

          Khai báo các thư viện sử dụng

          Định nghĩa hàm main( ) là hàm chính của chương trình có mục tiêu là giải quyết bài toán với 3 bước trên.

Chương trình:

#include <stdio.h> // Khai bao thu vien nhap xuat chuan

#include <conio.h> // Khai bao thu vien cho ham getch( )

void main( ) // Dinh nghia ham main ( )

{

int N; // Khai bao bien su dung

int ktrSNT = 1;

 

printf( "Nhap gia tri N:" ); // Thong bao nhap lieu

scanf("%d", &N); // Nhap gtri N, (voi &N la lay d/c bien N)

 

ktrSNT = 1; // Khoi gan gia tri dung cho ktrSNT

for ( int i = 2; i <= N-1; i++ ) // Lap voi moi i co gia tri tu 2 den N-1

if ( N % i == 0 ) // Kiem tra xem N co’ chia het cho i hay khong

ktrSNT = 0; // Neu dung thi khong con la so nguyen to nua

 

if ( ktrSNT == 0 ) // Xuat cau tra loi cuoi cung

printf( "%d khong phai la so nguyen to.", N );

else

printf( "%d la so nguyen to.", N );

 

getch( ); //Lenh cho nhan phim ENTER,

}

 

Bài toán số 1.3: Tìm USCLN(a, b) va BSCNN(a, b)

Ví dụ: USCLN(18, 24) = 4 BSCNN(18, 24) = 72

Yêu cầu:

            Input: a, b là 2 số tự nhiên.

Output: USCLN và BSCNN của a và b

Một số lưu ý:

- Nếu i là ước số của a và b thì a và b đồng thời chia hết cho i

- Luôn luôn có tối thiểu một USCLN của a và b là 1.

- Nếu i là USCLN thì i là ước số nhỏ hơn cả a lẫn b và gần a, b nhất.

Như vậy, nếu sử dụng một vòng lặp để kiểm tra a,b có đồng thời chia hết cho i hay không thì i là USCLN khi:

+ i là USC (a, b đồng thời chia hết cho i) đầu tiên nếu i lặp từ a (hoặc b) quay về 1.

Hướng dẫn:

Bài toán được thực hiện qua 3 bước cụ thể như sau:

          Thông báo nhập liệu, và nhập dữ liệu vào cho a và b

          Tiến hành tính USCLN(a, b):

Kiểm tra nếu a, b đều chia hết cho i thì gọi lệnh break để dừng vòng lặp.

-          Xuất kết quả của USCLN(a, b) , BSCNN (a, b) ra màn hình.

Giải quyết bài toán với ngôn ngữ C

          Khai báo các thư viện sử dụng

          Định nghĩa hàm main( ) là hàm chính của chương trình có mục tiêu là giải quyết bài toán với 3 bước trên.

Chương trình:

#include <stdio.h> // Khai bao thu vien nhap xuat chuan

#include <conio.h> // Khai bao thu vien cho ham getch( )

void main( ) // Dinh nghia ham main ( )

{

int a, b; // Khai bao bien su dung

clrscr( ); // Lenh xoa man hinh, phai khai bao t.vien conio.h

printf("Nhap gia tri a, b:"); // Thong bao nhap lieu

scanf("%d%d", &a, &b); // Nhap gtri a, b, (voi &a, &b la lay d/c bien a,b)

 

for (int i = a; i >= 1; i--) // Lap voi moi i co gia tri tu a den 1

if (a%i == 0 && b%i == 0) // Kiem tra a, b co’ dong thoi chia het cho i khong

break; // break de thoat, luu giu lai gia tri cua i.

 

printf("USCLN(%d, %d) = %d\n", a, b, i); // Xuat ket qua USCLN(a, b)

printf("BSCNN(%d, %d) = %d\n", a, b, a*b/i); // Xuat ket qua USCLN(a, b)

 

getch( ); //Lenh cho nhan phim ENTER,

} // ==> dung chuong trinh de xem ket qua

 

Bài toán số 1.4: Nhập vào một số tự nhiên N. Hãy tính tổng các chữ số của nó.

                          Ví dụ: N = 1682 Tong cac chu so cua N la: 17 ( = 1 + 6 + 8 + 2 )

Yêu cầu:

       Input: N là số nguyên bất kỳ, N có khả năng là số lớn

       Output: S, la tổng các chữ số của N

Hướng dẫn:

- Gán tổng S với giá trị ban đầu là 0

- Sử dụng để lấy từng chữ số của số tự nhiên N bằng cách:

Lặp trong khi mà N còn > 0 thì

+ Tiến hành cắt chữ số cuối cùng của N đi bằng việc lấy N chia cho 10.

Lặp lại cho đến khi N = 0 thì dừng

Chương trình:

#include <stdio.h> // Khai bao thu vien nhap xuat chuan

#include <conio.h> // Khai bao thu vien cho ham getch( )

void main( ) // Dinh nghia ham main ( )

{

int N, S; // Khai bao bien su dung

printf( "Nhap so N:" ); // Thong bao nhap lieu

scanf( "%d ", &N ); // Nhap gtri cho N

 

int S = 0;

while ( N != 0 ) // Lap trong khi N con ≠ 0

{

k = N % 10; // Lay chu so hang don vi o cuoi cung

N = N / 10; // Cat chu so hang don vi da duoc lay ra

S = S + k; // Tinh tong cong don vao S

}

 

printf( "Tong cac chu so cua %d la : %d.\n", N, S); // Xuat ket qua

 

getch( ); //Lenh cho nhan phim ENTER,

}

Bài toán số 1.5: Cho 14/03/2003 là một ngày trong năm. Hãy xác định xem thử ngày này là này thứ bao nhiêu của năm đó.

Ví dụ: Ngày nhập vào 14/03/2003, Kết quả: Ngay thu 73 cua nam 2003

Yêu cầu :

       - Input: 3 số ngay, thang, nam

       - Output: So thu tu cua ngay

Hướng dẫn:

- Khởi gán stt là 0

- Với ví dụ trên, tính tổng cộng dồn số ngày của các tháng trước tháng 03 (cụ thể là tháng 01, tháng 02) vào stt. Sử dụng câu lệnh rẽ nhánh switch để biết số ngày của các tháng.

- Bổ sung thêm số ngày của tháng hiện tại (ngay 14) vào stt.

Giải quyết bài toán với ngôn ngữ C

- Khai báo các thư viện sử dụng

- Định nghĩa hàm main( ) là hàm chính của chương trình có mục tiêu là giải quyết bài toán với 3 bước trên:

+ Thông báo nhập liệu và nhập giá trị cho các biến ngay, thang, nam

+ Lặp cộng dồn số ngày của các tháng mà nhỏ hơn thang

- Bổ sung số ngày vào stt

+ Thông báo kết quả

 

Chương trình:

#include <stdio.h> // Khai bao thu vien nhap xuat chuan

#include <conio.h> // Khai bao thu vien cho ham getch( )

void main( ) // Dinh nghia ham main ( )

{

int ngay, thang, nam; // Khai bao bien su dung

printf("Nhap ngay, thang, nam:"); // Thong bao nhap lieu

scanf("%d%d%d", &ngay, &thang, &nam); // Nhap gtri cho ngay, thang, nam

 

int stt = 0;

for (int i = 1; i < thang; i++) // Lap voi cac i nho hon thang da nhap vao)

switch ( i ) // Re nhanh de xac dinh so ngay trong cac thang

{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12: stt = stt + 31; break; // Cong don vao stt

 

case 4:

case 6:

case 9:

case 11: stt = stt + 30; break;

 

case 2: stt = stt + 28; break;

}

 

stt = stt + ngay;

printf("Ngay thu %d cua nam %d", stt, nam); // Xuat ket qua

 

getch( ); //Lenh cho nhan phim ENTER,

}

 

Bài toán ngược: Có số thứ tự của ngày trong năm, hãy xác định nhày đó là ngày nào.

Ví dụ: Nhập stt = 84 thì kết quả là 25/04.

Hướng dẫn: Làm theo chiều ngược lại.

             o       thang tăng lên 1

                          o       stt được gán bằng stt trừ đi số ngày của tháng đó.

 

Bạn thấy bài viết này như thế nào?: 
No votes yet
Ảnh của Binh Tran Thanh

Drupal Consultant

Started my career as a drupal8 developer in EM Solutions . I love learning Web technologies like HTML, CSS, PHP, Jquery Ajax and Drupal backend . Currently working as a drupal backend developer.

Quảng cáo việc làm

 

Thích hợp các bạn nữ mảng thợ may làm việc tại nước NGA

Đơn hàng Tuyển dụng 100 Thợ may đi Nga(đợt 1 tháng 3.2021, đợt 2 tháng 5.2021). Lương thực lãnh 800 USD, bao ăn ở, vé máy bay và visa, phí xuất cảnh(1800 USD)trả khi đi làm có lương. Bạn có thể liên hệ CÔNG TY qua Phone/Zalo: (+84) 944 225 212. Công ty sẽ tư vấn cho bạn.

Xem chi tiết: >>> https://bit.ly/3o9NOfR

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Cẩm Đan phản ứng gay gắt khi được mời đi ăn với giá 16.000 USD

Cẩm Đan phản ứng gay gắt khi được mời đi ăn với giá 16.000 USD

Chân dài không ngại công khai lời đề nghị khiếm nhã trên trang cá nhân và bày tỏ quan điểm của riêng mình

Facebook tự ý thay địa chỉ email mặc định của người dùng

Facebook tự ý thay địa chỉ email mặc định của người dùng

Thay vì hiển thị địa chỉ email bạn nhập vào hồ sơ Facebook để mọi người liên lạc với bạn, Facebook đã thay bằng địa chỉ có đuôi @facebook.com mà có thể bạn chưa bao giờ biết là mình có. Điều này khiến nhiều người dùng giận dữ.

Xem mẫu smartphone Defy chạy Android chống nước

Xem mẫu smartphone Defy chạy Android chống nước

Mẫu smartphone chạy Android chống nước Defy và chiếc điện thoại hai SIM đầu tiên của Motorola là EX115 bắt đầu bán tại Việt Nam.

BLOG POSTS