Vấn đề 2 - Chương trình con

Vấn đề 2 - Chương trình con

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

Bài toán số 2.1: Viết chương trình chuyển đổi số tự nhiên N cho trước sang hệ cơ số 2 bằng việc xây dựng hàm chuyển đổi.

Hướng dẫn:

-          Xây dựng hàm Dec2Bin( ) chuyển đổi từ số tự nhiên sang số nhị phân.

o       Sử dụng biến S để lưu giá trị số nhị phân của N. Khởi gán bằng 0.

o       Tiến hành lặp chuyển đổi cơ số: Lặp trong khi mà N > 0

§         SoDu = số dư của N chia cho 2.

§         N = N chia cho 2.

§         Bổ sung chữ số SoDu vào số S thành một chữ số

o       Trả về kết quả cuối cùng của S.

-          Viết hàm void main ( ) với nội dung dùng để kiểm tra kết quả thực hiện của hàm.

o       Khai báo biến N, M

o       Thông báo nhập, nhập giá trị cho biến N

o       Gán giá trị M bằng kết quả trả về của hàm Dec2Bin( N )

o       In thông báo về kết quả số nhị phân chuyển đổi được (giá trị của M)

o       Gọi hàm getch( ) trước khi kết thúc hàm main ( ).

Chương trình:

/* thu tuc chuyen so tu nhien n cho truoc sang ket qua tra ve he co so 2 */

int Dec2Bin ( int n )

{

int S = 0 , So = n ;

while ( So > 0)

{

int Du = So % 2 ;

So = So / 2 ;

S = S * 10 + Du;

}

return S ;

}

 

/* chuong trinh chinh dap ung yeu cau bai toan */

void main( )

{

int N;

printf( “Nhap so N =” ); scanf( “%d”, &N );

printf( “Dang nhi phan cua N la %d”, Dec2Bin(N) );

getch( );

}

Bài toán số 2.2: Viết các hàm USCLN(a, b) và BSCNN(a, b).

Hướng dẫn: Khai báo hàm USCLN có:

Tên hàm: USCLN

Kiểu dữ liệu trả về: long

Tham số: 2 tham trị là int a, int b

Giá trị trả về: chính là giá trị ước số chung lớn nhất của a và b.

Xử lý tìm USCLN, BSCNN: Dựa trên ví dụ đã có ở phần trước.

Nội dung hàm:

long USCLN( int a, int b)

{

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

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

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

return k;

}

Tương tự để viết hàm long BSCNN( int a, int b )

long BSCNN( int a, int b)

{

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

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

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

return k;

}

Hoặc sử dụng hàm đã xây dựng:

long BSCNN( int a, int b)

{

return a*b/USCLN( a, b );

}

Bài toán số 2.3: Viết hàm kiểm tra số N có phải là số nguyên tố hat không?

Hướng dẫn: Khai báo hàm kiểm tra số nguyên tố có:

Tên hàm: KiemtraSNT

Dữ liệu trả về: int, ( 0 nếu không phải là số nguyên tố, là 1 nếu là số nguyên tố )

Tham số: tham trị là int N, số cần kiểm tra.

Xử lý kiểm tra: Dựa trên ví dụ đã có ở phần trước.

Nội dung hàm:

int KiemtraSNT( int N )

{

int 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

return ktrSNT;

}

Cải tiến, không sử dụng biến phụ:

int KiemtraSNT( int N )

{

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

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

return 1; // Khong co gia tri tu 2 den N-1 ma N chia het

} // N la SNT

 

Bài toán số 2.4: Viết chương trình thực hiện lần lượt các công việc sau:

- Lập thủ tục nhập ba số thực dương a , b , c từ bàn phím.

- Lập thủ tục kiểm tra xem ba số trên có lập thành ba cạnh của tam giác hay không ?

- Viết hàm tính diện tích của tam giác.

- Viết hoàn thiện chương trình chính.

Hướng dẫn:

- Thao tác nhập đơn giản:

void NhapTamGiac( long &a, long &b, long &c)

{

printf( “Nhap A=” ); scanf( “%d”, &a );

printf( “Nhap B=” ); scanf( “%d”, &b );

printf( “Nhap C=” ); scanf( “%d”, &c );

}

