全国计算机三级数据库技术上机试题道.docx

上传人:b****6 文档编号:7568528 上传时间:2023-01-25 格式:DOCX 页数:104 大小:63.34KB
下载 相关 举报
全国计算机三级数据库技术上机试题道.docx_第1页
第1页 / 共104页
全国计算机三级数据库技术上机试题道.docx_第2页
第2页 / 共104页
全国计算机三级数据库技术上机试题道.docx_第3页
第3页 / 共104页
全国计算机三级数据库技术上机试题道.docx_第4页
第4页 / 共104页
全国计算机三级数据库技术上机试题道.docx_第5页
第5页 / 共104页
点击查看更多>>
下载资源
资源描述

全国计算机三级数据库技术上机试题道.docx

《全国计算机三级数据库技术上机试题道.docx》由会员分享,可在线阅读,更多相关《全国计算机三级数据库技术上机试题道.docx(104页珍藏版)》请在冰豆网上搜索。

全国计算机三级数据库技术上机试题道.docx

全国计算机三级数据库技术上机试题道

1.【考点分析】本题考查对4位整数的排序。

考查的知识点主要包括:

数组元素的排序算法,if判断语句和逻辑表达式,以及求余算术运算。

【解题思路】此题属于4位数排序问题。

本题需主要解决3个问题:

问题1如何取4位数的后3位进行比较;问题2如何按照题目要求的条件(按照每个数的后3位的大小进行降序排列,如果后3位相等,则按照原始4位数的大小进行升序排列)排序;问题3如何将排完序的前10个数存到数组bb中去。

本题的解题思路为:

使用双循环对数组按条件进行排序,然后将排完序的前10个数存到数组bb中。

对于问题1可以通过算术运算的取余运算实现(aa[i]%1000);问题2通过包含if判断语句的起泡排序法就可以实现。

【参考答案】

voidjsSort()

