C程序設(shè)計(jì)譚浩強(qiáng)完整版課后習(xí)題答案_第1頁
C程序設(shè)計(jì)譚浩強(qiáng)完整版課后習(xí)題答案_第2頁
C程序設(shè)計(jì)譚浩強(qiáng)完整版課后習(xí)題答案_第3頁
C程序設(shè)計(jì)譚浩強(qiáng)完整版課后習(xí)題答案_第4頁
C程序設(shè)計(jì)譚浩強(qiáng)完整版課后習(xí)題答案_第5頁
已閱讀5頁,還剩69頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C程序設(shè)計(jì)(第四版)(譚浩強(qiáng))第一章課后習(xí)題答案P0061.1向屏幕輸出文字.#include<stdio.h>//預(yù)編譯.代碼均調(diào)試成功,若有失誤大多不是代碼問題.自已找找.intmain(){ printf("W\n"); return0;//與intmain對(duì)應(yīng),為了程序可移植性,建議全用intmain+return0;.}P0081.2求兩個(gè)數(shù)的和.#include<stdio.h>intmain(){ inta,b,sum; a=5; b=4; sum=a+b; printf("Thesumis%d.\n",sum); return0;}P0081.3調(diào)用函數(shù)比較兩個(gè)數(shù)的大小.#include<stdio.h>intmain(){ intmax(intx,inty);//被調(diào)用函數(shù)在主函數(shù)后面,用前先聲明. inta,b,c; scanf("%d,%d",&a,&b);//輸入時(shí)要按格式來,此處的逗號(hào),用空格會(huì)發(fā)生錯(cuò)誤. c=max(a,b);//a,b作為實(shí)參傳入被調(diào)用函數(shù)中. printf("Themaxis%d.\n",c); return0;}intmax(intx,inty)//定義了兩個(gè)形參.{ intz;//z屬于局部變量,可與主函數(shù)中相同名字. if(x>y) z=x; else z=y; return(z);//z作為整個(gè)程序的出口值,賦給主函數(shù)中的c.}P0150.6三個(gè)數(shù)的大小.(數(shù)字0表示課后練習(xí)題)#include<stdio.h>intmain(){ inta,b,c,d;//d是用于存儲(chǔ)最大值的. intmax(intx,inty,intz);//測(cè)試可知,在VS2008中,可以不預(yù)先聲明. printf("Pleaseinput3numbers:\n"); scanf("%d%d%d",&a,&b,&c);d=max(a,b,c);//調(diào)用函數(shù)中有三個(gè)形參,這里需要傳入三個(gè)實(shí)參,才可運(yùn)算. printf("Themaxis:%d.\n",d);//d可以換成max(a,b,c).}intmax(intx,inty,intz){ intm; if(x>y&&x>z)//求三者之大的一種方法. m=x; if(y>x&&y>z) m=y; if(z>y&&z>x) m=z; return(m);//返回值m給主函數(shù)中的d.}C程序設(shè)計(jì)(第四版)(譚浩強(qiáng))第2章課后習(xí)題答案算法——程序的靈魂P(guān)0172.1計(jì)算機(jī)1-5相乘的積.#include<stdio.h>intmain(){ inti,s=1;//在執(zhí)行數(shù)值操作前一定要先有個(gè)初值. for(i=1;i<6;i++)//這里是到6. { s=s*i;//相乘 } printf("Thesumis%d.\n",s); return0;}#include<stdio.h>//作出要求:換成1到11間奇數(shù)相乘.intmain(){ inti,s=1;//在執(zhí)行數(shù)值操作前一定要先有個(gè)初值. for(i=1;i<12;i++)//這里是到,但題目要求的是取單數(shù).也可以是i=i+2 { if(i%2!=0)//i對(duì)取模,值為非為奇數(shù);為則為偶數(shù). s=s*i; else continue;//跳過這個(gè)for循環(huán)的這一次,執(zhí)行下一次. } printf("Thesumis%d.\n",s); return0;}P0192.2按要求輸出80分以上的學(xué)生信息.暫時(shí)沒法做.P0192.3判斷2000-2500年中的閏年,并輸出.年的概念是地球圍繞太陽一周的時(shí)間(所謂公轉(zhuǎn)周期)稱為一年,這個(gè)周期是相當(dāng)穩(wěn)定的,很長(zhǎng)時(shí)間也不會(huì)變動(dòng)1秒,但是真正的一年是365.2423天(目前)。所以,如果每年定義為365天的話,1年就會(huì)多出0.2423天,4年就會(huì)多出0.9692天,非常接近1天,這樣閏年就出現(xiàn)了,也就是每4年要有1年設(shè)置為366天,來抵消這多出的1天。規(guī)則為:·1)如果年份能被4整除,則該年計(jì)為閏年;可是,假如不做調(diào)整的話,當(dāng)400年的時(shí)候,累計(jì)才多出96.92天,接近于多出97天,閏年的設(shè)置卻多出來100天,所以要在400年內(nèi),再撤銷3個(gè)閏年。怎么撤銷呢?就有了下面這個(gè)規(guī)則:·2)如果年份能被100整除,則不計(jì)為閏年;問題又來了,400年里有4個(gè)100年吧,去掉后四個(gè)100年后,又少了一個(gè),所以再加一個(gè)規(guī)則就是:·3)如果年份能被400整除,則計(jì)為閏年。簡(jiǎn)單說來每400年里設(shè)置了97個(gè)閏年,也就是400里的前3個(gè)100年不設(shè)置閏年,誤差被調(diào)整到400年僅有0.08天。#include<stdio.h>intmain(){ inti; for(i=2000;i<=2200;i++) { if((i%4==0&&i%100!=0)||i%400==0)//閏年的經(jīng)典判斷條件. printf("%disaleapyear!\n",i); else printf("%disnotaleapyear!\n",i); }}P0202.4求(1)-(1/2)+(1/3)……+(1/99)-(1/100)的值.#include<stdio.h>intmain(){ floatsign=1,sum=0,deno,term;//關(guān)于有小數(shù)的計(jì)算應(yīng)該用float. for(deno=1;deno<=100;deno++) { term=sign*(1/deno);//term臨時(shí)值,sing符號(hào),deno為分母. sum=sum+term;//第一次總?cè)鎯?chǔ). sign=(-1)*sign;//換號(hào). } printf("Thesumofdeno(指定值)is%f.\n",sum); return0;//若是到100的話,結(jié)果為0.68172}P0212.5得到一個(gè)大于3的數(shù),并判斷是否為素?cái)?shù).#include<stdio.h>intmain(){ inti,num,n;//像13,37,這樣只能讓和它本身除以外,沒有其它除數(shù)的叫素?cái)?shù). printf("Pleaseinputanumber:\n");//獲取一個(gè)數(shù)值 scanf("%d",&num); for(i=2;i<num;i++)//在到此數(shù)值間進(jìn)行循環(huán)除,如果除得盡,就不滿足素?cái)?shù)要求. { if(num%i==0)//除得盡,則不是. { n=1; break;//設(shè)置跳出,才不會(huì)執(zhí)行多次. } n=0;//按程序走的話,這里會(huì)執(zhí)行多次,不能用printf語句,會(huì)輸出多次. } if(n==0)//單出口問題,雖然n=0執(zhí)行多次,但仍然是n=0,這樣才會(huì)只輸出一次. { printf("Itisdoaprimenumber!");//如果是100-200可以加個(gè)”%d”,nmu進(jìn)去. } else { printf("Itisnotaprimenumber!"); } return0;}2.6-2.10要求用流程圖表示上列算法.2.11-2.16要求用N-S圖表示上列算法.…………還要偽代碼P0360.1調(diào)換二個(gè)參數(shù)的值.#include<stdio.h>intmain(){ chara='a',b='b',c; c=a; a=b; b=c; printf("anowis%c,bnowis%c!\n",a,b); return0;}P0360.2輸入10個(gè)數(shù),并輸出最大的那一個(gè)數(shù).#include<stdio.h>intmain(){ inti,a[10],s=0; printf("Pleaseinput10numbers:\n"); for(i=0;i<=9;i++) { scanf("%d",&a[i]); } for(i=0;i<=9;i++) { if(s<a[i])s=a[i]; } printf("%disthebiggestnumber!\n",s); return0;}P0360.3按大小順序輸出一些數(shù).#include<stdio.h>intmain(){ inti,j,a[4],s=0; printf("Pleaseinput5numbers:\n");//此處要回車. for(i=0;i<=4;i++) { scanf("%d",&a[i]);//這是取多個(gè)數(shù)的代碼,可以用while控制取到\n符為止. } for(i=0;i<=3;i++)//雙重循環(huán),先一個(gè)外循,再輪所有小循,輪完后再下一個(gè)大循. { for(j=i+1;j<=4;j++)//第一個(gè)循環(huán)是至n-1,第二個(gè)循環(huán)是到n. { if(a[i]>a[j])//如果成立,則對(duì)換,小于號(hào)表示降序排列,大于號(hào)表示升序排列. { s=a[i]; a[i]=a[j]; a[j]=s; } } } for(i=0;i<=4;i++)//重新定義循環(huán)輸出數(shù)組中新排列的數(shù). printf("%d-",a[i]); return0;}P0360.4求1至100的總合.#include<stdio.h>intmain(){ inti,sum=0;//這是一個(gè)簡(jiǎn)單的程序. for(i=0;i<101;i++) sum=sum+i; printf("Thesumofonetoonehundredis%d!\n",sum); return0;}P0360.5判斷一個(gè)數(shù)能否同時(shí)被3和5整除.#include<stdio.h>intmain(){ intn; printf("Pleaseinputanumber:\n"); scanf("%d",&n); if(n%3==0&&n%5==0)//關(guān)鍵句,用"并"的符號(hào). printf("Canbedevideby3and5!\n"); else printf("Cannotbedevideby3and5!\n"); return0;}P0360.6輸出100-200間的素?cái)?shù).//********************第一種方法.#include<stdio.h>//網(wǎng)絡(luò)版本,采用調(diào)用函數(shù)和求根取素.#include<math.h>//下面用到sqrt,所以需要包含數(shù)據(jù)函數(shù).sqrt是求根,屬數(shù)學(xué)函數(shù).intmain()//學(xué)會(huì)一個(gè)程序采用”主函數(shù)+被調(diào)用函數(shù)”的方式,會(huì)比較規(guī)范.{ inti; for(i=100;i<=200;i++)//為了書寫規(guī)范,最好加上{},以示清范圍. if(prime_number(i)==1)//i是實(shí)參. printf("%d",i); return0;}intprime_number(doublem)//m是形參.{ intj,k; k=(int)sqrt(m);//求根,(int)是強(qiáng)制轉(zhuǎn)換,求根里要是浮點(diǎn)型. for(j=2;j<=k;j++) { if(m%j==0) return0;//此值返回給主函數(shù)中的實(shí)參. } return1;}//********************第二種方法.#include<stdio.h>#include<math.h>intmain(){ inti; for(i=100;i<=200;i++)//指定至間. { if(prime(i)==1)//這里i為實(shí)參,傳入形參j中進(jìn)行運(yùn)算,然后再由形參j帶出返回. printf("%distheprimenumber!\n",i); } return0;}intprime(intj)//j是形參,用于接收實(shí)參i給的值.{ intm,n; m=(int)sqrt(j); for(n=2;n<=m;n++) { if(j%n==0) return0;//返回值,0為不是素?cái)?shù),1是素?cái)?shù). } return1; }//********************第二種方法.請(qǐng)仿照2.5來寫.P0360.7最大公約數(shù)和最小公倍數(shù).#include<stdio.h>//最大公約數(shù)用累除法,除到無余數(shù)時(shí)的被除數(shù)是最大公約數(shù).main(){ intm,n,c,d; intgcd();//這是最大公約數(shù)的縮寫,此處調(diào)用函數(shù),可以不寫里面的實(shí)參. intlcm();//這是最小公倍數(shù)的縮寫,此處調(diào)用函數(shù),可以不寫里面的實(shí)參. printf("Pleaseinputtwonumber:\n"); scanf("%d%d",&m,&n); c=gcd(m,n);//c獲取最大公約數(shù) d=lcm(m,n);//d獲取最小公倍數(shù) printf("TheGCDof%dand%dis:%d!\n",m,n,c); printf("TheLCMof%dand%dis:%d!\n",m,n,d); return0;}intgcd(intx,inty)//最大公約數(shù)GreatestCommonDivisor{ inttemp; while(x%y!=0) { temp=y;//y在下一輪中作為除數(shù),即是下一輪中的X,所以先閃一邊去. y=x%y;//x,y的余數(shù)作為下一輪中的Y,由x%y來取得. x=temp;//剛才temp中存儲(chǔ)了y的值,現(xiàn)在拿出來作為下一輪中的X使用. } returny;//這是每一輪中的被除數(shù),按原理來,這就是最大公約數(shù),即累除法的原理.}intlcm(intx,inty)//最小公倍數(shù)LowestCommonMultiple{ inti,temp; if(x<y)//保證二者大的數(shù)在X上,小的數(shù)在Y上.小于號(hào)降序,大于號(hào)升序. {//以下為經(jīng)典三行碼,實(shí)現(xiàn)兩個(gè)數(shù)的互換. temp=x; x=y; y=temp; } for(i=1;i<=y;i++)//設(shè)定一個(gè)區(qū)間,從1至小的數(shù)之間的循環(huán). { if(!((x*i)%y))//除得盡為零,非零為真,則成立并返回. {//如此往復(fù),直到取模無余數(shù),那么小的數(shù)X乘以區(qū)間當(dāng)前的I值,就是最小公倍數(shù). returnx*i; } }}最簡(jiǎn)單的C程序設(shè)計(jì)——順序程序設(shè)計(jì)P0373.1把華氏溫度轉(zhuǎn)化為攝氏表示法.#include<stdio.h>floatF_to_C(floatinput_fah)//代表華轉(zhuǎn)攝,input_fah是局部變量.{ floatoutput_cen; //這里也是局部變量. output_cen=(5.0/9)*(input_fah-32);//函數(shù)的功能體. returnoutput_cen;//返回值,注意,返回值的數(shù)據(jù)類型應(yīng)該和函數(shù)一致.}floatC_to_F(floatinput_cen){ floatoutput_fah; output_fah=(9.0/5)*input_cen+32;//轉(zhuǎn)換過程. returnoutput_fah;}intmain(){ intchoice; floatinput_fah,input_cen,output_fah,output_cen;//局部變量的調(diào)用及參數(shù)傳遞. printf("F_to_Cpress<1>andC_to_Fpress<2>!\n"); scanf("%d",&choice); if(choice==1) { printf("Pleaseinputfahrenheit:"); scanf("%f",&input_fah);//這個(gè)是主函數(shù)定義的變量,雖然和調(diào)用函數(shù)同名.output_cen=F_to_C(input_fah); printf("The華氏is%d,攝氏is%d.",(int)input_fah,(int)output_cen); } if(choice==2) { printf("Pleaseinputcentigrade:"); scanf("%f",&input_cen); output_fah=C_to_F(input_cen); printf("TheCentigradeis%d,andtheFahrenheitis%d.",(int)input_cen,(int)output_fah); } return0;}P0383.2計(jì)算存款利息(關(guān)于精度問題).#include<stdio.h>intmain(){ floatp0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3; p1=p0*(1+r1); p2=p0*(1+r2); p3=p0*(1+r3/2)*(1+r3/2); printf("p1=%f\np2=%f\np3=%f\n",p1,p2,p3); return0;}P0553.3大寫轉(zhuǎn)換成小寫#include<stdio.h>intmain()//小寫范圍是97-122,大寫范圍是65-90,大寫加上即得小寫.26個(gè)字母.{ charc1,c2; c1='A'; c2=c1+32; printf("%c%d",c2,c2); return0;}P0593.4給出三角形邊長(zhǎng),算出面積.#include<stdio.h>#include<math.h>intmain(){ doublea=3.67,b=5.43,c=6.21,s,area; s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("areais%f\n",area);//默認(rèn)可以組成三角形. return0;}P0653.5求一無二次等式的根,默認(rèn)兩個(gè)不同根.#include<stdio.h>#include<math.h>intmain(){ doublea,b,c,disc,x1,x2,p,q; scanf("%lf%lf%lf",&a,&b,&c); disc=b*b-4*a*c; p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf("x1=%7.2f\nx2=%7.2f",x1,x2); return0;}P0713.6用%f輸出實(shí)數(shù),只能得到六位小數(shù).#include<stdio.h>#include<math.h>intmain(){ doublea=1.0;//1是整型,1.0是浮點(diǎn)型,默認(rèn)是double.可以是float. printf("%.9f\n",a/3); return0;}P0723.7float型數(shù)據(jù)的有效位數(shù).#include<stdio.h>#include<math.h>intmain(){ floata;//輸出的結(jié)果是.333252,float精度6位,所以第七位后不可信. a=10000/3.0; printf("%f\n",a); return0;}P0783.8使用putchar函數(shù)輸出.#include<stdio.h>#include<math.h>intmain(){ chara='B',b='O',c='Y'; putchar(a); putchar(b); putchar(c); putchar('\n'); putchar(101);//101是A的ASCII代碼的縮寫,因?yàn)榇撕瘮?shù)只能輸出字符. putchar(66); return0;}P0793.9使用getchar得到字符.#include<stdio.h>#include<math.h>intmain(){ chara,b,c; a=getchar(); b=getchar(); c=getchar(); putchar(a); putchar(b); putchar(c);//這也是基本回顯的C程序代碼. putchar('\n'); return0;}P0813.10getchar得到大寫,putchar輸出小寫.#include<stdio.h>#include<math.h>intmain(){ chara,b; a=getchar(); b=a+32; putchar(b); putchar('\n'); return0;}P0820.1國(guó)民生產(chǎn)總值10年后的增長(zhǎng)倍數(shù).#include<stdio.h>#include<math.h>intmain(){ doublep,r=0.09,n=10; p=pow((1+r),n);//這是數(shù)學(xué)函數(shù),pow(x,y)計(jì)算x的y次方. printf("Pis%lfwhen10yearslater.\n",p); return0;//結(jié)果是0.36倍.}P0820.2求各種存款的利息數(shù).#include<stdio.h>#include<math.h>intmain(){ doublep,r,n;//年份和當(dāng)年利率均有給出. p=1000*(1+5*0.0585); printf("5yearsis%lf!\n",p);//1292.5,這是全五年期.lf輸出的是double型. p=(1000*(1+2*0.0468)); p=(p*(1+3*0.0540)); printf("5yearsis%lf!\n",p);//1270.76,這是先二年,再三年的. p=(1000*(1+3*0.0540)); p=(p*(1+2*0.0468)); printf("5yearsis%lf!\n",p);//1270.76,這是先三年,再二年的.證明,是一樣的. p=1000*pow((1+0.0414),5); printf("5yearsis%lf!\n",p);//1224.86,這難道說是,相對(duì)的存死期越久越值錢. p=1000*pow((1+0.072/4),4*5); printf("5yearsis%lf!\n",p);//1428.74. return0;}P0830.3求幾個(gè)月要以還貸.#include<stdio.h>#include<math.h>intmain(){ doublem,r=0.01,d=300000,p=6000; m=(log10(p/(p-d*r)))/(log10(1+r)); printf("%.1lf",m);//按要求只留一個(gè)小數(shù),所以要寫%.1lf. return0;}P0840.6字母密碼轉(zhuǎn)換,調(diào)用函數(shù)及臨界處理.#include<stdio.h>charprintcode(charf){ if(((int)f>86&&(int)f<91)||((int)f>118&&(int)f<123)) { return(f-26+4);//因?yàn)閜utchar會(huì)自動(dòng)返回,所以改成return,因?yàn)檫@是在函數(shù)中,調(diào)用需要返回值. } else { return(f+4); }}intmain(){ chara,b,c,d,e; printf("Pleaseinput:\n"); a=getchar(); b=getchar(); c=getchar(); d=getchar(); e=getchar();//臨界問題. printf("%c%c%c%c%c",printcode(a),printcode(b),printcode(c),printcode(d),printcode(e)); putchar(putcharcode(a)); putchar(putcharcode(b)); putchar(putcharcode(c)); putchar(putcharcode(d)); putchar(putcharcode(e)); return0;//注意理解自定義函數(shù)的定義,使用,及形參實(shí)參的流向. //p84的是計(jì)算問題,自己看著辦,最后要求小數(shù)點(diǎn)后兩位,用的是%.2lf來實(shí)現(xiàn),因?yàn)闆]有要求實(shí)部,所以m.n格式中m不寫. //p84的是定義問題,第一問,兩者都行,但是定義字母時(shí),scanf要寫%c來獲取,而定義數(shù)值時(shí)則要用%d來獲取. //第二問,putchar貌似只能輸出字符,所以用printf.putchar本身就是字符輸出函數(shù)啦,字符,有木有!!!字符啊!!盡管它的參數(shù)可以是putchar('\101'),效果是輸出字符A啊. //第三問,出現(xiàn)"任何"及"無條件",那么答案明顯是"否".可以轉(zhuǎn)換,但要在某此條件下,例如輸出和讀入時(shí),%c是字母,而%d是數(shù)值,看著辦.}選擇結(jié)構(gòu)程序設(shè)計(jì)P0864.1一無二次方程求根的二分支.#include<stdio.h>#include<math.h>intmain(){ doublea,b,c,disc,x1,x2,p,q; scanf("%lf%lf%lf",&a,&b,&c); disc=b*b-4*a*c; if(disc<0)//這是選擇結(jié)構(gòu)和其判斷條件的示例. printf("Thisequationhasn'trealroots\n"); else { p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf("x1=%7.2f\nx2=%7.2f",x1,x2); } return0;}P0874.2二個(gè)數(shù)按大小輸出.#include<stdio.h>intmain()//此程序代表按大小順序輸出.{ floata,b,t; scanf("%f%f",&a,&b);//出錯(cuò)時(shí),注意檢查這里是否按格式輸入了.比如有個(gè)逗號(hào). if(a>b) { t=a; a=b; b=t; } printf("%5.2f,%5.2f\n",a,b); return0;}P0884.3三個(gè)數(shù)按大小輸出.#include<stdio.h>intmain()//此程序代表按大小順序輸出.{ floata,b,c,t; scanf("%f%f%f",&a,&b,&c); if(a>b)//此處執(zhí)行后,a為小者. { t=a; a=b; b=t; } if(a>c)//此處執(zhí)行后,a為小者. { t=a; a=c; c=t; } if(b>c)//上面已經(jīng)搞定a是最小者,現(xiàn)在對(duì)比得出次小者,并且已經(jīng)歸到變量中. { t=b; b=c; c=t; } printf("%5.2f,%5.2f%5.2f\n",a,b,c); return0;}P0994.4判斷輸入字符,并最終按小寫輸出.#include<stdio.h>intmain(){ charch; scanf("%c",&ch); ch=(ch>='A'&&ch<='Z')(ch+32):ch;//條件運(yùn)算符,真取前,假取后. printf("%c\n",ch); return0;}P1004.5按要求輸出相應(yīng)的Y值.#include<stdio.h>intmain(){ intx,y; scanf("%d",&x); if(x>=0) { if(x>0)//這個(gè)范圍要基于x>=0來判斷. { y=1; } else { y=0; } } else//這個(gè)是x<0的范圍. { y=-1; } printf("x=%d,y=%d",x,y); return0;}P1024.6switch的簡(jiǎn)單應(yīng)用.#include<stdio.h>intmain(){ chargrade; scanf("%c",&grade); printf("Yourscore:"); switch(grade) { case'a':printf("85-100\n");break;//當(dāng)多分支結(jié)構(gòu)過于多時(shí),可以用switch來解決. case'b':printf("70-84\n");break; case'c':printf("60-69\n");break; case'd':printf("<60\n");break; default:printf("Enterdataerror!\n"); } return0;}P1044.7按輸入執(zhí)行操作,并且不分大小寫.#include<stdio.h>voidaction1(intx,inty){ printf("x+y=%d\n",x+y);}voidaction2(intx,inty){ printf("x*y=%d\n",x*y);}intmain(){ charch; inta=15,b=23; ch=getchar(); switch(ch) { case'a': case'A':action1(a,b);break;//a,A共用一個(gè)執(zhí)行語句. case'b': case'B':action2(a,b);break; default:putchar('\a');//'\a'可以控制電腦發(fā)出蜂鳴聲. } return0;}P1064.8用if的分支來做閏年問題#include<stdio.h>intmain(){ intyear,leap; printf("Pleaseinputtheyear:\n"); scanf("%d",&year); if(year%4==0)//400年里,在100個(gè)可除盡4的年里計(jì)算,以下是在全范圍內(nèi)計(jì)算. { if(year%100==0)//既是100個(gè)內(nèi)的,又是可以除盡100的,算是且. { if(year%400==0)//相當(dāng)于且了兩次,只余下唯一一個(gè). { leap=1; } else//400年里只有1個(gè)除得盡,其它都不是. { leap=0; } } else//這里的范圍是(year%4==0)&&(year%100!=0) { leap=1;//在合法的100內(nèi),又不是2100,2200一類的,當(dāng)然屬閏年. } } else { leap=0; } if(leap) { printf("%dis",year); } else { printf("%disnot",year); } printf("aleapyear!");//不管上面如何判斷,最后還是會(huì)輸出這一句. return0;}P1084.9一元二次等式的全計(jì)算過程.#include<stdio.h>#include<math.h>intmain(){ doublea,b,c,disc,x1,x2,realpart,imagpart; scanf("%lf%lf%lf",&a,&b,&c); printf("Theequation"); if(fabs(a)<=1e-6)//fabs是絕對(duì)值,le-6,即是的負(fù)六次方,接近或是等于零. { printf("isnotaquadratic!\n"); printf("x1=x2=%lf",-c/b); } else { disc=b*b-4*a*c; if(fabs(disc)<=1e-6)//指數(shù)形式,數(shù)字1. { printf("hastwoequalroots:%lf\n",-b/(2*a)); } else { if(disc>1e-6) { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("hasdistinctrealroots:%lfand%lf\n",x1,x2); } else { realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf("hascomplexroots:\n"); printf("%lf+%lfi\n",realpart,imagpart); printf("%lf+%lfi\n",realpart,imagpart); } } } return0;}P1094.10關(guān)于多個(gè)區(qū)間的計(jì)算,運(yùn)費(fèi)問題為例.#include<stdio.h>intmain(){ doublep,w,s,d,f; printf("p,w,s\n"); scanf("%lf%lf%lf",&p,&w,&s); if(s<250) { d=0.0; f=p*w*s*(1-d); printf("%lf",f); } elseif(s<500) { d=0.02; f=p*w*s*(1-d); printf("%lf",f); } elseif(s<1000) { d=0.05; f=p*w*s*(1-d); printf("%lf",f); } elseif(s<2000) { d=0.08; f=p*w*s*(1-d); printf("%lf",f); } elseif(s<3000) { d=0.1; f=p*w*s*(1-d); printf("%lf",f); } else { d=0.15; f=p*w*s*(1-d); printf("%lf",f); } return0;}P01120.4鍵盤輸入三個(gè)數(shù),輸出最大者.#include<stdio.h>intmina,mida,maxa;intmax(inta,intb,intc){ intm; if(a>b)//凡是比較中,大于號(hào)代表升序排列. { m=a; a=b; b=m; } if(a>c) { m=a; a=c; c=m; } if(b>c) { m=a; a=c; c=m; } return(c);//此排序后,a,b,c由小到大.所以c是返回中最大的.}intmain(){ inta,b,c; printf("Pleaseinput3numbers:"); scanf("%d%d%d",&a,&b,&c); printf("Themaxis%d!\n",max(a,b,c)); return0;}P01120.5一個(gè)小于1000的數(shù),有判定條件.#include<stdio.h>#include<math.h>intmain(){ doublea,b; printf("Pleaseinputanumber:"); scanf("%lf",&a); if(a<1000) { b=sqrt(a); } else { printf("\a");//控制蜂鳴聲 printf("Pleaseinputanumberagain:"); scanf("%lf",&a);11 b=sqrt(a); } printf("%.0lf",b);//按要求,只取整數(shù). return0;}P01120.9一個(gè)不多于5位的數(shù),按條件輸出.#include<stdio.h>#include<math.h>intmain(){ inti,a,b[4],count=0; printf("Pleaseinputanumber(five-digitnumber):");//意思是五位數(shù)以內(nèi). scanf("%d",&a); for(i=0;i<=4;i++) { b[i]=a%10;//是%10,不是/10000,結(jié)果就是b[0]至b[4]中存著個(gè),十,百,千,萬位. a=a/10;///10后得到的結(jié)果去掉了個(gè)數(shù). if(b[i]!=0) { count=count+1; } } printf("%d位數(shù).\n",count); printf("分別輸出每一位數(shù)字,如下:"); for(i=4;i>=0;i--) { printf("%d",b[i]); } printf("\n"); printf("倒序輸出這一個(gè)數(shù)字,如下:"); for(i=0;i<=4;i++) { printf("%d",b[i]); } printf("\n"); return0;}P01120.10按要求提成獎(jiǎng)金(if寫法).#include<stdio.h>intmain(){ doublea,b; printf("Pleaseinputprofitamount:"); scanf("%lf",&a); if(a<=10)//這個(gè)是整個(gè)if的基礎(chǔ). { b=a*0.1; } elseif(a<=20)//以上面為基礎(chǔ),這已經(jīng)代表了10-20間了!!! { b=1+(a-10)*0.075; } elseif(a<=40)//同理,這是20-40間. { b=1+0.75+(a-20)*0.05; } elseif(a<=60) { b=1+0.75+0.1+(a-40)*0.03; } elseif(a<=100) { b=1+0.75+0.1+0.06+(a-60)*0.15; } else//這里是大于100的. { b=1+0.75+0.1+0.06+(a-100)*0.01; } printf("Therewardis%lf!\n",b); return0;}P01120.10按要求提成獎(jiǎng)金(switch寫法).#include<stdio.h>doubleGetProfit(doublec){ printf("Pleaseinputprofitamount:"); scanf("%lf",&c); return(c);//返回本身了,如果有進(jìn)一步的計(jì)算結(jié)果,將值賦給其它變量,也可以返回.}intmain(){ doublea; charc; printf("Yourchoice:\nA:0-10;\nB:10-20;\nC:20-40;\nD:40-60;\nE:60-100;\nF:100-1000;\n"); scanf("%c",&c);//不同檔時(shí),應(yīng)照檔的規(guī)定數(shù)值進(jìn)行輸入,否則結(jié)果不會(huì)是正確的. switch(c)//前三后三用于比較調(diào)用函數(shù). { //GetProfit(c)引入的實(shí)參沒有意義,返回值和引入的實(shí)參沒關(guān)系,反而由鍵盤獲得. case'A':{printf("Therewardis%lf!\n",GetProfit(c)*0.1);};break;//0-100.100 case'B':{printf("Therewardis%lf!\n",1+(GetProfit(c)-10)*0.075);}break;//10-200.075 case'C':{printf("Therewardis%lf!\n",1+0.75+(GetProfit(c)-20)*0.05);}break;//20-400.050 case'D':{printf("Pleaseinputprofitamount:");scanf("%lf",&a);printf("Therewardis%lf!\n",1+0.75+0.1+(a-40)*0.03);}break; //40-600.030 case'E':{printf("Pleaseinputprofitamount:");scanf("%lf",&a);printf("Therewardis%lf!\n",1+0.75+0.1+0.6+(a-60)*0.15);}break; //60-1000.015 case'F':{printf("Pleaseinputprofitamount:");scanf("%lf",&a);printf("Therewardis%lf!\n",1+0.75+0.1+0.6+0.6+(a-100)*0.01);}break; //100-10000.010 default:printf("Errordata!");break;//可以有一個(gè)執(zhí)行體,用{}包括起來. } return0;}P01120.11鍵盤輸入數(shù)值,然后排序輸出.#include<stdio.h>intmain(){ inta[10],i,j,m,n;//變量可以在寫代碼過程中再回來臨時(shí)添加. printf("請(qǐng)輸入數(shù)值的個(gè)數(shù):(十個(gè)以內(nèi))"); scanf("%d",&m);//到這里需要變量來承載數(shù)值的個(gè)數(shù),設(shè)m,回頭去定義變量那寫上m. printf("請(qǐng)分別輸入相對(duì)應(yīng)個(gè)數(shù)的數(shù)值:"); for(i=0;i<m;i++) { scanf("%d",&a[i]); } for(i=0;i<m;i++) { for(j=i+1;j<m;j++) { if(a[i]>a[j])//這是選擇排序法.升序. { n=a[i];//這里需要一個(gè)用于臨時(shí)變量的n,所以回頭去寫上. a[i]=a[j]; a[j]=n; } } } for(i=0;i<m;i++) { printf("%d",a[i]); } return0;}C程序設(shè)計(jì)(第四版)(譚浩強(qiáng))第五章課后習(xí)題答案循環(huán)結(jié)構(gòu)程序設(shè)計(jì)P1155.1用while計(jì)算1至100的合.#include<stdio.h>intmain(){ inti=1,sum=0; while(i<=100)//對(duì)于需要運(yùn)算的值,要么在運(yùn)算前可以賦值,要么一開始要指定. { sum=sum+i; i++; } printf("Thesumis%d.\n",sum); return0;}P1175.2用do-while來做1至100的合.#include<stdio.h>intmain(){ inti=1,sum=0; do//do-while可以做的事,用while都可以做到. {//do-while先做一次執(zhí)行,再判斷條件,而while卻是先做一個(gè)條件,再執(zhí)行. sum=sum+i; i++; }while(i<=100); printf("Thesumis%d.\n",sum); return0;}P1185.3比較do-while與while的差別.#include<stdio.h>intmain(){ inti,sum=0; printf("Pleaseinputanumber:"); scanf("%d",&i);//輸入10以內(nèi),正常,11的話,則sum仍然是0. while(i<=10) { sum=sum+i; i++; } printf("Thesumof1-10is%d.\n",sum); return0;}#include<stdio.h>intmain(){ inti,sum=0; printf("Pleaseinputanumber:"); scanf("%d",&i);//輸入10以內(nèi),結(jié)果一樣.輸入11的話,先做操作,所以sum=11. do { sum=sum+i; i++; }while(i<=10);//此重點(diǎn)在于理解二者的差別. printf("Thesumof1-10is%d.\n",sum); return0;}P1265.4break的例子.#include<stdio.h>intmain(){ inti,b=0,a,c; for(i=0;i<=1000;i++) { printf("Pleaseinputamount:");//循環(huán)體內(nèi)套有輸出語句以及跳出語句. scanf("%d",&a); b=b+a; if(b>=100) { break;//break是用于跳出循環(huán),對(duì)if無效,對(duì)whileforswitch這一類. } } c=b/i; printf("conutis%d,averis%d",i+1,c);//注意%號(hào)后的形式,否則可能輸出錯(cuò)誤. return0;}P1275.5continue的例子.#include<stdio.h>intmain(){ inti; for(i=1;i<20;i++) { if(i%3!=0) { continue;//跳過本次I,執(zhí)行下一個(gè)i. } printf("%d",i); } printf("\n"); return0;}P1285.6形成一個(gè)4*5的矩陣.#include<stdio.h>intmain(){ inti,j,a=0;//沒有給初值,會(huì)出現(xiàn)警告:使用了未初始化的局部變量“a” . for(i=1;i<=4;i++) { for(j=1;j<=5;j++,a++)//a用來控制換行. { if(a%5==0) { printf("\n"); } printf("%d\t",i*j); } } printf("\n"); return0;}P1315.7用一個(gè)交錯(cuò)的式子求哌的近似值.#include<stdio.h>#include<math.h>intmain()//四分之哌等于(1)-(1/3)+(1/5)-(1/7)+(1/9)-(1/11).{ floats=1,n=1,m,sum=0,t; for(m=1;;m=m+2)//不確定哪項(xiàng)才會(huì)小于等于十的負(fù)六次方,所以不指定,無限下去. {//不指定第二項(xiàng),執(zhí)行語句中應(yīng)該有控制跳出的句子,否則死循環(huán). t=(s)*(n/m);//這是第一項(xiàng),s是符號(hào), if(fabs(t)<=1e-6)//應(yīng)該寫在這里,題目要求這一項(xiàng)不累加進(jìn)去. { break; } sum=sum+t;//因?yàn)槔奂禹?xiàng)在這里,所以,一旦跳出就不會(huì)累加進(jìn)來了. s=s*(-1);//變號(hào)一次. } printf("四分之一哌的值是%f.\n",sum); printf("一個(gè)完整哌的值是%f.\n",sum*4); return0;}//下面這段小代碼用來驗(yàn)證關(guān)于數(shù)值型數(shù)據(jù)類型的關(guān)系.去掉注釋,可運(yùn)行.//如果出現(xiàn)類似值為全1或是全零的話,一般可以考慮數(shù)據(jù)類型賦值或是定義錯(cuò)了的問題.//#include<stdio.h>//這是關(guān)于intfloatdouble三者關(guān)復(fù)雜關(guān)系的,亂啊,如果看不懂,可以通過實(shí)驗(yàn)自己明白來.////intmain()//在C語言中,1.0認(rèn)為是實(shí)數(shù),即是double型,所以,如果你把它用float輸出的話,會(huì)有警告:警告 1 warningC4305:“=”:從“double”到“float”截?cái)?.//{// floatm,a,b,c;//一旦定義了是這種類型的話,輸出或是賦值的時(shí)候只能擴(kuò)展不能截?cái)?意思就是能變成double型,不能變成int型啦.而且后面的賦值會(huì)跟著它變成相應(yīng)的類型.比如下面的m=1,其實(shí)得到的是m=1.0.// intd,e,f;// m=1;// a=1.0/3;// b=1/3;// c=m/3;// d=1.0;// e=1/4;// f=1.0/4;// printf("%lf(float用double的%lf來輸出是可以的.)\n%f\n%f\n%f\n",m,a,b,c);//不管上面定義什么,這邊寫的輸出類型是什么,就按相應(yīng)的類型輸出,有可能會(huì)出錯(cuò),所以建議按定義的類型來輸出.當(dāng)然擴(kuò)展的是不會(huì)錯(cuò)的,截?cái)嗟氖菚?huì)錯(cuò)的,比如float可以用%lf來輸出,而不能用%d來輸出.// printf("%d\n%d\n%d\n",d,e,f);//但是,不相應(yīng)的int型不可以用%f來輸出的.因?yàn)閕ntfloat就不同種類,一個(gè)是整數(shù),一個(gè)是小數(shù),floatdouble同樣是有小數(shù)點(diǎn)的!!!!// return0;//}P1335.8著名的Fibonacci(費(fèi)波那契數(shù)列問題)#include<stdio.h>intmain()//這個(gè)就是著名的Fibonacci(費(fèi)波那契數(shù)列問題){ intf1=1,f2=1,f3,i; printf("%12d\n%12d\n",f1,f2); for(i=1;i<=38;i++)//注意,這是個(gè)基礎(chǔ)問題,(i=1;i<=5;i++)這里其實(shí)進(jìn)行了次運(yùn)算,因?yàn)橛衒1,f2,要求有個(gè),所以要有個(gè).要么寫<=38,要么寫<39,邊界問題一定要注意,不可以太隨意!!!! { f3=f1+f2; printf("%12d\n",f3);//這個(gè)問題同樣適用于"一對(duì)兔子一個(gè)月生一對(duì)"的問題., f1=f2;//f1=f1+f2;此時(shí)它們各是,所以,現(xiàn)在的f1是. f2=f3;//f2=f2+f1;此時(shí)的f1已經(jīng)是最先二者之和了.可以不用到f3. } return0;}P1355.9還是求素?cái)?shù),方法不一樣.#include<stdio.h>#include<math.h>intmain(){ doublenum; inti; printf("Pleaseinputanumber:"); scanf("%lf",&num);//因?yàn)閟qrt要求是浮點(diǎn)型,那就給它浮點(diǎn)型,需要時(shí)再強(qiáng)制轉(zhuǎn)換. for(i=2;i<=sqrt(num);i++)//這邊是<=號(hào)沒錯(cuò). { if((int)num%i==0)//如果在這期間有任何一個(gè)可以為零的話,則不是素?cái)?shù). { break;//當(dāng)然跳出. } }//執(zhí)行到這里的時(shí)候,i=5,已經(jīng)變成了!! if(i<=sqrt(num)) { printf("Not%d",(int)num); } else//如上所述,i=5,超出了求根的值,所以是素?cái)?shù). { printf("Yes%d",(int)num); } return0;}P1375.10求100至200間的素?cái)?shù).#include<stdio.h>//不解釋,HOHO>>>>...#include<math.h>intmain(){ doublej; inti,k=0; for(j=100;j<=200;j++) { for(i=2;i<=sqrt(j);i++) { if((int)j%i==0) { break; } } k=k+1;//這里是布局的開頭.學(xué)習(xí)一下,有助邏輯. if(i<=sqrt(j)) { printf("Not%d",(int)j); if(k%5==0)//5個(gè)換一次行. { printf("\n"); } } else { printf("Yes%d",(int)j); if(k%5==0) { printf("\n"); } } } return0;}P1395.11密碼轉(zhuǎn)換.#include<stdio.h>intmain(){ charc; c=getchar(); while(c!='\n')//這也可以用數(shù)組來實(shí)現(xiàn). { if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) { if((c>='w'&&c<='z')||(c>='W'&&c<='Z')) { c=c-22; } else { c=c+4; } printf("%c",c); c=getchar();//套在循環(huán)里,依次得到字母,而while中判斷回車為結(jié)束. } } printf("\n");//這是布局問題. return0;}P1400.3最大公約數(shù)和最小公倍數(shù).#include<stdio.h>//最大公約數(shù)用累除法,除到無余數(shù)時(shí)的被除數(shù)是最大公約數(shù).main(){ intm,n,c,d; intgcd();//這是最大公約數(shù)的縮寫,此處調(diào)用函數(shù),可以不寫里面的實(shí)參. intlcm();//這是最小公倍數(shù)的縮寫,此處調(diào)用函數(shù),可以不寫里面的實(shí)參. printf("Pleaseinputtwonumber:\n"); scanf("%d%d",&m,&n); c=gcd(m,n);//c獲取最大公約數(shù) d=lcm(m,n);//d獲取最小公倍數(shù) printf("TheGCDof%dand%dis:%d!\n",m,n,c); printf("TheLCMof%dand%dis:%d!\n",m,n,d); return0;}intgcd(intx,inty)//最大公約數(shù)GreatestCommonDivisor{ inttemp; while(x%y!=0) { temp=y;//y在下一輪中作為除數(shù),即是下一輪中的X,所以先閃一邊去. y=x%y;//x,y的余數(shù)作為下一輪中的Y,由x%y來取得. x=temp;//剛才temp中存儲(chǔ)了y的值,現(xiàn)在拿出來作為下一輪中的X使用. } returny;//這是每一輪中的被除數(shù),按原理來,這就是最大公約數(shù),即累除法的原理.}intlcm(intx,inty)//最小公倍數(shù)LowestCommonMultiple{ inti,temp; if(x<y)//此段代碼結(jié)果是保證二者大的數(shù)在X上,小的數(shù)在Y上.即小于號(hào)降序. {//以下為經(jīng)典三行碼,實(shí)現(xiàn)兩個(gè)數(shù)的互換. temp=x; x=y; y=temp; } for(i=1;i<=y;i++)//設(shè)定一個(gè)區(qū)間,從1至大的數(shù)之間的循環(huán). { if(!((x*i)%y))//此式子如有余數(shù),加上"!"號(hào),會(huì)是假,則不返回,進(jìn)行下一輪. {//如此往復(fù),直到取模無余數(shù),那么小的數(shù)X乘以區(qū)間當(dāng)前的I值,就是最小公倍數(shù). returnx*i; } }}P1400.4判斷一串輸入的字符.#include<stdio.h>intmain(){ charch; inta=0,b=0,c=0,d=0,e=0; printf("Pleaseinputthestring\n"); while((ch=getchar())!='\n')//直到回車. { if(ch<='z'&&ch>='a') { a++; } elseif(ch=='') { c++; } elseif(ch<58&&ch>47) { d++; } elseif(ch<='Z'&&ch>='A') { b++; } else { e++; } } printf("大寫%d小寫%d空格%d數(shù)字%d其它%d\n",a,b,c,d,e);}P1400.52+22+222+2222系列的和.#include<stdio.h>//不理解時(shí)可以百度或是谷歌更多的信息.intmain()//想辦法既快速做完,又要消化理解!!!{ inttemp,i,a,n,sum=0;//主邏輯,友好性暫時(shí)放松. scanf("%d%d",&a,&n);//a是數(shù)字,n是要乘的個(gè)數(shù). temp=a;//先把第一階的值存起來. for(i=0;i<n;i++) { sum=sum+a; printf("%d+",a);//事關(guān)布局. a=a*10+temp;//重點(diǎn)是每次乘,然后加上上一個(gè)數(shù). } printf("=%d.",sum); return0;}P1400.61!+2!+3!+4!.....的值.#include<stdio.h>intmain()//1!+2!+3!+4!.....{ inti,j,k,sum=0,m=1; scanf("%d",&k);//比如設(shè)定為,值為. for(i=1;i<=k;i++)//第一層循環(huán),指定到. { for(j=1;j<=i;j++)//第二層循環(huán),指定至當(dāng)前數(shù). { m=m*j; }//到此是階乘的結(jié)構(gòu). sum=sum+m; m=1; } printf("%d",sum);//完全不理解時(shí),搜索并參考. return0;//嘗試自己做,第一次做出來就是自己的東西了.}P1400.71至100,1至50平方,1至10倒數(shù)的總和.#include<stdio.h>intmain(){ inta,b; doublec,asum=0,bsum=0,csum=0; for(a=1;a<=100;a++)//三個(gè)塊分別注釋驗(yàn)證結(jié)果. { asum=asum+a; } for(b=1;b<=50;b++)//在VS運(yùn)行中,注意*.cpp為C++語言. { bsum=bsum+b*b;//為了避免語言差別,請(qǐng)注意文件名為*.c. } for(c=1;c<=10;c++)//c作浮點(diǎn)運(yùn)算,所以定義在double類型中. { csum=csum+1/c; } printf("%lf",asum+bsum+csum); return0;}PP#include<stdio.h>#include<math.h>intmain(){ intj,k,s[6],x=100,y,sum=0; for(j=153;j<=154;j++) { for(k=2;k>=0;k--) { s[k]=j%(int)pow(10,k+1)/(int)pow(10,k); y=pow(s[k],3); sum+=y; printf("%d-%d--%d\t",k,s[k],j); } printf("%d\n",sum); } return0;}P1400.8水仙花數(shù).//#include<stdio.h>//一步步的發(fā)現(xiàn)問題.////intmain()//在%和/號(hào)之間,以前pow.以后再做.//{// inti,j,k,a,b,c,sum=0;//這里邏輯對(duì),算出來卻錯(cuò)了.// for(i=2;i<=4;i++)//計(jì)算機(jī)在想什么,看來它的大腦難以模擬.// {// for(j=pow(10,i);j<=pow(10,i+1)-1;j++)//我不完全明白它遵守的邏輯.// {// for(k=0;k<=i;k++)// {// sum+=pow((j%pow(10,i+1)/pow(10,i)),3);// }// if(sum==j)// {// printf("%d是水仙花數(shù)!\n",j);// }// sum=0;// }// }// return0;//}//為什么還是無法實(shí)現(xiàn)!#include<stdio.h>#include<math.h>intmain(){ inta,b,c,i,sum=0;//這里只計(jì)算三位數(shù)的. for(i=100;i<1000;i++) { a=i/100; b=i%100/10; c=i%10; sum+=a*a*a+b*b*b+c*c*c; if(sum==i) { printf("%d是水仙花數(shù).\n",i); } sum=0; } return0;}P1410.9完數(shù).#include<stdio.h>intmain(){ inti,j,r; for(i=1;i<=1000;i++)//零是個(gè)臨界值,不能包括它. { r=0;//每次清零重來.類似水仙中的sum. for(j=1;j<i;j++) { if(i%j==0)//除得盡即是因子. { r=r+j;//然后累加進(jìn)去. } } if(r==i)//若相等. { printf("%d是完數(shù).\n",i); } } return0;}P1410.102/1+3/2+5/3+8/5+13/8…#include<stdio.h>intmain()//10.007051{ doublei,a=2,b=1,c,s=0;//a是分子,b是分母. for(i=0;i<6;i++)//二十可以用戶指定. { s+=a/b;//中間儲(chǔ)值變量. c=a+b; b=a; a=c; } printf("%lf\n",s); return0;}P1410.11球落地并反彈問題.#include<stdio.h>intmain()//從一百開始,減一半再自加兩次,下降一次,反彈一次.{ doublesum=100,high=100,up,donw,i; for(i=1;i<10;i++)//不管指定到哪個(gè)數(shù),都不會(huì)超過三百. { up=high/2; donw=up; high=donw;//自咬尾巴問題. sum+=donw*2; } printf("%lf%lf\n",donw,sum); return0;}P1410.12猴子吃桃子.#include<stdio.h>intmain()//從一百開始,減一半再自加兩次,下降一次,反彈一次.{ inti,sum=1; for(i=1;i<=10;i++)//臨界要清楚,結(jié)果要與手算的前幾個(gè)實(shí)例相匹配. { printf("倒數(shù)第%d天還剩有%d個(gè)桃子.\n",i,sum); sum=(sum+1)*2; } //printf("%d\n",sum); return0;}P1410.16輸出星號(hào)棱形圖案.#include<stdio.h>#include<conio.h>main()//只關(guān)注左半部分.右半部分無視空格.{inti,j,k,m=6;//m可指定,指定中心點(diǎn)位置.可任意奇偶.for(i=1;i<=m;i++)//上半部分.其實(shí)也是正三角.{for(j=1;j<=m-i;j++)//一到中心點(diǎn)前i個(gè)位置填充空格.printf("");for(k=1;k<2*i;k++)//空格后向前填充星號(hào)的個(gè)數(shù).是奇數(shù).一,三,五...printf("*");printf("\n");}for(i=m-1;i>0;i--)//下半部分.其實(shí)也是倒三角.{//減一是因?yàn)樾袛?shù)問題.這是中心行以下的.for(j=m-1;j>=i;j--)printf("");for(k=1;k<2*i;k++)printf("*");printf("\n");}getch();//用戶反應(yīng)后結(jié)束.但,沒必要.}第六章?第六章循環(huán)控制?6.1輸入兩個(gè)正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。?main()?{longm,n,i=1,j,s;?scanf("%ld,%ld",&m,&n);?for(;i<=m&&i<=n;i++)?{if(m%i==0&&n%i==0)s=i;}?if(m>=n)j=m;?elsej=n;?for(;!(j%m==0&&j%n==0);j++);?printf("s=%ld,j=%ld\n",s,j);?}?6.2輸入一行字符,分別統(tǒng)計(jì)出其中英文字母、空格、數(shù)字和其他字符的個(gè)數(shù)。?#include"stdio.h"?main()?{charc;inti=0,j=0,k=0,l=0;?while((c=getchar())!=’\n’)?{if(c>=65&&c<=90||c>=97&&c<=122)i++;?elseif(c>=48&&c<=57)j++;?elseif(c==32)k++;?elsel++;}?printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l);?}?6.3求Sn=a+aa+aaa+…+aa…aaa(有n個(gè)a)之值,其中a是一個(gè)數(shù)字。例如:2+22+222+2222+22222(n=5),n由鍵盤輸入。?#include"math.h"?main()?{intn,sum=0,i=1,s=2;?scanf("%d",&n);?while(i<=n)?{sum=sum+s;s=s+2*pow(10,i);?i++;}?printf("sum=%d\n",sum);?}?6.4求,(即求1!+2!+3!+4!+5!+…+20!)?main()?{intn,i=1;longsum=0,s=1;?scanf("%d",&n);?while(i<=n){s=s*i;sum=sum+s;i++;}?printf("sum=%ld\n",sum);?}?6.5求??main()?{doublei=1,j=1,k=1,s1=0,s2=0,s3=0,sum;?for(;i<=100;i++)s1=s1+i;?for(;j<=50;j++)s2=s2+j*j;?for(;k<=10;k++)s3=s3+1/k;?sum=s1+s2+s3;?printf("sum=%f\n",sum);?}?6.6打印出所有"水仙花數(shù)",所謂"水仙花數(shù)"是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該本身。例如:153是一個(gè)水仙花數(shù),因?yàn)?53=1^3+5^3+3^3。?#include"math.h"?main()?{intx=100,a,b,c;?while(x>=100&&x<1000){a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b;?if(x==(pow(a,3)+pow(b,3)+pow(c,3)))printf("%5d",x);x++;}?}?6.7一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為"完數(shù)"。例如,6的因子為1、2、3,而6=1+2+3,因此6是"完數(shù)"。編程序找出1000之內(nèi)的所有完數(shù),并按下面格式輸出其因子:?6itsfactorsare1、2、3?main()?{intm,i,j,s;?for(m=6;m<10000;m++)?{s=1;?for(i=2;i<m;i++)?if(m%i==0)s=s+i;?if(m-s==0)?{printf("%5ditsfastorsare1",m);for(j=2;j<m;j++)if(m%j==0)?printf("%d",j);printf("\n");}?}?}?或?main()?{intm,i,j,s;?for(m=6;m<1000;m++)?{s=m-1;?for(i=2;i<m;i++)?if(m%i==0)s=s-i;?if(s==0)?{printf("%5di

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論