PTA程序设计答案_第1页
PTA程序设计答案_第2页
PTA程序设计答案_第3页
PTA程序设计答案_第4页
PTA程序设计答案_第5页
已阅读5页,还剩164页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、PTA所有答案工业gc1601学习小组一、判断题二、选择题 三、函数题4-3 求m到n之和 (10分)答案:int sum(int m, int n) int s=0,i; for(i=m;i<=n;i+) s+=i; return s;4-34 简单输出整数 (10分)答案:void PrintN ( int N ) int i; for(i=1;i<=N;i+) printf("%dn",i);4-36 简单求和 (10分)答案:int Sum ( int List, int N ) int i,s=0; for(i=0;i<N;i+) s+=List

2、i; return s;4-40 简单阶乘计算 (10分)答案:int Factorial( const int N )int i, s=1;if( N < 0 )return 0;else if( N = 0)return 1;else for(i=1; i<=N; i+)s*=i;return s;4-43 找两个数中最大者 (10分)答案:int max( int a, int b )int max;if(a >= b)max = a;elsemax = b;return max;4-44 数字金字塔 (15分)答案:void pyramid(int n)int i,

3、j, space;for(i=1; i <= n; i+)space = n - i;for(j=0; j < space; j+)printf(" ");for(j=0; j < i; j+)printf("%-2d", i); printf("n");4-45 判断奇偶性 (10分)答案:int even( int n )if( n%2=0 )return 1;elsereturn 0;4-46 使用函数求奇数和 (15分)答案:int even( int n )if( n%2=0 )return 1;elser

4、eturn 0;int OddSum( int List, int N )int i;int oddsum = 0;for(i=0; i<N; i+)if(even(Listi)=0)oddsum += Listi;return oddsum;4-47 使用函数计算两点间的距离 (10分)答案:double dist(double x1, double y1, double x2, double y2)double d;d = sqrt(x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2);return d;4-48 使用函数求素数和 (20分)答案:int

5、prime( int p )int i,j,count =0;for(j=2;j<p;j+)if(p%j=0)count+;if(count=0&&p>0&&p!=1)return 1;elsereturn 0;int PrimeSum( int m, int n ) int i,sum=0; for(i=m;i<=n;i+)if(prime(i)=1)sum=sum+i;return sum;4-20 使用函数输出水仙花数 (20分)答案:int narcissistic(int number) int i, j, digit, power,

6、 powerSum, integer, count, flag; count = 0; integer = number; while (integer > 0) integer = integer / 10; count+; powerSum = 0; integer = number; for (i = 0; i < count; i+) digit = integer % 10; integer = integer / 10; power = 1; for (j = 0; j < count; j+) power = power*digit; powerSum = po

7、werSum + power; if (powerSum = number) flag = 1; else flag = 0; return flag;void PrintN(int m, int n) int i; for (i = m + 1; i < n; i+) if (narcissistic(i) = 1) printf("%dn", i);4-21 使用函数求余弦函数的近似值 (15分)答案:double funcos( double e, double x ) double sum=0,d=100;int i=0,j;double cj;int cou

