PTA程序设计答案.docx

上传人:b****8 文档编号:11046122 上传时间:2023-02-24 格式:DOCX 页数:70 大小:31.69KB
下载 相关 举报
PTA程序设计答案.docx_第1页
第1页 / 共70页
PTA程序设计答案.docx_第2页
第2页 / 共70页
PTA程序设计答案.docx_第3页
第3页 / 共70页
PTA程序设计答案.docx_第4页
第4页 / 共70页
PTA程序设计答案.docx_第5页
第5页 / 共70页
点击查看更多>>
下载资源
资源描述

PTA程序设计答案.docx

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

PTA程序设计答案.docx

PTA程序设计答案

PTA所有答案

工业gc1601学习小组

、判断题

、选择题

三、函数题

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

intsum(intm,intn){ints=0,i;for(i=m;i<=n;i++)s+=i;

returns;

}4-34简单输出整数(10分)答案:

voidPrintN(intN){inti;

for(i=1;i<=N;i++)printf("%d\n",i);

}

4-36简单求和(10分)答案:

intSum(intList[],intN){inti,s=0;

for(i=0;i

s+=List[i];

returns;

}

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

答案:

intFactorial(constintN){

inti,s=1;

if(N<0)return0;

elseif(N==0)

return1;

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

s*=i;returns;

}

}

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

for(j=0;j

printf("%-2d",i);printf("\n”);

}

}

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

答案:

inteven(intn){if(n%2==0)return1;

else

return0;

}

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

inteven(intn){

if(n%2==0)return1;

else

return0;

}

intOddSum(intList[],intN){

inti;

intoddsum=0;

for(i=0;i

}

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

doubledist(doublex1,doubley1,doublex2,doubley2){doubled;

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

}4-48使用函数求素数和(20分)答案:

intprime(intp){

inti,j,count=0;

for(j=2;j

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

=1)

return1;

else

return0;

}

intPrimeSum(intm,intn){

inti,sum=O;

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

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;

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分)答案:

voidStringCount(chars[]){

inti;

intn1=0,n2=0,n3=0,n4=0;

for(i=0;s[i]!

='\0';i++){

if((s[i]>='a'&&s[i]<='z')||(s[i]>=A&&s[i]<='Z'))n1++;

elseif(s[i]==''||s[i]=='\n')

n2++;

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

n3++;

elsen4++;

}

printf("letter=%d,blank=%d,digit=%d,other=%d",n1,n2,n3,n4);}

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

答案:

intfn(inta,intn){

intx,p=0,i;

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分)

答案:

intfactorsum(intnumber){

inti,s=1;

for(i=1;i<=number/2;i++)

if(i>1&&number%i==0)

s+=i;

returns;

}

voidPrintPN(intm,intn){

intk,t,found=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,n;

chara[3];n=strlen(s);

for(i=0;i<3;i++)a[i]=s[i];

if(n>3)for(i=3;i

for(i=0;i<3;i++)s[n-3+i]=a[i];

}

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

答案:

intsearch(intlist[],intn,intx){inti,result;

for(i=0;i

}

}

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;i

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

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

for(i=0;i

}return0;

}4-54删除字符(20分)

答案:

voiddelchar(char*str,charc){inti=0,j=0;

for(;str[i]!

='\0';i++)if(str[i]!

=c){str[j]=str[i];j++;

}

str[j]='\O:

}

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

答案:

voidStringCount(char*s){

inti;

intn1=0,n2=0,n3=0,n4=0,n5=0;

for(i=0;s[i]!

='\0';i++){

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

n1++;

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

n2++;

elseif(s[i]=='')

n3++;

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

n4++;

elsen5++;

}

printf("%d%d%d%d%d",n1,n2,n3,n4,n5);

}

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

答案:

intsum(intn){

inti,sum=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=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){

if(n<10)

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

else{

printdigits(n/10);

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

}

}

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

intis(intnumber){

ints=0;

while(number>0){

s+=number%10;number/=10;

}

if(s==5)return1;

elsereturn0;

}

voidcount_sum(inta,intb){

inti,count=0,count_sum=0;for(i=a;i<=b;i++)if(is(i)){

count++;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){

inti;doubles=1;

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

returns;

}

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

intgcd(intx,inty){

inti,t;

if(x

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

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

returni;

}

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

答案:

voidsort(inta[],intn){inti,j,k,t;

for(i=0;i

}

}

}

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

voidf(char*p){

inti,n=0;

chart;

for(i=0;p[i]!

='\0:

i++)n++;

for(i=0;i

P[i]=P[n-1-i];p[n-1-i]=t;

}

}

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;return乙

}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;

}returnd;

}

