计算机等级考试三级数据库技术七套上机试题

日期:12-29| http://www.59wj.com |三级数据库上机题库|人气:859

计算机等级考试三级数据库技术七套上机试题

  第一题

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

  部分源程序已给出,原始数据文件存放的格式是:每行的宽度均小于80个字符。

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

  #include

  #include

  #include

  #include

  unsigned char xx[50][80];

  int maxline=0;/*文章的总行数*/

  int ReadDat(void)

  void WriteDat(void)

  void encryptChar()

  {

  }

  void main()

  {

  clrscr();

  if(ReadDat()){

  printf("数据文件ENG.IN不能打开!\n\007");

  return;

  }

  encryptChar();

  WriteDat();

  }

  int ReadDat(void)

  {

  FILE *fp;

  int i=0;

  unsigned char *p;

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

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

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

  if(p)*p=0;

  i++;

  }

  maxline=i;

  fclose(fp);

  return 0;

  }

  void WriteDat(void)

  {

  FILE *fp;

  int i;

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

  for(i=0;i

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

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

  }

  fclose(fp);

  }

  参考答案:

  void encryptChar()

  {int i,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;

  }

  .
        www.59wj.com

  第二题:

  函数ReadDat()的功能是实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrChar JR();该函数的功能是:以行为单位把字符串中的所有字符的ASCII值右移4位,然后把右移后的字符ASCII值再加上原字符的ASCTT值,得到新的字符仍存入原字符串对应的位置上。最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT8.DAT中。

  原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

  注意:部分源程序已给出。

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

  试题程序:

  #include

  #include

  #include

  char xx[50][80];

  int maxline=0;/*文章的总行数*/

  int ReadDat(void);

  void WriteDat(void);

  void StrCharJR(void)

  {

  }

  void main()

  {

  clrscr();

  if(ReadDat()){

  printf("数据文件IN.DAT不能打开!\n\007");

  return;

  }

  StrCharJR();

  WriteDat();

  }

  int ReadDat(void)

  {

  FILE *fp;

  int i=0;

  char *p;

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

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

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

  if(p) *p=0;

  i++;

  }

  maxline=i;

  fclose(fp);

  return 0;

  }

  void WriteDat(void)

  {

  FILE *fp;

  int i;

  clrscr();

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

  for(i=0;i

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

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

  }

  fclose(fp);

  }

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

  void StrCharJR(void)

  {int I,j,strl;

  for(I=0;I

  {strl=strlen(xx[I]);

  for(j=0;j

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

  }

  }

  .
        www.59wj.com

  第三题:

  已知在文件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

  #define MAX 100

  typedef struct{

  char dm[5]; /*产品代码*/

  char mc[11]; /*产品名称*/

  int dj; /*单价*/

  int sl; /*数量*/

  long je; /*金额*/

  }PRO;

  PRO sell[MAX];

  void ReadDat();

  void WriteDat();

  void SortDat()

  {

  }

  void main()

  {

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

  ReadDat();

  SortDat();

  WriteDat();

  }

  void ReadDat()

  {

  FILE *fp;

  char str[80],ch[11];

  int i;

  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);

  }

  void WriteDat()

  {

  FILE *fp;

  int i;

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

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

  fprintf(fp,"%s %s %4d %5d %101d\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);

  }

  fclose(fp);

  }

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

  void SortDat( )

  {int I,j;

  PRO xy;

  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;}

  else if(sell[I].dm==sell[j].dm)

  if(sell[I].je

  {xy=sell[I];

  sell[I]=sell[j];

  sell[j]=xy;}

  }

  .
        www.59wj.com

  第四题:

  已知在文件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

  #define MAX 100

  typedef struct{

  char dm[5]; /*产品代码*/

  char mc[11]; /*产品名称*/

  int dj; /*单价*/

  int sl; /*数量*/

  long je; /*金额*/

  }PRO;

  PRO sell[MAX];

  void ReadDat();

  void WriteDat();

  void SortDat()

  {

  }

  void main()

  {

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

  ReadDat();

  SortDat();

  WriteDat();

  }

  void ReadDat()

  {

  FILE *fp;

  char str[80],ch[11];

  int i;

  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);

  }

  void WriteDat(void)

  {

  FILE *fp;

  int i;

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

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

  fprintf(fp,\"%s %s %4d %5d %101d\\n\", sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);

  }

  fclose(fp);

  }

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

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

  void SortDat()

  {

  int i,j;

  PRO swap;

  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;

  }

  }

  }

  void SortDat()

  {

  int i,j;

  PRO t;

  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;

  }

  }

  .
        www.59wj.com

  第五题:

  下列程序的功能是:在三位整数(100至999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,又是两位数字相同,例如144、676等。请编制函数实现此功能,满足该条件的整数的个数通过所编制的函数返回。最后调用函数writeDat()把结果输出到文件out.dat中。请勿改动主函数main()和写函数writeDat()的内容。

  #include

  int jsvalue(int bb[])

  {

  }

  main

  {

  int b[20],num;

  num=jsvalue(b);

  writeDat(num,b);

  }

  writeDat(int num,int b[])

  {

  FILE *out;

  int i;

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

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

  for(i=0;i

  fclose(out);

  }

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

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

  int jsvalue(int bb[])

  {

  int i,j,k=0,g,s,b;

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

  {

  g=i%10;

  s=i/10%10;

  b=i/100;

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

  bb[k++]=i;

  }

  return k;

  }

  int jsvalue(int bb[])

  {

  int i,k=0;

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

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

  bb[k++]=i;

  return k;

  }

  .
        www.59wj.com

  第六题:

  设有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

  #define N 100

  #define S 1

  #define M 10

  int p[100], n, s, m ;

  void WriteDat(void) ;

  void Josegh(void)

  {

  }

  void main()

  {

  m = M ;

  n = N ;

  s = S ;

  Josegh() ;

  WriteDat() ;

  }

  void WriteDat(void)

  {

  int i ;

  FILE *fp ;

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

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

  printf("%4d ", p[i]) ;

  fprintf(fp, "%4d", p[i]) ;

  if(i % 10 == 0) {

  printf("\n") ;

  fprintf(fp, "\n") ;

  }

  }

  fclose(fp) ;

  }

  本题评析:

  参考答案及其注释如下:

  void Josegh(void)

  {

  int i,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 < i; j++)

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

  p[i - 1] = w;

  }

  }

  s 开始 m 周期 n 总数

  .
        www.59wj.com

  第七题:

  计算500-800区间内素数的个数cnt,并按所求素数的值从大到小的顺序,再计算其间隔减、加之和,即第1个素数-第2个素数+第三个素数-第4个素数+第5个素数。。。的值sum。请编写函数countvalue()实现程序的要求;最后main()函数调用函数writeDAT()把结果cnt和sum,输出到文件OUT11.DAT中。

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

  #include

  int cnt,sum;

  void countvalue()

  {

  }

  void main()

  {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);

  }

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

  这是答案:

  void countvalue()

  {

  int i,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;

  }

  }

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

  void countvalue()

  {int i,j;

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

  {for(j=2;j

  if(!(i%j)) break;

  if(j==i)

  { cnt++;

  if(cnt%2) sum+=i;

  else sum-=i;

  }

  }

  }

  .
        www.59wj.com 如果觉得《计算机等级考试三级数据库技术七套上机试题》三级数据库上机题库,jsj不错,可以推荐给好友哦。
本文Tags: 计算机等级考试 - 上机题库 - 三级数据库上机题库,jsj,
在百度中搜索相关文章:计算机等级考试三级数据库技术七套上机试题
在谷歌中搜索相关文章:计算机等级考试三级数据库技术七套上机试题
在soso中搜索相关文章:计算机等级考试三级数据库技术七套上机试题
在搜狗中搜索相关文章:计算机等级考试三级数据库技术七套上机试题
相关分类导航|
热门推荐|