{ 

inti,j;/*定义循环控制变量*/

inttemp;/*定义数据交换时的暂存变量*/

for(i=0;i<199;i++)/*用选择法对数组进行排序*/

for(j=i+1;j<200;j++)

{

if(aa[i]%1000

{

temp=aa[i];

aa[i]=aa[j];

aa[j]=temp;

}

elseif(aa[i]%1000==aa[j]%1000)/*如果后3位数相等*/

if(aa[i]>aa[j])/*则要按原4位数的值进行升序排序*/

{

temp=aa[i];

aa[i]=aa[j];

aa[j]=temp;

}

}

for(i=0;i<10;i++)/*将排序后的前10个数存入数组b中*/

bb[i]=aa[i];

}

【易错提示】取4位数后三位的算法,if判断语句中逻辑表达式的比较运算符。

2.【考点分析】本题主要考查的知识点包括:

C语言循环结构,if判断语句和逻辑表达式,以及分解多位整数的算术运算。

【解题思路】分析题干,本题除给出条件"SIX+SIX+SIX=NINE+NINE"之外,还可得出2个隐含的条件:

条件1:

SIX和NINE分别是3位和4位的正整数;条件2:

SIX的十位数字等于NINE的百位数字,NINE的千位数字和十位数字相等。

本题解题思路:

通过嵌套的循环结构可以遍历到所有的3位和4位数,对于每一个3位数及4位数的组合进行题设条件(SIX+SIX+SIX=NINE+NINE)的判断,满足条件的对其分解得到各数位的数字,再进一步判断各位数字是否满足本题隐含的条件(条件1及条件2),如果满足则个数加1,并将该3位数及4位数添加到和值中。

【参考答案】

voidcountValue()

{ 

inti,j;

ints2;

intn2,n3,n4;

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

{

for(j=1000;j<10000;j++)

{

if(i*3==j*2)

{

s2=i%100/10;

n4=j/1000;

n3=j%1000/100;

n2=j%100/10;

if(s2==n3&&n2==n4)

{

cnt++;

sum+=i+j;

}

}

}

}

}

【易错提示】隐含条件未被分析出或分析错误,整数数位分解的算术方法使用错误。

3.【考点分析】本题考查的知识点包括:

C语言中文件读函数,if条件判断结构,对多个整数求平均值和方差的算法等。

【解题思路】此题属于数学类问题。

分析题干要求,得出解本题主要需解决3个问题:

问题1如何实现从已打开的文件中依次读取数据到数组的操作,问题2如何分离并统计出奇数和偶数的个数及和值,并计算平均值;问题3如何计算奇数的方差。

本题的解题思路为:

首先使用C语言的库函数fscanf()将文件中的数依次读入数组xx中,然后通过循环判断得出需要的数据(奇数个数、偶数个数、奇数及偶数的和);最后根据题目中已给出的公式和之前保存的数据计算出奇数的方差。

【参考答案】

intReadDat(void)

{ 

FILE*fp;

inti,j;/*计数器变量*/

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

for(i=0;i<100;i++)/*依次读取整型数据放入数组xx中*/

{

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

fscanf(fp,"%d,",&xx[i*10+j]);

fscanf(fp,"\n");

if(feof(fp))

break;/*文件读取结束,则退出*/

}

fclose(fp);

return0;

}

voidCompute(void)

{ 

inti;    /*定义循环控制变量*/

inttt[MAX];    /*定义数组保存奇数*/

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

  if(xx[i]%2!

=0)

  { 

odd++;/*计算出xx中奇数的个数odd*/

    ave1+=xx[i];    /*求奇数的和*/

    tt[odd-1]=xx[i];  /*将奇数存入数组tt中*/

  }

  else

  { 

even++;    /*计算出xx中偶数的个数even*/

    ave2+=xx[i];    /*求偶数的和*/

  }

  ave1/=odd;    /*求奇数的平均值*/

  ave2/=even;    /*求偶数的平均值*/

  for(i=0;i

    totfc+=(tt[i]-ave1)*(tt[i]-ave1)/odd; /*求所有奇数的方差*/

}

【易错提示】文件操作函数fscanf()和feof()的用法,if判断语句中逻辑表达式,对方差计算公式运用错误。

4.【考点分析】本题考查对一定范围内整数的筛选。

考查的知识点主要包括:

多位整数的分解算法,完全平方数判断方法,if判断语句和逻辑表达式。

【解题思路】此题属于数学类问题。

分析题干,本题需注意2个关键点:

关键点1判断该数是否是完全平方数;关键点2判断该数是否有两位数数字相同。

本题的解题思路为:

通过循环控制,依次判断100至999数是否满足关键点1(是否为完全平方数)。

如果是,则将该数分解出各位数数字,并判断是否有两位数数字相同,如果存在,则个数加1,并将该数存入数组中。

【参考答案】

intjsValue(intbb[])

{ 

inti,j;/*定义循环控制变量*/

intcnt=0;/*定义计数器变量*/

inta3,a2,a1;/*定义变量存储三位数每位的数字*/

for(i=100;i<=999;i++)/*在该范围中找符合条件的数*/

for(j=10;j<=sqrt(i);j++)

if(i==j*j)/*如果该数是完全平方数*/

{

a3=i/100;/*求该数的百位数字*/

a2=i%100/10;/*求该数的十位数字*/

a1=i%10;/*求该数的个位数字*/

if(a3==a2||a3==a1||a2==a1)/*有两位数字相同*/

{

bb[cnt]=i;/*则把该数存入数组bb中*/

cnt++;

}/*统计满足条件的数的个数*/

}

returncnt;/*返回满足该条件的整数的个数*/

}

【易错提示】完全平方数的判断方法错误,分解整数各个数位的方法错误,if判断语句中表达式。

5.【考点分析】本题考查对一定范围内整数的筛选。

考查的知识点主要包括:

多位整数的分解算法,素数的判断算法,if判断语句和逻辑表达式。

【解题思路】此题属于数学类问题。

分析题干要求,归纳出本题的2个关键点:

关键点1判断该数是否为素数;关键点2判断是否满足条件:

个位数字和十位数字之和被10除所得余数等于百位数字。

本题思路为:

通过循环语句,依次求出所有3位数的各位数数字,并判断是否满足关键点2(个位数字和十位数字之和被10除所得余数等于百位数字),如果满足则判断该数是否为素数,如果是则个数加1,并将该数加到和值中。

判断的方法为:

依次取从2到该数1/2的数去除这个数,如果有一个可被整除,则不是素数,如果循环后的数大于该数的一半就可以判定该数是一个素数。

【参考答案】

voidcountValue()

{ 

inti,j;/*定义循环控制变量*/

inthalf;

inta3,a2,a1;/*定义变量存储3位数每位的数字*/

for(i=101;i<1000;i++)/*在该范围内寻找符合条件的数*/

{

a3=i/100;/*求百位数字*/

a2=i%100/10;/*求十位数字*/

a1=i%10;/*求个位数字*/

if(a3==(a2+a1)%10)/*如果个位数字与十位数字之和被10除所得余数恰是百位数字*/

{

half=i/2;

for(j=2;j<=half;j++)/*进一步判断该数是否为素数*/

if(i%j==0)break;/*如果不是素数,则跳出循环,接着判断下一个数*/

if(j>half)/*如果是素数*/

{

cnt++;/*计算这些素数的个数cnt*/

sum+=i;/*计算这些素数值的和sum*/

}

}

}

}

【易错提示】素数的判断算法使用错误,分解整数各个数位的方法错误,if判断语句中逻辑表达式错误。

6.【考点分析】本题考查结构体数组的排序。

考查的知识点主要包括:

结构体成员运算,字符串比较符,数组排序。

【解题思路】此题属于销售记录排序类题型。

此类题型主要考查对结构体数组的排序。

解题时,应注意3个关键点:

关键点1如何按产品名称从小到大排序;关键点2如果产品名称相同;关键点3如何按金额从小到大排列。

数组排序可以用起泡法实现,起泡法的思路是:

将较小的值像空气泡一样逐渐"上浮"到数组的顶部,而较大的数值逐渐"下沉"到数组的底部。

具体为第1趟用第1个记录和第2个记录进行比较,如果不符合要求,就进行交换,第2个记录和第3个记录比较,直到倒数第2个记录和最后1个记录比较完成;第2趟用第2个记录和第3个记录比较,然后第3个和第4个比较,依此类推。

本题在双循环中进行每次记录比较时,首先用字符串比较函数strcmp比较两个产品的名称,如果返回的值大于0,则这两个产品进行数据交换;如果返回值等于0,再比较两个产品的金额,如果前一个产品的金额大于后一个产品的金额,则这两个产品进行数据交换。

【参考答案】

voidSortDat()

{ 

inti,j;/*定义循环控制变量*/

PROtemp;/*定义数据交换时的暂存变量(这里是PRO类型的结构体变量)*/

for(i=0;i<99;i++)/*利用选择法进行排序*/

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

if(strcmp(sell[i].mc,sell[j].mc)>0)/*按产品名称从小到大进行排列*/

{

temp=sell[i];

sell[i]=sell[j];

sell[j]=temp;

}

elseif(strcmp(sell[i].mc,sell[j].mc)==0)/*若产品名称相同*/

if(sell[i].je>sell[j].je)/*则按金额从小到大进行排列*/

{

temp=sell[i];

sell[i]=sell[j];

sell[j]=temp;

}

}

模板一 销售记录排序

【模板速记】

记忆口诀:

一定义二循环三比较。

定义指定义变量,循环指循环语句,比较是比较记录成员大小及交换,详见模板一。

做题时,需灵活应用模板,切勿死记硬背。

【易错提示】结构型数据对成员的访问用"."成员运算符;两个字符串的比较用字符串比较函数strcmp。

7.【考点分析】本题考查对多个整数的筛选以及排序。

考查的知识点主要包括:

多位整数的分解算法,逻辑表达式,数组排序算法。

【解题思路】此题属于4位数的筛选类题,并且需求出各位数数字,再筛选排序。

解此类题目需主要解决3个问题:

问题1如何取得4位数的各个数位数字;问题2如何通过条件(本题为千位数字加个位数字等于百位数字加十位数字)筛选出满足条件的数;问题3如何对数组中的数进行排序。

解此类题的一般思路为:

先求出每个数的各位数字,再根据各位数数字筛选出满足条件的数存入新的数组中,最后对新数组进行排序。

对于问题1通过算术运算取余和整除可以分解得到4位数的各个数位上的数字;问题2通过if条件判断语句和逻辑表达式可以实现。

问题3排序可以通过循环嵌套的起泡法来完成。

在求各位数数字时,先将每个数进行取整运算求出千位数,将该数取余再除100取整得出百位数,将该数取余再除10取整得出十位数,最后将该数取余得出个位数。

【参考答案】

voidjsValue()

{ 

inti,j;/*定义循环控制变量*/

inta1,a2,a3,a4;/*定义变量保存4位数的每位数字*/

inttemp;/*定义数据交换时的暂存变量*/

for(i=0;i<300;i++)/*逐个取每一个4位数*/

{

a4=a[i]/1000;/*求4位数的千位数字*/

a3=a[i]%1000/100;/*求4位数的百位数字*/

a2=a[i]%100/10;/*求4位数的十位数字*/

a1=a[i]%10;/*求4位数的个位数字*/

if(a4+a1==a3+a2)/*如果千位数加个位数等于百位数加十位数*/

{

b[cnt]=a[i];/*将满足条件的数存入数组b中*/

cnt++;/*统计满足条件的数的个数cnt*/

}

}

for(i=0;i

for(j=i+1;j

if(b[i]>b[j])

{

temp=b[i];

b[i]=b[j];

b[j]=temp;

}

}

【模板速记】

记忆口诀:

一定义二筛选三排序。

定义指定义相关变量,筛选是筛选出满足条件的数,排序则是按照要求对数组排序。

详见模板二。

做题时,需灵活应用本模板,切勿死记硬背。

【易错提示】分解4位数时算术运算符的使用,4位数条件判断时if语句中的条件表达式,起泡法排序时的条件。

模板二 4位数筛选

(1)-根据各位数数字排序

8.【考点分析】本题考查对多个整数的筛选以及排序。

考查的知识点主要包括:

多位整数的分解算法,逻辑表达式,数组排序算法。

【解题思路】此题属于4位数的筛选类题,并且需将各位数组成新的2位数,再筛选排序。

解题时,需主要解决4个问题:

问题1如何取得4位数的各个数位数字;问题2如何按照要求组成新的2位数字ab(本题为千位数字与十位数字),以及cd(本题为个位数字与百位数字);问题3如何通过判断条件(ab-cd>=0,ab-cd<=10,ab和cd都为奇数,ab和cd都不为0)筛选出满足条件的数,并统计出满足条件的数的个数;问题4如何对数组中的数进行从小到大的排序。

解此类题的一般思路为:

先求出每个数的各位数字,再根据各位数数字组成2位数的条件筛选出满足要求的数存入新的数组中,最后对新数组进行排序。

本类题和前一类题的不同之处在于筛选的判断条件不同。

问题2由加法和乘法得出的各位数字组成新的2位数(本题为:

ab=10*a4+a2,cd=10*a1+a3);问题3的条件可以由逻辑表达式实现(本题为:

(ab-cd)>=0&&(ab-cd)<=10&&ab%2==1&&cd%2==1&&a4!

=0&&a1!

=0))。

【参考答案】

voidjsVal()

{ 

inti,j;/*定义循环控制变量*/

inta1,a2,a3,a4;/*定义变量保存4位数的每位数字*/

inttemp;/*定义数据交换时的暂存变量*/

intab,cd;/*存储重新组合成的十位数*/

for(i=0;i<200;i++)/*逐个取每一个4位数*/

{

a4=a[i]/1000;/*求4位数的千位数字*/

a3=a[i]%1000/100;/*求4位数的百位数字*/

a2=a[i]%100/10;/*求4位数的十位数字*/

a1=a[i]%10;/*求4位数的个位数字*/

ab=10*a4+a2;/*把千位数字和十位数字重新组成一个新的十位数ab*/

cd=10*a1+a3;/*把个位数字和百位数字组成另一个新的十位数cd*/

if((ab-cd)>=0&&(ab-cd)<=10&&ab%2==1&&cd%2==1&&a4!

=0&&a1!

=0)

{/*如果ab-cd>=0且ab-cd<=10且两个数均是奇数同时两个新十位数的十位上的数字均不为零*/

b[cnt]=a[i];/*则把满足条件的数存入数组b中*/

cnt++;/*统计满足条件的数的个数*/

}

}

for(i=0;i

for(j=i+1;j

if(b[i]

{

temp=b[i];

b[i]=b[j];

b[j]=temp;

}

}

【模板速记】

记忆口诀:

一定义二筛选三排序。

定义指定义相关变量,筛选是筛选出满足条件的数,排序则是按照要求对数组排序,详见模板三。

做题时,需灵活应用本模板,切勿死记硬背。

模板三 4位数筛选

(2)-组成2位数再筛选排序

【易错提示】分解4位数时算术运算符的使用,if判断语句中逻辑表达式,起泡法排序时的条件。

9.【考点分析】本题考查对多个整数的筛选以及求平均值。

考查的知识点主要包括:

多位整数的分解算法,逻辑表达式,平均值的计算方法。

【解题思路】此题属于4位数的筛选题型,并且涉及统计及平均值问题。

解题时,需主要解决3个问题:

问题1如何取得4位数的各个数位数字;问题2如何通过判断条件(本题为千位数上的数加百位数上的数等于十位数上的数加个位数上的数)对目标进行筛选,再分别统计出满足和不满足条件的数的和以及数目;问题3分别求出两类数的平均值。

本题与上题解题思想相同,不同之处在于问题2的判断条件改为:

千位数上的数加百位数上的数等于十位数上的数加个位数上的数(a4+a3=a2+a1)。

【参考答案】

inti,n=0;/*定义循环变量和计数器变量*/

inta1,a2,a3,a4;/*定义变量保存4位数的每位数字*/

for(i=0;i<300;i++)/*逐个取每一个4位数*/

{

a4=a[i]/1000;/*求4位数的千位数字*/

a3=a[i]%1000/100;/*求4位数的百位数字*/

a2=a[i]%100/10;/*求4位数的十位数字*/

a1=a[i]%10;/*求4位数的个位数字*/

if(a4+a3==a2+a1)/*如果千位数加百位数等于十位数加个位数*/

{

cnt++;/*统计满足条件的数的个数*/

pjz1+=a[i];/*将满足条件的数求和*/

}

else

{

n++;/*否则统计不满足条件的数的个数*/

pjz2+=a[i];/*将不满足条件的数求和*/

}

}

pjz1/=cnt;/*求满足条件的数的平均值*/

pjz2/=n;/*求不满足条件的数的平均值*/

}

【模板速记】

记忆口诀:

一定义二统计三求值。

定义指定义相关变量,统计是统计满足条件的数的个数及求出和值,求值是分别求出满足和不满足条件的数的平均值,详见模板四。

做题时,需灵活应用本模板,切勿死记硬背。

模板四 4位数筛选(3)-统计及求平均值

【易错提示】分解4位数时算术运算符的使用;if判断语句中逻辑表达式。

10.【考点分析】本题考查对整数的筛选以及数组排序。

考查的知识点主要包括:

C语言循环结构,逻辑表达式,数组排序。

【解题思路】此题属于4位数的筛选题型。

分析题干要求,本题要求实现jsVal()函数的功能,归纳可以得出2个问题:

问题1如何通过判断条件(该4位数连续小于该4位数以后的5个数且该数是偶数)筛选出满足条件的数,同时统计其个数;问题2如何将这些数按照从小到大的顺序排列。

通过问题分析,得出解此题的思路为:

先根据题目中的条件筛选出满足条件的数并存入新的数组中,再对新数组进行排序。

对于问题1通过if条件判断语句和逻辑表达式可以实现;问题2排序可以通过循环嵌套的起泡法实现。

【参考答案】

voidjsVal()

{

inti,j;/*定义循环控制变量*/

inttemp;/*定义数据交换是的暂存变量*/

for(i=0;i

if(a[i]

/*如果当前数是偶数且小于后面连续5个数*/

{

b[cnt]=a[i];/*将满足条件的数存入数组b中*/

cnt++;/*并统计满足条件的数的个数*/

}

for(i=0;i

for(j=i+1;j

if(b[i]>b[j])

{

temp=b[i];

b[i]=b[j];

b[j]=temp;

}

}

模板五 4位数的筛选(4)-4位数之间的比较

【模板速记】

记忆口诀:

一定义二筛选三排序。

定义指定义相关变量,筛选指选出满足条件的数并存入数组,排序指按照要求排序,详见模板五。

做题时,需灵活应用本模板,切勿死记硬背。

【易错提示】循环嵌套的循环控制条件,if判断语句中表达式,数组排列的顺序。

11.【考点分析】本题考查对字符数组中的字符进行计算以及替换。

考查的知识点主要包括:

字符串数组的访问,字符ASCII码的位运算,if判断结构以及逻辑表达式。

【解题思路】首先通读题目,得知此题属于字符计算问题;其次分析题干要求,本题要求实现StrCharJL()函数的功能,分析后可以归纳出3个关键点:

关键点1如何对字符数组的元素逐一访问;关键点2如何对字符的ASCII码做左移的位运算;关键点3如何根据条件(移位后的ASCII值小于等于32或大于100)对计算结果进行判断,并分别对满足与不满足条件的情况进行处理。

接着分析每一步的解决方法,关键点1通过字符串处理函数strlen获取字符串的长度,再通过获得的长度使用下标法对字符数组的元素逐一访问;关键点2可以直接对字符的ASCII码进行位运算;关键点3通过if判断结构和逻辑表达式即可实现功能。

【参考答案】

voidStrCharJL(void)

{inti,j;/*定义循环控制变量*/

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

当前位置:首页 > 表格模板 > 表格类模板

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

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