PTA程序设计答案.docx

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

PTA程序设计答案.docx

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

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

答案:

intma*(inta,intb){

intma*;

if(a>=b)

ma*=a;

else

ma*=b;

returnma*;

}

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

答案:

voidpyramid(intn){

inti,j,space;

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

space=n-i;

for(j=0;j

printf("");

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

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

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-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,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{

cj=1;

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

cj=cj*j;

d=pow(*,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]>='0'&&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){

int*,p=0,i;

for(i=0;i

*=a*pow(10,i);

p=p+*;

}

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

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

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

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

}

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

答案:

intsearch(intlist[],intn,int*){

inti,result;

for(i=0;i

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

}

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]='\0';

}

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(double*,intn){

inti;

doublem=1;

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

m=m**;

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;

else

return0;

}

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简单实现*的n次方(10分)

答案:

doublemypow(double*,intn){

inti;

doubles=1;

for(i=0;i

s=s**;

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(int*,inty){

inti,t;

if(*

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;

for(i=0;i

for(j=i+1;j

if(a[j]

t=a[i];a[i]=a[j];a[j]=t;

}

}

}

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

答案:

voidf(char*p){

inti,n=0;

chart;

for(i=0;p[i]!

='\0';i++)

n++;

for(i=0;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("%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;

}

九宫格输入法(20分)

答案:

*include

*include

intmain(){

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

","2ABC","3DEF",

"4GHI","5JKL","6MNO",

"7PQRS","8TUV","9W*YZ"

};

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,r3);

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

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

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

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

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