四、编程题

单词长度(20分)

答案:

#include<>

#include<>

intmain(){

chara[1000];

inti,n=0,k,t=0;for(i=0;;i++){

scanf("%c",&a[i]);if(a[i]=='.')break;

}

k=i;

for(i=i-1;i>=0;i--){if(a[i]=='')t++;

elsebreak;

}

for(i=0;i<=k;i++){

if(a[i]=='•'){

if(n!

=0){

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

}

break;

if(a[i]==''){

if(n!

=0){

printf("%d",n);

n=0;

if(i

printf(”");

else{

n++;

return0;

掉入陷阱的数字(20分)答案:

#include<>

intmain(){

intn[1000],s[1000],i,t;scanf("%d",&n[0]);

for(i=1;i<1000;i++){s[i-1]=0;

t=n[i-1];while(t>0){

s[i-1]+=t%10;t/=10;

}

n[i]=3*s[i-1]+1;printf("%d:

%d\n",i,n[i]);if(n[i]==n[i-1])break;

}

return0;

}

答案:

#include<>#include<>intmain(){

char*key[10]={"0","1,.?

!

","2ABC","3DEF","4GHI","5JKL","6MN0",

"7PQRS","8TUV","9WXYZ"

};

intlength[10];

for(inti=0;i<10;i++){

length[i]=strlen(key[i]);

}

charch;

charp;

intcount=0;

do{

ch=getchar();

if(ch!

=''&&ch!

='\n'){

p=ch;

count++;

}

else{

putchar(key[p-'0'][(count-1)%length[p-'0']]);count=0;

}

}while(ch!

='\n');

return0;

}

算术入门之加减乘除(20分)

答案:

#include<>

main(){

inta,b,r1,r2,r3,r41,c;

floatr42;

scanf("%d%d",&a,&b);

r1=a+b;

r2=a-b;

r3=a*b;

printf("%d+%d=%d\n%d-%d=%d\n%d*%d=%d\n",a,b,r1,a,b,r2,a,b,

⑶;

c=a%b;

if(c==0){

r41=a/b;

printf("%d/%d=%d",a,b,r41);

}

else{

r42=(float)a/b;

printf("%d/%d=%.2f",a,b,r42);

}return0;

}

人民币兑换(20分)答案:

#include<>

main(){

intn,n5,n2,n1;

scanf("%d",&n);

for(n5=1;n5<=n;n5++){

for(n2=100-n5;n2>=0;n2--){n1=100-n5-n2;

if(5*n5+2*n2+n1==150)

printf("%d%d%d\n",n5,n2,n1);}

}

return0;

}

求n以内最大的k个素数以及它们的和(20分)答案:

#include<>

intfun(intx){

inti;

if(x==0||x==1)return0;if(x==2)return1;

for(i=2;i*i<=x;i++)if(x%i==0)return0;

return1;

}

main(){

intn,k,s=0,t=1,j;

scanf("%d%d",&n,&k);

for(j=n;j>=1;j--){

if(fun(j)){

if(t){printf("%d",j);t=0;

}

else

printf("+%d",j);

s+=j;k--;

}

if(k==0)break;

}

printf("=%d",s);

return0;

}

编程打印空心字符菱形(20分)

答案:

#include<>

main(){

charch;

intj,j1,i,k,t;

scanf("%c%d",&ch,

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

当前位置:首页 > 高等教育 > 经济学

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

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