PTA函数答案.docx

上传人:b****5 文档编号:11942687 上传时间:2023-04-16 格式:DOCX 页数:25 大小:19.67KB
下载 相关 举报
PTA函数答案.docx_第1页
第1页 / 共25页
PTA函数答案.docx_第2页
第2页 / 共25页
PTA函数答案.docx_第3页
第3页 / 共25页
PTA函数答案.docx_第4页
第4页 / 共25页
PTA函数答案.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

PTA函数答案.docx

《PTA函数答案.docx》由会员分享,可在线阅读,更多相关《PTA函数答案.docx(25页珍藏版)》请在冰豆网上搜索。

PTA函数答案.docx

PTA函数答案

三、程序填空题

3-32程序阅读:

下列程序将输出

(5分)。

#include

ints;

intf(intm)

{

staticintk=0;

for(;k<=m;k++)s++;

returns;

}

intmain(void)

{

ints=1;

s=f

(2)+f

(2);

printf("%d#%d#",s,f(20));

return0;

}

四、函数

4-3 求m到n之和   (10分)

intsum(intm,intn)

{

inti;

ints=0;

for(i=m;i<=n;i++)

s=s+i;

return(s);

}

4-34 简单输出整数   (10分)

voidPrintN(intN)

{

inti;

for(i=1;i<=N;i++)

printf("%d\n",i);

}

4-36 简单求和   (10分)

intSum(intList[],intN)

