灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2957回复:0

[四级考试]计算机等级考试四级数据库工程师精练一

楼主#
更多 发布于:2012-08-22 14:29


计算机四级考试数据库工程师精练一:
题面:
已知数据文件IN.DAT中存有200个四位数, 并已调用读函数 readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:从数组a的头开始,依次取每20个数中的最大值组成一个数, 这样可以获得10个新数并存入数组b中,接着把数组b中的数按从小到大的顺序重新存入数组b中。最后main()函数调用写函 数writeDat()把结果b输出到OUT.DAT文件中。
注意: 部分源程序存在文件PROG1.C文件中。
程序中已定义: a[200]、b[10]
请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
初始化程序:
#include
#define MAX 200
int a[MAX], b[10];
void jsVal()
{
}
void readDat()
{
int i ;
FILE *fp ;
fp = fopen(“in.dat”, “r”) ;
for(i = 0 ; i 《 MAX ; i++) fscanf(fp, “%d”, ;a[i]) ;
fclose(fp) ;
}
void main()
{
int i ;
readDat() ;
jsVal() ;
for(i = 0 ; i 《 10 ; i++)
printf(“b[%d]=%d ”, i, b[i]) ;
writeDat() ;
}
writeDat()
{
FILE *fp ;
int i ;
fp = fopen(“out.dat”, “w”) ;
for(i = 0 ; i 《 10 ; i++) fprintf(fp, “%d ”, b[i]) ;
fclose(fp) ;
}



参考答案:
#include
#define MAX 200
int a[MAX], b[10];
void jsVal()
{
int i,j,k; /* j,k,i-循环变量 */
int iMax;
for(i=0;i《10;i++) /* 根据取数要求循环 */
{
iMax=0;
for(j=i*20;j《(i+1)*20;j++) if(iMaxb[i]=iMax;
for(j=0;j{
if(b[j]》iMax) /* 在b中寻找dt的位置 */
{
for(k=i;k》j;k--) b[k]=b[k-1]; /* 顺序移动 */
b[j]=iMax;
break;
}
}
}
}
void readDat()
{
int i ;
FILE *fp ;
fp = fopen(“in.dat”, “r”) ;
for(i = 0 ; i 《 MAX ; i++) fscanf(fp, “%d”, ;a[i]) ;
fclose(fp) ;
}
void main()
{
int i ;
readDat() ;
jsVal() ;
for(i = 0 ; i 《 10 ; i++)
printf(“b[%d]=%d ”, i, b[i]) ;
writeDat() ;
}
writeDat()
{
FILE *fp ;
int i ;
fp = fopen(“out.dat”, “w”) ;
for(i = 0 ; i 《 10 ; i++) fprintf(fp, “%d ”, b[i]) ;
fclose(fp) ;
}
本题评析:
本题,是一道考察循环和数组排序的题目,通过20个一个平均一般可以安排两层循环,结合本题获得10个最大值的要求,在外层安排0-9的循环。
数组的排序一般可以使用冒泡和二分等算法排序,在本题目中,加入的因素是可以在获得数据后直接在数组中寻找到合适的位置,这样我们可以假设b已经是有序的数组,可以简化程序。


喜欢0 评分0
游客

返回顶部