8、nt=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;return sum;4-49 分类统计字符个数 (15分)答案:void StringCount( char s ) int i;int n1 = 0, n2 = 0, n3 = 0, n4 = 0;for (i = 0; si != '0&#

9、39; i+)if (si >= 'a'&&si <= 'z') | (si >= 'A'&&si <= 'Z')n1+;else if (si = ' ' |si = 'n')n2+;else if (si >= '0'&&si <= '9')n3+;else n4+;printf("letter = %d, blank = %d, digit = %d, other =

10、%d",n1,n2,n3,n4);4-7 使用函数求特殊a串数列和 (20分)答案:int fn( int a, int n )int x,p=0,i;for(i=0; i<n; i+)x= a * pow(10,i);p = p + x;return p;int SumA( int a, int n )int k;int sum=0;for(k=0; k<n+1; k+)sum = sum + fn( a , k );return sum;4-22 使用函数输出指定范围内的完数 (20分)答案:int factorsum( int number ) int i,s=1;

11、 for(i=1; i<= number/2; i+) if(i>1 && number%i = 0) s+=i; return s;void PrintPN( int m, int n )int k,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(

12、"n");if (found = 0)printf("No perfect number"); 4-25 使用函数输出一个整数的逆序数 (20分)答案:int reverse( int number )int m=0;if(number < 0)number = -number;printf("-"); else if(number = 0)m=0;while(number>0)m = m*10 + number%10;number=number/10;return m;4-50 移动字母 (10分)答案:void Shi

13、ft( char s )int i,n;char a3;n = strlen(s);for(i=0; i<3; i+)ai = si; if(n>3)for(i=3; i<n; i+)si-3 = si;for(i=0; i<3; i+)sn-3+i=ai;4-51 在数组中查找指定元素 (15分)答案:int search(int list, int n, int x) int i, result; for (i=0; i<n; i+) if (listi = x) result = i; break; if (i = n) result = -1; retur

14、n result;4-52 数组循环右移 (20分)答案:int ArrayShift(int a, int n, int m)int i=0 , s100;if(m>=n)m=m%n;if(m!=0)for(i=n-m; i<n; i+)si-(n-m) = ai;for(i=n-m-1; i>=0; i-)ai+m=ai;for(i=0; i<m; i+)ai=si;return 0;4-54 删除字符 (20分)答案:void delchar( char *str, char c )int i=0, j=0;for (;stri!='0'i+)if

15、 (stri!=c)strj=stri;j+;strj='0'4-55 分类统计各类字符个数 (15分)答案:void StringCount( char *s ) int i;int n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0;for (i = 0; si != '0' i+)if (si >= 'A'&&si <= 'Z')n1+;else if (si >= 'a'&&si <= 'z') n2+;els

16、e if (si = ' ')n3+;else if (si >= '0'&&si <= '9')n4+;else n5+;printf("%d %d %d %d %d",n1,n2,n3,n4,n5);4-26 使用递归函数计算1到n之和 (10分)答案:int sum( int n )int i,sum=0;if(n<=0)return 0;elsefor(i=1; i<=n; i+)sum += i;return sum;4-28 递归求阶乘和 (15分)答案:double fac

17、t( int n )int i;double m=1;if(n=0)return m;elsefor(i=1; i<=n; i+)m = m*i;return m;double factsum( int n )int j;double sum=0;if(n>0)for(j=1; j<=n; j+)sum += fact(j);return sum;4-29 递归实现指数函数 (15分)答案:double calc_pow( double x, int n )int i;double m=1;for(i=1; i<=n; i+)m = m*x;return m;4-32

18、递归求Fabonacci数列 (10分)答案:int f( int n )int d;if(n=0)d=0;else if(n=1)d=1;else d=f(n-2)+f(n-1);return d;4-33 十进制转换二进制 (15分)答案:void dectobin( int n )int t;if(n=0|n=1)printf("%d",n%2);elset=n;dectobin(n=n/2);printf("%d",t%2);4-8 递归实现顺序输出整数 (15分)答案:void printdigits(int n)if (n < 10)p

19、rintf("%dn", n);elseprintdigits(n / 10);printf("%dn", n % 10);4-9 统计各位数字之和是5的数 (20分)答案:int is( int number )int s=0;while (number>0) s += number%10; number /= 10;if(s = 5)return 1;else return 0;void count_sum( int a, int b )int i, count=0, count_sum=0;for(i=a; i<=b; i+)if( i

20、s(i) )count+;count_sum += i;printf("count = %d, sum = %d", count, count_sum);4-10 简单实现x的n次方 (10分)答案:double mypow( double x, int n )int i;double s=1;for(i=0; i<n; i+)s = s*x;return s;4-13 使用函数求1到10的阶乘和 (10分)答案:double fact( int n )int i;double s=1;for(i=1;i<=n; i+)s = s * i;return s;4-

21、14 使用函数求最大公约数 (10分)答案:int gcd( int x, int y )int i,t;if(x<y)t=y;y=x;x=t;for(i=y;i>=1;i-)if(x%i=0 && y%i=0)break;return i;4-15 使用函数的选择法排序 (25分)答案:void sort( int a, int n )int i,j,k,t;for(i=0;i<n-1;i+) for(j=i+1;j<n;j+) if(aj<ai) t=ai;ai=aj;aj=t; 4-16 函数实现字符串逆序 (15分)答案:void f(ch

22、ar *p) int i,n=0; char t; for(i=0; pi != '0' i+) n+; for (i=0; i < n/2; i+) t=pi; pi=pn-1-i; pn-1-i=t; 4-17 递归计算P函数 (15分)答案:double P( int n, double x )double z;if(n = 0)z = 1;else if(n = 1)z=x;else if(n > 1)z = (2*n-1)*P(n-1,x) - (n-1)*P(n-2,x)/n;return z;4-1 计算存款利息-genlib (10分)答案:int

23、main(void) int money, year;double interest, rate;scanf("%d", &money);scanf("%d", &year);scanf("%lf", &rate);interest = money * pow(1+rate,year) - money; printf("interest = %.2fn", interest); return 0;4-2 弹球距离 (15分)答案:double dist( double h, double p

24、 )double d=h;while(p!=0)h=p*h;if(h<TOL)break;d=d+2*h;return d;四、编程题单词长度 (20分)答案:#include<stdio.h> #include<string.h> int main()char a1000;int i, n = 0, k, t = 0;for (i = 0; i+)scanf("%c", &ai);if (ai = '.')break;k = i;for (i = i - 1; i >= 0; i-)if (ai = '

25、')t+;else break;for (i = 0; i <= k; i+)if (ai = '.')if (n != 0)printf("%d", n);printf("n");break;if (ai = ' ')if (n != 0)printf("%d", n);n = 0;if (i < k - t)printf(" ");elsen+;return 0;掉入陷阱的数字 (20分)答案:#include<stdio.h> int main(

26、)int n1000, s1000, i, t;scanf("%d", &n0);for (i = 1; i < 1000; i+)si - 1 = 0;t = ni - 1;while (t > 0)si - 1 += t % 10;t /= 10;ni = 3 * si - 1 + 1;printf("%d:%dn", i, ni);if (ni = ni - 1)break;return 0;九宫格输入法 (20分)答案:#include<stdio.h> #include<string.h>int ma

