C語言實(shí)驗(yàn)二報(bào)告_第1頁
C語言實(shí)驗(yàn)二報(bào)告_第2頁
C語言實(shí)驗(yàn)二報(bào)告_第3頁
C語言實(shí)驗(yàn)二報(bào)告_第4頁
C語言實(shí)驗(yàn)二報(bào)告_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、北京電子科技學(xué)院(BESTI)實(shí) 驗(yàn) 報(bào) 告課程:程序設(shè)計(jì)基礎(chǔ)班級:姓名:學(xué)號:成績:指導(dǎo)教師:張曉昆實(shí)驗(yàn)日期:實(shí)驗(yàn)密級:預(yù)習(xí)程度:實(shí)驗(yàn)時(shí)間:15:3018:30儀器組次:必修/選修:必修實(shí)驗(yàn)序號:2實(shí)驗(yàn)名稱:函數(shù)編程練習(xí)實(shí)驗(yàn)?zāi)康呐c要求:主函數(shù)通常只處理輸入和輸出;掌握定義函數(shù)的方法;掌握函數(shù)實(shí)參與形參的對應(yīng)關(guān)系,以及“值傳遞”的方式;掌握全局變量、局部變量、動(dòng)態(tài)變量、靜態(tài)變量的概念和使用方法,、了解函數(shù)的嵌套調(diào)用方法和遞歸調(diào)用方法。觀察堆棧窗口 call stack ,注意函數(shù)調(diào)用過程堆棧的動(dòng)態(tài)變化。有興趣的同學(xué)可以將幾個(gè)函數(shù)分別放到不同的.C文件中,分別編譯,再利用 Project建立工程

2、文件,然后連接執(zhí)行,觀察結(jié)果。實(shí)驗(yàn)內(nèi)容素?cái)?shù)( Prime Number ),又稱為質(zhì)數(shù),它是不能被 1 和它本身以外的其他整數(shù)整除的正整數(shù)。按照這個(gè)定義,負(fù)數(shù)、0和1都不是素?cái)?shù),而17之所以是素?cái)?shù),是因?yàn)槌?和17以外,它不能被216之間的任何整數(shù)整除。任務(wù)1 :試商法是最簡單的判斷素?cái)?shù)的方法。用i=2m-1之間的整數(shù)去試商,若存在某個(gè)m能被1與m本身以外的整數(shù)i整除(即余數(shù)為0),則m不是素?cái)?shù),若上述范圍內(nèi)的所有整數(shù)都不能整除m則m是素?cái)?shù)。采用試商法,分別用goto語句、break語句和采用設(shè)置標(biāo)志變量并加強(qiáng)循環(huán)測試等三種方法編寫素?cái)?shù)判斷函數(shù)lsPrime(),從鍵盤任意輸入一個(gè)整數(shù)m判斷

3、m是否為素?cái)?shù),如果m是素?cái)?shù),則按dis a prime numbern 格式打印該數(shù)是素?cái)?shù),否則按 %d is not a prime numbern 格式打印該數(shù)不是 素?cái)?shù)。然后分析哪一種方法可讀性更好。1 、 goto 語句#include #include int lsPrime(int n);/判斷是否是素?cái)?shù)的函數(shù)原型int main()int m;printf(Please enter a integer:);scanf(%d, &m);/用戶輸入欲判斷的數(shù)if( lsPrime(m) = 1)/調(diào)用判斷是否是素?cái)?shù)的函數(shù)并輸出結(jié)果printf(%d is a prime number

4、!n, m);elseprintf(%d is not a prime number!n, m);return 0;/返回 0 / 主函數(shù)結(jié)束判斷是否是素?cái)?shù)的函數(shù)若 n 小于 2,返回 0 值int lsPrime(int n) /int i = 2;int j = 0;if(n = 1) / 若 j 大于 2 ,則說明能被 2n-1 之間的數(shù)整除,返回 return 0;else return 1; / 子函數(shù)結(jié)束0;否則返回 12、 break 語句 #include #include int IsPrime(int n); /判斷是否是素?cái)?shù)的函數(shù)原型int main() int m;pr

