1、三级数据库技术机试-57 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.编写函数,isValue,它的功能是:求以下数列中满足 t(K)=1的最小的 k,结果由函数返回。其中数列t(n)的定义为:t(0)=m(m为给定正整数,m=300)t(n+1)=t(n)/2 (当 t(n)为偶数时)或 t(n+1)=3*t(n)+1(当 t(n)为奇数时)最后调用函数 writeDat()读取 50个数据 m,分别得出结果且把结果输出到文件 out.dar中。例如:当 t=299时,函数值为 117。已知对于 m=300,结果 k不超过 300部分
2、源程序已给出。请勿改动主函数 main()和写函数 writeDat()的内容。#includestdio. hint jsValue(int m)main ( )int m;m=300;printf (“m=%d, k-%d/n“, m, jsValue (m);writeDat ( );writeDat ( )FILE *in, *out;int i,m,s;in= fopen ( “in. dar“ , “r“ );out=f open ( “out. dar“ , “w“ );for (i=0; i50; i+) fscanf (in, “%d“, s=jsValue (m);prin
3、tf( “%d/n“, s );fprintf (out, “%d/n“ , s );fclose (in);fclose (out);(分数:100.00)_三级数据库技术机试-57 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.编写函数,isValue,它的功能是:求以下数列中满足 t(K)=1的最小的 k,结果由函数返回。其中数列t(n)的定义为:t(0)=m(m为给定正整数,m=300)t(n+1)=t(n)/2 (当 t(n)为偶数时)或 t(n+1)=3*t(n)+1(当 t(n)为奇数时)最后调用函数 writeDat()读取
4、 50个数据 m,分别得出结果且把结果输出到文件 out.dar中。例如:当 t=299时,函数值为 117。已知对于 m=300,结果 k不超过 300部分源程序已给出。请勿改动主函数 main()和写函数 writeDat()的内容。#includestdio. hint jsValue(int m)main ( )int m;m=300;printf (“m=%d, k-%d/n“, m, jsValue (m);writeDat ( );writeDat ( )FILE *in, *out;int i,m,s;in= fopen ( “in. dar“ , “r“ );out=f op
5、en ( “out. dar“ , “w“ );for (i=0; i50; i+) fscanf (in, “%d“, s=jsValue (m);printf( “%d/n“, s );fprintf (out, “%d/n“ , s );fclose (in);fclose (out);(分数:100.00)_正确答案:(提示:类型:序列计算。关键点:分析序列定义,选择合适的方法生成和存储序列或序列中的特定值。根据序列定义,以及题目的输出要求,可选择保存序列中的所有值,也可以只保留与当前项计算相关的几项,采用递推的方式进行计算。对于某些特殊序列,还可以求出通项公式,利用公式直接计算。此题只需要保存当前项,根据当前项计算下一项。解答:int isValue(int m)/*初值 t(0)=m*/int fn=m, k=0;/*t(k) != 1, 求 t(k+1)*/while ( fn)if (fn%2=1)/*t(k)为奇数*/fn-3*fn+1;else/*t (k) 为偶数*/fn=fn/2;k+;/*t (k) =1, 返回 k*/return k;)解析: