版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
習(xí)題參考答案
習(xí)題一參考答案:
【習(xí)題1-1]ABCD
【習(xí)題1-2]C
【習(xí)題1-3]B
【習(xí)題1-4]B
【習(xí)題1-5]略
習(xí)題二參考答案:
一、單項(xiàng)選擇題
【習(xí)題2-1】?【習(xí)題2-6】:CCDBAA
二、簡(jiǎn)答題
【習(xí)題2-7】:
C語(yǔ)言提供了豐富的數(shù)據(jù)類型,可以根據(jù)這些數(shù)據(jù)類型構(gòu)造出不同的數(shù)據(jù)結(jié)
構(gòu)。C中的數(shù)據(jù)類型包括基本類型、構(gòu)造類型、指針類型、空類型等。其中基本
類型包括整型、字符型、實(shí)型(浮點(diǎn)型)等。
【習(xí)題2-8】:
C中整常數(shù)的表示
整型常量即整常數(shù)。C整常數(shù)可用以下三種形式表示:
①十進(jìn)制整數(shù);
②八進(jìn)制整數(shù)。以數(shù)字0開(kāi)頭的數(shù)是八進(jìn)制數(shù),如0123表示八進(jìn)制數(shù)123;
③十六進(jìn)制整數(shù)。以O(shè)x開(kāi)頭的數(shù)是十六進(jìn)制數(shù)。如0x123,代表十六進(jìn)制
數(shù)123o
【習(xí)題2-9】:
C規(guī)定對(duì)所有的變量要“先定義,后使用”,這樣規(guī)定有以下好處:
(1)便于糾錯(cuò);
(2)便于編譯系統(tǒng)為變量分配存儲(chǔ)空間;
(3)運(yùn)算合法性檢查。
【習(xí)題2-10]:
C語(yǔ)句可以分為以下五類:
(1).控制語(yǔ)句。完成一定的控制功能;
(2).函數(shù)調(diào)用語(yǔ)句;
(3)表達(dá)式語(yǔ)句;
(4)空語(yǔ)句;
(5)可以用{}把一些語(yǔ)句括起來(lái)成為復(fù)合語(yǔ)句。
C只有9種控制語(yǔ)句,它們是:
(1)if()?else?(條件語(yǔ)句)
(2)for()?(轉(zhuǎn)向語(yǔ)句)
(3)while()~(循環(huán)語(yǔ)句)
(4)do?while()(循環(huán)語(yǔ)句)
(5)continue(結(jié)束本次循環(huán)語(yǔ)句)
(6)break(中止執(zhí)行switch或循環(huán)語(yǔ)句)
(7)switch(多分支選擇語(yǔ)句)
(8)goto(轉(zhuǎn)向語(yǔ)句)
(9)return(從函數(shù)返回語(yǔ)句)
【習(xí)題2-11]:
表達(dá)式不是獨(dú)立存在的,它存在于其它表達(dá)式、語(yǔ)句、函數(shù)參數(shù)里,表達(dá)式
后面加上一個(gè)分號(hào),就變成表達(dá)式語(yǔ)句,如
i=i+l(是表達(dá)式,不是語(yǔ)句)
i=i+l;(是語(yǔ)句)
表達(dá)式能構(gòu)成語(yǔ)句是C語(yǔ)言的一個(gè)特色。其實(shí)“函數(shù)調(diào)用語(yǔ)句”也是屬于表達(dá)
式語(yǔ)句,因?yàn)楹瘮?shù)調(diào)用也屬于表達(dá)式的一種,只是為了便于理解和使用,我們把
“函數(shù)調(diào)用語(yǔ)句”和“表達(dá)式語(yǔ)句”分開(kāi)來(lái)說(shuō)明。由于C程序中大多數(shù)語(yǔ)句是
表達(dá)式語(yǔ)句(包括函數(shù)調(diào)用語(yǔ)句),所以有人把C語(yǔ)言稱作“表達(dá)式語(yǔ)言”。
【習(xí)題2-12]:
字符常量就是一個(gè)字符,用單引號(hào)括起來(lái),占一個(gè)字節(jié);而字符串常量是由
若干個(gè)字符組合而成,用雙引號(hào)括起來(lái),存貯時(shí)自動(dòng)在后面加“\0”,即使同樣
是一個(gè)字符,字符串常量后面還要加一個(gè)“\0”。
【習(xí)題2-13]:
(l)12,a;(2)40,20;(3)l13,4b;(4)176627,fd97;(5)177621,ff91;(6)4663,9b3;(7)l10022,90
12;(8)51013,520bo
三、閱讀程序?qū)懡Y(jié)果或填空
【習(xí)題2-14]:
aabbccabc
AN
【習(xí)題2-15]:261
【習(xí)題2-16]:10
【習(xí)題2-17]:
57
57
67.856400,-789.124023
67.856400,-789.124023
67.86,-789.12,67.8564,-789.1240,67.856400,-789.124023
6.78564e+01,-7.9e+02
A,65,101,41
1234567,4553207,d687
65535,177777,
COMPUTER,COM
【習(xí)題2-18]:9,11,9,10
【習(xí)題2-19】:2.5
【習(xí)題2-20】:3.5
【習(xí)題2-21】:(1)14,(2)10,(3)60,(4)0,(5)0,(6)0
【習(xí)題2-22]:x>-5&&x<5
x>5||x<-5
四、編寫(xiě)程序題
【習(xí)題2-23]
main()
(
floatr,h,Cl,Sa,Sb,Va,Vb;
scanf("%f,%f,,&r,&h);
Cl=2*3.14*r;
Sa=3.14*r*r;
Sb=4*Sa;
Va=4*3.14*r*r*r/3;
Vb=Sa*h;
printf("Cl=%.2f\n",Cl);
printf("Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n",Sa,Sb,Va,Vb);
}
【習(xí)題2-24]
main()
{floatF,c;
printf("請(qǐng)輸入一個(gè)華氏溫度:\n");
scanf("%f',&F);
c=5.0/9.0*(F-32);/*注意5和9要實(shí)型表示,否則5/9的值為0*/
printf("攝氏度為:%5.2f\n",c);
)
【習(xí)題2-25]
#includenstdio.hH
main()
{charcl,c2;
printf("請(qǐng)輸入兩個(gè)字符cl,c2:\n");
cl=getchar();
c2=getchar();
printf("用putchar語(yǔ)句輸出結(jié)果為:\nn);
putchar(cl);
putchar(,,);
putchar(c2);
printf("用printf語(yǔ)句輸出結(jié)果為:\n");
printf("\n%c%c\n",cl,c2);
(1)都可以;
(2)用printf。函數(shù);
(3)不是在任何情況下,因?yàn)閏har只有一個(gè)字節(jié),而int有2個(gè)字節(jié)。能表示
的范圍不一樣。
【習(xí)題2-26]:
#include<stdio.h>
#definePI3.14159
main()
floatr,h,cl,cs,cvz;
printf(nInputr,h:n);
scanf(n%f,%f;&r,&h);
cl=2*PI*r;
cs=PI*r*r;
cvz=cs*h;
printffThelengthofthecircumference:%6.2f\nn,cl);
printf(Hareaofthecircle:%6.2f\nn,cs);
printfi(,!volumeofthecolumn:%6.2f\nH,cvz);
}
【習(xí)題2.27】:
#include<stdio.h>
main()
(
charch;
printf(n\nlnputaletter:0);
scanf(n%cn,&ch);
printf(n\nASCntheletter:%dH,ch);
)
習(xí)題三參考答案:
一、單項(xiàng)選擇題
【習(xí)題3-1】?【習(xí)題3-6】:DCADCBo
【習(xí)題3-7】:
(1)0,(2)1,(3)1,(4)0,(5)1o
二、簡(jiǎn)單題
【習(xí)題3-8】:
程序解決問(wèn)題是按指定的次序執(zhí)行一系列操作的結(jié)果,按照次序執(zhí)行操作的
過(guò)程描述稱為算法。
算法的特性:(1)有窮性;(2)確定性;(3)有零個(gè)或多個(gè)輸入;(4)有一個(gè)或多
個(gè)輸出;(5)有效性。
舉例:菜譜操作步驟、樂(lè)譜、施工圖紙等等。
【習(xí)題3-9】:
(1)自然語(yǔ)言,(2)偽代碼,(3)流程圖,(4)計(jì)算機(jī)語(yǔ)言。
自然語(yǔ)言通俗易懂,但有歧義性;偽代碼方便實(shí)用,但沒(méi)有流程圖明晰,容
易犯邏輯錯(cuò)誤;流程圖明晰但繪制和修改時(shí)比較繁瑣;計(jì)算機(jī)語(yǔ)言表示算法嚴(yán)謹(jǐn),
但無(wú)法做到算法設(shè)計(jì)的第一步就使用計(jì)算機(jī)語(yǔ)言,讀程序比看流程圖要費(fèi)神很
多。
【習(xí)題3-10]:
順序結(jié)構(gòu),由順序執(zhí)行的一組語(yǔ)句或者結(jié)構(gòu)組成。(2)分支結(jié)構(gòu),根據(jù)判斷
條件,做出取舍,要么執(zhí)行A分支要么執(zhí)行B分支,必須執(zhí)行其中的一個(gè),
不可全執(zhí)行也不可全不執(zhí)行。(3)循環(huán)結(jié)構(gòu),由需要反復(fù)執(zhí)行的一段代碼或
者結(jié)構(gòu)組成。任何算法功能都可以通過(guò)以上三種基本程序結(jié)構(gòu)的組合來(lái)實(shí)
現(xiàn)。
【習(xí)題3-11]:非0為真,0為假。
三、用傳統(tǒng)流程圖表示求解以下問(wèn)題的算法。
【習(xí)題3-12]?【習(xí)題3-19]:如下圖3-12~3-19所示。
3-123-133-14
其中的符號(hào)”表示“倒給”,例如“A-C”“將A瓶中的液體倒給C
瓶”
A
2->i
i+1—*i|n—?i|
/打印n/
n+1—>n
(結(jié)束)
3-153-17
3-183-19
四、編寫(xiě)程序題
【習(xí)題3-20]:
#include<stdio.h>
main()
{intx,y;
printf("輸入x:n);
scanf("%dn,&x);
if(x<1)/*x<l*/
{y=x;
printf(Hx=%3d,y=x=%d\nn,x,y);
)
elseif(x<10)/*l<x-10*/
{y=2*x-l;
printf(Mx=%3d,y=2*x-l=%d\n”,x,y);
)
else/*x>10*/
{y=3*x-l1;
printf(nx=%3d,y=3*x-ll=%d\nn,x,y);
)
}
【習(xí)題3-21]:
#include<stdio.h>
main()
{longintnum;
intindiv,ten,hundred,thousand,ten_thousand,place;
/*分別代表個(gè)位、十位、百位、千位、萬(wàn)位和位數(shù)*/
printf(”請(qǐng)輸入一個(gè)整數(shù)(0-99999):)
scanf(n%ldH,&num);
if(num>9999)place=5;
elseif(num>999)place=4;
elseif(num>99)place=3;
elseif(num>9)place=2;
elseplace=l;
printf(Hplace=%d\nn,place);
ten_thousand=num/l0000;
thousand=num/l000%10;
hundred=num/l00%10;
ten=num%100/10;
indiv=num%10;
switch(place)
{case5:printf(n%d,%d,%d,%d,%dn,ten_thousand,thousand,hundred,ten,indiv);
printf("\n反序數(shù)字為;”);
printfifH%d%d%d%d%d\nn,indiv,ten,hundred,thousand,tenthousand);
break;
case4:printf(n%d,%d,%d,%dn,thousand,hundred,ten,indiv);
printf(”\n反序數(shù)字為:”);
printf(,,%d%d%d%d\nH,indiv,ten,hundred,thousand);
break;
case3:printf(n%d,%d,%dM,hundred,ten,indiv);
printf("\n反序數(shù)字為:");
printf(^,%d%d%d\n^^,indiv,ten,hundred);
break;
case2:printf(n%d,%dH,ten,indiv);
printf("\n反序數(shù)字為:");
printf("%d%d\n",indiv,ten);
break;
case1:printf(,,%dn,indiv);
printf("\n反序數(shù)字為:");
printf(H%d\ii,\indiv);
break;
}
【習(xí)題3-22]:
(1)用if語(yǔ)句編程序。
#include<stdio.h>
main()
{longi;
floatbonus,bon1,bon2,bon4,bon6,bon10;
bonl=100000*0.1;/*利潤(rùn)為10萬(wàn)元時(shí)的獎(jiǎng)金*/
bon2=bon1+100000*0.075;/*利潤(rùn)為20萬(wàn)元時(shí)的獎(jiǎng)金*/
bon4=bon2+200000*0.05;/*利潤(rùn)為40萬(wàn)元時(shí)的獎(jiǎng)金*/
bon6=bon4+200000*0.03;/*利潤(rùn)為60萬(wàn)元時(shí)的獎(jiǎng)金*/
bon10=bon6+400000*0.015;/*利潤(rùn)為100萬(wàn)元時(shí)的獎(jiǎng)金*/
printf("請(qǐng)輸入利潤(rùn)i:");
scanf("%ld",&i);
if(i<=100000)
bonus=i*0.1;/*利潤(rùn)在10萬(wàn)元以內(nèi)按0.1提成獎(jiǎng)金*/
elseif(i<=200000)
bonus=bon1+(i-100000)*0.075;/*利潤(rùn)在10萬(wàn)至20萬(wàn)元時(shí)的獎(jiǎng)金*/
elseif(i<=400000)
bonus=bon2+(i-200000)*0.05;/*利潤(rùn)在20萬(wàn)至40萬(wàn)元時(shí)的獎(jiǎng)金*/
elseif(i<=600000)
bonus=bon4+(i-400000)*0.03;/*利潤(rùn)在40萬(wàn)至60萬(wàn)元時(shí)的獎(jiǎng)金*/
elseif(i<=1000000)
bonus=bon6+(i-600000)*0.015;/*利潤(rùn)在60萬(wàn)至100萬(wàn)元時(shí)的獎(jiǎng)金*/
else
bonus=bon10+(i-1000000)*0.01;/*利潤(rùn)在100萬(wàn)元以上時(shí)的獎(jiǎng)金*/
printf("獎(jiǎng)金是%10.2f\n",bonus);
此題的關(guān)鍵在于正確寫(xiě)出每一區(qū)間的獎(jiǎng)金計(jì)算公式。例如利潤(rùn)在10萬(wàn)元至
20萬(wàn)時(shí),獎(jiǎng)金應(yīng)由兩部分組成:①利潤(rùn)為10萬(wàn)元時(shí)應(yīng)得的獎(jiǎng)金。即100000*0.1;
②10萬(wàn)元以上部分應(yīng)得的獎(jiǎng)金。即(num-100000)*0.075。同理,20萬(wàn)?40萬(wàn)這
個(gè)區(qū)間的獎(jiǎng)金也應(yīng)由兩部分組成:JD利潤(rùn)為20萬(wàn)元時(shí)應(yīng)得的獎(jiǎng)金,即
100000*0.1*10萬(wàn)*0.075;②20萬(wàn)元以上部分應(yīng)得的獎(jiǎng)金,即(num-200000)*0.05。
程序中先把10萬(wàn)、20萬(wàn)、40萬(wàn)、60萬(wàn)、100萬(wàn)各關(guān)鍵點(diǎn)的獎(jiǎng)金計(jì)算出來(lái),即
bonl>bon2>bon4、bon6、honlO;然后再加上各區(qū)間附加部分的獎(jiǎng)金。
(2)用switch語(yǔ)句編程序。
輸入利潤(rùn)i,確定相應(yīng)的提成等級(jí)branch
#include<stdio.h>
main()
{longi;
floatbonus,bonl,bon2,bon4,bon6,bon10;
intc;
bonl=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
printf("請(qǐng)輸入利潤(rùn)i:”);
scanf(n%ldH,&i);
c=i/100000;
if(c>10)c=10;
switch(c)
{case0:bonus=l*0.1;break;
case1:bonus=bon1+(i-100000)*0.075;break;
case2:
case3:bonus=bon2+(i-200000)*0.05;break;
case4:
case5:bonus=bon4+(i-400000)*0.03;break;
case6:
case7:
case8:
case9:bonus=bon6+(i-600000)*0.015;break;
case10:bonus=bon10+(i-1000000)*0.01;
)
printf("獎(jiǎng)金是%10.2f,bonus);
)
【習(xí)題3-23]:
#include<stdio.h>
main()
{intt,a,b,c,d;
printf-請(qǐng)輸入4個(gè)整數(shù):”);
scanf(n%d,%d,%d,%dn,&a,&b,&c,&d);
printf(H\na=%d,b=%d,c=%d,d=%d\n,,,a,b,c,d);
ififa>b){t=a;a=b;b=t;}
if(a>c){t=a;a=c;c=t;}
ififa>d){t=a;a=d;d=t;}
ififb>c){t=a;b=c;c=t;}
if(b>d){t=b;b=d;d=t;}
if(c>d){t=c;c=d;d=t;}
printf("排序結(jié)果如下:\nH);
printf(H%d,%d,%d,%d\nn,a,b,c,d);
)
【習(xí)題3-24]:
#include<stdio.h>
main()
{intp,r,n,m,temp;
printf("請(qǐng)輸入兩個(gè)正整數(shù)n,m:");
scanf(,!%d,%dn,&n,&m);
if(n<m)
{temp=n;n=m;m=temp;}/*把大數(shù)放在n中,小數(shù)放在m中*/
p=n*m;/*先將n和m的乘積保存在p中,以便求最小公倍數(shù)時(shí)用*/
while(m!=O)/*求n和m的最大公約數(shù)*/
{r=n%m;
n=m;
m=r;
)
printf("它們的最大公約數(shù)為:%d\n\n);
printf(”它們的最小公倍數(shù)為:%d\nu,p/n);/*P是原來(lái)兩個(gè)整數(shù)的乘積*/
}
【習(xí)題3-25]:
#include<stdio.h>
main()
{charc;
intIetter=0,space=0,digit=0,other=0;
printff請(qǐng)輸入一行字符:\n)
while((c=getchar())!=,\n,)
{if(c>-a,&&c<-z,||c>-A^&^-z*)letter-H-;
else*)space";
elseif(c>=U&&cv=9)digit";
elseother-H-;
)
printf("字母數(shù)=%d,空格數(shù)=%d,數(shù)字?jǐn)?shù)=%d,其他字符數(shù)'
=%d\nn,letter,space,digit,other);
)
【習(xí)題3-26]:
#include<stdio.h>
mainO
(
inta,b,x,y;
scanf(〃%d,%d〃,&a,&b);
x=a*a+b*b;
if(x>100){y=x/100;printfC%d,z,y);}
elseprintf(〃%d〃,a*a+b*b);
)
【習(xí)題3-27】:
#include<stdio.h>
mainO
(
intx;
scanf(〃%d,〃,&x);
if(x%5==0&&x%7==0)printf(〃Yes〃);
elseprintf(〃No.〃);
)
【習(xí)題3-28]:
#include<stdio.h>
mainO
(
intx;
floaty;
scanf(〃%d,",&x);
if(x<0)y=0;
elseif(x>0&&x<=10)y=x;
elseif(x>10&&x<=20)y=10;
elseif(x>20&&x<40)y=-0.5*x+20;
elsey=-l;
if(y!=-l)printfC%r,y);
elseprintf("Error!\n〃);
)
【習(xí)題3-29]:
#include<stdio.h>
mainO
(
intx;
scanf(〃%d,〃,&x);
if((x%3==0)&&(x%5==0)&&(x%7==0))
printf(z,%dcanbedividedby3,5,7\n〃,x);
elseif((x%3==0)&&(x%5==0))
printf(/z%dcanbedividedby3,5,\n〃,x);
elseif((x%3==0)&&(x%7==0))
printf(z/%dcanbedividedby3,7\n〃,x);
elseif((x%5==0)&&(x%7==0))
printf(z/%dcanbedividedby5,7\n〃,x);
elseif(x%3==0)
printf(zz%dcanbedividedby3\n〃,x);
elseif(x%5==0)
printf(zz%dcanbedividedby5\n〃,x);
elseif(x%7==0)
printf(zz%dcanbedividedby7\n〃,x);
elseprintf(〃%dcannotbedividedby3,5,7\n〃,x);
【習(xí)題3-30】:
#include<stdio.h>
mainO
(
floatx;
inty;
printf(〃\ninputx:〃);
scanf&x);
switch(x<0)
case1:y="l;break;
case0:switch(x==0)
{case1:y=0;break;
defaut:y=l;
)
)
printfC\ny=%d",y);
)
【習(xí)題3-31]:
#include<stdio.h>
mainO
{
intscore,temp,log;chargrade;
log=l;
while(log)
{
printf("enterscore:z,);
scanf(〃%d〃,&score);
if(score>1001|score<0)
printf(z/\nerror,tryagain!\n,z);
elselog=0;
if(score==100)temp=9;
elsetemp=(score-score%10)/IO;
switch(temp)
(
case0:
case1:
case2:
case3:
case4:
case5:grade='E';break;
case6:grade='D';break;
case7:grade='C';break;
case8:grade='B';break;
case9:grade='A';break;
)
printf(z/score=%d,grade=%c\nz,,score,grade);
}
【習(xí)題3?32】:
#include<stdio.h>
main()
(
inta,b;
charsymbol;
printfCpleaseenter:");
scanf(/z%d%c%di〃,&a,&symbol,&b);
printf("Originalvalue:%d%c%di\n,,,a,symbol,b);
if(symbol二二'」)
symbol=,+,;
elsesymbol='-';
z,,,
printf(Newvalue:%d%c%di)a,symbol,b);
)
【習(xí)題3?33]:
#include<stdio.h>
main()
{inta,n,i=l,sn=0,tn=0;
printf(ua,n=:");
scanf(M%d,%dn,&a,&n);
while(i<=n)
{tn=tn+a;/*賦值后的tn為i個(gè)a組成數(shù)的值*/
sn=sn+tn;/*賦值后的sn為多項(xiàng)式前i項(xiàng)之和*/
a=a*10;
++i;
}
printf(Ha+aa+aaa+...=%d\nn,sn);
【習(xí)題3-34]:
#include<stdio.h>
main()
{floats=O,t=l;
intn;
fdr(n=l;n<=20;n++)
{t=t*n;/*求n!*/
s=s+t;/*將各項(xiàng)累加*/
)
printfC'l!+2!+...+20!=%e\n",s);
)
【習(xí)題3-35]:
#include<stdio.h>
main()
{intnl=100,n2=50,n3=10;
floatk;
floatsl=0,s2=0,s3=0;
fbr(k=l;k<=n1;k++)/*計(jì)算1到100的和*/
sl=sl+k;
fbr(k=l;k<=n2;k++)/*計(jì)算1到50各數(shù)的平方和*/
s2=s2+k*k;
fdr(k=1;k<=n3;k++)/*計(jì)算1到10各數(shù)的倒數(shù)和*/
s3=s3+l/k;
printf("總和=%8.2血”上1+s2+s3);
【習(xí)題3-36]:
#include<stdio.h>
main()
{inti,j,k,n;
printf("“水仙花"數(shù)是:");
fdr(n=100;n<1000;n++)
{i=n/100;
j=n/10-i*10;
k=n%10;
if(n==i*i*i+j*j*j+k*k*k)
printf(n%4d,\n);
)
printf(n\nn);
)
【習(xí)題3-37】:
#include<stdio.h>
main()
intday=O,num=2;
floatsum=0.0,ave;
while(num〈二100)
(
sum+=0.8*num;
day++;num*=2;
)
ave=sum/day;
printf(/z\nave=%5.2f〃,ave);
)
【習(xí)題3-38]:
#include<stdio.h>
mainO
(
inti;
for(i=l;i<100;i++)
if(i*i%10==i||i*i%100==i)
printf(〃%3d〃,i);
}
【習(xí)題3?39]參考答案:
#include<stdio.h>
main()
(
inti,x,y;
longlast=l;
printf(z,Inputx,y:〃);
scanf(〃%d,%d〃,&x,&y);
for(i=l;i<=y;i++)
last=last*x%1000;
printf(Z/The3digits:ld\n,/,last);
)
【習(xí)題3-40]:
方法一:程序如下
SdefineM1000/*定義尋找范圍*/
Sinclude<stdio.h>
main()
{intk1,k2,k3,k4,k5,k6,k7,k8,k9,k10;
inti,a,n,s;
for(a=2;a<=M;a++)/*a是2-1000之間的整數(shù).檢查它是否完數(shù)*/
{n=0;/*n用來(lái)累計(jì)a的因子的個(gè)數(shù)*/
s=a;/*s用來(lái)存放尚未求出的因子之和,開(kāi)始時(shí)等于a*/
fbr(i=l;i<a;i++)/*檢查i是否a的因子*/
if(a%i==0)/*如果i是a的因子*/
{n++;/*n加1,表示新找到一個(gè)因子*/
/*S減去已找到的因子,s的新值是尚未求出的因子之和*/
switch(n)/*將找到的因子賦給kl,...,klO*/
{case1:kl=i;break;/*找出的第1個(gè)因子賦給kl*/
case2:k2=i;break;/*找出的第2個(gè)因子賦給k2*/
case3:k3=i;break;/*找出的第3個(gè)因子賦給k2*/
case4:k4=i;break;/*找出的第4個(gè)因子賦給k4*/
case5:k5=i;break;/*找出的第5個(gè)因子賦給k5*/
case6:k6=i;break;/*找出的第6個(gè)因子賦給k6*/
case7:k7=i;break;/*找出的第7個(gè)因子賦給k7*/
case8:k8=i;break;/*找出的第8個(gè)因子賦給k8*/
case9:k9=i;break;/*找出的第9個(gè)因子賦給k9*/
case10:kl0=i;break;/*找出的第10個(gè)因子賦給klO*/
)
if(s==O)/*s=0表示全部因子都已找到*/
{printf("%dItsfactorsare",a);
if(n>1)printf("%d,%d",k1,k2);/*n>l表示a至少有2個(gè)因子*/
if(n>2)printf(",%d",k3);/*n>2至少有3個(gè)因子,故應(yīng)再輸出1因子*/
if(n>3)printf(",%d",k4);/*以下類似*/
if(n>4)printf(",%d",k5);
if(n>5)printf(",%d",k6);
if(n>6)printf(",%d",k7);
if(n>7)printf(",%d",k8);
if(n>8)printf(",%d",k9);
if(n>9)printf(",%d",kl0);
printf("\n");
方法二:程序如下
#include<stdio.h>
main()
{intm,s,i;
fbr(m=2;m<1000;m++)
{s=0;
fbr(i=l;i<m;i++)
if((m%i)==0)s=s+i;
if(s==m)
{printf("%dItsfactorsare",m);
fdr(i=l;i<m;i++)
if(m%i=O)printf("%d,",i);
printf("\b\n");
)
方法三:此題用數(shù)組方法更為簡(jiǎn)單。程序如下
#include<stdio.h>
main()
{intk[100];
inti,a,n,s;
for(a=2;a<1000;a-H-)
{n=0;
s=a;
fbr(i=l;i<a;i++)
if((a%i)=O)
{n++;
s=s-i;
k[n]=i;/*將找到的因子賦給k[l]),...,k[10]*/
)
if(s==O)
{printf(,,%dItsfactorsareH,a);
fdr(i=l;i<n;i4-+)
HH
printf(%d,9k[i]);
printf(!,%d\nn,k[n]);
)
}
)
【習(xí)題3-41]:
ttinclude<stdio.h>
main()
{inti,t,n=20;
floata=2,b=l,s=0;
for(i=l;i<=n;i++)
{s=s+a/b;
t=a;
a=a+b;/*將前一項(xiàng)分子與分母之和作為下一項(xiàng)的分子*/
b=t;/*將前一項(xiàng)的分子作為下一項(xiàng)的分母*/
)
printf(//sum=%9.6f\n",s);
)
【習(xí)題3-42]:
Sinclude<stdio.h>
mainO
{floatsn=100,hn=sn/2;
intn;
for(n=2;n<=10;n++)
{sn=sn+2*hn;/*第n次落地時(shí)共經(jīng)過(guò)的米數(shù)*/
hn=hn/2;/*第n次反彈的高度*/
printf("第10次落地時(shí)共經(jīng)過(guò)%fm。\n",sn);
printf("第10次反彈%fm。\n",hn);
【習(xí)題3-43]:
#include<stdio.h>
main()
{intday,xl,x2;
day=9;
x2=l;
while(day>0)
{xl=(x2+l)*2;/*第1天的桃子數(shù)是第2天桃子數(shù)加1后的2倍*/
x2=xl;
day一;
)
printf("total=%d\n”,xl)
f
【習(xí)題3-44】:
Winclude<stdio.h>
main()
{inti,j,k;
for(i=0;i<=3;i++)/*輸出上面4行*號(hào)*/
{for(j=0;j<=2-i;j++)/*輸出*號(hào)前面的空格*/
printf(z/");
for(k=0;k<=2*i;k++)/*輸出*號(hào)*/
printf("*");
printf('\n");/*輸出完i彳丁*號(hào)后換行*/
)
for(i=0;i<=2;i++)/*輸出下面3行*號(hào)*/
{for(j=0;j<=i;j++)
printf(z/");/*輸出*號(hào)前面的空格*/
for(k=0;k<=4-2*i;k++)/*輸出*號(hào)*/
printf。*");
printf("\n");/*輸出完一行*號(hào)后換行*/
【習(xí)題3-451參考答案:
用迭代法求平方根的算法如下:
(1)設(shè)定一個(gè)x的初值xO;
(2)用上述公式求出x的下一個(gè)值xl;
(3)再將xl代人上述公式,求出x的下一個(gè)值x2;
(4)如此繼續(xù)下去,直到前后兩次求出的x值(xn+1和xn)滿足以下關(guān)系:
Ixn+l-xn|<10-5
為了便于程序處理,今只用變量xO和xl,先令x的初值x0=a/2(也可以是
另外的值),求出xl;如果此時(shí)Ixl-xOI>10-5,則使xl—xO,然后用這個(gè)新
的xO求出下一個(gè)xl,如此反復(fù),直到Ixl-xO|<10-5為止。
#include<stdio.h>
#include<math.h>
mainO
{floata,xO,xl;
printf("Enterapositivenumber:");
scanf(緝f”,&a);/*輸入a的值*/
x0=a/2;
xl=(xO+a/xO)/2;
do
{xO=xl;
xl=(xO+a/xO)/2;
)
while(fabs(xO-xl)>=le-5);
printf(z,Thesquarerootof%5.2fis%8.5f\nz,,a,xl);
【習(xí)題3-46】:牛頓迭代法又稱牛頓切線法。它采用以下的方法求根:先任意設(shè)
定一個(gè)與真實(shí)的根接近的值xO作為第一次近似根,由xO求出f(xO),過(guò)(xO,f(xO))
點(diǎn)做f(x)的切線,交x軸于xl,把它作為第二次近似根,再由xl求出f(xl),過(guò)
(xl,f(xl))點(diǎn)做f(x)的切線,交x軸于x2,求出f(x2);再作切線……如此繼續(xù)下去,
直到足夠接近真正的根x*為止,,見(jiàn)圖3.1。
從圖3.1可以看出,
f(xO)=f(xO)/(xl-xO)
因此:xl=xO-f(xO)/f,(xO)
這就是牛頓迭代公式??梢岳盟蓌O求出xl,然后再由x2求出x3
設(shè)f(x)=2x-4x+3x-6
可以寫(xiě)成以下形式:f(x)=[(2x-4)x+3]x-6
同樣,f'(x)可寫(xiě)成:f*(x)=6x--8x+3=(6x-8)x+3
用這種方法表示的表達(dá)式,在運(yùn)算時(shí)可節(jié)省時(shí)間。例如求f(x)只需要進(jìn)行3
次乘法和3次加法,而原來(lái)的表達(dá)式要經(jīng)過(guò)多次指數(shù)運(yùn)算、對(duì)數(shù)運(yùn)算和乘法、加
法運(yùn)算,花費(fèi)時(shí)間較多?,F(xiàn)在由于計(jì)算機(jī)的運(yùn)算速度愈來(lái)愈快,這點(diǎn)時(shí)間開(kāi)銷是
微不足道的,這是以前計(jì)算機(jī)的運(yùn)算速度較慢時(shí)所提出的問(wèn)題。由于過(guò)去編寫(xiě)的
程序往往采用這種形式,所以我們?cè)诖艘岔槺憬榻B一下,以便在閱讀別人所寫(xiě)的
程序時(shí)知道其所以然。
#include<stdio.h>
Sinclude<math.h>
main()
{floatx,xO,f,fl;
x=l.5;
do
{xO=x;
f=((2*x0-4)*x0+3)*x0-6;
fl=(6*x0-8)*x0+3;
x=xO-f/fl;
}while(fabs(x-xO)>=le-5);
/?,,
printf(Therootofequationis%5.2f\nJx);
)
為了便于循環(huán)處理,程序中只設(shè)了xO和x,xO代表前一次的近似根,x代
表后一次的近似根。求出一個(gè)x后,把它的值賦給xO,然后用它求下一個(gè)xO由
于第一次執(zhí)行循環(huán)體時(shí),需要對(duì)xO賦值,故在開(kāi)始時(shí)應(yīng)先對(duì)x賦一個(gè)初值(今為
1.5,也可以是接近真實(shí)根的其他值)。
【習(xí)題3-47]:
先分析題目。按題意,畫(huà)出圖3.2的示意圖。
圖中帶“X”符號(hào)的虛線表示不允許的組合。從圖中可以看到:①X既不
與A比賽,又不與C比賽,必然與B比賽;②C既不與X比賽,又不與Z比賽,
必然與y比賽;③A只能與Z比賽,見(jiàn)圖3.3。
以上是經(jīng)過(guò)邏輯推理得到的結(jié)論。用計(jì)算機(jī)程序處理此問(wèn)題時(shí),不可能立即
就得出此結(jié)論,而必須對(duì)所有組合一一檢驗(yàn),看它們是否符合條件。
開(kāi)始設(shè)計(jì)程序時(shí),并不知道A、B、C與X、Y、Z中的哪一個(gè)進(jìn)行比賽,可以
假設(shè):A與i比賽,B與j比賽,C與k比賽;即:
A—i
B-j
C-k
i、j、k分別是X、Y、Z之一,且i、j、k互不相等(一個(gè)隊(duì)員不能與對(duì)方的
兩個(gè)隊(duì)員比賽)。N-S圖見(jiàn)圖3.4。
其中,外循環(huán)使i由X變到Z,中循環(huán)使j由X變到9(但i不應(yīng)與j相等)。
然后,對(duì)每一組i、j的值,找符合條件的k值。k同樣也可能是,X、V、Z之一。
但k也不應(yīng)與i或j相等。在由業(yè)的條件下,把i/X,和印X似及KZ的i、j、k
的值輸出即可。
#include<stdio.h>
main()
{chari,j,k;/*i是a的對(duì)手;j是b的對(duì)手;k是c的對(duì)手*/
for(i='X';i<='Z';i-H-)
fbr(j='X';j<='Z';j++)
if(i!=j)
for(k='X';k<='Z';k++)
if(i!=k&&j!=k)
if(i!='X'&&k!='X'&&k!='Z')
printf("A—%c\tB—%c\tC—%c\n",i,j,k);
說(shuō)明:
(1)整個(gè)執(zhí)行部分只有一個(gè)語(yǔ)句,所以只在語(yǔ)句的最后有一個(gè)分號(hào)。請(qǐng)讀者
弄清楚循環(huán)和選擇結(jié)構(gòu)的嵌套關(guān)系。
(2)分析最下面一個(gè)if語(yǔ)句中的條件:i#'x',k#'x','k'r'z',因?yàn)槲?/p>
們已事先假定A—i,B-j,c—k,由于題目規(guī)定A不與X對(duì)抗,因此i不能等
于'X';同理,C不與X、Z對(duì)抗,因此k不應(yīng)等于'X'和'Z'。
⑶題目給的是A、B、C、X、Y、Z,而程序中用了加撇號(hào)的字符常量‘X'、'Y'、
'Z',這是為什么?這是為了在運(yùn)行時(shí)能直接打印出字符'A'、'B'、'C'、'X'、
‘Y'、’Z',以表示三組對(duì)抗的情況。
習(xí)題四參考答案:
一、單項(xiàng)選擇題
【習(xí)題4-1】~【習(xí)題4-7】ACDBBBD
二、判斷題(正確用義錯(cuò)誤用J標(biāo)記)
【習(xí)題4-8]?【習(xí)題4-13】XVXVVV
三、閱讀程序?qū)懡Y(jié)果或填空
【習(xí)題4-14】s=10,t=25
【習(xí)題4-1511:resultis4
2:resultis6
3:resultis8
【習(xí)題4-16]s=16
【習(xí)題4-17】10
【習(xí)題4-1817
【習(xí)題4-19]x=9
【習(xí)題4-20】12
【習(xí)題4-21]static
【習(xí)題4-22】51
【習(xí)題4-23]3
四、程序設(shè)計(jì)題
【習(xí)題4-24]
doublefunc(intn,floatx)
{if(n==0)return1;
elsereturnfunc(n-l,x)+n*pow(x,n);
)
【習(xí)題4-25]
PRTStar(charc,intn)
{if(n>0){printf("%c",c);PRTStar(c,n-l);}
main()
{inti,n;
scanf("%d",&n);
for(i=l;i<=n;i++)
{PRTStarC',n-i);/*輸出每行左端空格*/
PRTStar('*',2*i-l);/*輸出每行的*號(hào)*/
printf("\n");
)
【習(xí)題4-26]
從楊輝三角形的特點(diǎn)出發(fā),可以總結(jié)出:
⑴第N行有N+1個(gè)值(設(shè)起始行為第0行);
⑵對(duì)于第N行的第J個(gè)值:(N>=2)
當(dāng)J=1或上附1時(shí):其值為1
當(dāng)J!=l且J!=N+1時(shí):其值為第N-1行的第J-1個(gè)值與第N-1行第J個(gè)值之和。
將這些特點(diǎn)提煉成數(shù)學(xué)公式可表示為:
c(x,y)=1當(dāng)x=l或x=N+l
c(x,y)=c(x-l,y-l)+c(x-l,y)其它
程序如下:
intc(intx,inty)
{if((y==l)||(y==x+l))retum(l);
elsereturnc(x-l,y-l)+c(x-l,y);
}
main()
{inti,j,n=13;
printf(MN=n);
while(n>12)scanf(n%dn,&n);
fbr(i=O;i<=n;i++)
{for(j=0;jvn-i;j++)printf("");/*每行開(kāi)始3*(n-i)個(gè)空格*/
fdr(j=ly<i+2;j+4-)printf(H%6dH,c(i,j));/*每行輸出i+1個(gè)數(shù)*/
printf(”\n");
)
【習(xí)題4-27】
main()
{longk=2,N=l;
floatf=l,S=O;
while(N<=lE6)
{S+=f7N;
自-f;
N=N*k-H-;
)
printffS=%f\n”,S);
【習(xí)題4-28]
intIsPrime(intx)
{intk;
fbr(k=2;k<=x/2;k-H-)
if(x%k=0)break;
if(k>x/2)return1;
elsereturn0;
}
main()
{intk;
for(k=99;k>=l;k-)
if(IsPrime(k))printf(n%d;\k);
習(xí)題五參考答案:
一、單項(xiàng)選擇題
【習(xí)題5-1】?【習(xí)題5-8】DCABBDCA
二、閱讀程序?qū)懡Y(jié)果或填空題
【習(xí)題5-9]?⑴二⑵4⑶'B'
【習(xí)題5-1015
【習(xí)題5-11]a[k][k]
【習(xí)題5-12[⑴a[0](2)a[k](3)t
【習(xí)題5-13]⑴b[j]⑵a[m]⑶k<12
【習(xí)題5-14】運(yùn)行結(jié)果為:——--
KKKKKK
【習(xí)題5-151111
1234567890098T654321234806
a[0]=3
a[l]=2
【習(xí)題5-16]a[2]=3
a[3]=3
a[4]=3
a[5]=2
三、編寫(xiě)程序題
【習(xí)題5-17】:
#include<stdio.h>
main()
(
inta[10],b[6],c[10];
intij,k,m;
fbr(m=0;m<10;m-H-)scanf(n%dn,&a[m]);
fbr(m=0;m<6;m-H-)scanf(n%dH,&b[m]);
printf(u\nn);
i=0;k=0;
while(i<10)
{for(j=0;j<6;j++)
if{a[i]==b[j])break;
if(j>=6){c[k]=a[i];k++;}
i++;
)
fbr(m=0;m<k;m++)printf(n%3dn,c[m]);
【習(xí)題5-18]:
#include<stdio.h>
main()
inta[3][4],s=0,m,n;
fbr(m=0;m<3;m++)
for(n=0;n<4;n++)scanf(,,%dn,&a[m][n]);
printf(n\nn);
fbr(m=0;m<3;m++)
s=s+a[m][O]+a[m][3];
fbr(n=l;n<3;n-H-)
s=s+a[0][n]+a[2][n];
printf(ns=%d\nM,s);
'【習(xí)題5/9】:
#include<stdio.h>
#include<string.h>
main()
(
chara[20],b[20];
intm,n,k,f;
gets(a);gets(b);
m=strlen(a);n=strlen(b);
k=0;
while((a[k]==b[k])&&k<m&&k<n)k++;
if(k==m&&k==n)f^O;
elseif(a[k]<b[k])f
elsef=l;
printf(n%d\nn,f);
習(xí)題5?20]:
#include<stdio.h>
#include<string.h>
main()
(
chars[20],t;
intk,n=0;
gets(s);
fbr(k=O;k<strlen(s);k++)
if((s[k]>-A,&&s[k]<-Z,)||(s[k]>=,a,&&s[k]<-z*))n++;
printf(,,\nn=%d\n,1,n);
【習(xí)題5-21]:
#include<stdio.h>
main()
(
inta[10],k,m,n,j;
for(j=0;j<10;j++)scanf(,,%dn,&a|j]);
printff'inputk:");
scanf(,,%d,,,&k);
n=9;
do{
for(j=0;j<n;j++)
if(a[j]==k)break;
if(j>=n)break;
else{
for(m=j;m<n-1;m++)
a[m]=a[m+l];
n=n-l;
)
}while(l);
printff'\nnewarray:\n,f);
for(j=0;j<n;j-H-)printf(,,%4d,,,a|j]);
printffW");
習(xí)題六參考答案:
一、單項(xiàng)選擇題【習(xí)題6-1】?【習(xí)題6-10]BDACBDACCD
二、閱讀下列程序,填空或給出程序運(yùn)行結(jié)果。
【習(xí)題6-11]num=*b,num=*c
【習(xí)題6-12]*pl++,*p2
【習(xí)題6-13]*(a+j),a+j
【習(xí)題6-14]87654321
【習(xí)題6-15]2,3,4,5,6.
【習(xí)題6-16】1711717
【習(xí)題6-17]ga
三、編寫(xiě)程序程題
【習(xí)題6-18]
#include"stdio.h"
voidmain()
{inta[10]={3,42,6,12,33,55,25,45,76,93);
inti,j,k,x,*p;
scanf("%d",&k);
p=a;
if(k>0&&k<10)
for(i=0;i<k;i++)
{x=*(p+9);
forG=9;j>0;j-)
*(p+j)=*(p+j-l);
*p=x;
fbr(i=0;i<10;i-H-)
printf(n%dH,a[i]);
}
【習(xí)題6-19]
#include"stdio.h"
#include,alloc.h"
voidmain()
{inta[3][3]={42,6,12,33,55,25,45,76,93};
intij,*sum;
sum=(int*)malloc(3*sizeof(int));
fbr(i=0;i<3;i++)
|
for(j=0;j<3;j++)
*(sum+i)+=a[i][j];
)
for(i=0;i<3;i+
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高端樂(lè)器租賃與維護(hù)保養(yǎng)合作協(xié)議
- 2025年度電子產(chǎn)品品牌授權(quán)使用代理合同2篇
- 2025年度城市軌道交通工程補(bǔ)充協(xié)議-施工期限調(diào)整范本3篇
- 玉溪農(nóng)業(yè)職業(yè)技術(shù)學(xué)院《思想道德修養(yǎng)與法律基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 文化藝術(shù)創(chuàng)作與推廣作業(yè)指導(dǎo)書(shū)
- 玉柴職業(yè)技術(shù)學(xué)院《綠色和有機(jī)食品生產(chǎn)技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 永州職業(yè)技術(shù)學(xué)院《交互媒體設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 義烏工商職業(yè)技術(shù)學(xué)院《審計(jì)綜合模擬實(shí)訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 益陽(yáng)職業(yè)技術(shù)學(xué)院《綜合材料技法》2023-2024學(xué)年第一學(xué)期期末試卷
- 風(fēng)景名勝區(qū)網(wǎng)點(diǎn)租賃合同3篇
- 【營(yíng)銷策劃】洗發(fā)水品牌市場(chǎng)調(diào)研+競(jìng)品分析案-市場(chǎng)營(yíng)銷策劃-2023年?duì)I銷干貨合集-3月份匯總-p
- (高清版)DZT 0203-2020 礦產(chǎn)地質(zhì)勘查規(guī)范 稀有金屬類
- 《中藥鑒定技術(shù)》課件-三七的鑒定
- 2022-2023學(xué)年廣東省廣州市白云區(qū)八年級(jí)(上)期末歷史試卷(含答案)
- 手術(shù)供應(yīng)室培訓(xùn)課件總結(jié)
- 車輛采購(gòu)?fù)稑?biāo)方案(技術(shù)方案)
- 湖南省2022-2023學(xué)年七年級(jí)上學(xué)期語(yǔ)文期末試卷(含答案)
- 膽結(jié)石 健康宣教
- 發(fā)運(yùn)工作總結(jié)
- 共享設(shè)備行業(yè)分析
- 個(gè)人墊資合同
評(píng)論
0/150
提交評(píng)論