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

下载本文档

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

文档简介

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;iN;i+) s+=Listi; 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= b)max = a;elsemax = b;return max;4-44 数字金字塔 (15分)答案:void pyramid(int n)int i, 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;elsereturn 0;int OddSum( int List, int N )int i;int oddsum = 0;for(i=0; iN; 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 prime( int p )int i,j,count =0;for(j=2;j0&p!=1)return 1;elsereturn 0;int PrimeSum( int m, int n ) int i,sum=0; for(i=m;i 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 = powerSum + power; if (powerSum = number) flag = 1; else flag = 0; return flag;void PrintN(int m, int n) int i; for (i = m + 1; i 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= a&si = A&si = 0&si = 9)n3+;else n4+;printf(letter = %d, blank = %d, digit = %d, other = %d,n1,n2,n3,n4);4-7 使用函数求特殊a串数列和 (20分)答案:int fn( int a, int n )int x,p=0,i;for(i=0; in; 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; kn+1; k+)sum = sum + fn( a , k );return sum;4-22 使用函数输出指定范围内的完数 (20分)答案:int factorsum( int number ) int i,s=1; for(i=1; i1 & 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; t1 & k%t = 0)printf( + %d, t);printf(n);if (found = 0)printf(No perfect number); 4-25 使用函数输出一个整数的逆序数 (20分)答案:int reverse( int number )int m=0;if(number 0)m = m*10 + number%10;number=number/10;return m;4-50 移动字母 (10分)答案:void Shift( char s )int i,n;char a3;n = strlen(s);for(i=0; i3)for(i=3; in; i+)si-3 = si;for(i=0; i3; i+)sn-3+i=ai;4-51 在数组中查找指定元素 (15分)答案:int search(int list, int n, int x) int i, result; for (i=0; i=n)m=m%n;if(m!=0)for(i=n-m; i=0; i-)ai+m=ai;for(i=0; i= A&si = a&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 fact( int n )int i;double m=1;if(n=0)return m;elsefor(i=1; i0)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 递归求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 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( is(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; in; 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-14 使用函数求最大公约数 (10分)答案:int gcd( int x, int y )int i,t;if(x=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;in-1;i+) for(j=i+1;jn;j+) if(ajai) t=ai;ai=aj;aj=t; 4-16 函数实现字符串逆序 (15分)答案:void f(char *p) int i,n=0; char t; for(i=0; pi != 0; i+) n+; for (i=0; i 1)z = (2*n-1)*P(n-1,x) - (n-1)*P(n-2,x)/n;return z;4-1 计算存款利息-genlib (10分)答案:int 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 )double d=h;while(p!=0)h=p*h;if(hTOL)break;d=d+2*h;return d;四、编程题单词长度 (20分)答案:#include #include 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 = )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 int main()int n1000, s1000, i, t;scanf(%d, &n0);for (i = 1; i 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 #includeint main()char *key10 = 0 , 1,.?!, 2ABC, 3DEF,4GHI, 5JKL, 6MNO,7PQRS, 8TUV, 9WXYZ;int length10;for (int i = 0; i10; i+)lengthi = strlen(keyi);char ch;char p;int count = 0;doch = getchar();if (ch != &ch != n)p = ch;count+;elseputchar(keyp - 0(count - 1) % lengthp - 0);count = 0; while (ch != n);return 0;算术入门之加减乘除 (20分)答案:#include main()int a, b, r1, r2, r3, r41, c;float r42;scanf(%d %d, &a, &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分)答案:#include main()int n, n5, n2, n1;scanf(%d, &n);for (n5 = 1; n5 = 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 int fun(int x)int i;if (x = 0 | x = 1)return 0;if (x = 2)return 1;for (i = 2; i*i = 1; j-)if (fun(j)if (t)printf(%d, j); t = 0;elseprintf(+%d, j);s += j;k-;if (k = 0)break;printf(=%d, s);return 0;编程打印空心字符菱形 (20分)答案:#include 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, 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+)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 #include main()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 = (float)t / len;d *= b;printf(%.2f%, d);return 0;奇偶分家 (20分)答案:#include 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, b);return 0;后天 (20分)答案:#include 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 #include main() char str11100, str21100; scanf(%s,str1); getchar(); gets(str2); int len1=strlen(str1), len2=strlen(str2); int flag1=1, flag2=1; if(len14) flag1=0; else for(int i=0;str1i;i+) if(str1i9) flag1=0;break; if(len24) flag2=0; else for(int i=0;str2i;i+) if(str2i9) flag2=0;break; int sum1, sum2; if(flag1=1) sum1=0; for(int i=0;str1i;i+) sum1=sum1*10+(str1i-0); if(sum11000) flag1=0; if(flag2=1) sum2=0; for(int i=0;str2i;i+) sum2=sum2*10+(str2i-0); if(sum21000) flag2=0; if(flag1=1&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 #include 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 printf(Non);return 0;到底是不是太胖了 (20分)答案:#include #include 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 (fabs(Wi - WSi) WSi)printf(You are tai pang le!n);else printf(You are tai shou le!n);return 0;小于m的最大的10个素数 (20分)答案:#include #include main()int m, i, j, t, flag;scanf(%d, &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 int fun(int x)int i, j, digit, power, 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 = 1;elseflag = 0;return flag;main()int k;for (k = 100; k = 999; k+)if (fun(k)printf(%dn, k);return;计算阶乘和 (20分)答案:#include 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+)S += fact(j);printf(%d, S);return 0;跟奥巴马一起画方块 (20分)答案:#include 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分)答案:#include 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(%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 int main() int 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+;printf(%d %04dn, y - y0, y);return 0;A除以B (20分)答案:#include 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);return 0;寻找250 (20分)答案:#include

温馨提示

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

评论

0/150

提交评论