复试编程训练四

秒速五厘米 2023-07-17 04:35 118阅读 0赞

31.一个球从100m落下,每次反弹回原来高度的一半,问第10次共经历多少米,反弹多少米。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. double h=100,sum=100; //sum初值置为首高度
  5. for(int i=1; i<=10; i++)
  6. {
  7. h*=0.5; //下次高度为本次的一半
  8. if(i==1) //sum初值已加过
  9. continue;
  10. sum=sum+2*h; //每次经历两次
  11. }
  12. printf("第10次共经历%.2lf米,反弹%.2lf米\n",sum,h);
  13. return 0;
  14. }

运行结果:

2020032013280068.PNG

32.一个数恰好等于它的因子(能整除的)之和,如:6=1+2+3。找出1000以内的所有完数

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i,j,sum,a[10],k;
  5. for(i=2; i<1000; i++)
  6. {
  7. a[10]= {0};
  8. k=0;
  9. sum=0;
  10. for(j=1; j<i; j++)
  11. {
  12. if(i%j==0)
  13. {
  14. sum+=j;
  15. a[k++]=j;
  16. }
  17. }
  18. if(sum==i)
  19. {
  20. printf("%d=",i);
  21. for(j=0; j<k-2; j++)
  22. printf("%d+",a[j]);
  23. printf("%d\n",a[k-2]);
  24. }
  25. }
  26. return 0;
  27. }

运行结果:

20200320134308447.PNG

33.有一个分数序列2/1,3/2,5/3,8/5,13/8,21/13,….求前20项的和

  1. #include <stdio.h>
  2. int main()
  3. {
  4. float n=1,m=2,t,s,sum=0;//m为分母,n为分子
  5. for(int i=1; i<=20; i++)
  6. {
  7. s=m/n;
  8. sum+=s; //求和
  9. t=m; //往后确定两部分的值
  10. m=m+n;
  11. n=t;
  12. }
  13. printf("sum=%f\n",sum);
  14. return 0;
  15. }

运行结果:

20200320140236939.PNG

34.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,又多吃了一个;第二天早上又吃了剩下的一半,又多吃了一个;以后也一样。到第10天只剩下1个。问第一天共摘了多少个桃子?

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i,sum=1; //rest为第10天剩余个数
  5. for(i=9; i>0; i--) //i为第9~1天
  6. sum=(sum+1)*2;
  7. printf("sum=%d\n",sum);
  8. return 0;
  9. }

运行结果:

2020032014563368.PNG

35.迭代法求x=sqrt(a)。求平方根的迭代公式Xn+1=1/2*(Xn+a/Xn)

  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5. float x1=1,x2,a;
  6. scanf("%f",&a);
  7. x2=a;
  8. while(fabs(x1-x2)>=1e-5)
  9. {
  10. x1=x2;
  11. x2=(x1+a/x1)/2;
  12. }
  13. printf("%.2f,%.2f\n",x1,x2);
  14. return 0;
  15. }

运行结果:

20200320150613246.PNG

36.用二分法求下面方程在(-10,10)之间的根:2*x³-4*x²+3*x-6=0

  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5. double a=-10,b=10,c,x,x1,x2,x3;
  6. for(int i=0;; i++)
  7. {
  8. c=(a+b)/2;
  9. x1=2*pow(a,3)-4*pow(a,2)+3*a-6;
  10. x2=2*pow(b,3)-4*pow(b,2)+3*b-6;
  11. x3=2*pow(c,3)-4*pow(c,2)+3*c-6;
  12. if(x3==0)
  13. x=c;
  14. else if(x1*x3<0)
  15. b=c;
  16. else if(x2*x3<0)
  17. a=c;
  18. if(fabs(a-b)<1e-8)
  19. {
  20. x=a;
  21. break;
  22. }
  23. }
  24. printf("Root=%lf\n",fabs(x));
  25. return 0;
  26. }

运行结果:

20200320152414758.PNG

37.输出

*

***

*****

*******

*****

***

*

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i,j,k;
  5. for(i=0; i<=3; i++)
  6. {
  7. for(j=0; j<3-i; j++)
  8. printf(" ");
  9. for(k=0; k<2*i+1; k++)
  10. printf("*");
  11. printf("\n");
  12. }
  13. for(i=0; i<3; i++)
  14. {
  15. for(j=0; j<i+1; j++)
  16. printf(" ");
  17. for(k=0; k<5-2*i; k++)
  18. printf("*");
  19. printf("\n");
  20. }
  21. return 0;
  22. }

运行结果:
20200320135044120.PNG

38.比赛。甲队为a,b,c三人,乙队为x,y,z三人。a说他不与x比,c说他不与x,z比。编程找出三队赛手名单。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char i,j,k; //i,j,k分别对应为a,b,c的对手
  5. for(i='x'; i<='z'; i++)
  6. for(j='x'; j<='z'; j++)
  7. if(j!=i) //a,b,c不能同为一个人的对手
  8. for(k='x'; k<='z'; k++)
  9. if(k!=i&&k!=j) //a,b,c不能同为一个人的对手
  10. {
  11. if(i!='x'&&k!='x'&&k!='z') //a不与x比,c不与x,z比
  12. printf("a--%c\nb--%c\nc--%c\n",i,j,k);
  13. }
  14. return 0;
  15. }

运行结果:

20200320135756591.PNG

39.将一个二维数组行和列互换,存到另一个二维数组中。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a[3][3]= {
  5. {1,2,3},{4,5,6},{7,8,9}},b[3][3];
  6. printf("原矩阵为:\n");
  7. for(int i=0; i<3; i++)
  8. {
  9. for(int j=0; j<3; j++)
  10. {
  11. printf("%d ",a[i][j]);
  12. b[j][i]=a[i][j];
  13. }
  14. printf("\n");
  15. }
  16. printf("行列互换之后:\n");
  17. for(int i=0; i<3; i++)
  18. {
  19. for(int j=0; j<3; j++)
  20. printf("%d ",b[i][j]);
  21. printf("\n");
  22. }
  23. return 0;
  24. }

运行结果:

20200320131942772.PNG

40.求一个3*3的整型矩阵对角元素之和。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a[3][3]= {
  5. {1,2,3},{4,5,6},{7,8,9}},sum=0;
  6. for(int i=0; i<3; i++)
  7. sum+=a[i][i];
  8. for(int i=0; i<3; i++)
  9. {
  10. for(int j=0; j<3; j++)
  11. {
  12. printf("%d ",a[i][j]);
  13. if(j==2)
  14. printf("\n");
  15. }
  16. }
  17. printf("对角线元素之和为:%d\n",sum);
  18. return 0;
  19. }

运行结果:

20200320131428897.PNG

发表评论

表情:
评论列表 (有 0 条评论,118人围观)

还没有评论,来说两句吧...

相关阅读

    相关 复试编程训练

    41.给一个百分制成绩,要求输出等级‘A’,‘B’,‘C’,‘D’,‘E’。90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为