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

Chia sẻ: Dang Van Dung | Ngày: | Loại File: DOC | Số trang:6

2
797
lượt xem
253
download

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

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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ề...

Chủ đề:
Lưu

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

  1. 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. 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 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) );
  2. getch( ); }
  3. 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 ); }
  4. 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.
  5. 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: ́ o Chia N cho số nguyên tố u (nhỏ nhất là 2). o Trong 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. o Nếu N không chia hết cho u, thi tăng u lên 1. o Quá 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. o Quá 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.
  6. Chương trnh: ́ 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( ); }
Đồng bộ tài khoản