5、intf(Please enter a integer:);scanf(%d, &m); / 用戶輸入欲判斷的數(shù)if( IsPrime(m) = 1) / 調(diào)用判斷是否是素?cái)?shù)的函數(shù)并輸出結(jié)果 printf(%d is a prime numbern, m);elseprintf(%d is not a prime numbern, m); return 0; / 返回 0 / 主函數(shù)結(jié)束int IsPrime(int n) / int i;int j = 0;判斷是否是素?cái)?shù)的函數(shù)if( n 2 )/若n小于2,返回0值return 0;利用試商法判斷是否能被 2n-1 之間的數(shù)整除for(i

6、= 2; i 1) /若 j 大于 2,則說明能被 2n-1 之間的數(shù)整除,返回0;否則返回 1return 0;break;if( j = 0) return 1; / 子函數(shù)結(jié)束3、采用設(shè)置標(biāo)志變量并加強(qiáng)循環(huán)測試#include 判斷是否是素?cái)?shù)的函數(shù)原型#include int IsPrime(int n);/ int main()int m;printf(Please enter a integer:);scanf(%d, &m);/用戶輸入欲判斷的數(shù)if( IsPrime(m) = 1)/調(diào)用判斷是否是素?cái)?shù)的函數(shù)并輸出結(jié)果printf(%d is a prime numbern, m)

7、;elseprintf(%d is not a prime numbern, m);return 0;/返回 0 / 主函數(shù)結(jié)束int IsPrime(int n) /判斷是否是素?cái)?shù)的函數(shù)int i;若n小于2,返回0值int j = 0;if( n 2 )/return 0;for(i = 2; i = 1)/若j大于2,則說明能被2n-1之間的數(shù)整除,返回0;否則返回1return 0;elsereturn 1; / 子函數(shù)結(jié)束任務(wù)2:用數(shù)學(xué)的方法可以證明,不能被 2.m (取整)之間的數(shù)整除的數(shù),一定不能被i和它本身之外的其他任何整數(shù)整除。根據(jù)素?cái)?shù)的這個(gè)性質(zhì),通過修改素?cái)?shù)判斷函數(shù)IsPr

8、ime()的具體實(shí)現(xiàn),編程完成任務(wù)1。#in clude #in clude #include /因調(diào)用sqrt()函數(shù),故需此預(yù)處理命令int IsPrime(i nt n); /判斷是否是素?cái)?shù)的函數(shù)原型int mai n() int m;prin tf(Please en ter a in teger:);scan f(%d, & m);/用戶輸入欲判斷的數(shù)if( IsPrime(m) = 1) /調(diào)用判斷是否是素?cái)?shù)的函數(shù)并輸出結(jié)果printf(%d is a prime numbern, m);elseprin tf(%d is not a prime nu mber n, m);返回0

9、return 0;/ /主函數(shù)結(jié)束int IsPrime(int n) / 判斷是否是素?cái)?shù)的函數(shù)int i;int j = 0;if( n 2 ) / 若 n 小于 2 ,返回 0 值 return 0;for(i = 2; i = 1) / 若 j 大于 2 ,則說明能被 2n-1 之間的數(shù)整除,返回0;否則返回 1return 0;else return 1; / 子函數(shù)結(jié)束任務(wù)3:從鍵盤任意輸入一個(gè)整數(shù)n,編程計(jì)算并輸出1n之間的所有素?cái)?shù)之和。#include #include #include /因調(diào)用 sqrt() 函數(shù),故需此預(yù)處理命令int IsPrime(int m); /判斷

