没有合适的资源?快使用搜索试试~ 我知道了~
计算机三级数据库上机100题答案(打印版).pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 13 浏览量
2021-10-11
17:19:57
上传
评论
收藏 479KB PDF 举报
温馨提示
试读
50页
计算机技术
资源推荐
资源详情
资源评论
1 【考点分析】 本题考查对 4位整数的排序。考查的知识点主要包括: 数组元素的排序算法, if判断语句
和逻辑表达式,以及求余算术运算。
【解题思路】 此题属于 4位数排序问题。本题需主要解决 3个问题: 问题 1如何取 4位数的后 3位进行比较;
问题 2如何按照题目要求的条件 (按照每个数的后 3位的大小进行降序排列, 如果后 3位相等, 则按照原始 4位数的
大小进行升序排列 )排序; 问题 3如何将排完序的前 10个数存到数组 bb中去。
本题的解题思路为:使用双循环对数组按条件进行排序,然后将排完序的前 10个数存到数组 bb中。对于 问
题1可以通过算术运算的取余运算实现 (aa[i]%1000) ;问题 2通过包含 if 判断语句的起泡排序法就可以实现。
【参考答案】
void jsSort()
{
int i,j; /* 定义循环控制变量 */
int temp; /* 定义数据交换时的暂存变量 */
for(i=0;i<199;i++) /* 用选择法对数组进行排序 */
for(j=i+1;j<200;j++)
{
if(aa[i]%1000<aa[j]%1000) /* 按照每个数的后 3位大小进行降序排序 */
{
temp=aa[i];
aa[i]=aa[j];
aa[j]=temp;
}
else if(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位数添加到和值中。
【参考答案】
void countValue()
{
int i,j;
int s2;
int n2,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中,然后通过循环判断
得出需要的数据 (奇数个数、偶数个数、奇数及偶数的和 );最后根据题目中已给出的公式和之前保存的数据计
算出奇数的方差。
【参考答案】
int ReadDat(void)
{
FILE *fp;
int i,j; /* 计数器变量 */
if((fp=fopen("IN.DAT","r"))==NULL) return 1;
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);
return 0;
}
void Compute(void)
{
int i ; /*定义循环控制变量 */
int tt[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<odd ; i++ )
totfc+= (tt[i] - ave1)*(tt[i] -ave1)/odd; /*求所有奇数的方差 */
}
【易错提示】 文件操作函数 fscanf()和feof()的用法, if判断语句中逻辑表达式,对方差计算公式运用错误。
4【考点分析】 本题考查对一定范围内整数的筛选。考查的知识点主要包括: 多位整数的分解算法,完全
平方数判断方法, if 判断语句和逻辑表达式。
【解题思路】 此题属于数学类问题。分析题干,本题需注意 2个关键点: 关键点 1判断该数是否是完全平
方数; 关键点 2判断该数是否有两位数数字相同。
本题的解题思路为:通过循环控制,依次判断 100至999数是否满足 关键点 1(是否为完全平方数 )。如果是,
则将该数分解出各位数数字,并判断是否有两位数数字相同,如果存在,则个数加 1,并将该数存入数组中。
【参考答案】
int jsValue(int bb[])
{
int i,j; /* 定义循环控制变量 */
int cnt=0; /* 定义计数器变量 */
int a3,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++;
} /* 统计满足条件的数的个数 */
}
return cnt; /* 返回满足该条件的整数的个数 */
}
【易错提示】 完全平方数的判断方法错误,分解整数各个数位的方法错误, if 判断语句中表达式。
5【考点分析】 本题考查对一定范围内整数的筛选。考查的知识点主要包括: 多位整数的分解算法,素数
的判断算法, if 判断语句和逻辑表达式。
【解题思路】 此题属于数学类问题。分析题干要求,归纳出本题的 2个关键点: 关键点 1判断该数是否为
素数; 关键点 2判断是否满足条件:个位数字和十位数字之和被 10除所得余数等于百位数字。
本题思路为:通过循环语句,依次求出所有 3位数的各位数数字,并判断是否满足 关键点 2(个位数字和十
位数字之和被 10除所得余数等于百位数字 ),如果满足则判断该数是否为素数,如果是则个数加 1,并将该数加
到和值中。判断的方法为:依次取从 2到该数 1/2的数去除这个数,如果有一个可被整除,则不是素数,如果循
环后的数大于该数的一半就可以判定该数是一个素数。
【参考答案】
void countValue()
{
int i,j; /* 定义循环控制变量 */
int half;
int a3,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,再比较两个产品的金额,如果前一个产品的金额大于
后一个产品的金额,则这两个产品进行数据交换。
【参考答案】
void SortDat()
{
int i,j; /* 定义循环控制变量 */
PRO temp; /* 定义数据交换时的暂存变量(这里是 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;
}
else if(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()
{
int i,j; /*定义循环控制变量 */
int a1,a2,a3,a4; /* 定义变量保存 4位数的每位数字 */
int temp; /* 定义数据交换时的暂存变量 */
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<cnt-1;i++) /* 用选择法对数组 b的4位数按从小到大的顺序进行排序 */
for(j=i+1;j<cnt;j++)
if(b[i]>b[j])
{
temp=b[i];
b[i]=b[j];
剩余49页未读,继续阅读
资源评论
nidezlk
- 粉丝: 1
- 资源: 11万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功