27、in()char *key10 = "0 ", "1,.?!", "2ABC", "3DEF","4GHI", "5JKL", "6MNO","7PQRS", "8TUV", "9WXYZ"int length10;for (int i = 0; i<10; i+)lengthi = strlen(keyi);char ch;char p;int count = 0;doch = getch

28、ar();if (ch != ' '&&ch != 'n')p = ch;count+;elseputchar(keyp - '0'(count - 1) % lengthp - '0');count = 0; while (ch != 'n');return 0;算术入门之加减乘除 (20分)答案:#include<stdio.h> main()int a, b, r1, r2, r3, r41, c;float r42;scanf("%d %d", &a,

29、 &b);r1 = a + b;r2 = a - b;r3 = a*b;printf("%d + %d = %dn%d - %d = %dn%d * %d = %dn", 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);elser42 = (float)a / b;printf("%d / %d = %.2f", a, b, r42);return 0;人民币兑换 (20分)答案:#inc

30、lude<stdio.h> main()int n, 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 %dn", n5, n2, n1);return 0;求n以内最大的k个素数以及它们的和 (20分)答案:#include<stdio.h> int fun(in

31、t x)int i;if (x = 0 | x = 1)return 0;if (x = 2)return 1;for (i = 2; i*i <= x; i+)if (x%i = 0)return 0;return 1;main()int n, 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;elseprintf("+%d", j);s += j;

32、k-;if (k = 0)break;printf("=%d", s);return 0;编程打印空心字符菱形 (20分)答案:#include<stdio.h> main()char ch;int j, j1, i, k, t;scanf("%c %d", &ch, &j);j1 = (j + 1) / 2;if (j = 1)printf("%c", ch);elsefor (i = 1; i <= j1 - 1; i+)printf(" ");printf("%cn

33、", ch);for (i = 2; i <= j1; i+)for (k = 1; k <= j1 - i; k+)printf(" ");printf("%c", ch + i - 1);for (k = 1; k <= (2 * i - 3); k+)printf(" ");printf("%cn", ch + i - 1);for (i = j1 + 1; i <= j - 1; i+)t = 2 * j1 - i;for (k = 1; k <= j1 - t; k

34、+)printf(" ");printf("%c", ch + t - 1);for (k = 1; k <= (2 * t - 3); k+)printf(" ");printf("%cn", ch + t - 1);for (i = 1; i <= j1 - 1; i+)printf(" ");printf("%c", ch);到底有多二 (20分)答案:#include <stdio.h> #include <string.h>mai

35、n()char N51;int len, i, t=0;float d = 100, b;scanf("%s", N);if (N0 = '-')d *= 1.5;len = strlen(N) - 1;if (Nlen % 2 = 0)d *= 2;for (i = 1; i < len + 1; i+)if (Ni = '2')t+;elselen = strlen(N);if (Nlen - 1 % 2 = 0)d *= 2;for (i = 0; i < len; i+)if (Ni = '2')t+;b

36、= (float)t / len;d *= b;printf("%.2f%", d);return 0;奇偶分家 (20分)答案:#include <stdio.h> main()int N, n1000, i, a, b = 0;scanf("%d", &N);for (i = 0; i < N; i+)scanf("%d", &ni);for (i = 0; i < N; i+)if (ni % 2 = 0)b+;a = N - b;printf("%d %d", a,

37、b);return 0;后天 (20分)答案:#include <stdio.h> main()int D, DT;scanf("%d", &D);if (D >= 1 && D <= 5)DT = D + 2;else DT = D - 5;printf("%d", DT);return 0;正整数A+B (20分)答案:#include <stdio.h> #include <string.h>main() char str11100, str21100; scanf("

38、;%s",str1); getchar(); gets(str2); int len1=strlen(str1), len2=strlen(str2); int flag1=1, flag2=1; if(len1<1|len1>4) flag1=0; else for(int i=0;str1i;i+) if(str1i<'0'|str1i>'9') flag1=0;break; if(len2<1|len2>4) flag2=0; else for(int i=0;str2i;i+) if(str2i<