10、是否是素?cái)?shù)并求和的函數(shù)原型int main()int n;printf(Please enter a integer:);scanf(%d, &n);/用戶輸入欲判斷的數(shù)/ 打印輸出 1n 之間的所有素?cái)?shù)之和printf(Thesum of all the primes between 1 and the number you enter is: %dn, IsPrime(n);return 0;/ / 主函數(shù)結(jié)束返回 0int i;int j;int sum = 0;for(i = 2; i = m; i+) int k = 0;for(j = 2; j = sqrt(i); j+)if(

11、i % j = 0) / 利用試商法判斷是否能被 2 n 的開方(取整)之間的數(shù)整除 k+;if(k = 0) / 如果 k 等于 0 ,說明 i 是素?cái)?shù),求和sum = sum +i;return sum; / 返回素?cái)?shù)之和 / 子函數(shù)結(jié)束任務(wù)4:從鍵盤任意輸入一個(gè)整數(shù)m,若m不是素?cái)?shù),則計(jì)算并輸出其所有的因子(不包括如對于 16,輸出 2, 4, 8;否則輸出 No divisor! It is a prime numbern。#include #include #include /因調(diào)用 sqrt() 函數(shù),故需此預(yù)處理命令int IsPrime(int n); /判斷是否是素?cái)?shù)的函數(shù)原

12、型int main()int m;int i;printf(Please enter a integer:);scanf(%d, &m);/用戶輸入欲判斷的數(shù)if(IsPrime(m) = 1) / for(i = 2; i = m; i+)if( m % i = 0)/printf(%d , i);調(diào)用判斷是否是素?cái)?shù)的函數(shù),若不是素?cái)?shù),打印因子(不包括1),例1)利用試商法判斷是否是因子if(IsPrime(m) = 0) / 調(diào)用判斷是否是素?cái)?shù)的函數(shù)并輸出結(jié)果 printf(No divisor! It is a prime numbern);判斷是否是素?cái)?shù)的函數(shù)return 0; / 返

13、回 0 / 主函數(shù)結(jié)束int IsPrime(int n) / int i;int j = 0;利用試商法判斷是否能被 2 n 的開方(取整)之間的數(shù)整除for(i = 2; i = 1) / 若 j 大于 2,則說明能被 2n-1 之間的數(shù)整除,返回 1 ;否則返回 0 return 1;else return 0; / 子函數(shù)結(jié)束任務(wù)5:如果一個(gè)正整數(shù) m的所有小于 m的不同因子(包括1)加起來正好等于 m本身,那么就被稱 它為完全數(shù)( Perfect Number )。例如,6就是一個(gè)完全數(shù),是因?yàn)?6 = 1 + 2 + 3 。請編寫一個(gè)判斷完 全數(shù)的函數(shù) IsPerfect() ,然

14、后判斷從鍵盤輸入的整數(shù)是否是完全數(shù)。#include #include int IsPerfect(int n); /判斷輸入的整數(shù)是否是完全數(shù)的函數(shù)原型int main() int m;printf(Please enter a integer:);scanf(%d, &m); /用戶輸入欲判斷的數(shù)if(IsPerfect(m) = 1) /調(diào)用判斷是否是素?cái)?shù)的函數(shù),若是,打印語句printf(The number you enter is a Perfect Number!n);if(IsPerfect(m) = 0) / 調(diào)用判斷是否是素?cái)?shù)的函數(shù),若不是,打印語句 printf(The

15、number you enter is not a Perfect Number!n);return 0; / 返回 0 / 主函數(shù)結(jié)束int IsPerfect(int n) / int i;int sum = 0;判斷輸入的整數(shù)是否是完全數(shù)的函數(shù)for(i = 1; i n; i+) if(n % i = 0) / sum = sum + i; / 判斷是否是因子求因子之和if(sum = n) / return 1;else return 0; / 子函數(shù)結(jié)束判斷輸入的整數(shù)是否是完全數(shù)任務(wù)6:從鍵盤任意輸入一個(gè)整數(shù) m若m不是素?cái)?shù),則對 m進(jìn)行質(zhì)因數(shù)分解,并將 m表示為質(zhì)因數(shù) 從小到大順

16、序排列的乘積形式輸出,否則輸出 It is a prime numbern 。例如,用戶輸入 90 時(shí),程序 輸出 90 = 2 * 3 * 3 * 5 ;用戶輸入 91 時(shí),程序輸出 It is a prime numbern 。#include #include #include /因調(diào)用 sqrt() 函數(shù),故需此預(yù)處理命令int IsPrime1(int x); / int IsPrime2(int y); /判斷是否是素?cái)?shù)的函數(shù)原型 判斷是否是素?cái)?shù)的函數(shù)原型int main()int m;int a = 1; /a int b; /b表示質(zhì)因數(shù)之積 表示m與其因數(shù)之商printf(P

