PTA程序设计答案Word文件下载.docx
《PTA程序设计答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《PTA程序设计答案Word文件下载.docx(75页珍藏版)》请在冰豆网上搜索。
returnma*;
4-44数字金字塔(15分)
voidpyramid(intn){
inti,j,space;
i<
=n;
i++){
space=n-i;
for(j=0;
j<
space;
j++)
printf("
"
);
i;
%-2d"
i);
printf("
\n"
4-45判断奇偶性(10分)
inteven(intn){
if(n%2==0)
4-46使用函数求奇数和(15分)
intOddSum(intList[],intN){
intoddsum=0;
if(even(List[i])==0)
oddsum+=List[i];
returnoddsum;
4-47使用函数计算两点间的距离(10分)
doubledist(double*1,doubley1,double*2,doubley2){
doubled;
d=sqrt((*1-*2)*(*1-*2)+(y1-y2)*(y1-y2));
returnd;
4-48使用函数求素数和(20分)
intprime(intp){
inti,j,count=0;
for(j=2;
j<
p;
j++)
if(p%j==0)
count++;
if(count==0&
&
p>
0&
p!
=1)
intPrimeSum(intm,intn){
inti,sum=0;
if(prime(i)==1)
sum=sum+i;
returnsum;
4-20使用函数输出水仙花数(20分)
intnarcissistic(intnumber){
inti,j,digit,power,powerSum,integer,count,flag;
count=0;
integer=number;
while(integer>
0){
integer=integer/10;
count++;
powerSum=0;
for(i=0;
count;
digit=integer%10;
power=1;
for(j=0;
power=power*digit;
powerSum=powerSum+power;
if(powerSum==number)
flag=1;
flag=0;
returnflag;
voidPrintN(intm,intn){
for(i=m+1;
n;
if(narcissistic(i)==1)
4-21使用函数求余弦函数的近似值(15分)
doublefuncos(doublee,double*){
doublesum=0,d=100;
inti=0,j;
doublecj;
intcount=0;
while(d>
e){
count++;
if(count%2!
=0){
cj=1;
for(j=1;
j<
=i;
j++)
cj=cj*j;
d=pow(*,i)/cj;
sum=sum+d;
i+=2;
}
else{
sum=sum-d;
}
4-49分类统计字符个数(15分)
voidStringCount(chars[]){
intn1=0,n2=0,n3=0,n4=0;
s[i]!
='
\0'
;
if((s[i]>
a'
s[i]<
z'
)||(s[i]>
A'
Z'
))
n1++;
elseif(s[i]=='
'
||s[i]=='
\n'
)
n2++;
elseif(s[i]>
0'
9'
n3++;
elsen4++;
letter=%d,blank=%d,digit=%d,other=%d"
n1,n2,n3,n4);
4-7使用函数求特殊a串数列和(20分)
intfn(inta,intn){
int*,p=0,i;
n;
*=a*pow(10,i);
p=p+*;
returnp;
intSumA(inta,intn){
intk;
intsum=0;
for(k=0;
k<
n+1;
k++)
sum=sum+fn(a,k);
4-22使用函数输出指定围的完数(20分)
intfactorsum(intnumber){
inti,s=1;
=number/2;
if(i>
1&
number%i==0)
voidPrintPN(intm,intn){
intk,t,found=0;
for(k=m;
k++){
if(factorsum(k)==k){
found=1;
%d=1"
k);
for(t=1;
t<
=k/2;
t++)
if(t>
k%t==0)
printf("
+%d"
t);
if(found==0)
Noperfectnumber"
4-25使用函数输出一个整数的逆序数(20分)
intreverse(intnumber){
intm=0;
if(number<
number=-number;
-"
elseif(number==0)
m=0;
while(number>
0){
m=m*10+number%10;
number=number/10;
returnm;
4-50移动字母(10分)
voidShift(chars[]){
inti,n;
chara[3];
n=strlen(s);
3;
a[i]=s[i];
if(n>
3)
for(i=3;
s[i-3]=s[i];
s[n-3+i]=a[i];
4-51在数组中查找指定元素(15分)
intsearch(intlist[],intn,int*){
inti,result;
for(i=0;
if(list[i]==*){
result=i;
break;
if(i==n)
result=-1;
returnresult;
4-52数组循环右移(20分)
intArrayShift(inta[],intn,intm){
inti=0,s[100];
if(m>
=n)
m=m%n;
if(m!
=0){
for(i=n-m;
s[i-(n-m)]=a[i];
for(i=n-m-1;
i>
=0;
i--)
a[i+m]=a[i];
for(i=0;
m;
a[i]=s[i];
return0;
4-54删除字符(20分)
voiddelchar(char*str,charc){
inti=0,j=0;
for(;
str[i]!
='
if(str[i]!
=c){
str[j]=str[i];
j++;
str[j]='
4-55分类统计各类字符个数(15分)
voidStringCount(char*s){
intn1=0,n2=0,n3=0,n4=0,n5=0;
if(s[i]>
n2++;
n4++;
elsen5++;
%d%d%d%d%d"
n1,n2,n3,n4,n5);
4-26使用递归函数计算1到n之和(10分)
intsum(intn){
if(n<
=0)
else{
sum+=i;
returnsum;
4-28递归求阶乘和(15分)
doublefact(intn){
doublem=1;
if(n==0)
returnm;
m=m*i;
doublefactsum(intn){
intj;
doublesum=0;
0)
for(j=1;
sum+=fact(j);
4-29递归实现指数函数(15分)
doublecalc_pow(double*,intn){
m=m**;
4-32递归求Fabonacci数列(10分)
intf(intn){
intd;
d=0;
elseif(n==1)
d=1;
elsed=f(n-2)+f(n-1);
4-33十进制转换二进制(15分)
voiddectobin(intn){
intt;
if(n==0||n==1)
%d"
n%2);
t=n;
dectobin(n=n/2);
t%2);
4-8递归实现顺序输出整数(15分)
voidprintdigits(intn){
if(n<
10)
n);
printdigits(n/10);
n%10);
4-9统计各位数字之和是5的数(20分)
intis(intnumber){
ints=0;
while(number>
s+=number%10;
number/=10;
if(s==5)
else
voidcount_sum(inta,intb){
inti,count=0,count_sum=0;
for(i=a;
=b;
if(is(i)){
count_sum+=i;
count=%d,sum=%d"
count,count_sum);
4-10简单实现*的n次方(10分)
doublemypow(double*,intn){
doubles=1;
s=s**;
4-13使用函数求1到10的阶乘和(10分)
s=s*i;
4-14使用函数求最大公约数(10分)
intgcd(int*,inty){
inti,t;
if(*<
y){
t=y;
y=*;
*=t;
for(i=y;
i>
=1;
i--)
if(*%i==0&
y%i==0)
break;
returni;
4-15使用函数的选择法排序(25分)
voidsort(inta[],intn){
inti,j,k,t;
n-1;
i++){
for(j=i+1;
if(a[j]<
a[i]){
t=a[i];
a[i]=a[j];
a[j]=t;
4-16函数实现字符串逆序(15分)
voidf(char*p){
inti,n=0;
chart;
p[i]!
n++;
n/2;
i++){
t=p[i];
p[i]=p[n-1-i];
p[n-1-i]=t;
4-17递归计算P函数(15分)
doubleP(intn,double*){
doublez;
if(n==0)
z=1;
elseif(n==1)
z=*;
elseif(n>
1)
z=((2*n-1)*P(n-1,*)-(n-1)*P(n-2,*))/n;
returnz;
4-1计算存款利息-genlib(10分)
intmain(void)
{
intmoney,year;
doubleinterest,rate;
scanf("
&
money);
year);
%lf"
rate);
interest=money*pow(1+rate,year)-money;
interest=%.2f\n"
interest);
4-2弹球距离(15分)
doubledist(doubleh,doublep){
doubled=h;
while(p!
h=p*h;
if(h<
TOL)
d=d+2*h;
四、编程题
单词长度(20分)
*include<
stdio.h>
string.h>
intmain(){
chara[1000];
inti,n=0,k,t=0;
scanf("
%c"
a[i]);
if(a[i]=='
.'
k=i;
for(i=i-1;
i>
=0;
i--){
t++;
elsebreak;
=k;
){
if(n!
=0){
printf("
}
n=0;
if(i<
k-t)
else{
n++;
掉入陷阱的数字(20分)
intn[1000],s[1000],i,t;
n[0]);
for(i=1;
1000;
s[i-1]=0;
t=n[i-1];
while(t>
s[i-1]+=t%10;
t/=10;
n[i]=3*s[i-1]+1;
%d:
i,n[i]);
if(n[i]==n[i-1])break;
九宫格输入法(20分)
char*key[10]={"
0"
"
1,."
!
"
2ABC"
3DEF"
"
4GHI"
5JKL"
6MNO"
7PQRS"
8TUV"
9W*YZ"
};
intlength[10];
for(inti=0;
10;
length[i]=strlen(key[i]);
charch;
charp;
intcount=0;
do{
ch=getchar();
if(ch!
ch!
p=ch;
putchar(key[p-'
][(count-1)%length[p-'
]]);
count=0;
}while(ch!
算术入门之加减乘除(20分)
main(){
inta,b,r1,r2,r3,r41,c;
floatr42;
%d%d"
a,&
b);
r1=a+b;
r2=a-b;
r3=a*b;
%d+%d=%d\n%d-%d=%d\n%d*%d=%d\n"
a,b,r1,a,b,r2,a,b,r3);
c=a%b;
if(c==0){
r41=a/b;
%d/%d=%d"
a,b,r41);
r42=(float)a/b;
%d/%d=%.2f"
a,b,r42);
人民币兑换(20