PTA程序设计答案.docx
- 文档编号:11046122
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:70
- 大小:31.69KB
PTA程序设计答案.docx
《PTA程序设计答案.docx》由会员分享,可在线阅读,更多相关《PTA程序设计答案.docx(70页珍藏版)》请在冰豆网上搜索。
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,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PTA 程序设计 答案