[java上机编程题]部分上机编程题详细分析1

等级考试 2021-02-06 网络整理 可可

【shitiku.jxxyjl.com--等级考试】

请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a的十位和个位数依次放在c的个位和百位上,b的十位和个位数依次放在c的十位和千位上。例如,当a=45,b=12。调用该函数后,c=2514。
  注意:部分源程序存在PROG1.C中,请勿改动主函数和其他函数中的内容,仅在函数fun的指定的部位填入你编写的若干语句。
  试题源程序如下:
  #include <stdio.h>
  void fun(int a, int b, long *c)
  {
  }
  main()
  { int a,b; long c;
   printf("Input a, b:"); scanf("%d%d", &a, &b);
   printf("a=%d b=%d\n",a,b);
   fun(a, b, &c);
   printf("The result is: %ld\n\n", c);
  }
分析:
(1)本题的主要算法分两步:一是取得2位数中的十位和个位上的数,有了这些数,就不难得到指定的整数。二是把四个一位数按指定的次序拼成一个四位的整数。
  (2)若把a中十位上的数放在u中,个位上的数放在v中,可分别由语句:u=a/10;和v=a%10;实现。同样可以把b中十位上的数放在x中,个位上的数放在y中。这样就从a和b中拆分出了4个一位整数分别放在u、v、x、y中。若a=45,b=12,则u、v、x、y中的数据依次为4、5、1、2。
  (3)若一个千位数为6789,从数学上可演变成这样的算式:6×1000+7×100+8×10+9按本题的要求,y是千位上的数、v是百位上的数、x是十位上的数而u是个位上的数,新组成的数可用表达式:y*1000+v*100+x*10+u来获得。
  (4)注意新组成的数放在形参c所指的存储单元中。所以通过形参返回的值应当放在*c中。
  (5)在fun函数体中打入程序语句,注意,应对使用的变量进行定义。
  (6)编译后若无错误,运行程序,输入:
  45 12<回车>
  程序应当输出:
  The result is:2514
 
 
人不可能太好,太好了那就不是人了,那是神;
人不能太坏,太坏了就是鬼。
不好不坏,这才是人!
 
 本贴发表时间:2005-8-18 上午 09:51:20   
 
 
唐克  
 
虚拟形象
 
 
等级: 管理员
头衔:站长
贴子:214
积分:665
唐币:8783
来自:金都
注册:2005-6-1
             第 2 楼
 
 
请编一个函数int fun(int x),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。
  所谓"同构数"是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数。x的值由主函数从键盘读入,要求不大于100。
  注意:部分源程序存在PROG1.C中,请勿改动主函数和其他函数中的内容,仅在函数fun的指定的部位填入你编写的若干语句。
  试题源程序如下:
  #include <stdio.h>
  int fun (int x )
  {
  }
  main()
  { int x,y;
   printf("\nPlease enter a integer numbers: "); scanf("%d",&x);
   if( x>100 ){ printf("data error !\n"); exit(0); }
   y=fun(x);
   printf("x=%d x*x=%d : ");
   if(y) printf("YES\n");
    else printf("NO!\n");
  }

分析:
 (1)形参x的数由主函数中的x传入,也就是说fun函数判断主函数中的x中的数是否为同构数。
  (2)在主函数中给x输入数据,而且主函数中的if语句限制x的值不得大于100,若大于100就结束程序。而100的平方数为10000,不是同构数,由此可以得知需要判断的x是一个小于100的两位数,这个判断对于函数的具体编程是很重要的。
  (3)在函数中,若形参x的平方数放在变量a中;由于形参x的值不大于100,因此可以断定只需取a右边的一位或两位数来与x比较,假定此数放在变量k中。k中的数是取a右边的一位数还是两位数要取决于x的值。
  (4)如果x<10(x是一位数),可用表达式a%10,取a右边的一位数放入k中;否则可用表达式a%100,取a右边的两位数放入k中。
  (5)按试题中给出的同构数的条件,若k的值等于x,说明x是同构数,按规定要求fun函数返回一个整数1。若k的值不等于x,fun函数返回一个整数0。因此可用表达式k==x作为函数返回值,相等时k==x值为1,不等时其值为0。
  (6)按以上所述打入程序,若编译无错,运行程序,每运行一次输入一个数据给x,可分别输入5、6、25、3、88等数,观察程序输出是否正确。
  (7)观察主函数,函数值赋给了变量y,if语句中若y的值为0,则输出NO!,若y的值为1,则输出YES。因此运行时输入5、6、25,程序输出YES,输入3、88程序输出NO!。
  3、请编一个函数fun,它的功能是:根据以下公式求π的值(要求满足精度0.0005,即,某项小于0.0005时停止迭代):
 screen.width-500)this.width=screen.width-500" align=center border=0> 
  程序运行后,如果输入精度0.0005,则程序输出多少。
  注意:部分源程序存在PROG1.C中,请勿改动主函数和其他函数中的内容,仅在函数fun的指定的部位填入你编写的若干语句。
  试题源程序如下:
  #include <stdio.h>
  #include <math.h>
  double fun(double eps)
  {
  }
  main()
  { double x;
   printf("Input eps:");
   scanf("%lf",&x); printf("\neps=%lf, PI=%lf\n",x,fun(x));
  }

 

分析:

(1)本题所用基本算法应为累加。假设累加值放在变量s中,累加项放在变量t中,累加操作由语句s=s+t;来实现。
  (2)若称screen.width-500)this.width=screen.width-500" align=center border=0>为第1累加项,则其前的1为第0累加项,其后的一项为第2累加项,按给定的公式可知,从第1累加项开始,后一项的累加项是前一项的值乘以 [ 相关贴图 ]
screen.width-500)this.width=screen.width-500" align=center border=0>。所以当前的累加项应当是:t=t*n/(2.0*n+1.0)。表达式右边的t中是前一项的值,表达式左边的t为当前的每累加累加项。请注意,不要写成:t*n/(2*n+1)而进行整除。
  (3)若第0累加项的1作为s的初值,语句:s=s+t;执行n次,就把第1到第n项累加到了s中。每进行一次累加,n值增1。
  (4)把以上操作放在循环中。按本题规定,当某项小于eps(0.0005)时停止迭代,因此若用while循环,可用t>=eps作为控制循环进行的条件:
  while( t>=eps ){ s+=t; n++; t=t*n/(2.0*n+1); }
  (5)注意应给所用变量赋适当的初值。
  (6)退出循环后,函数的返回值应是:2*s。

 
 


本文来源:https://shitiku.jxxyjl.com/dengjikaoshi/1625.html

Copyright @ 2011- 考试题库网 All Rights Reserved. 版权所有

免责声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。

 站长统计