计算机二级上机题库很有用 题目就是里面出的
【答案及难度指数】★
(1)a (2)a
【一起来审题】
该题中函数功能是求得三个数中间的数。此类题的解题思路,基本等同于三个数求最大、最小的题型,只不过是选择条件有所不同。从已给部分源程序的main主函数开始入手,"mid=fun(x,y,z);"语句调用fun函数,求得中间数值。
【解题思路】
第一空:语句"(a>b) ? (b>c ?"表示a> b>c,根据题目要求,则中间值为b,若只是满足第一个"?"前面的条件,而c>b,则选择执行"(a>c ? c : ___1___)",当a>c时取值c,所以a<c时中间值为a,所以第一空填"a"。
第二空:语句"(a>c) ?"是对a、c的比较选择,第三空处的"(b>c) ? c"根据b、c的判断,题目已经给出了c,所以这里应该是a,这样第三空中对于b、c的判断选择缺少b,所以这里填"b",同样也可以根据第一空的逻辑关系进行分析,来填写第二空和第三空。
【主要考点】选择语句。
2、程序改错题
【答案及难度指数】★★
(1)double r; (2)while(fabs(n-m)>0.001)
【一起来审题】
(1)该题中函数功能是二分法求方程根。其中,二分法的求根过程,是将含根区间平均分为两个小区间,然后判断哪个区间是含根区间。在此基础上,将这里的小含根区间进一步划分为两个更小的区间,继续判断根所在区间。继续细分下去,含根区间将划分地越来越小,区间的范围也越来越小。经过多次细分后,就可以将此很小区间的中点近似为方程的根了。
(2)从已给定源程序的main主函数开始入手,通过"result=fun(m,n);"语句调用fun函数求得方程根,其中fun函数对quest函数进行调用,对根进行判断。
【解题思路】
(1)fun函数要求返回方程的一个根,由return语句来实现,而函数fun是定义为double型的,但第一个标识下面的r却被定义为int类型。所以"int r;"改为"double r;"。
(2)检查while循环的控制表达式"(fabs(n-m)<0.001)",知道开始的循环值为80,必然不会进入循环体,不符合逻辑,所以应该为:"while(fabs(n-m)>0.001)"。
【主要考点】变量定义;逻辑关系。
3、程序设计题
【答案及难度指数】★★★
int j=1,i=0,k=0,*s=b;
for(j=0;j<=y;j++)
if(j%2!=0) //判断j是否是奇数
{
s[i]=j;//将小于y的奇数存入数组s
i++; //累加小于y的奇数个数
}
for(j=0;j<i;j++)
if(y%s[j]==0) //判断y是否被s[j]整除
{
b[k]=s[j];//将符合条件的结果存入数组b
k++; //累加符合条件的结果个数
}
*m=k;
【一起来审题】
(1)该程序的解题思路可以分解为以下几步:从0开始逐个求得小于y的奇数→按顺序将这些奇数存入数组→逐个判断该数组中的值是否能整除y→累加能整除y的数值个数→最后按要求传回结果。由于采取的是按照小于y的所有整数按照j++逐个增加的顺序进行判断并依次进行存储的思路,所以最后求得的结果是符合要求的,是由小到大排列的。
(2)从已给部分源程序的main主函数开始入手,核心函数"fun(y,a,&m);",其中m返回这些数的个数,a传给函数中的参数存放计算结果的数组b。
【解题思路】
进入fun函数,根据(1)的分析:
首先,通过小于y的循环条件,判断小于y的每一个整数是否是奇数。其中的判断条件"if(j%2!=0)",并且累计这些奇数个数"i++;"。 (3)b