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.

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

 
Hướng dẫn phân quyền trong Wordpress 3.4

Hướng dẫn phân quyền trong Wordpress 3.4

Wordpress thực sự mạnh mẽ cho cộng đồng bloger chuyên nghiệp, với những ưu điểm riêng biệt làm cho Wordpress ngày càng lớn mạnh và trở nên phổ biến. Bài viết này sẽ giới thiệu về các loại tài khoản dùng để phần quyền trong việc quản lý nội dung trong Wordpress, hiện tại Wordpress có 4 loại tài khoản chính là Admin, Editer, Author, Contributer, và Subsrciber

Dễ dàng thêm contextual link vào block trong Drupal 7

Dễ dàng thêm contextual link vào block trong Drupal 7

Contextual link is a nice addition made into Drupal 7 to favor usability. It offers, quick links to pages performing administrative operations.

Mở khóa học Advanced Drupal Developer tại Bình Dương

Mở khóa học Advanced Drupal Developer tại Bình Dương

Quản lý dự án, Patch, Documentation, Token, Queue, Cache, Stream Wrapper

Công ty diệt chuột T&C

 

Diet con trung