Thứ Bảy, 13 tháng 2, 2016

Một số bài tập về hàm trong C/C++


Đề bài:
      Tính F(x)
 Cho hàm F(x), x ≥ 0 được định nghĩa như sau:
 F(x) = x, nếu x ≤ 9  F(x) = F(S(x)), nếu x > 9 
 Trong đó S(x): tổng các chữ số của x.
 Yêu cầu: Hãy viết chương trình tính F(n!), với 1 <= n <= 500
Phân tích bài toán:
      Bài này khá đơn giản, chúng ta không cần phải suy nghĩ nhiều để tìm ra lời giải:

  1. Xây dựng hàm tìm tổng cách chữ số của một số nguyên
  2. Xây dựng hàm tìm giai thừa của một số
  3. Kết hợp kiểm soát dữ liệu đầu vào
Lời giải: 
Mã nguồn C:
//Tính F(x)
// Cho hàm F(x), x ≥ 0 được định nghĩa như sau:
// F(x) = x, nếu x ≤ 9
// F(x) = F(S(x)), nếu x > 9
// Trong đó S(x): tổng các chữ số của x.
// Yêu cầu: Hãy viết chương trình tính F(n!), với 1 <= n <= 500.
 #include  
 #include  
  char sumChar(int n);
  unsigned long giaiThua(char n);
  void main()
 {
   int n;
   char c, sum;
   do {
   do {
   printf("Nhap n (1 <= n <= 500): ");
   scanf("%d", &n);
   }
   while(n<1 n="">500);
   if(n<=9) sum= n;
   else sum= sumChar(n);
   printf("Ket qua la: F(S(%d))= %lu\n", n, giaiThua(sum));
   printf("Nhap q hoac Q de thoat\n");
   fflush(stdin);
   c=getch();
   }
   while(c != 'q' && c!= 'Q');
 }
  unsigned long giaiThua(char n)
 {  unsigned long temp=1;
   if(n==0) return false;
   for(char i=1; i<=n; i++)
   {  temp *=i;  }
   return temp;
 }
  char sumChar(int n)
 {
   char sum=0;
   while(n != 0)
   {
   sum+= n % 10;
   n= n/10;
   }
   return sum;
 }
Mã nguồn C++:
#include 
using namespace std;
char sumChar(int n);
unsigned long giaiThua(char n);

void main()
{
int n;
char c, sum;
do {
do {
cout<<"Nhap n (1 <= n <= 500): ";
cin>> n;
}
while(n<1 n="">500);
if(n<=9) sum=n;
else  sum= sumChar(n);
cout<< "Ket qua la: F(S(" << n << "))= " << giaiThua(sum) << endl;
cout<< "Nhap q hoac Q de thoat\n";
fflush(stdin);
c=getchar();
}
while(c != 'q' && c!= 'Q');
}

unsigned long giaiThua(char n)
{
unsigned long temp=1;
if(n==0) return false;
for(char i=1; i<=n; i++)
{
temp *=i;
}
return temp;
}

char sumChar(int n)
{
char sum=0;
while(n != 0)
{
sum+= n % 10;
n= n/10;
}
return sum;
}

0 nhận xét: