1. 程式人生 > >C語言經典程式碼(1-8)

C語言經典程式碼(1-8)

古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
兔子的規律為數列1,1,2,3,5,8,13,21….

/*古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,
小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
兔子的規律為數列1,1,2,3,5,8,13,21....*/ 
#include<stdio.h>

int f (int n)
{ 
    if(n==1||n==2) 
    return 1; 
    if( n > 2
) return f (n-1) + f (n-2); } int main() { int i = 0,n; scanf("%d",&n); for(i=1; i<=n; i++) { printf("%d ",f (i)); if(i%5==0) { printf("\n"); } } return 0; }

判斷素數

/*判斷101-200之間有多少個素數,並輸出所有素數及素數的個數。
程式分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,
     則表明此數不是素數,反之是素數。*/
#include<stdio.h> #include<math.h> void main() { int i,j,flag,m,count=0; for(i=101;i<200;i=i+2)//偶數不可能是素數。 { flag=0; m=sqrt(i);//減少計算次數。 for(j=2;j<=m;j++) if(i%j==0) { flag=1; break; } if(flag==0
) { count++;//用來計數的。 printf("%d ",i); } } printf("\n素數的個數為%d\n",count); }

一個數如果恰好等於它的因子之和,這個數就稱為“完數”。例如6=1+2+3.程式設計
   找出100以內的所有完數。

#include <stdio.h> 
int main()
{
    int i, j, sum;

    /*
        第一個迴圈,檢查從1到1000中的每一個數字是不是完數
        如果是完數,輸出完數和它所有的因子
    */
    for( i = 1; i <= 100; ++i )
    {
        /*
            檢查該數字是否是完數
            方法:從1到i-1,依次取餘,餘數為0,說明是它的公約數,
                累加公約數,最後的值如果等於i,這說明i就是完數。
        */
        sum = 0;
        for( j = 1; j < i; ++j )
        {
            if( i%j == 0 )
            {
                sum += j;    
            }
        }
        if( sum == i )
        {
            printf( "完數是:%d,它的因子是:", i );

            /* 
                這個for迴圈是將其所有因子取出
                和第22行的for迴圈思路是一樣的       
            */
            for( j = 1; j < i; ++j )
            {
                if( i%j == 0 )
                {
                    printf( "%d ", j );
                }
            } 
            printf( "\n" );
        }  
    } 
    return 0;
}

題目:企業發放的獎金根據利潤提成。利潤(I)低於或等於10萬元時,獎金可提10%;利潤高 於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可可提成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?

#include <stdio.h> 
int main()
{
   int num,reward;//num是利潤,reward是獎金總數
   scanf("%d",&num);
   int reward1=100000*0.1;
   int reward2=reward1+100000*0.075;
   int reward3=reward2+200000*0.05;
   int reward4=reward3+200000*0.03;
   int reward5=reward4+400000*0.15;
   if(num<=100000)
       reward=num*0.1;
   else if(num<=200000)
       reward=reward1+(num-100000)*0.075;
   else if(num<=400000)
       reward=reward2+(num-200000)*0.05;
   else if(num<=600000)
       reward=reward3+(num-400000)*0.03;
   else if(num<=1000000)
       reward=reward4+(num-400000)*0.015;
   else
       reward=reward5+(num-1000000)*0.01;
   printf("%d\n",reward);
    return 0;
}

題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
1.程式分析:在10萬以內判斷,先將該數加上100後再開方,再將該數加上268後再開方,如果開方後的結果滿足如下條件,即是結果。

#include <stdio.h> 
#include<math.h>
int main()
{
   int num;
   int x,y;
   for(num=1;num<100000;num++)
   {
       x=sqrt(num+100);
       y=sqrt(num+268);
       if(x*x==num+100&&y*y==num+268)
           printf("%d\n",num);
   }
    return 0;
}

輸入某年某月某日,判斷該天是該年的第幾天。

#include <stdio.h> 
int main()
{
   int day,month,year;
   int days=0;
   int leap;
   scanf("%d%d%d",&year,&month,&day);
   switch(month)
   {
   case 1:days=0;break;
   case 2:days=31;break;
   case 3:days=59;break;
   case 4:days=90;break;
   case 5:days=120;break;
   case 6:days=151;break;
   case 7:days=181;break;
   case 8:days=212;break;
   case 9:days=243;break;
   case 10:days=273;break;
   case 11:days=304;break;
   case 12:days=334;break;
   default: printf("輸入錯誤!");break;
   }
   days=days+day;
    if((year%4==0||year%100!=0)&&(year%400==0))
       {
           leap=1;
       }
       else
           leap=0;
       if(leap==1&&month>2)
        days=days+1;
   printf("%d年%d月%d日有%d天",year,month,day,days);
    return 0;
}