17、lease enter a integer:);scanf(%d, &m); / 用戶輸入欲判斷的數(shù)if(IsPrime1(m) = 1) / 調(diào)用判斷是否是素?cái)?shù)的函數(shù),若是,打印語句 printf(It is a prime number!n);/ 調(diào)用判斷是否是素?cái)?shù)的函數(shù),若不是將m 表示為質(zhì)因數(shù)從小到大順序排列的乘積形式輸出if(IsPrime1(m) = 0)printf(%d =, m);while(a != m)/判斷所有因子之積是否等于m不等繼續(xù)運(yùn)行b = m / a;printf( %d , IsPrime2(b); /打印因子a = IsPrime2(b) * a; /m的因

18、子之積if(a != m)printf(*); /打印乘號return 0;int IsPrime1(int x) /判斷是否是素?cái)?shù)的函數(shù)int i;int j = 0;for(i = 1; i = sqrt(x); i+)if(x % i = 0)/利用試商法判斷是否能被 2 n 的開方(取整)之間的數(shù)整除j+;if(j = 1) /若 j 小于 2,則說明能被 2 n 的開方(取整)之間的數(shù)整除,返回1;否則返回0return 1;elsereturn 0; / 子函數(shù)結(jié)束int i; int j;for(i = 2; i = y; i+)/int k = 0;找出 2y 之間的素?cái)?shù)for

19、(j = 2; j = sqrt(i); j+) if( i % j = 0) / k+;if(k = 0 & y % i = 0) return i;利用試商法判斷是否能被 2 i 的開方(取整)之間的數(shù)整除任務(wù) 7: 驗(yàn)證: 2000 以內(nèi)的正偶數(shù)都能夠分解為兩個(gè)素?cái)?shù)之和(即驗(yàn)證哥德巴赫猜想對 2000 以內(nèi) 的正偶數(shù)成立) ,正奇數(shù)都能夠分解為三個(gè)素?cái)?shù)之和。注意最后要將結(jié)果上傳之前,請將 2000 改為 500 再運(yùn)行,并注意輸出格式,每行5個(gè)等式,如:10=3+7; 12=5+7;。#include #include #include /因調(diào)用 sqrt() 函數(shù),故需此預(yù)處理命令in

20、t IsPrime1(int x);/int IsPrime2(int y);/輸出正偶數(shù)分解為兩個(gè)素?cái)?shù)之和的函數(shù)原型 輸出正奇數(shù)分解為三個(gè)素?cái)?shù)之和的函數(shù)原型int main()int m; /定義整型變量,為偶數(shù)int n; /定義整型變量,為奇數(shù)printf( 正偶數(shù)等于兩素?cái)?shù)之和: n);for(m = 2; m = 100; m += 2)/輸出正偶數(shù)分解為兩個(gè)素?cái)?shù)之和IsPrime1(m);printf(n 正奇數(shù)等于三素?cái)?shù)之和: n);for(n = 5; n = 100; n += 2)/輸出正奇數(shù)分解為三個(gè)素?cái)?shù)之和IsPrime2(n);return 0; / / 主函數(shù)結(jié)束i

21、nt IsPrime1(int x) / 輸出正偶數(shù)分解為兩個(gè)素?cái)?shù)之和的函數(shù) int i; /i表示素?cái)?shù)int j; /j用于判斷i 是否是素?cái)?shù)int a; /a表示素?cái)?shù)int b; /b用于判斷a 是否是素?cái)?shù)if(x % 5 = 4)printf(n);for(i = 2; i = x; i+)/ 判斷 i 是 2y 之間的素?cái)?shù)int k1 = 0;for(j = 2; j = sqrt(i); j+) if( i % j = 0)k1+;/判斷 b 是 2y 之間的素?cái)?shù)if(k1 = 0)for(b = 2; b = x; b+) int k2 = 0;for(a = 2; a = sqrt(b); a+) if( b % a = 0)k2+;if( k2 = 0)if(i + b = x) /如果i、b都是素?cái)?shù),求和判斷是否等于x,若等打印printf(%d = %d + %d; , x, i, b);if(i + b = x)return 0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論