{

intk;

intsum=0;

for(k=0;k

sum+=List[k];

returnsum;

}

4-40 简单阶乘计算   (10分)

intFactorial(constintN)

{

inti;

ints=1;

if(N<0)

return0;

elseif(N==0)

return1;

else

for(i=1;i<=N;i++)

s*=i;

returns;

}

4-41 统计个位数字   (15分)

intCount_Digit(constintN,constintD)

{

intx;

intcount=0;

inttemp=0;

x=N;

if(x<0)

x=-x;

do

{

temp=x%10;

if(temp==D)

count++;

x=x/10;

}

while(x>0);

returncount;

}

4-43 找两个数中最大者   (10分)

intmax(inta,intb)

{

intmax;

if(a>=b)

max=a;

else

max=b;

returnmax;

}

4-44 数字金字塔   (15分)

voidpyramid(intn)

{

inti,j,space;

for(i=1;i<=n;i++)

{

space=n-i;

for(j=0;j

putchar('');

for(j=0;j

printf("%-2d",i);

putchar('\n');

}

}

4-45 判断奇偶性   (10分)

inteven(intn)

{

if(n<0)

n=-n;

if(n%2==0)

return1;

else

return0;

}

4-46 使用函数求奇数和   (15分)

inteven(intn)

{

if(n<0)

n=-n;

if(n%2==0)

return1;

else

return0;

}

intOddSum(intList[],intN)

{

intk;

intoddsum=0;

for(k=0;k

if(even(List[k])==0)

oddsum+=List[k];

returnoddsum;

}

4-47 使用函数计算两点间的距离   (10分)

doubledist(doublex1,doubley1,doublex2,doubley2)

{

doubleDist;

Dist=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

returnDist;

}

4-48 使用函数求素数和   (20分)

intprime(intp)

{

inti,j;

intcount=0;

for(j=2;j

{

if(p%j==0)

{

count++;

}

}

if(count==0&&p>0&&p!

=1)

{

return1;

}else{

return0;

}

}

intPrimeSum(intm,intn)

{

inti,sum=0;

for(i=m;i<=n;i++)

{

if(prime(i)==1)

{

sum=sum+i;

}

}

returnsum;

}

4-19 使用函数统计指定数字的个数   (15分)

intCountDigit(intnumber,intdigit)

{

intcount,temp,x;

x=number;

if(x<0)

x=-x;

do

{

temp=x%10;

if(temp==digit)

count++;

x=x/10;

}

while(x>0);

returncount;

}

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;

integer=number;

for(i=0;i

{

digit=integer%10;

integer=integer/10;

power=1;

for(j=0;j

power=power*digit;

powerSum=powerSum+power;

}

if(powerSum==number)

flag=1;

else

flag=0;

returnflag;

}

voidPrintN(intm,intn)

{

inti;

for(i=m+1;i

{

if(narcissistic(i)==1)

printf("%d\n",i);

}

}

4-21 使用函数求余弦函数的近似值   (15分)

doublefuncos(doublee,doublex)

{

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(x,i)/cj;

sum=sum+d;

i+=2;

}

else

{

cj=1;

for(j=1;j<=i;j++)

cj=cj*j;

d=pow(x,i)/cj;

sum=sum-d;

i+=2;

}

}

returnsum;

}

4-49 分类统计字符个数   (15分)

voidf(longintx,char*p)

{

charq;

staticinti=0,j=0;

if(x<0)

{

x=-x;

*p='-';

p++;

}

q=x%16;

if(q<10)

q=('0'+q);

else

q=('A'+q-10);

x=x/16;

j++;

i=j;

if(x>0)

f(x,p);

*(p+(i-j))=q;

j--;

}

4-7 使用函数求特殊a串数列和   (20分)

intfn(inta,intn)

{

intx;

intp=0;

inti;

for(i=0;i

{

x=a*pow(10,i);

p=p+x;

}

returnp;

}

intSumA(inta,intn)

{

intk;

intsum=0;

for(k=0;k

sum=sum+fn(a,k);

returnsum;

}

4-22 使用函数输出指定范围内的完数   (20分)

voidPrintPN(intm,intn)

{

intk;

intt;

intfound=0;

for(k=m;k<=n;k++)

{

if(factorsum(k)==k)

{

found=1;

printf("%d=1",k);

for(t=1;t<=k/2;t++)

if(t>1&&k%t==0)

printf("+%d",t);

printf("\n");

}

}

if(found==0)

printf("Noperfectnumber");

}

4-25 使用函数输出一个整数的逆序数   (20分)

intreverse(intnumber)

{

intm=0;

if(number<0)

{

number=-number;

printf("-");

}

elseif(number==0)

m=0;

while(number>0)

{

m=m*10+number%10;

number=number/10;

}

returnm;

}

4-50 移动字母   (10分)

voidShift(chars[])

{

inti;

intn;

chara[3];

n=strlen(s);

for(i=0;i<3;i++)

a[i]=s[i];

if(n>3)

for(i=3;i

{

s[i-3]=s[i];

}

for(i=0;i<3;i++)

s[n-3+i]=a[i];

returns;

}

4-51 在数组中查找指定元素   (15分)

intsearch(intlist[],intn,intx)

{

inti,result;

for(i=0;i

{

if(list[i]==x)

{

result=i;

break;

}

}

if(i==n)

result=-1;

returnresult;

}

4-52 数组循环右移   (20分)

intArrayShift(inta[],intn,intm)

{

inti=0;

ints[10];

if(m>=n)

m=m%n;

if(m!

=0)

{

for(i=n-m;i

s[i-(n-m)]=a[i];

for(i=n-m-1;i>=0;i--)

a[i+m]=a[i];

for(i=0;i

a[i]=s[i];

}

return0;

}

注:

最后一个样例(2分),段错误没通过,暂时还没找到原因

4-54 删除字符   (20分)

voiddelchar(char*str,charc)

{

inti,j;

for(j=i=0;str[i]!

='\0';i++)

if(str[i]!

=c)

{

str[j]=str[i];

j++;

}

str[j]='\0';

}

4-55 分类统计各类字符个数   (15分)

voidStringCount(char*s)

{

inti,bletter=0,sletter=0,blank=0,digit=0,other=0;

for(i=0;s[i]!

='\0';i++)

{

if(s[i]>='A'&&s[i]<='Z')

bletter++;

elseif(s[i]>='a'&&s[i]<='z')

sletter++;

elseif(s[i]=='')

blank++;

elseif(s[i]>='0'&&s[i]<='9')

digit++;

else

other++;

}

printf("%d%d%d%d%d",bletter,sletter,blank,digit,other);

}

4-26 使用递归函数计算1到n之和   (10分)

intsum(intn)

{

inti;

intSum=0;

if(n<=0)

return0;

else

for(i=1;i<=n;i++)

Sum+=i;

returnSum;

}

4-28 递归求阶乘和   (15分)

doublefact(intn)

{

inti;

doublem=1;

if(n==0)

returnm;

else

for(i=1;i<=n;i++)

m=m*i;

returnm;

}

doublefactsum(intn)

{

intj;

doublesum;

sum=0;

if(n>0)

{

for(j=1;j<=n;j++)

sum+=fact(j);

}

returnsum;

}

4-29 递归实现指数函数   (15分)

doublecalc_pow(doublex,intn)

{

inti;

doublem=1;

for(i=1;i<=n;i++)

m=m*x;

returnm;

}

4-32 递归求Fabonacci数列   (10分)

intf(intn)

{

intd;

if(n==0)

d=0;

elseif(n==1)

d=1;

elsed=f(n-2)+f(n-1);

returnd;

}

4-33 十进制转换二进制   (15分)

voiddectobin(intn)

{

intt;

if(n==0||n==1)

printf("%d",n%2);

else

{

t=n;

dectobin(n=n/2);

printf("%d",t%2);

}

}

4-8 递归实现顺序输出整数   (15分)

voidprintdigits(intn)

{

intN=1;

inti;

intshang;

intyushu;

intm;

m=n;

while(m>9)

{

N++;

m=m/10;

}

for(i=N-1;i>=0;i--)

{

shang=n*pow(10,-i);

yushu=n-shang*pow(10,i);

n=yushu;

printf("%d\n",shang);

}

}

4-9 统计各位数字之和是5的数   (20分)

intis(intnumber)

{

ints=0;

intyushu=number;

while(number>0)

{

yushu=number%10;

s=yushu+s;

number=number/10;

}

if(s==5)

return1;

else

return0;

}

voidcount_sum(inta,intb)

{

inti;

intcount=0;

intcount_Sum=0;

for(i=a;i<=b;i++)

if(is(i))

{

count++;

count_Sum=count_Sum+i;

}

printf("count=%d,sum=%d",count,count_Sum);

}

4-10 简单实现x的n次方   (10分)

doublemypow(doublex,intn)

{

inti;

doubles=1;

for(i=0;i

s=s*x;

returns;

}

4-13 使用函数求1到10的阶乘和   (10分)

doublefact(intn)

{

intk;

ints=1;

for(k=1;k<=n;k++)

s=s*k;

returns;

}

4-14 使用函数求最大公约数   (10分)

intgcd(intx,inty)

{

inti,t;

if(x

{

t=y;

y=x;

x=t;

}

for(i=y;i>=1;i--)

if(x%i==0&&y%i==0)

break;

returni;

}

4-15 使用函数的选择法排序   (25分)

voidsort(inta[],intn)

{

inttemp,k,min,i;

for(k=0;k

{

min=k;

for(i=k+1;i

if(a[i]

min=i;

temp=a[min];

a[min]=a[k];

a[k]=temp;

}

}

4-16 函数实现字符串逆序   (15分)

voidf(char*p)

{

chartemp;

char*end=p+my_strlen(p)-1;

while(end>p)

{

temp=*p;

*p=*end;

*end=temp;

--end;

++p;

}

}

intmy_strlen(char*p)

{

char*q=p;

while(*p!

='\0')

p++;

returnp-q;

}

4-17 递归计算P函数   (15分)

doubleP(intn,doublex)

{

doublez;

if(n==0)

z=1;

elseif(n==1)

z=x;

elseif(n>1)

z=((2*n-1)*P(n-1,x)-(n-1)*P(n-2,x))/n;

returnz;

}

4-1 计算存款利息-genlib   (10分)

intmain(void)

{

intmoney,year;

doubleinterest,rate;

scanf("%d",&money);

scanf("%d",&year);

scanf("%lf",&rate);

interest=money*pow(1+rate,year)-money;

printf("interest=%.2f\n",interest);

return0;

}

4-2 弹球距离   (15分)

doubledist(doubleh,doublep)

{

doubled=h;

while(p!

=0)

{

h=p*h;

if(h

break;

d=d+2*h;

}

return(d);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1