- Kiểm tra a, b, c lập thành ba cạnh của tam giác nếu tổng 2 cạnh luôn lớn hơn một cạnh.

int KtraTamGiac( long a, long b, long c)

{

if (a+b > c && a+c > b && b+c > a)

return 1;

else

return 0;

}

- Tính diện tích có thể thực hiện thông qua chu vi của nó với .

float DienTichTamGiac( long a, long b, long c)

{

float p = (a+b+c)/2.0;

return sqrt(p*(p-a)*(p-b)*(p-c));

}

- Xây dựng hàm main với mục đích, sử dụng các hàm trên để tính diện tích tam giác nhập vào nếu thông số nhập thỏa mãn.

void main()

{

long a, b, c;

NhapTamGiac( a, b, c );

if ( KtraTamGiac( a, b, c) )

printf( “Dien tich tam giac: %f \n”, DienTichTamGiac( a, b, c ));

else

printf( “Khong lap thanh duoc tam giac.\n”);

getch( );

}

Bài toán số 2.5: Viết chương trình hoàn chỉnh thực hiện phân tích ra N ra thành các thừa số nguyên tố.

Ví dụ: N = 1260 = 2 . 2 . 3 . 3 . 5 . 7

Hướng dẫn:

-          Viết hàm nhập số N. Lưu ý, hàm nhập cần truyền tham số N theo dạng tham biến để lưu lại giá trị đã nhập vào.

-          Viết hàm phân tích số N ra các thừa số nguyên tố và in các thừa số đó ra màn hình với ý tưởng thuật toán:

o       Chia N cho số nguyên tố u (nhỏ nhất là 2).

o       Trong khi N còn chia hết cho u thì tiến hành phân tích N với u là thừa số. Giảm N đi u lần.

o       Nếu N không chia hết cho u, thi tăng u lên 1.

o       Quá trình lặp lại với

§         u từng bước tăng lên 1 nếu N không chia hết cho u.

§         N từng bước giảm xuống u lần nếu N chia hết cho u.

o       Quá trình lặp lại đến một mức u tăng lên và N giảm xuống để N = u, khi đó giá trị mới của N sẽ là 1.

Chương trình:

void NhapSoN( long &NN )

{

NN = 0; //Gan khoi dau bang 0 de vao vong lap, vong lap dung khi nhap khac 0

while ( N == 0 )

{

printf( “Nhap N=” ); scanf( “%d”, &NN );

}

}

/*================================*/

void PhantichSoN ( long N1 )

{

if ( N1 > 1 )

{

int u = 2, dem = 0;

while ( N1 > 1 )

if ( N1 % u = 0 )

{

dem++;

printf( “%d ”, u);

N1 = N1 / u;

}

else

u++;

}

else

printf( “Khong the phan tich duoc” );

}

/*==============================*/

void main( ) /* Ham xu ly chinh cua chuong trinh */

{

clrscr( );

printf( “Phan tich so N thanh tich cua cac so nguyen to :\n” );

NhapSoN( N );

PhantichSoN( N );

printf ( “Nhan Enter de ket thuc ...” );

getch( );

}

 

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

 
Khi nào cần chọn Quick Format, khi nào cần chọn Full Format?

Khi nào cần chọn Quick Format, khi nào cần chọn Full Format?

Trên máy tính sử dụng hệ điều hành Windows, có hai lựa chọn để định dạng bộ nhớ có thể gây cho bạn nhầm lẫn Quick Format và Full Format. Vậy khi nào thì nên chọn Quick Format và khi nào nên chọn Full Format?

Samsung sắp ra mắt Chromebook màn hình 2560 x 1600 pixel giá rẻ

Samsung sắp ra mắt Chromebook màn hình 2560 x 1600 pixel giá rẻ

Theo Business Korea, Samsung chuẩn bị phát hành mẫu Chromebook thế hệ mới sử dụng chip Exynos 5 Octa mới với 8 nhân xử lí cùng màn hình độ phân giải lên đến 2560 x 1600 pixel.

Ice Cream Sandwich có gì mới?

Ice Cream Sandwich có gì mới?

Nếu chuẩn bị nâng cấp từ Android 2.x lên Android 4.x (Ice Cream Sandwich), bạn nên quan tâm tới là một số thay đổi đề cập trong bài.