39、9;0'|str2i>'9') flag2=0;break; int sum1, sum2; if(flag1=1) sum1=0; for(int i=0;str1i;i+) sum1=sum1*10+(str1i-'0'); if(sum1<1|sum1>1000) flag1=0; if(flag2=1) sum2=0; for(int i=0;str2i;i+) sum2=sum2*10+(str2i-'0'); if(sum2<1|sum2>1000) flag2=0; if(flag1=1&

40、;&flag2=1) printf("%d + %d = %dn",sum1,sum2,sum1+sum2); else if(flag1=1&&flag2=0) printf("%d + ? = ?n",sum1); else if(flag1=0&&flag2=1) printf("? + %d = ?n",sum2); else printf("? + ? = ?n"); return 0;判断素数 (20分)答案:#include <stdio.h> #i

41、nclude <math.h>main()int N, i, flag;long long n;scanf("%d", &N);while (N-)scanf("%lld", &n);flag = 1;if (n = 0 | n = 1) flag = 0;else if (n = 2) flag = 1;else for (i = 2; i <= sqrt(n); i+)if (n % i = 0)flag = 0; break;if (flag) printf("Yesn");else print

42、f("Non");return 0;到底是不是太胖了 (20分)答案:#include <stdio.h> #include <math.h>main()int N, H20, W20, i;float WS20;scanf("%d", &N);for (i = 0; i < N; i+)scanf("%d", &Hi);scanf("%d", &Wi);for (i = 0; i < N; i+)WSi = (Hi - 100)*0.9 * 2;if (

43、fabs(Wi - WSi) < WSi * 0.1)printf("You are wan mei!n");else if (Wi > WSi)printf("You are tai pang le!n");else printf("You are tai shou le!n");return 0;小于m的最大的10个素数 (20分)答案:#include <stdio.h> #include <math.h>main()int m, i, j, t, flag;scanf("%d&qu

44、ot;, &m);t = m - 1;for (i = 1; i <= 10; t-)flag = 1;if (t = 0 | t = 1) flag = 0;else if (t = 2) flag = 1;else for (j = 2; j <= sqrt(t); j+)if (t % j = 0)flag = 0; break;if (flag)printf("%6d", t); i+;return 0;输出水仙花数 (20分)答案:#include <stdio.h> int fun(int x)int i, j, digit, p

45、ower, powerSum, integer, n, flag;n = 0;integer = x;while (integer > 0)integer = integer / 10;n+;powerSum = 0;integer = x;for (i = 0; i < n; i+)digit = integer % 10;integer = integer / 10;power = 1;for (j = 0; j < n; j+)power = power*digit;powerSum = powerSum + power;if (powerSum = x)flag =

46、1;elseflag = 0;return flag;main()int k;for (k = 100; k <= 999; k+)if (fun(k)printf("%dn", k);return;计算阶乘和 (20分)答案:#include <stdio.h> int fact(int x)int i, f = 1;for (i = 1; i <= x; i+)f *= i;return f;main()int N, S = 0, j;scanf("%d", &N);for (j = 1; j <= N; j+)

47、S += fact(j);printf("%d", S);return 0;跟奥巴马一起画方块 (20分)答案:#include <stdio.h> main()int N, M, i, j;char ch;scanf("%d %c", &N, &ch);M = (N + 1) / 2;for (i = 1; i <= M; i+)for (j = 1; j <= N; j+)printf("%c", ch);printf("n");return 0;查验身份证 (20分)答

48、案:#include <stdio.h> main()int weight17 = 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ;char M12 = '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' ;int N, i, j, l, flag = 1;char id19;scanf(&quo

49、t;%dn", &N);for (i = 1; i <= N; i+)scanf("%s", id);int s = 0;for (j = 0; j < 17; j+)s += (idj - '0')*weightj;if (Ms % 11 != id17)printf("%sn", id);flag = 0;if (flag) printf("All passed");return 0;出生年 (20分)答案:#include <stdio.h> int main() int

50、 y, n, y0, i;int num4, all10;scanf("%d %d", &y, &n);y0 = y;while (1) for (i = 0; i < 10; i+)alli = 0;num0 = y / 1000;num1 = y / 100 % 10;num2 = y / 10 % 10;num3 = y % 10;for (i = 0; i < 4; i+) allnumi+;int sum = 0;for (i = 0; i < 10; i+)if (alli) sum+;if (sum = n)break;y+;

51、printf("%d %04dn", y - y0, y);return 0;A除以B (20分)答案:#include <stdio.h> int main() int A, B;float r;scanf("%d %d", &A, &B);if (B > 0)r = (float)A / B;printf("%d/%d=%.2f", A, B, r);else if (B < 0)r = (float)A / B;printf("%d/(%d)=%.2f", A, B, r);else printf("%d/0=Error", A);ret

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论