1. 程式人生 > >c語言經典例題及解析

c語言經典例題及解析

輸出100到200之間的素數

素數,就是除了1和他本身,不能被其他數整除的數字。 今天我們將用三種不同的方法來實現“輸出100到200之間的素數”,請往下看:

1、第一種方法就是用100到200之間的每個數字,除以2到其本身前面的那一個數字,如果此過程中出現整除的現象,則該數不是素數。如果沒有整除的現象,則該數為素數輸出。

#include<stdio.h> int main() { int i=0; int count=0; for(i=100;i<=200;i++) { int j=0; for(j=2;j<=i;j++) { if(i%j0) { break; } } if(ij) { count++; printf("%d “,i); } } printf(”\ncount=%d\n",count); return 0; }

2、第二種方法使用了SQRT函式,也就是平方根,這裡的平方根是整數。眾所周知,非素數可以寫成除了1和它本身相乘的a*b方式,而a、b之間必有一個小於等於ab之積的開平方根;如果這個非素數能夠被a整除,則相應的肯定會被b整除。這種方法用100到200之間的數字除以2到它的開平方根(如果該數的平方根是整數則可以除到),在此之間如果出現整除現象,則該數不是素數;如果沒有出現整除現象,則該數是素數。顯而易見,這種方法比第一種方法要簡便,執行的次數少。

#include<stdio.h> #include<math.h> int main() { int i=0; int count=0; for(i=100;i<=200;i++) { int j=0; for(j=2;j<=sqrt(i);j++) { if(i%j==0) { break; } } if(j>sqrt(i)) { count++; printf("%d “,i); } } printf(”\ncount=%d\n",count); return 0; }

3、第三種方法是對第二種方法的優化,原理如下:100到200之間的所有偶數都不是素數,所以可以剔除,直接對奇數進行判斷,這樣又可以讓程式的執行時間減少一半。

#include<stdio.h> #include<math.h> int main() { int i=0; int count=0; for(i=101;i<=200;i+=2) { int j=0; for(j=2;j<=sqrt(i);j++) { if(i%j==0) { break; } } if(j>sqrt(i)) { count++; printf("%d “,i); } } printf(”\ncount=%d\n",count); return 0; }

以上程式中所有有關count的語句是為了統計所求素數個數的,可以去掉。

輸出1000到2000之間的瑞年

解題思路如果某年是閏年,拿它一定滿足下面兩個條件中的一個: ①該年份數能被4整除且不能被100整除; ②該年份數能被400整除。

int isLeapYear(int i) { if (((i % 4 == 0) && (i % 100 != 0))|| (i % 400 == 0))//判斷閏年的條件:能被4整除並且不能被100整除或者能被400整除 return 1;//判斷是閏年 else return 0;//判斷不是閏年 }

int main() { int i = 0; printf(“1000-2000年之間閏年:”); for (i = 1000; i <= 2000; i++) //1000-2000之間的閏年 { if (isLeapYear(i)) printf("%d “, i); } printf(”\n");

/*system("pause")**暫停,程式執行結束後不會直接退出程式,要等到輸入任意字元後才退出。
在程式設計過程中經常遇到開始執行後結果框一閃即逝,這時候為了避免這種情況就可以插入這個語句, 
當然getchar()也有類似作用,但有時候使用getchar()會發生錯誤,所以最好還是用system("pause")。*/**
system("pause"); 
return 0;

}

列印乘法口訣表

#include<stdio.h> int main() {

int i, j;
for (i=1; i <= 9; i++){
    for (j=1; j <= i; j++)
    {
        printf("%2d*%d=%d", i, j, i*j);/*此處使用%2d是為了將兩個式子用空格分開,方便檢視*/

    }
    printf("\n");
}
system("pause");
return 0;

}