Bài toán số 2.1: Viết chương tŕ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 ( ).
                
              
                                            
                                
            
                       
            
                 5 trang
5 trang | 
Chia sẻ: ttlbattu | Lượt xem: 4245 | Lượt tải: 3 
              
            Bạn đang xem nội dung tài liệu Một số bài tập lập trình C căn bản, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Một số bài tập lập tŕnh C căn bản
Created by NgoHung
Vấn đề 2: Chương tŕnh con
Bài toán số 2.1: Viết chương tŕ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.
Sử dụng biến S để lưu giá trị số nhị phân của N. Khởi gán bằng 0.
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ố
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.
Khai báo biến N, M
Thông báo nhập, nhập giá trị cho biến N
Gán giá trị M bằng kết quả trả về của hàm Dec2Bin( N )
In thông báo về kết quả số nhị phân chuyển đổi được (giá trị của M)
Gọi hàm getch( ) trước khi kết thúc hàm main ( ).
Chương tŕ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 tŕ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 tŕ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 tŕ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:
Chia N cho số nguyên tố u (nhỏ nhất là 2).
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.
Nếu N không chia hết cho u, thi tăng u lên 1.
Quá tŕ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.
Quá tŕ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 tŕ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( ); 
 }