什麼是函數?測試
調用函數code
從函數中返回值ip
沒有返回值的函數作用域
函數原型get
參數的傳遞原型
本地變量編譯器
本地變量的規則it
沒有參數時io
逗號運算符
函數裏面的函數
奇怪的寫法
關於main
1 .題目內容: 題目內容:
每一個非素數(合數)均可以寫成幾個素數(也可稱爲質數)相乘的形式,這幾個素數就都叫
作這個合數的質因數。好比,6 能夠被分解爲 2x3,而 24 能夠被分解爲 2x2x2x3。
如今,你的程序要讀入一個[2,100000]範圍內的整數,而後輸出它的質因數分解式;當
讀到的就是素數時,輸出它自己。
輸入格式:
一個整數,範圍在[2,100000]內。
輸出格式:
形如:
n=axbxcxd
或
n=n
全部的符號之間都沒有空格,x 是小寫字母 x。
輸入樣例:
18
輸出樣例:
18=2x3x3
題目分析:
程序實現:
#ifndef getPrimeFactor_h #define getPrimeFactor_h #include <stdio.h> int isPrime(int number); void getPrimeFactor(void); int getPrimeNumber(int index); #endif #include "getPrimeFactor.h" int isPrime(int number) { int isPrimeNumber = 1; int middle = 0; if (number == 1) { isPrimeNumber = 0; } else { int i = 2; middle = number / 2; for (; i <= middle; i++) { if (number % i == 0) { isPrimeNumber = 0; break; } } } return isPrimeNumber; } int getPrimeNumber(int index) { int isPrimeNumber = 1; int middle = 0; int primeNumber = 2; int i, j; int currentIndex = 0; for (j = 2; j < 100000; j++) { //重置素數狀態 isPrimeNumber=1; middle = j / 2; for (i = 2; i <= middle; i++) { if (j % i == 0) { isPrimeNumber = 0; break; } } if (isPrimeNumber) { primeNumber = j; currentIndex++; } if (index == currentIndex) { break; } } return primeNumber; } void getPrimeFactor(void) { int number = 0; int currentPrimeNum = 2; //當前素數 int primeIndex = 1; //當前素數的序號,從1開始1,2,3... printf("請輸入一個範圍在[2,100000]的整數"); scanf("%d", &number); if (isPrime(number)) { printf("%d=%d", number, number); } else { printf("%d=", number); do { while (number % currentPrimeNum != 0 && currentPrimeNum < number) { primeIndex++; currentPrimeNum = getPrimeNumber(primeIndex); } number /= currentPrimeNum; printf("%dx", currentPrimeNum); //當number值改變重置狀態 currentPrimeNum = 2; primeIndex = 1; } while (!isPrime(number)); printf("%d", number); } } #include <stdio.h> #include "getPrimeFactor.h" int main(int argc, char *argv[]) { getPrimeFactor(); return 0; }
測試樣例:
請輸入一個範圍在[2,100000]的整數18 18=2x3x3 -------------------------------- Process exited after 1.221 seconds with return value 0 請輸入一個範圍在[2,100000]的整數100 100=2x2x5x5 -------------------------------- Process exited after 1.691 seconds with return value 0 請輸入一個範圍在[2,100000]的整數108 108=2x2x3x3x3 -------------------------------- Process exited after 2.766 seconds with return value 0
2.題目內容:
一個正整數的因子是全部能夠整除它的正整數。而一個數若是剛好等於除它自己外的因子之
和,這個數就稱爲完數。例如 6=1+2+3(6 的因子是 1,2,3)。
如今,你要寫一個程序,讀入兩個正整數 n 和 m(1<=n<m<1000),輸出[n,m]範圍內
全部的完數。
提示:能夠寫一個函數來判斷某個數是不是完數。
輸入格式:
兩個正整數,以空格分隔。
輸出格式:
其間全部的完數,以空格分隔,最後一個數字後面沒有空格。若是沒有,則輸出一個空行。
輸入樣例:
1 10
輸出樣例:
6
題目分析:
程序實現:
#ifndef getPerfectNumberRange_h #define getPerfectNumberRange_h #include <stdio.h> void getPerfectNumberRange(void); int getIsPerfectNumber(int number); #endif #include "getPerfectNumberRange.h" int getIsPerfectNumber(int number) { int sum = 0; int isPerfectNumber = 0; for (int i = 1; i <= number / 2; i++) { if (number % i == 0) { sum += i; } } if (sum == number) { isPerfectNumber = 1; } return isPerfectNumber; } void getPerfectNumberRange(void) { int n, m; int isHaveAnyPerfectNumber = 0; printf("請輸入兩個正整數n和m,(1<=n<m<1000)"); scanf("%d %d", &n, &m); for (int i = n; i <= m; i++) { if (getIsPerfectNumber(i)) { printf("%d", i); if (isHaveAnyPerfectNumber == 0) { isHaveAnyPerfectNumber = 1; } if (i < m) { printf(" "); } } } if (isHaveAnyPerfectNumber == 0) { printf("\n"); } } #include <stdio.h> #include "getPerfectNumberRange.h" int main(int argc, char *argv[]) { getPerfectNumberRange(); return 0; }
測試樣例:
請輸入兩個正整數n和m,(1<=n<m<1000)1 100 6 28 -------------------------------- Process exited after 1.984 seconds with return value 0 請輸入兩個正整數n和m,(1<=n<m<1000)1 5 -------------------------------- Process exited after 4.39 seconds with return value 0