您好,欢迎访问三七文档
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;iN;i++)s+=List[i];returns;}4-40简单阶乘计算(10分)答案:intFactorial(constintN){inti,s=1;if(N0)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;elsemax=b;returnmax;}4-44数字金字塔(15分)答案:voidpyramid(intn){inti,j,space;for(i=1;i=n;i++){space=n-i;for(j=0;jspace;j++)printf();for(j=0;ji;j++)printf(%-2d,i);printf(\n);}}4-45判断奇偶性(10分)答案:inteven(intn){if(n%2==0)return1;elsereturn0;}4-46使用函数求奇数和(15分)答案:inteven(intn){if(n%2==0)return1;elsereturn0;}intOddSum(intList[],intN){inti;intoddsum=0;for(i=0;iN;i++)if(even(List[i])==0)oddsum+=List[i];returnoddsum;}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;jp;j++)if(p%j==0)count++;if(count==0&&p0&&p!=1)return1;elsereturn0;}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(integer0){integer=integer/10;count++;}powerSum=0;integer=number;for(i=0;icount;i++){digit=integer%10;integer=integer/10;power=1;for(j=0;jcount;j++)power=power*digit;powerSum=powerSum+power;}if(powerSum==number)flag=1;elseflag=0;returnflag;}voidPrintN(intm,intn){inti;for(i=m+1;in;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(de){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]='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){intx,p=0,i;for(i=0;in;i++){x=a*pow(10,i);p=p+x;}returnp;}intSumA(inta,intn){intk;intsum=0;for(k=0;kn+1;k++)sum=sum+fn(a,k);returnsum;}4-22使用函数输出指定范围内的完数(20分)答案:intfactorsum(intnumber){inti,s=1;for(i=1;i=number/2;i++)if(i1&&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(t1&&k%t==0)printf(+%d,t);printf(\n);}}if(found==0)printf(Noperfectnumber);}4-25使用函数输出一个整数的逆序数(20分)答案:intreverse(intnumber){intm=0;if(number0){number=-number;printf(-);}elseif(number==0)m=0;while(number0){m=m*10+number%10;number=number/10;}returnm;}4-50移动字母(10分)答案:voidShift(chars[]){inti,n;chara[3];n=strlen(s);for(i=0;i3;i++)a[i]=s[i];if(n3)for(i=3;in;i++)s[i-3]=s[i];for(i=0;i3;i++)s[n-3+i]=a[i];}4-51在数组中查找指定元素(15分)答案:intsearch(intlist[],intn,intx){inti,result;for(i=0;in;i++){if(list[i]==x){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;in;i++)s[i-(n-m)]=a[i];for(i=n-m-1;i=0;i--)a[i+m]=a[i];for(i=0;im;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(n0)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(n10)printf(%d\n,n);else{printdigits(n/10);printf(%d\n,n%10);}}4-9统计各位数字之和是5的数(20分)答案:intis(intnumber){ints=0;while(number0){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;in;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(xy){t=y;y=x;x=t;}for(i=y;i=1;i--)if(x%i==0&&
本文标题:PTA程序设计答案
链接地址:https://www.777doc.com/doc-5056676 .html