版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1.6.3習(xí)題解答編程題1.寫兩個(gè)函數(shù),分別求兩個(gè)整數(shù)的最大公約數(shù)和最小公倍數(shù),用主調(diào)函數(shù)調(diào)用這兩個(gè)函數(shù),并輸出結(jié)果。兩個(gè)整數(shù)由鍵盤輸入。分析:求兩個(gè)數(shù)a和b的最大公約數(shù):設(shè)這個(gè)數(shù)為x,則x一定小于等于a和b中的較小者min(a,b)。在區(qū)間1, min(a,b)中能找到的最后一個(gè)同時(shí)被a和b整除的那個(gè)數(shù),就是a和b的最大公約數(shù)x。求兩個(gè)數(shù)a和b的最小公倍數(shù):設(shè)這個(gè)數(shù)為x,則x一定大于等于a和b中的較大者max(a,b),而小于等于a*b。在區(qū)間max(a,b), a*b 中找到的第一個(gè)能同時(shí)整除a和b的那個(gè)數(shù),就是a和b的最小公倍數(shù)x。參考程序代碼:#include "stdio.
2、h"f1(int a, int b)/*求最大公約數(shù)*/ int x,i; for(i=1;i<=(a<=b?a:b);i+) if(a%i=0&&b%i=0) x=i; printf("n最大公約數(shù)為: %dn",x);f2(int a, int b)/*求最小公倍數(shù)*/ int i,x; for(i=(a>b)?a:b);i<=a*b;i+) if(i%a=0&&i%b=0) x=i; break; printf("n最小公倍數(shù)為: %dn",x);void main() int a,
3、b; printf("n請輸入兩個(gè)數(shù):n"); printf("a=");scanf("%d", &a); printf("b=");scanf("%d", &b); f1(a, b); f2(a, b);運(yùn)行結(jié)果:請輸入兩個(gè)數(shù):a=4b=16最大公約數(shù)為:4最小公倍數(shù)為:162.編寫一個(gè)函數(shù),其功能是對于給定的一個(gè)時(shí)間數(shù)(秒為單位),以“時(shí):分:秒”的格式輸出。參考程序代碼:#include <stdio.h>print_time(long second)int h
4、our,minute;hour=(second/3600)%24;second%=3600;minute=second/60;second%=60;printf("%d:%d%ldn", hour, minute, second);void main()long s;printf("請輸入秒數(shù):");scanf("%ld", &s);print_time(s);運(yùn)行結(jié)果:請輸入秒數(shù):72782:1:183.編寫一個(gè)判斷素?cái)?shù)的函數(shù),在主函數(shù)輸入一個(gè)整數(shù),輸出是否是素?cái)?shù)的信息。分析:素?cái)?shù)指的是是指該數(shù)除了1和本身,不再有其他因子。
5、考慮到完全平方數(shù)的因素,只需要考察從2到該數(shù)的平方根這個(gè)區(qū)間,如果該區(qū)間中沒有因子,則該數(shù)是素?cái)?shù),否則不是素?cái)?shù)。參考程序代碼:#include "stdio.h"#include "math.h"f(int x)/*判斷x是否素?cái)?shù)*/int i,sign=0;for(i=2;i<=(int)sqrt(x);i+) if(x%i=0) +sign; break; if(sign!=0) printf("n該數(shù)不是素?cái)?shù)n");elseprintf("n該數(shù)是素?cái)?shù)n");void main()int a;print
6、f("請輸入一個(gè)整數(shù):n");scanf("%d",&a);f(a);運(yùn)行結(jié)果:請輸入一個(gè)整數(shù):7該數(shù)是素?cái)?shù)4. C語言中在函數(shù)之間進(jìn)行數(shù)據(jù)傳遞的方法除了通過返回值和全局變量外,還可以采用哪種方式?請以求兩個(gè)數(shù)中的較大者為例,分別編程實(shí)現(xiàn)。分析:函數(shù)之間傳遞數(shù)據(jù)的方法一般有三種方式:a) 通過返回值b) 通過全局變量c) 通過函數(shù)調(diào)用的實(shí)參代碼請自行實(shí)現(xiàn)。5.用遞歸算法求下列函數(shù)的值。p(n,x)=*x-()1 x( ( 2x-1 )*p( n-1,x )*x-( n-1 )*p( n-2,x ) )/n(n=0)(n=1)(n>1)注意選
7、擇好合適的參數(shù)類型和返回值類型。在main()函數(shù)中,輸入下列三組數(shù)據(jù):(a)n=0,x=7;(b)n=1,x=2;(c)n=3,x=4求出相應(yīng)的函數(shù)值。分析:該函數(shù)為分段函數(shù),當(dāng)n>1時(shí)為勒讓德多項(xiàng)式,可以利用函數(shù)的遞歸調(diào)用求其值。參考程序代碼:#include "stdio.h"double pn(double x, int n)if(n=0) return 1;if(n=1) return x;return 1.0*(2*n-1)*x-pn(x,n-1)-(n-1)*pn(x,n-2)/n;main()double pn(double x,int n);doub
8、le x;int n;printf("n請輸入?yún)?shù)x與nn");printf("x=");scanf("%lf",&x);printf("nn=");scanf("%d",&n);printf("函數(shù)值為: %lfn",pn(x,n);運(yùn)行結(jié)果:請輸入?yún)?shù)x與n:x=7n=0函數(shù)值為:1.000000請輸入?yún)?shù)x與n:x=2n=1函數(shù)值為:2.000000請輸入?yún)?shù)x與n:x=4n=3函數(shù)值為:2.8333336.寫一個(gè)函數(shù),輸入一個(gè)十六進(jìn)制數(shù),輸出相應(yīng)的十進(jìn)
9、制數(shù)。參考程序代碼:#include "stdio.h" #include "string.h" int translat(char c) if(c<='9'&&c>='0') return c-'0' if(c>='a' && c<='f') return c-87; if(c>='A' && c<='F') return c-55; return -1;/其
10、他字符返回-1 int Htoi(char *str) int i,stat,n=0; int length=strlen(str); if(length=0) return 0; for(i=0;i<length;i+) stat=translat(stri);/防錯(cuò)處理 if(stat>=0) n=n*16+stat; return n; void main() char Hex20; printf("輸入十六進(jìn)制數(shù):"); gets(Hex); printf("相應(yīng)的十進(jìn)制數(shù)為:%d",Htoi(Hex); 運(yùn)行結(jié)果:輸入十六進(jìn)制數(shù):1
11、0相應(yīng)的十進(jìn)制數(shù)為:167.輸入一個(gè)整數(shù),將它逆序輸出。要求定義并調(diào)用函數(shù)reverse(number),它的功能是返回number的逆序數(shù)。例如,reverse(12345)的返回值是54321。參考程序代碼:#include <stdio.h> reverse(int number)printf("n該數(shù)的逆序數(shù)為:n");while (number > 0) /num大于0就不停循環(huán) printf("%d",number%10); /輸出個(gè)位 number /= 10; /除以10 printf("n");vo
12、id main() int num; printf("n請輸入您的數(shù)據(jù):n");scanf("%d",&num); reverse(num);運(yùn)行結(jié)果: 請輸入您的數(shù)據(jù):12345該數(shù)的逆序數(shù)為:543218.編寫一個(gè)函數(shù),找出任一整數(shù)的全部因子。參考程序代碼:#include "stdio.h"f(int x)/*找出x的所有因子*/int i;printf("n該數(shù)的所有因子為:n");for(i=1;i<=x;i+)if(x%i=0)printf(" %d", i);void
13、 main()int a;printf("請輸入一個(gè)整數(shù):n");scanf("%d",&a);f(a);運(yùn)行結(jié)果:請輸入一個(gè)整數(shù):10該數(shù)的所有因子為:1 2 5 109.用遞歸法將一個(gè)整數(shù)n轉(zhuǎn)換成字符串。例如,輸入483,應(yīng)輸出字符串“483”。N的位數(shù)不確定,可以是任意位數(shù)的整數(shù)。參考程序代碼:#include "stdio.h"void convert(n)int n;int i;if(i=n/10)!=0)convert(i);putchar(n%10+'0');main()int number;pr
14、intf("n輸入整數(shù):");scanf("%d",&number);printf("n輸出是:");if(number<0)putchar('-');number=-number;convert(number);運(yùn)行結(jié)果:輸入整數(shù):2345輸出是:234510.給出年、月、日,計(jì)算該日是該年的第幾天。分析:主函數(shù)接收從鍵盤輸入的日期,并調(diào)用sum_day和leap函數(shù)計(jì)算天數(shù)。其N-S圖見圖。sum_day計(jì)算輸入日期的天數(shù)。leap函數(shù)返回是否是閏年的信息。輸入日期調(diào)用sum_day函數(shù),計(jì)算機(jī)天數(shù)d
15、ays調(diào)用leap函數(shù),判斷是否閏年是閏年&&月份>=3天數(shù)days加1輸出天數(shù)參考程序代碼:#include "stdio.h"static int day_tab13=0,31,28,31,30,31,30,31,31,30,31,30,31;int sum_day(month,day)int month,day;int i;for(i=1;i<month;i+)day+=day_tabi;return(day);int leap(year)int year;int leap;leap=year%4=0 && year%100
16、!=0 | year%400 =0;return(leap);main()int year,month,day;int days;printf("n請輸入日期(年,月,日)n");scanf("%d, %d, %d", &year, &month, &day);printf("n %d年%d月%d日n", year, month, day);days=sum_day(month,day);if (leap(year)&&month>=3)days=days+1;printf("是
17、該年的%d天.n",days);運(yùn)行結(jié)果:請輸入日期(年,月,日)2008,11,262008年11月26日是該年的331天。11.編寫一個(gè)C語言源程序,里面只有一句代碼“int a=0”或“int a; a=0;”(注意:源文件中沒有main函數(shù))。分別進(jìn)行編譯看能不能通過編譯,并思考這是為什么。提示:C語言以函數(shù)為程序的基本單位。分析:大家已經(jīng)知道C程序由函數(shù)組成。換而言之,C語言是一種面向過程的編程語言,過程亦即函數(shù)。這意味著C程序中的任何有效語句必須放在函數(shù)中。int a; a=0;中的第一個(gè)語句為聲明語句,可以通過編譯;但是第二個(gè)語句為賦值語句,因此其不能通過編譯;int
18、a=0;為聲明,并非有效語句,因此可以通過編譯。12漢諾塔問題是一個(gè)古老的數(shù)學(xué)問題。經(jīng)典漢諾塔問題是三柱的,它起源于印度。意思是:第一個(gè)柱(A柱)上有n個(gè)碟子,從底向上碟子大小依次減小,目標(biāo)是通過第二個(gè)柱(B柱)把所有碟子移到第三個(gè)柱(C柱)上,但不能把大的碟子放到小的碟子上面。提示:解決三柱漢諾塔問題的經(jīng)典算法是遞歸算法,先考慮把A柱上面的n-1個(gè)碟子通過C柱移到B柱上,然后把A柱剩下的一個(gè)碟子移到C柱上,最后用三柱漢諾塔經(jīng)典算法把B柱上所有的碟子(n-1)個(gè)通過A柱移到C柱上。參考程序代碼:int count=0;void move(char a,char c) printf("No%-3d:%c->%c ",count,a,c); if(count%5=0) printf("n");void Hanoi( int n, char a, char b, char c) if (n=1) coun
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商場組織架構(gòu)方案
- 贈(zèng)送景區(qū)門票合同
- 人力資源部就職發(fā)言稿
- 醫(yī)療器械設(shè)備租賃合同
- N-Acetyl-L-methionine-Standard-生命科學(xué)試劑-MCE
- Myristoleyl-palmitate-9Z-9-Tetradecen-1-yl-hexadecanoate-生命科學(xué)試劑-MCE
- 學(xué)校合同制老師退休工資
- Monosulfuron-生命科學(xué)試劑-MCE
- 傳統(tǒng)節(jié)日“清明節(jié)”活動(dòng)方案
- 廣告工程施工與方案
- 人教版2024新版七年級上冊數(shù)學(xué)期中模擬測試卷(含答案解析)
- 2023年中級經(jīng)濟(jì)師《工商管理》真題及答案解析(11月12日下午)
- 2024中國石化校園招聘超1萬人高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- GB/T 18029.8-2024輪椅車第8部分:靜態(tài)強(qiáng)度、沖擊強(qiáng)度及疲勞強(qiáng)度的要求和測試方法
- 中華民族共同體概論課件專家版9第九講 混一南北和中華民族大統(tǒng)合(元朝時(shí)期)
- 中職學(xué)考《哲學(xué)與人生》考試復(fù)習(xí)題庫(含答案)
- 電梯日管控、周排查、月調(diào)度內(nèi)容表格
- 上海中考英語專項(xiàng)練習(xí)-動(dòng)詞的時(shí)態(tài)-練習(xí)卷一和參考答案
- 英語48個(gè)國際音標(biāo)教案(10課時(shí))
- 醫(yī)學(xué)前沿—I-IIIB期非小細(xì)胞肺癌完全切除術(shù)后輔助治療指南(2021版)
- 新能源充電樁項(xiàng)目風(fēng)險(xiǎn)投資報(bào)告(范文)
評論
0/150
提交評論