正文 第52章 習題(3 / 3)

if(pc==NULL){pc=pt;pre=pt;}

else{pre->next=pt;pre=pt;}

pb=pb->next;

pa=pa->next;

returnpc;

voidmain()

{chara[]="coma",b[]="become";

PNODE*ha=0,*hb=0,*hc=0;

ha=create(a);

print(ha);

hb=create(b);hc=joint(ha,hb);print(hc);

12.函數f的功能是計算並返回F(x)的值。F(x)的計算公式如下:

F(x)=π〖〗2-cosx〖〗x∑∞〖〗n=0(-1)nx2n〖〗(2n)!

計算級數F(x),當通項絕對值小於等於10-6時停止累加。

#include

#include

doublef(doublex)

{intn=1,sign=-1;doubleterm=1,sum=term;

while(fabs(term)>1e-6)

{term=term*sign*;

sum=sum+term;

;

sum=3.14159/2-cos(x)*sum/x;

returnsum;

voidmain()

{doublex=1;

printf("f(%f)=%f\n",x,f(x));

13.如果一個數及該數的反序數都是素數,則稱該數為可逆素數。例如,17是素數,17的反序數71也是素數,因此17便是一個可逆素數。以下程序中,函數f()在[m,n]區間內查找所有可逆素數並將這些素數依次保存到a指向的數組中,函數返回a數組中可逆素數的數目。

#include

#include

intp(intn)

{inti,j=sqrt(n);

for(i=2;i0)

{m=;n=n/10;}

returnm;

intf(intm,intn,inta[])

{inti,j=0;

for(i=m;i

#include

char*encrypt(,intn)

{inti,t;

for(i=0;a[i]!=\0;i++)

{if(isalpha(a[i]))

{t=(toupper(a[i])-A+n)%26;

a[i]=?A+t:a+t;

;

voidmain()

{char*s[2]={"dLLA","hQYG"};

printf("%s\b",encrypt(s[0],3));

printf("%s\b",encrypt(s[1],4));

15.以下程序中函數statis的功能是:統計n本書中每類書(小說、詩歌、散文)的數量及每類書的總購買金額。程序的輸出結果如下:

novel:2$4000

poem:2$35:00

essay:2$5700

#include

#include

typedefstruct/*保存書籍信息*/

{chartitle[20];/*書名*/

inttype;

/*書的類別:0,novel小說;1,poem詩歌;2,essay散文*/

doubleprice;/*書的價格*/

}BOOK;

typedefstruct/*保存統計結果*/

{charcname[10];/*書籍類別名*/

intnum;/*每類書的數量*/

doublesum;/*每類書的購買金額*/

}ST;

/*statis函數形參說明:sx指向一個BOOK類型一維結構的數組,其中已保存了n本書的信息;sy指向一個ST類型一維結構數組,用於保存統計結果;cname指向一個char類型二維數組,其中已保存了三類書的類別名*/

voidstatis(BOOKsx[],intn,STsy[],charcname[][10])

{inti,j,k;

for(i=0;i

#defineN100

voidcrl(int*a)

{inti,j,max=0,min=0,temp;

for(i=1;ia[i])min=i;

temp=a[min];

j=min;

while(j>0){a[j]=a[j-1];j--;}

a[0]=temp;

for(i=1;ib?a:b)”,則表達式“max(2,max(3,1))”的值是。

6.以下程序運行後輸出的結果是。

#include

intb;

intfun(inta)

{staticintc=3;

return((++a)+(++b)+(++c));

voidmain()

{inti,a=2;

for(i=0;i

#include

voidprint(char*p)

{staticintlen,offset;

offset=strlen(p)-len;

if(offset==0)return;

elseprintf("%c",*(p+offset-1));

len++;

print(p);

voidmain()

{chrstr[]="dog";print(str);}

9.以下程序運行後,輸出結果的第一行是,第二行是。

#include

voidmain()

{intw=0,i;

for(i=0;i=0;i--)

{for(j=i,k=0;s[j]==t[k]&&t[k]!=\0;j++,k++);

if(t[k]==\0)printf("%d\n",i);

11.以下程序運行後,輸出結果的第一行是,第三行是,第五行是。

#include

#defineN8

voidmain()

{inti,j,pa[N]={1};

printf("%5d\n",pa[0]);

for(i=1;i0;j--)pa[j]=pa[j]+pa[j-1];

for(j=0;j

#include

doublePI(doubleeps)

{doubles=0,t=10;intn;

for(n=1;t>eps;n++){s+=t;t=t*;}

return20*s;

voidmain()

{doublee=1e-6;

printf("%f",);

13.以下程序的功能是:輸出小於M的所有可分解整數。

可分解整數是指這個整數的所有數位上的數字之和等於該數的所有素數因子的各位數字之和。例如,9975是一個可分解整數,該數的所有數位上的數字之和為30(9+9+7+5);該數的所有素數因子是3、5、5、7、19,所有素數因子的各位數字之和為30。

函數intf(intx)的功能是:求出整數x的各位上的數字之和。函數intg(intx)的功能是:求出整數x所有素數因子的各位數字之和。100以內的可分解整數有:4、22、26、58、65、95。

#include

intf(intx)

{intk,n=x,s=0;

do

{k=n/10;s=s+n%10;n=k;

}while(k!=0);

return(s);

intg(intn)

{inti=0,k=2,s=0;

do

{if(n/k*k==n)

{s=;i++;n=n/k;}

elsek=k+1;

}while(k*k

#defineswap(a,b,c)c=a,a=b,b=c;

intsort(int*a,intm,int*b,intn,int*c)

{inti,j,k,x;

for(i=0;i

#definen8

voidmain()

{intp[n+1];intf,r;

for(f=1;f

#include

#defineN6

voidfindmax(char*str[],charmaxstr[],intn,int*maxlen)

{inti,len;charch;

for(i=0;i*maxlen)

{maxstr=str[i];*maxlen=len;}

for(i=0;i