
M t s bài t p l p trnh C căn b nộ ố ậ ậ ả
Created by NgoHung
V n đ 2: Ch ng trnh conấ ề ươ
Bài toán s 2.1:ố Vi t ch ng trnh 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.
oS d ng bi n S đ l u giá tr s nh phân c a N. Kh i gán b ng 0.ử ụ ế ể ư ị ố ị ủ ở ằ
oTi 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ổ ữ ố ố ộ ữ ố
oTr 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.ệ ủ
oKhai báo bi n N, Mế
oThông báo nh p, nh p giá tr cho bi n Nậ ậ ị ế
oGán giá tr M b ng k t qu tr v c a hàm Dec2Bin( N )ị ằ ế ả ả ề ủ
oIn thông báo v k t qu s nh phân chuy n đ i đ c (giá tr c a M)ề ế ả ố ị ể ổ ượ ị ủ
oG i hàm getch( ) tr c khi k t thúc hàm main ( ).ọ ướ ế
Ch ng trnh:ươ
/* 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 tm 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 trnh 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 trnh 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 trnh 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 hnh v i t ng thu t toán: ớ ư ưở ậ
oChia N cho s nguyên t u (nh nh t là 2).ố ố ỏ ấ
oTrong khi N cn 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.ả ầ
oN u N không chia h t cho u, thi tăng u lên 1.ế ế
oQuá trnh 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.ừ ướ ả ố ầ ế ế
oQuá trnh 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.ị ớ ủ ẽ

