版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C語言程序設(shè)計(jì)課后習(xí)題參考答案
第1章
一、選擇題
1.C2.B3.A4.B5.D
二、填空題
1.main2.main3.有窮性、確定性、有零個(gè)或多個(gè)輸入、有一個(gè)或多個(gè)輸出、有效性
4.順序、分支和循環(huán)5.自頂向下,逐步細(xì)化、模塊化設(shè)計(jì)、限制使用got。語句
第2章
一、選擇題
1.C2.C3.B4.C5.A
二、敘述題
1.向菜單或工具欄添加命令
(1)單擊“工具”菜單中的“自定義”,或者右單擊菜單欄(或工具欄),在彈出的快捷菜單中
選擇“自定義”命令選項(xiàng)。
(2)在“命令”選項(xiàng)卡的“請(qǐng)選擇要重排的菜單或工具欄”下,選擇要更改的菜單或工具欄,
如選擇工具欄,在其對(duì)應(yīng)的下拉列表框中選擇“調(diào)試”,然后單擊“添加命令二
(3)在“添加命令”話柩中,從“類別”列表中選擇類別名稱,然后從“命令”列表中選擇要
添加的命令。
(4)單擊“確定”,再單擊“關(guān)閉”。
2.項(xiàng)目和解決方案是VisualSludio2()l()提供的兩類容器。項(xiàng)目是構(gòu)成某個(gè)程序的所有項(xiàng)的容
器,該程序可能是控制臺(tái)應(yīng)用程序、基于窗口的應(yīng)用程序或某種別的程序,構(gòu)成項(xiàng)目的項(xiàng)可以是源
代碼文件、窗體、類、資源文件等。一個(gè)解決方案可包含一個(gè)或多個(gè)項(xiàng)目,以及一些其他項(xiàng)。例如,
?個(gè)分布式系統(tǒng)可能由若干個(gè)不同的程序組成,而各個(gè)程序是作為同一個(gè)解決方案內(nèi)的項(xiàng)目開發(fā)的。
源文件只有放在相關(guān)的項(xiàng)目中才可以生成可執(zhí)行程序。
3.在解決方案資源管理中,首先移除該項(xiàng)目中的例1.1程序代碼,然后右單擊源文件,如果沒
有建立例1.2的代碼文件,則選擇添加一新建項(xiàng),并選擇C++文件,輸入文件名和后綴.c,之后輸入
相關(guān)代碼,就可生成項(xiàng)目、運(yùn)行程序了;如果例1.2代碼已存于某個(gè)源文件中,則選擇添加一現(xiàn)有
項(xiàng),添加該源文件,生成、運(yùn)行即可。
4.在VC++2010的編譯系統(tǒng)中,編譯會(huì)從多個(gè)角度檢測每個(gè)錯(cuò)誤,如果從多個(gè)角度解釋都有問
題,則系統(tǒng)會(huì)提示有多個(gè)錯(cuò)誤。也就說,哪怕一個(gè)程序中只有一個(gè)錯(cuò)誤,但生成項(xiàng)目時(shí)可能會(huì)出現(xiàn)
了一系列編譯錯(cuò)誤和警告信息。
5.選擇“工具”一“選項(xiàng)”菜單命令,彈出“選項(xiàng)”對(duì)話框,在“選項(xiàng)”對(duì)話框的左側(cè)導(dǎo)航窗格
中選擇“環(huán)境”一“字體和顏色”,在“顯示其設(shè)置”下拉列表中選擇環(huán)境字體,可更改其字體及大
小,環(huán)境包含菜單;在“顯示其設(shè)置”下拉列表中選擇文本編輯器,可更改其字體及大小.
第3章
一、選擇題
1.A2.C3.C4.D5.A6.D7.D8.B9.B10.A11.B12.B13.A14C.15.B
二、填空題
1.字母、數(shù)字、下劃(畫)線2.03.4、84.(a+b)*c/(a-b)5.-60
6.-167.98.6、4、29.010.10、6
11.12.412.5.50000013.014.1615.6.6
三、編程題
1.編寫一個(gè)程序求各種類型數(shù)據(jù)的存儲(chǔ)長度。
#include<stdio.h>
main()
(
printf("int:%dbyte\n",sizeof(int));
printf(Hshortint:%dbyte\n,,,sizeof(shortint));
printf(*1ongint:%dbyte\nM,sizeof(longint));
printf(ufloat:%dbyte\n'\sizeof(float));
printf(adouble:%dbyte\nH,sizeof(double));
printf('1ongdouble:%dbyte\n',,sizeof(longdouble));
printf(Hchar:%dbyte\n'\sizeof(char));
)
2.
#include<stdio.h>
#defineRAT1.60934
main()
(
floatk;
printfCinputthekm:H);
scanf("%f',&k);
printf("mile:%f\n”,k/RAT);
)
第4章
一、選擇題
1.D2.D3.C4.D5.D6.D7.C8.D9.C10.C
二、解析題
1.X=170,X=LJLJM170,X=UUU252,X=MMUUaa.x=uuLj170
x=170,x=170UMM,X=UMU170,x=%6d
a=513.789185,a=uu513.79,a=513.78918457,a=513.78918457
2.a=3ub=7x=8.5口y=71.82c1=Auc2=az
三、編程題
1.
main()
(
intx,y;
scanf("%d%d",&x,&y);
printf("商數(shù)=%5余數(shù)=%d”,x/y,x%y);
)
2.
main()
(
doublex,y,z,avg;
scanf("%lf%lf%ir,&x,&y,&z);
avg=(x+y+z)/3;
printf("%.1f',avg);
)
第5章
一、選擇題
1.C2.C3.A4.A5.D6.C7.C8.A9.B10.D
二、填空題
1.?a>0&&b>0||a>0&ac>0||b>0&ac>0
@a<b||a<c
③a>5"-a>5或a>5||a<-5
@(a<0)&&((int)a)==a
⑤(a%b)!=0
2.①!(x>0)②1③!(x>=0&&x<=5)
3.3、2、2
4.ch>='A'&&ch<='Z'ch=ch-32
include<stdio.h>
main()
(
floatprice,tax;
printf("pleaseinputthepriceofproduct:");
scanf("%f,,&price);
if(price>=10000)tax=price*0.05;
elseif(price>=5000)tax=price*0.03;
elseif(price>=1000)tax=price*。.02;
elsetax=0;
printf(H%r,tax);
)
5.
include<stdio.h>
main()
(
floatscore;
printf("pleaseinputthescoreofstudent:'*);
scanf("%r,&score);
if(score>=85)printf("VERYGOOD");
elseif(score>=60)printf("GOODM);
elseprintf("BAD");
)
6.
#include<stdio.h>
main()
(
intx,y,z;
printf("inputtwonumber:");
scanff'%d%d",&x,&y);
if(x<10||x>99||y<10||y>99)
printf("inputdataerror!\nH);
else
{z=(x/10)*1000+(y/1C)*100+(x%10)*10+y%10;
',
printf("%d\n1z);
)
)
第6章
一、選擇題
1.D2.C3.A4.D5.A6.D7.D8.B9.D10.B11.C12.A13.D14.A15.0
二、填空題
1.fahrcelsius=5.0/9*(fahr-32)fahr+=step
2.5、4、63.3*i-24.y—z*=x5.8M5u2
6.j++說j==0j>=i(或j=i)
7.sum<ksum==kj-28.s=0p=lj<=i
三、改錯(cuò)題
1.第一處改正:For改為for(注:出版社將For改成了for,所以教材上沒錯(cuò))
第二處改正:for(k=l;kv=4;k++)或for(k=0;k<4;k++)
第三處改正:ave=sum/4改為ave=sum/4.0
2.第一處改正:i++改為j++
第二處改正:m=100*i+1O*j+k
3.第一處改正:temp=1
第二處改正:temp>:eps
第三處改正:產(chǎn)2
4.第一處改正:&n
第二處改正:====
5.第一處改正:t=m/10改為I=m%10
第二處改正:t=0改為t=0
第三處改正:m=m%10改為m=/10
四、編程題
1.分式累加和。
include<math.h>
main()
(
ints;
floatn,t,sum;
t=1;sum=0;n=1;s=1.0;
whilA(n<=100)
(
sum=sum+t;
n=n+1;
s=-s;
t=s/n;
)
printf("sum=%10.6f\n",sum);
)
2.1~10的階乘
include<stdio.h>
main()
(
inti;
longintn=1;
for(i=1;j<=10;i++)
(
n=n*i;
printf(i%5==0?"%2d!=%-10ld\nM:"%2d!=%-10ld,,,i,n);
)
)
3.由*組成的等腰三角形
include<stdio.h>
main()
(
intn,i,j;
scanf("%dn,&n);
for(i=1;i<=n;i??)
{for(j=1;j<=n+i-1;j++)
if0<=n-i)printf("");
elseprintf("*");
printf("\n");
)
)
4.完數(shù)
main()
(
intm,s,i;
for(m=2;m<1000;m++)
{s=0;
for(i=1;i<m;i++)
if((m%i)==0)s=s+i;
if(s==m)
{printf("%ditsfactorsare",m);
for(i=1;i<m;i++)
if(m%i==0)printf("%d,",i);
printf(H\n");
}
)
)
5.打靶
include<stdio.h>
main()
inth10,h7,h5;
for(h10=0;h10<=8;h10++)
for(h7=0;h7<=8h7++)
for(h5=0;h5<=8;h5++)
if(h10+h7+h5==8&&h10*10+h7*7+h5*5==53)
printf("h10=%d\th7=%d\th5=%d\n",h10,h7,h5);
)
6.猴子吃桃子問題。采取逆向思維的方法,從后往前推斷。
〃代碼一
main()
(
intday,x1,x2;
day=9;
x2=1;
while(day>0)
{x1=(x2+1)*2;/*第一天的桃子數(shù)是第2天桃子數(shù)加1后的2倍*/
x2=x1;
day-;
}
printf("thetotalis%d\n",x1);
)
〃代碼二
main()
(
inti=9,sum=1;
for(;i>0;sum=2*(sum+1),i-);
printf("sum=%d\n",sum);
)
7.牛頓迭代法
一般地:
f(x)=aoxn+aixn_1+....+an-ix+an=O
求f(x)在Xo附近的根
計(jì)算公式:Xn+1=Xn-f(Xn)/f'(Xn)
精度:£=|Xn+i-Xn|<1.0e-m,m=5o
所求的根:滿足精度的Xn
include<stdio.h>
#include<math.h>
main()
{floatx,x0,f,f1;
x=1.5;〃可改為scanf("%f',&x);
do
{xO=x;
f=2*x0*x0*x0-4*x0*x0+3*x0-6;
f1=6*x0*x0-8*x0+3;〃f的導(dǎo)數(shù),即它的切線
x=xO-f/f1;//切線與x軸的交點(diǎn)
}while(fabs(x-xO)>=1e-5);
printf("Therootis%8.7f\n",x);
)
8.利用歐幾里德算法求兩個(gè)正整數(shù)的最大公約數(shù)。歐幾里德算法又稱輾轉(zhuǎn)相除法,非常有名。該算
法的要領(lǐng)是:假設(shè)兩個(gè)正整數(shù)為a和b,先求出前者除以后者的余數(shù),存放到變量r中,若「不為0,
則將b的值得賦給a,將?r的值得賦給b:再求出a除以b的余數(shù),仍然存放到變量「中,”,如此反
復(fù),直至r為。時(shí)終止,此時(shí)b中存放的即為原來兩數(shù)的最大公約數(shù)。
兩個(gè)正整數(shù)a和b的最小公倍數(shù)二axb/最大公約數(shù)
main()
(
inta,b,r,p;
do
(
scanf(',%d%d",&a,&b);
}while(a<=0||b<=0);/*確保a和b為正整數(shù)*/
p=a*b;
r=a%b;〃若a<b,則—a,經(jīng)過下面第一次輾轉(zhuǎn)后,a^b進(jìn)行了交換,使a>b
while(r!=0)
{a=b;
b=r;
r=a%b;
)
printf("greatestcommondivisoris:%d\nH,b);//最大公約數(shù)
printf(Hleasecommonmultipleis:%d\n",p/b);〃最小公倍數(shù)
)
第7章
一、選擇題
1.C2.C3.D4.C5.C6.A7.A8.D9.B10.D
二、寫出程序的運(yùn)行結(jié)果
1.sum=6
2.Max=9,row=1,col=0
3.
0
10
210
3210
5.-5
三、填空
1.i=j=k=Oi<4&&j==5j<5&&i==4
2.i=1&&j-1
3.n>0n%10+0x303cn%10+'0'sO]='\0'
4.s[i]s[0],s[1]str,s[1]s[2],str
四、改錯(cuò)題
1.第一處改正:n=strlen(str)
第二處改正:str[j]==''
第三處改正:strU]!="(注:該錯(cuò)誤產(chǎn)生警告,運(yùn)行時(shí)如果不修改,有時(shí)結(jié)果不正確,如輸
入aubeduudefuuuqwe)
2.第一處改正:ch=str[i]
第二處改正:(j>=0)&&(ch<strO])
3.第一處改正:s1[i]!='\C
第二處改正:j=0;
4.第一處改正:cnt=0
第二處改正:if(!(m%i))
第三處改正:i<cnt
五、編程題
1.VC提供的intrand(void)產(chǎn)生的實(shí)際上是0?32767(short型的最大數(shù))的偽隨機(jī)數(shù),偽隨機(jī)數(shù)
總是以一個(gè)相同的數(shù)為起始值(種子),運(yùn)用遞推的原理來生成的。所以,如果只使用rand函數(shù),每
次運(yùn)行所形成的偽隨機(jī)數(shù)列也相同,失去了隨機(jī)意義。但這樣便于程序調(diào)試。VC的rand()函數(shù)默認(rèn)
以1為種子。要解決這個(gè)問題,需要在每次產(chǎn)生隨機(jī)序列前,先指定不同的種子,這樣計(jì)算出來的
隨機(jī)序列就不會(huì)完全相同了。VC提供的voidsrand(unsignedintseed)將seed作為種子,如果以
time函數(shù)值(即當(dāng)前時(shí)間)作為種子數(shù),那么就可以保證隨機(jī)性了,因?yàn)閮纱握{(diào)用rand函數(shù)的時(shí)間通
常是不同的。也可以使用srand函數(shù)來人為指定種子數(shù)。
若要產(chǎn)生a?b之間的一個(gè)隨機(jī)數(shù),則可用2+r2代()%8、+1)表示。若要0~1的小數(shù),則可
以先取得0T0的整數(shù),然后均除以10即可得到隨機(jī)到十分位的10個(gè)隨機(jī)小數(shù);若要得到隨機(jī)到
百分位的隨機(jī)小數(shù),則需要先得到0700的整數(shù),然后均除以100,其它情況依此類推。
include<stdio.h>
#include<stdlib.h>
include<time.h>
main()
(
inta[12],count=0,i;
srand((unsigned)time(NULL));
for(i=0;i<12;i++)
a[i]=5+rand()%11;
for(i=0;i<12;i++)
(
printf("%5d",a[i]);
count++;
if(count%4==0)printf("\n");
)
)
2.用一維數(shù)組a表示一組數(shù),假定為整數(shù)。
include<stdio.h>
#defineN5
main()
(
inta[N],max,min,i,sum=0,count=0;
floatav;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
max=min=a[0];
for(i=0;i<N;i++)
(
sum+=a[i];
if(a[i]>max)max=a[i];
if(a[i]<min)min=a[i];
}
av=(float)sum/5;
for(i=0;i<N;i++)
if(a[i]>av)count++;
printf(,'max:%d\nmin:%d\nav:%f\ncount:%d,',max,min,account);
)
3.
include<stdio.h>
main()
(
intscore[30];/*={61,62,63,64,65,66,67,68,69,70,
71,72,73,74,75,76,77,78,79,80,
81,85,89,90,33,44,55,91,92,93):〃不必賦初值,這是為調(diào)試程序方便*/
inti,count90=0,count80=0,count70=0,count60=0;
for(i=0;i<30;i++)
(
printf("intputNO.%dstudent'sscore:'1,i+1);
scanf("%d",score+i);
)
for(i-0,i<30,i++)
(
if(score[i]>=90)
(
count90++;
count80++;
count70++;
count60++;
}
elseif(score[i]>=80)
count80++:
count70++;
count60++;
)
elseif(score[i]>=70)
(
count70++;
count60++;
)
elseif(score[i]>=60)
count60++;
)
printf("0-59:%d\n60-69:%d\n70-79:%d\n80~89:%d\n90~100:%d",30-count60,count60-
count70,count70-count80,count80-count90,count90);
printf("\n60orhigher:%d\n70orhigher:%d\n80orhigher:%d\n90or
higher:%d\n",count60,count70,count80,count90);
}、
4.
方法1:使用一維數(shù)組。共輸出5行,第1行靠左端輸出,第2行空1個(gè)字符輸出,第3行空
2個(gè)字符輸出,……,笫5行空4個(gè)字符輸出。第5行共有6個(gè)字符(含空格),為方便起見,每行
按9個(gè)字符輸出,即輸出9個(gè)字符后換行。每行的一串*前可能有空格,*后面也可能有空格。共5
行,每行9個(gè)字符,所以定義數(shù)組大小為45.
include<stdio.h>
main()
(
chara[45];
inti,j,k;
for(i=0;i<45;i++)a[i]='
for(i=0;i<5;i++)〃i代表行,從0開始計(jì)數(shù)
(
forC=0;j<i;j-+)〃每行下標(biāo)從9*j開始,第i行前面有i個(gè)空格
a[9*i+j]='
for(k=0;k<5;k++)
a[9*i+j+k]=w;
}
j=0;
for(i=0;i<45;i++)
(
M
printf(%c"Ja[i]);
j++;
ifO%9==0)printf("\n");
)
)
方法2:
#include<stdio.h>
main()
chara[5][9J;
inti,j,k;
for(i=0;i<5;i++)
for(j=0;j<9;j++)
尸';
for(i=0;i<5;i++)
{
for(j=0;j<i;j++)
afiirjl='r;
for(k=0;k<5;k++)
}
for(i=0;i<5;i++)
{
for(j=0;j<9;j++)
printf("%c",a[i][j]);
printf("\n,');
}
)
5.
#include<stdio.h>
#defineN4
main()
(
inti,j,aD[N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10);
printf("\nTheoriginalarray:\n");
for(l=0;i<N;l++)
(
for(j=0;j<N;j++)
printf("%2dM,a[i][j]);
printf("\n");
)
for(i=1;i<N;i++)
(
forO=0;j<i;j++)
(
a[i][j]=a[i]O]+aU][i];
aO]U]=0;
)
}
printf("\nTheresultis:\n");
for(i=0;i<N;i++)
forG=0;j<N;j++)
printf("%2d",a[i]D]);
printf("\n");
)
)
第8章
一、選擇題
1.D2.A3.D4.B5.D6.C7.A8.D9.A10.C11.B12.D13.D14.B15D
二、填空
1.函數(shù)2.main函數(shù)3.函數(shù)首部、函數(shù)體4.形式參數(shù)、實(shí)際參數(shù)、實(shí)參、形參
5.常量、變量、表達(dá)式6.函數(shù)定義時(shí)函數(shù)值、返回值
7.max(max(a,b),c))^(x>y?x:y)
8.
******
ITIIIIIITTIT
iiitii11ri11
******
i?ii11iiTi11
TTTTTTTTTTTT
******
******
aititiiiiii
TTJTTTJTTTTT
******
9.str[]=abdef
10.Iow<=high(high+low)/2
三、改錯(cuò)題
1.第?處:void改為int
第二處:i〈=n&&(n%i==0)改為i<=n&&(n%i!=0)或i<n&&(n%i!=0)
第三處:n!=i改為n==i
2.第一處:刪除;
第二處:for(j=1;j<=50;i++)改為for(j=1;j<=50;j++)
第三處:returni
3.第一處:doublefun(doubleb,x0)改為doublefun(doubleb,doublexO)
第二處:if(abs(x1?x0)>=1e-6)改為if(fabs(x1-x0)>=1e-6)
四、編程題
1.
include<stdio.h>
longact(longn)
(
if(n==1||n==0)return1;
else
(
returnn*act(n-1);
)
)
main()
(
intn=3;
printfC'n!=%ld",act(n));
)
2.
/include<stdio.h>
voidmmax(floata[],intn);
main()
(
floata[6];
inti;
for(i=1;i<=5;i++)
scanf("%f',&a[i]);
a[0]=1;
mmax(a,5);
printf("%f%d\n",a[(int)a[0]],(int)a[0]);
)
voidmmax(floata[],intn)
(
if(n<=0)
return;
else
if(a[n]>a[(int)a[O]])
a[0]=n;
mmax(a,n-1);
)
3.
include<stdio.h>
#include<string.h>
intstart;
intfun(charstrfl);
main()
chara[40];
inti,num;
gets(a);
num=fun(a);
if(num==-1)
printf("inputstringerrorornohave'A'\n");
else
(
printf("%d'n",num);
for(i=start;i<start+num;i++)
printf(R%c",a[i]);
printf("\n");
)
)
intfun(charstr[])
(
intcount=0,i=0,len,flag=0;
len=strlen(str);
while((!flag)&&i<len)
(
if(str[i]=='A')flag=1;
i++;
)
if(flag==O)return-1;
start=i;
while(flag&&i<len)
(
if(str[i++]=='A')flag=0;
elsecount++;
)
if(flag==1)return-1;
returncount;
)
4.
my_strcpy(chardst[],charsrc[])
(
inti=0;
while(src[i]!='\0')
{dst[i]=src[i];
i++;
)
dst[i]=>\0';
)
intmain()
chara[12];charb[12];
gets(b);
my_strcpy(a,b);
puts(a);
)
5.
/include<stdio.h>
#include〈string.h>
voidfun(charstrOJnta。)//不使用數(shù)組時(shí),可使用全局變量保存統(tǒng)計(jì)結(jié)果
(
inti=0;
a[0]=a[1]=a[2]=a[3]=0;
while(str[i]!='\O')
(
if(str[i]>='A'&&str[i]<='Z*||str[i]>="a'&&str(i]<='z')
a[0]++;
elseif(str[i]>='O'&&str[i]<='9')
a[1]++;
elseif(str[i]=='')
a[2]++;
else
a[3]++;
i++;
)
)
intmain()
(
chars[80];
inta[4];
gets(s);
fun(s,a);
printf("letters:%d\tdigits:%d\tspaces:%d\totherthecharacter:%d\nM,a[0],a[1],a[2],a[3]i;
)
第9章
一、選擇題:
1.D2.A3.B4.A5.D
二、編程題
1.
習(xí)題9_2_1
#defineISALPHA(a)(((a)>='A,&&(a)<='Z')||((a)>='a,&&(a)<=,z,))
main()
{charc;
scanf("%c",&c);
printf("%d\n”,ISALPHA(c));
)
2.
習(xí)題9.2.2
#defineSWAP(t,x,y){tw;w=x;x=y;y=w;}
main()
{doublea=99.99,b=11.11;
SWAP(double,a,b);
printf("%f,%f\n",a,b);
)
3.
習(xí)題9.2.3
include"stdio.h"
#defineMAX80
#defineCHANGE1
main()
{charstr[MAX];
inti;
printf("lnputtext:\n");
gets(str);
#if(CHANGE)
{for(i=0;i<MAX;i++)
{if(str[i]!='\O')
if(str[i]>='a'&&str[i]<'z'||str[i]>=,A,&&str[i]<'Z,)
str[i]+=1;
elseif(str[i]=='z'||str[i]=='Z')
str[i]-=25;
)
)
#endif
printf("output:\n%s',,str);
)
4.
習(xí)題9.2.4
#defineLEAP_YEAR(y)(y%4==0)&&(y%100!=0)||(y%400==0)
main()
{intyear;
printf("lnputyear:");
scanf("%d",&year);
if(LEAP_YEAR(year))
printf("%disaleapyear.\n",year);
else
printf("%disnotaleapyear.\n",year);
)
5.
x9_2_5.h如下:
#ifndef_X9_2_5_H
#define_X9_2_5_H
#defineAVER(a,b,c)(a<b?c)/3.0
#endif
x9_2_5.c如下:
include"x9-2-5.hH
main()
{inta,b,c;
printf("lnputthreeintegersa,b,c:");
scanf(H%d,%d,%d",&a,&b&c);
printf("Averageis%f.\n",AVER(a,b,c));
)
第10章
一、選擇題
二、
1.A2,D3.C4.D5.B6.B7.C8.D9.D10.C11.B12.B
二、填空題
1.指針或者地址2.110
3.Cchar*p;匚p=&ch;Escanf("%c",p);□*p='a,;匚printf("%c"Jp);
4.105.0.76.ab7.abcdcd8.7u1
9.void(*p)(int*jnt*);10.r+b[k]11.'\0'、n++;12.aegi
三、改錯(cuò)題
1.第一處改正:*sub=x-y
第二處改正:scanf(,'%f%f',&x,&y);
第三處改正:calc(x,y,&add,&sub);
2.第一處:charswap(char*pl,char*p2)改為voidswap(char*pl,char*p2)
第二處:strcpy(p,pl)改為strcpy(p,p2)
3.第一處:pl=pl+m改為p1=pl+m-l
第二處:*pl=*p2改為*p2=*pl
第三處:*p2="\0"改為*p2='\0'
4.第一處:char*fun(char*str.chart)改為char*fun(char*str,char*t)
第二處:s=NuLL改為s=NULL;
第三處:if(r==p)改為if(*r==*p)
5.第一處:voidfun(int*b[N],intvoidfun(int(*b)[N],intn)
第二處:b(j][k]=k*j改為b[j][k]=(k+l)"j+l)
四、編程題
1.
習(xí)題10.4.1
voidmove(intarray[20],intn,intm);
main()
{intnumber[20],n,m,i;
printf(MHowmanynumbers?,1);/*共有多少個(gè)數(shù)7
scanf("%d",&n);
printf(Mlnput%dnumbers:\nM,n);/*輸入n個(gè)數(shù)7
for(i=0;i<n;i++)
scanf("%d",&number[i]);
printf("Howmanyplaceyouwanttomove?");/*后移多少個(gè)位置7
scanf(H%d",&m);
move(number,n,m);/*調(diào)用move函數(shù)*/
printf("Now,theyare:\n");
for(i=0;i<n;i++)
printf("%d",number[i]);
)
voidmove(intarray[20],intn,intm)/*循環(huán)后移函數(shù)*/
{int*p,array_end;
array_end=*(array+n-1);
for(p=array+n-1;p>array;p-)
*P=*(P-1);
*array=array_end;
m-;
if(m>0)move(array,n,m);/*遞歸調(diào)用,當(dāng)循環(huán)次數(shù)m減至0時(shí),停止調(diào)用*/
)
2.
習(xí)題10.4.2
#include<stdio.h>
#include<string.h>
#defineTOTAL6
intmseek(char*str[],charn)
{inti;
for(i=0;i<n;i++)
{if(strcmp(str[i],xstr)==O)
return1;
)
return0;
)
main()
{char*name[TOTAL]={"Lining","LinsharT,"Tianyuarr,"Zhangqiang","Haipo","Fangbing"};
charxname[20];
printf("enteraname:");
gets(xname);
if(mseek(name,xname,TOTAL))
printf("Found!\n");
else
printf("Notfound!\n");
)
3.
習(xí)題10.4.3
include<stdio.h>
include<string.h>
voidfun(char*str,intnum[4])
{inti;
for(i=0;i<4;i++)num[i]=0;
while(*str!='\0')
{if(*str>='a'&&*str<='z"||*str>='A'&&*str<='Z')
num[0]++;
elseif(*str=='*)
num[1]++;
elseif(*str>='0'&&*str<='9')
num[2]++;
else
num[3]++;
str++;
)
)
#defineN80
main()
{intstring[N];
intn[4],i;
gets(string);
fun(string,n);
for(i=0;i<4;i++)
printf("%d\t",n[i]);
)
4.
習(xí)題10.4.4
I*調(diào)試時(shí),可這樣輸入數(shù)據(jù):*/
/*1112131415
2122232425
3132333435
4142434445
5152535455*/
include<stdio.h>
main()
{inta[5][5],*p,i,j;
voidchange(int*p);
printf("lnputmatrix:\n");
for(i=0;i<5;i??)/*輸入矩陣*/
for(j=0;j<5;j++)
scanf("%d",&a[i]O]);
P=&a[0][0];〃使p指向0行0列元素*/
change(p);〃調(diào)用函數(shù),實(shí)現(xiàn)交換*/
printf("Now,matrix:\nu);
for(i=0;i<5;i++)/*輸出已交換的矩陣*/
{for(j=0;j<5;j++)
printf("%4d",a[i]0]);
printf("\nH);
)
)
voidchange(int*p)/*交換函數(shù)7
{inti.j.ternp;
int*pmax,*pmin;
pmax=p;
pmin=p;
for(i=0;i<5;i++)〃找最大值和最小值的地址,并賦給pmax.pmin*/
for(j=0;j<5;j++)
{if(*pmax<*(p+5*i+j))pmax=p+5*i+j;
if(*pmin>*(p+5*i+j))pmin=p+5*i+j;
)
temp=*(p+12);〃將最大值換給中心元素*/
*(p+12)=*pmax;
*pmax=temp;
temp=*p;/*將最小值換給左上角元素*/
"p="pmm;
*pmin=temp;
pmin=p+1;
for(i=0;i<5;i++)/*找第二最小值的地址賦給pmin7
for(j=0;j<5;j++)
if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))pmin=p+5*i+j;
temp=*pmin;/*將第二最小值換給右上角元素7
*pmin=*(p+4);
*(p+4)=temp;
pmin=p+1;
for(i=0;i<5;i++)/*找第三最小值的地址賦給pmin*/
forO=0;j<5;j++)
if(((p+5*i+j)!=(p+4))&&((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))
pmin=p+5*i+j;〃將第三最小值換給左下角元素*/
temp=*pmin;
*pmin=*(p+20);
*(p+20)=temp;
pmin=p?1;
for(i=0;i<5;i++)/*找第四最小值的地址賦給pmin*/
forG=0;j<5;j++)
if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))&&(*pmin>*(p+5*i+j))i
pmin=p+5*i+j;
temp=*pmin;/*將第四最小值換給右下角元素7
*pmin=*(p+24);
*(p+24)=temp;
)
5.
習(xí)題10.4.5
〃可以專門編寫一個(gè)函數(shù)求各學(xué)生的平均分,存到aver[4]數(shù)組*/
#include<stdio.h>
voidavcourl(floatscore[][5]);
voidfali2(intnum[4],floatscore[4][5]);
voidgood(intnum[4],floatscore[4][5]);
main()
(
int數(shù)組num代表學(xué)號(hào)
floatscore[4][5];
printf("lnputNO.andscores:\n");
for(i=0;i<4;i++)
{printfCNO.*1);
scanf("%d",&num[i]);
printf("scores:");
for(j=0;j<5;j++)
scanf("%r,&score[i][j]);
)
printf("\n\n");
avcourl(score);/*求出第一門課的平均成績*/
printf("\n\n");
fali2(num,score);〃找出2門課不及格的學(xué)生*/
printfC'\n\n");
good(num,score);〃找出成績好的學(xué)生*/
)
voidavcourl(floatscore口[5])/*第一門課的平均成績的函數(shù)7
{inti;
floatsum,average1;
sum=0.0;
for(i=0;i<4;i++)
sum=sum+score[0][i];/*累計(jì)每個(gè)學(xué)生的得分*/
average1=sum/4;〃計(jì)算平均成績*/
printf("course1averages:%6.2f.\nH,average1);
)
voidfali2(intnum[4],floatscore[4][5])
/*找兩門以上課程不及格的學(xué)生的函數(shù)*/
{inti,j,k,label;
floatsum=0;
printf("========Studentwhoisfail============\n");
printf("NO.");
for(i=0;i<5;i++)
printf(,'%1Od",i+1);
printf("average\n");
for(i=0;i<4;i++)
{label=0;
for(j=0;j〈5;j++)
if((score[i][j])<60.0)label++;
if(label>=2)
{printf(',%5d",num[i]);
for(k=0;k<5;k++)
{printf("%10.2r,score[i][k]);
sum+=score[i][k];
)
printf("%10.2f\n',sum/5);
)
}
}
voidgood(intnum[4],floatscore[4][5])
/*找成績優(yōu)秀的學(xué)生(各門85分以上或平均90分以上)的函數(shù)7
{inti,j,k,n;
floatsum=0,aver[4];
printf("========Studentwhosescoreisgood========\n");
printf("NO.");
for(i=0;i<5;i++)
printf("%10d",i+1);
printf("average\n");
for(i=0;i<4;i++)
{n=0;
sum=0;
forO=0;j<5;j++)
(
if((score[i][j])>85.0)n++;
sum+=score[i][j];
}
aver[i]=sum/5;
if((n==5)||(aver[i]>=90))
{printf("%5d",num[i]);
for(k=0;k<5;k++)
printf("%10.2f,,score[i][k]);
printf("%10.2f\n;aver[i]);
)
)
)
6.
習(xí)題10.4.6
#include<math.h>
doublesigma(double(*fn)(double),doubleI,doubleu)
{doublesum=0,d;
for(d=l;d<u;d+=0.1)
sum+=fn(d);
returnsum;
)
voidmain()
{doublesum;
sum=sigma(sin,0.1,1.0);
printf("sumofsinfrom0.1to1.0is:%f\n",sum);
sum=sigma(cos,0.5,3.0);
printf("sumofcosfrom0.5to3.0is:%f\n",sum);
)
7.
習(xí)題10.4.7
main()
{inti;
char*month_name(intn);
printf(MinputMonthNo.:\n");
scanf("%d",&i);
printf("MonthNo.:%2d—>%s\n",i,month_name(i));/*調(diào)用指針函數(shù)month_name()*/
)
char*month_name(intn)
〃定義一個(gè)指針函數(shù)month_name(),返回一個(gè)指向字符串的指針*/
{staticchar*name[]={,'lllegalMonth",
?'January","February1',"March","April",
"May",Pune","July","August';
"September","October","November","December"};
return((n<1||n>12)?name[0]:name[n]);
)
8.
習(xí)題10.4.8
include<stdio.h>
include<string.h>
#defineN10
main()
{voidsort(charAp[]);
inti;
char*p[N],str[N][20];
for(i=0;i<N;i++)
p[i]=str[i];/"將第i個(gè)字符串的首地址賦予指針數(shù)組p的第i個(gè)元素*/
printf("lnputstrings:\n");
for(i=0;i<N;i++)
scanf("%s",p[i]);
sort(p);
printf("Now,thesequenceis:\n");
for(i=0;i<N;i++)
printf("%s\n",p[i]);
)
voidsort(char*p[])
{inti,j;
char*temp;
for(i=0;i<N-1;i++)
for(j=0;j<N-1-i;j++)
if(strcmp(*(p+j),*(p+j+1))>0)
{temp=*(p+j);
*(P+j)=*(P+j+1);
*(p+j+1)=temp;
)
)
9.
習(xí)題10.4.9
include<stdio.h>
#defineLINEMAX20/*定義字符串的最大長度*/
main()
{voidsort(char**p);
inti;
char**p,*pstr[5],str[5][LINEMAX];
for(i=0;i<5;i++)
pstr[i]=str[i];/*將第i個(gè)字符串的首地址賦予指針數(shù)組pstr的第i個(gè)元素*/
printf("lnput5strings:\n");
for(i=0;i<5;i++)
scanf("%su,pstr[i]);
p=pstr;
sort(p);
printf("stringssorted:\n");
for(i=0;i<5;i++)
printf("%s\nH,pstr[i]);
)
voidsort(char**p)〃冒泡法對(duì)5個(gè)字符串排序的函數(shù)*/
{inti,j;
char*temp;
for(i=0;i<5;i++)
{forO=i+1;j<5;j++)
{if(strcmp(*(p+i),*(p+j))>0)/*比較后交換字符串地址7
{temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
)
)
)
)
10.
voidStrOR(charxx[][80],intmaxline)
{inti,righto,j,s,k;
chartemp[80];
for(i=0;i<maxline;i++)
for(j=strlen(xx[i])-1;j>=0;j-)
{k=0;memset(temp,0,80);
if(xx[i]0]=='o')
{righto=j;
for(s=righto+1;s<strlen(xx[i]);s++)
temp[k++]=xx[i][s];
for(s=0;s<righto;s++)
if(xx[i][s]!=*o')temp[k++]=xx[i][s];
strcpy(xx[i],temp);
}elsecontinue;
)
)
第11章
一、選擇
1.D2.C3.C4.D5.A6.C7.A8.B
二、填空
1.structstudent
strcmp(str,stu[i].name)==O
break;
2.p=person
p-person<3
old=p->age;
q->name,q->age
3.p!=NULL
C++
p->next
4.&per[i].body.eye
&per[i].body.f.height
&per[i].body.f.weight
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度特色餐廳租賃合同及餐飲文化體驗(yàn)
- 二零二五年度平菇香菇線上線下銷售渠道拓展合同
- 2025年度二手房買賣合同交易手續(xù)辦理指南
- 2025年度文化創(chuàng)意產(chǎn)業(yè)項(xiàng)目合作開發(fā)合同4篇
- 2025年度寧夏糧食和物資儲(chǔ)備局糧食儲(chǔ)備庫安全管理合同4篇
- 二零二五年度高品質(zhì)木箱紙箱租賃經(jīng)營合同3篇
- 二零二五年停薪留職員工績效管理合同
- 二零二五年度床上用品電商平臺(tái)合作推廣合同2篇
- 江蘇省村衛(wèi)生室人員合理用藥培訓(xùn)
- 二零二五年度民政局認(rèn)證離婚協(xié)議書范本
- 2024年高純氮化鋁粉體項(xiàng)目可行性分析報(bào)告
- 安檢人員培訓(xùn)
- 山東省濰坊市2024-2025學(xué)年高三上學(xué)期1月期末 英語試題
- 危險(xiǎn)性較大分部分項(xiàng)工程及施工現(xiàn)場易發(fā)生重大事故的部位、環(huán)節(jié)的預(yù)防監(jiān)控措施
- 水上水下作業(yè)應(yīng)急預(yù)案
- API520-安全閥計(jì)算PART1(中文版)
- 2023年廣東省廣州地鐵城際鐵路崗位招聘筆試參考題庫附帶答案詳解
- 商務(wù)提成辦法
- 直流電機(jī)電樞繞組簡介
- GB/T 19889.5-2006聲學(xué)建筑和建筑構(gòu)件隔聲測量第5部分:外墻構(gòu)件和外墻空氣聲隔聲的現(xiàn)場測量
- 《土地寶懺》2019版定稿
評(píng)論
0/150
提交評(píng)論