数据库技术.docx

上传人:b****3 文档编号:26894996 上传时间:2023-06-23 格式:DOCX 页数:92 大小:41.01KB
下载 相关 举报
数据库技术.docx_第1页
第1页 / 共92页
数据库技术.docx_第2页
第2页 / 共92页
数据库技术.docx_第3页
第3页 / 共92页
数据库技术.docx_第4页
第4页 / 共92页
数据库技术.docx_第5页
第5页 / 共92页
点击查看更多>>
下载资源
资源描述

数据库技术.docx

《数据库技术.docx》由会员分享,可在线阅读,更多相关《数据库技术.docx(92页珍藏版)》请在冰豆网上搜索。

数据库技术.docx

数据库技术

2011计算机等级考试三级数据库技术上机模拟题

(1)

计算机等级考试网更新:

2011-9-14编辑:

lovethea

  函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按行优先把所有的小写字母替换成它前面的字母其它不变,a换成z,例如:

Aabm.()输出 Azal.()最后调用函数WriteDat()把结果xx输出到文件PS10.DAT中。

  部分源程序已给出,原始数据文件存放的格式是:

每行的宽度均小于80个字符。

  请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

  #include

  #include

  #include

  #include

  unsignedcharxx[50][80];

  intmaxline=0;/*文章的总行数*/

  intReadDat(void)

  voidWriteDat(void)

  voidencryptChar()

  {

  }

  voidmain()

  {

  clrscr();

  if(ReadDat()){

  printf("数据文件ENG.IN不能打开!

\n\007");

  return;

  }

  encryptChar();

  WriteDat();

  }

  intReadDat(void)

  {

  FILE*fp;

  inti=0;

  unsignedchar*p;

  if((fp=fopen("eng.in","r"))==NULL)return1;

  while(fgets(xx[i],80,fp)!

=NULL){

  p=strchr(xx[i],'\n');

  if(p)*p=0;

  i++;

  }

  maxline=i;

  fclose(fp);

  return0;

  }

  voidWriteDat(void)

  {

  FILE*fp;

  inti;

  fp=fopen("ps10.dat","w");

  for(i=0;i

  printf("%s\n",xx[i]);

  fprintf(fp,"%s\n",xx[i]);

  }

  fclose(fp);

  }

  参考答案:

  voidencryptChar()

  {inti,j;

  for(i=0;i<50;i++)

  for(j=0;j<80;j++)

  if(xx[i][j]=='a')xx[i][j]='z';

  else(xx[i][j]>='b'&&xx[i][j]<='z')xx[i][j]-=1;

  }

2011计算机等级考试三级数据库技术上机模拟题

(2)

计算机等级考试网更新:

2011-9-14编辑:

lovethea

  函数ReadDat()的功能是实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrCharJR();该函数的功能是:

以行为单位把字符串中的所有字符的ASCII值右移4位,然后把右移后的字符ASCII值再加上原字符的ASCTT值,得到新的字符仍存入原字符串对应的位置上。

最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT8.DAT中。

  原始数据文件存放的格式是:

每行的宽度均小于80个字符,含标点符号和空格。

  注意:

部分源程序已给出。

  请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

  试题程序:

  #include

  #include

  #include

  charxx[50][80];

  intmaxline=0;/*文章的总行数*/

  intReadDat(void);

  voidWriteDat(void);

  voidStrCharJR(void)

  {

  }

  voidmain()

  {

  clrscr();

  if(ReadDat()){

  printf("数据文件IN.DAT不能打开!

\n\007");

  return;

  }

  StrCharJR();

  WriteDat();

  }

  intReadDat(void)

  {

  FILE*fp;

  inti=0;

  char*p;

  if((fp=fopen("IN,DAT","r"))==NULL)return1;

  while(fgets(xx[i],80,fp)!

=NULL){

  p=strchr(xx[i],`\n`);

  if(p)*p=0;

  i++;

  }

  maxline=i;

  fclose(fp);

  return0;

  }

  voidWriteDat(void)

  {

  FILE*fp;

  inti;

  clrscr();

  fp=fopen("OUT8.DAT","w");

  for(i=0;i

  printf("%s\n",xx[i]);

  fprintf(fp,"%s\n",xx[i]);

  }

  fclose(fp);

  }

  --------------------------------------------------------------------------------

  voidStrCharJR(void)

  {intI,j,strl;

  for(I=0;I

  {strl=strlen(xx[I]);

  for(j=0;j

  xx[I][j]+=xx[I][j]>>4;

  }

  }

2011计算机等级考试三级数据库技术上机模拟题(3)

计算机等级考试网更新:

2011-9-14编辑:

lovethea

  已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)几部分组成。

其中:

金额=单价*数量可计算得出。

函数ReadDat()的功能是读取这100个销售记录并存入结构数组sell中。

请编制函数SortDat(),其功能要求:

按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT10.DAT中。

  注意:

部分源程序已给出。

  请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

  试题程序:

  #include

  #include

  #include

  #include

  #include

  #defineMAX100

  typedefstruct{

  chardm[5];/*产品代码*/

  charmc[11];/*产品名称*/

  intdj;/*单价*/

  intsl;/*数量*/

  longje;/*金额*/

  }PRO;

  PROsell[MAX];

  voidReadDat();

  voidWriteDat();

  voidSortDat()

  {

  }

  voidmain()

  {

  memset(sell,0,sizeof(sell));

  ReadDat();

  SortDat();

  WriteDat();

  }

  voidReadDat()

  {

  FILE*fp;

  charstr[80],ch[11];

  inti;

  fp=fopen("IN.DAT","r");

  for(i=0;i<100;i++){

  fgets(str,80,fp);

  memcpy(sell[i].dm,str,4);

  memcpy(sell[i].mc,str+4,10);

  memcpy(ch,str+14,4);ch[4]=0;

  sell[i].dj=atoi(ch);

  memcpy(ch,str+18,5);ch[5]=0;

  sell[i].sl=atoi(ch);

  sell[i].je=(long)sell[i].dj*sell[i].sl;

  }

  fclose(fp);

  }

  voidWriteDat()

  {

  FILE*fp;

  inti;

  fp=fopen("OUT10.DAT","w");

  for(i=0;i<100;i++){

  fprintf(fp,"%s%sM]_1d\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);

  }

  fclose(fp);

  }

  --------------------------------------------------------------------------------

  voidSortDat()

  {intI,j;

  PROxy;

  for(I=0;I<99;I++)

  for(j=I+1;j<100;j++)

  if(sell[I].dm

  {xy=sell[I];

  sell[I]=sell[j];

  sell[j]=xy;}

  elseif(sell[I].dm==sell[j].dm)

  if(sell[I].je

  {xy=sell[I];

  sell[I]=sell[j];

  sell[j]=xy;}

  }

2011计算机等级考试三级数据库技术上机模拟题(4)

计算机等级考试网更新:

2011-9-14编辑:

lovethea

  已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)四部分组成。

其中:

金额=单价*数量计算得出。

函数ReadDat()是读取这100个销售记录并存入结构数组sell中。

请编制函数SortDat(),其功能要求:

按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT8.DAT中。

  部分源程序已给出。

  请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

  #include

  #include

  #include

  #include

  #include

  #defineMAX100

  typedefstruct{

  chardm[5];/*产品代码*/

  charmc[11];/*产品名称*/

  intdj;/*单价*/

  intsl;/*数量*/

  longje;/*金额*/

  }PRO;

  PROsell[MAX];

  voidReadDat();

  voidWriteDat();

  voidSortDat()

  {

  }

  voidmain()

  {

  memset(sell,0,sizeof(sell));

  ReadDat();

  SortDat();

  WriteDat();

  }

  voidReadDat()

  {

  FILE*fp;

  charstr[80],ch[11];

  inti;

  fp=fopen(\"IN.DAT\",\"r\");

  for(i=0;i<100;i++){

  fgets(str,80,fp);

  memcpy(sell[i].dm,str,4);

  memcpy(sell[i].mc,str+4,10);

  memcpy(ch,str+14,4);ch[4]=0;

  sell[i].dj=atoi(ch);

  memcpy(ch,str+18,5);ch[5]=0;

  sell[i].sl=atoi(ch);

  sell[i].je=(long)sell[i].dj*sell[i].sl;

  }

  fclose(fp);

  }

  voidWriteDat(void)

  {

  FILE*fp;

  inti;

  fp=fopen(\"OUT8.DAT\",\"w\");

  for(i=0;i<100;i++){

  fprintf(fp,\"%s%sM]_1d\\n\",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);

  }

  fclose(fp);

  }

  --------------------------------------------------------------------------------

  注:

该题的冒泡法与11题不同。

  voidSortDat()

  {

  inti,j;

  PROswap;

  for(i=0;i

  for(j=i+1;j

  {

  if(strcmp(sell[i].mc,sell[j].mc)<0)

  {

  swap=sell[i];

  sell[i]=sell[j];

  sell[j]=swap;

  }

  if(strcmp(sell[i].mc,sell[j].mc)==0&&sell[i].je

  {

  swap=sell[i];

  sell[i]=sell[j];

  sell[j]=swap;

  }

  }

  }

  voidSortDat()

  {

  inti,j;

  PROt;

  for(i=0;i

  for(j=i+1;j

  if(strcmp(sell[i].dm,sell[j].dm)<0)

  {

  t=sell[i];

  sell[i]=sell[j];

  sell[j]=t;

  }

  else

  if(strcmp(sell[i].dm,sell[j].dm)==0)

  if(sell[i].je

  {

  t=sell[i];

  sell[i]=sell[j];

  sell[j]=t;

  }

  }

2011计算机等级考试三级数据库技术上机模拟题(5)

计算机等级考试网更新:

2011-9-14编辑:

lovethea

  下列程序的功能是:

在三位整数(100至999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,又是两位数字相同,例如144、676等。

请编制函数实现此功能,满足该条件的整数的个数通过所编制的函数返回。

最后调用函数writeDat()把结果输出到文件out.dat中。

请勿改动主函数main()和写函数writeDat()的内容。

  #include

  intjsvalue(intbb[])

  {

  }

  main

  {

  intb[20],num;

  num=jsvalue(b);

  writeDat(num,b);

  }

  writeDat(intnum,intb[])

  {

  FILE*out;

  inti;

  out=fopen(\"out.dat\",\"w\");

  fprintf(out,\"%d\\n\",num);

  for(i=0;i

  fclose(out);

  }

  --------------------------------------------------------------------------------

  注:

注意在i==(int)sqrt(i)*(int)sqrt(i)中只有当i是完全平方数时开平方后再取整才不会丢失任何数据。

  intjsvalue(intbb[])

  {

  inti,j,k=0,g,s,b;

  for(i=100;i<=999;i++)

  {

  g=i_;

  s=i/10_;

  b=i/100;

  if((i==(int)sqrt(i)*(int)sqrt(i))&&(g==s//s==b//b==g))

  bb[k++]=i;

  }

  returnk;

  }

  intjsvalue(intbb[])

  {

  inti,k=0;

  for(i=100;i<=999;i++)

  if((int)sqrt(i)*(int)sqrt(i)==i&&(i/100==i_||i/100==i/10_||i/10_==i_))

  bb[k++]=i;

  returnk;

  }

2011计算机等级考试三级数据库技术上机模拟题(6)

计算机等级考试网更新:

2011-9-14编辑:

lovethea

  设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。

  现要求按出圈次序,每10人一组,给出这n个人的顺序表。

请考生编制函数Josegh()实现此功能并调用函数WriteDat()把结果p输出到文件JOSE.OUT中。

  设n=100,s=1,m=10。

  

(1)将1到n个人的序号存入一维数组p中;

  

(2)若第i个人报数后出圈,则将p[i]置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置;

  (3)重复第

(2)步直至圈中只剩下p[1]为止。

  注意:

部分源程序存放在PROG1.C中。

  请勿改动主函数main()和输出数据函数WriteDat()的内容。

  初始化:

  #include

  #defineN100

  #defineS1

  #defineM10

  intp[100],n,s,m;

  voidWriteDat(void);

  voidJosegh(void)

  {

  }

  voidmain()

  {

  m=M;

  n=N;

  s=S;

  Josegh();

  WriteDat();

  }

  voidWriteDat(void)

  {

  inti;

  FILE*fp;

  fp=fopen("jose.out","w");

  for(i=N-1;i>=0;i--){

  printf("M",p[i]);

  fprintf(fp,"M",p[i]);

  if(i%10==0){

  printf("\n");

  fprintf(fp,"\n");

  }

  }

  fclose(fp);

  }

  本题评析:

  参考答案及其注释如下:

  voidJosegh(void)

  {

  inti,j,s1,w;

  s1=s;

  for(i=1;i<=n;i++)

  p[i-1]=i;/*初始化赋值*/

  for(i=n;i>=1;i--)

  {

  s1=(s1+m-1)%i;

  if(s1==0)s1=i;

  w=p[s1-1];

  for(j=s1;j

  p[j-1]=p[j];

  p[i-1]=w;

  }

  }

  s 开始 m 周期 n 总数

2011计算机等级考试三级数据库技术上机模拟题(7)

计算机等级考试网更新:

2011-9-14编辑:

lovethea

  计算500-800区间内素数的个数cnt,并按所求素数的值从大到小的顺序,再计算其间隔减、加之和,即第1个素数-第2个素数+第三个素数-第4个素数+第5个素数。

的值sum。

请编写函数countvalue()实现程序的要求;最后main()函数调用函数writeDAT()把结果cnt和sum,输出到文件OUT11.DAT中。

  注意:

部分源程序存放在prog1.c中请勿改动主函数main()和输出数据函数writeDAT()的内容。

  #include

  intcnt,sum;

  voidcountvalue()

  {

  }

  voidmain()

  {cnt=sum=0;

  countvalue();

  printf("素数的个数=%d\n",cnt);

  printf("按要求计算的值=%d\n",sum);

  writeDAT();}

  writeDAT()

  {FILE*fp;

  fp=fopen("OUT11.DAT","w");

  fprintf(fp,"%d\n%d\n",cnt,sum);

  fclose(fp);

  }

  --------------------------------------------------------------------------------------

  这是答案:

  voidcountvalue()

  {

  inti,j,k,l;

  k=0;

  l=1;

  for(i=800;i>=500;i--)

  {

  for(j=2;j<=i/2;j++)

  {

  if((i%j)==0)

  {

  k=1;

  break;

  }

  }

  if((k==0)&&(l==1))

  {

  sum=sum+i;

  l=2;

  cnt++;

  continue;

  }

  if((k==0)&&(l==2))

  {sum=sum-i;

  l=1;

  cnt++;

  }

  k=0;

  }

  }

  ---------------------------------------------

  voidcountvalue()

  {inti,j;

  for(i=800;i>=500;i--)

  {for(j=2;j

  if(!

(i%j))break;

  if(j==i)

  {cnt++;

  if(cnt%2)sum+=i;

  elsesum-=i;

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 企业管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1