2013年9月计算机三级数据库上机题库

举报
资源描述
计算机三级数据库上机题库1 .调用函数rwdata(),从 IN.dat文件中读取10组数据(m 和 k 值),并嵌套调用primenum函数分别得出array口 数组。请编写函数primenum(int m,int k,int array ),该函数的功能是:将紧靠m 的 k 个素数存入数组array并在屏幕上显示。最后把结果输出到文件OUT.dat中。例如,若输入3 9,则应输出57 11 13 17 19 23 2931。注意:部分程序已经给出。请勿改动主函数main。和输出数据函数rwdata()的内容。#include#include void rwdata();void primenum(int m,int k,int array)()main()int m,n,array1000;printf(nnPlease enter two integers:);scanf(,%d%d,&m,&n);primenum(m,n,array);for(m=0;mn;m+)printf(H%d,arraym);printf(,nH);rwdata();)void rwdata()int m,n,array1000,i;FILE*readfile,*writefile;readfile=fopen(in.dat,V);writefile=fopen(nout.dat,wM);for(i=0;i10;i+)fscanf(readfile,u%d%dM,&m,&n);primenum(m,n,array);for(m=0;m half)arrayn=value;n+;)if(n=k)break;value+;)【容错分析】判断-一 个数m(大于1)是否素数的简单的算法:枚举2 到 m/2之间的整数,看能否被m 整除,如果能整除,就不是素数,否则是素数。2.在文件IN.dat中有200个正整数,且每个数均在1000-9999之间。函数RData()读取这200个数存放到数组original中。请编写函数numAscend(),其功能是:要求按每个数的后3 位的大小进行升序排列,然后取出满足此条件的前10个数依次存入数组result中,如果后3位的数值相等,则按原先的数值进行降序排列。最后调用函数W Data(),把结果result输出到文件OUT.dat中。例 如,处 理 前:6012 5099 9012 7025 8088处理后:9012 6012 7025 8088 5099注意:部分程序已给出。请勿改动主函数main。、读数据函数RData()和输出数据函数WData()的内容。#include#include#include int original200,result10;void numascend()()void RData()FILE*in;int i;in=fopen(nIN.datn,rn);for(i=0;i200;i+)fscanf(in,%d,n,&originali);fclose(in);)void WData()FILE*out;int i;out=fopen(nOUT.datM,wH);for(i=0;i10;i+)printf(n%du,resulti);fprintf(out,n%dnn,resultij);)fclose(out);)void main()RData();numascend();WData();【题目分析】首先我们来看看题中要求我们解决的问题有哪些。按original数组中各元素数字的后3 位数的大小进行升序排列,如果数值相等,则按原先的数值进行降序排列;取出排序后的original数组中的前10个数依次存入result数组中。【解题思路】根据上面的分析,编写程序有以下几个步骤:第 1 步:首先分解出数组中两个元素的后三位,这里采用在两次循环中求出正整数original5和 originalj对 1000的余数的方法;第 2 步:然后比较两个数余数的大小,如果正整数originali和 originalfj对 1000的余数不相同,则按照升序进行排序,如果相同,则比较。riginali和。riginalj的大小,按照降序进行排序;第 3 步:利用一个for循环语句把original数组中的前10个数输出给result数组。【答案】void numascend()int i,j,data;for(i=0;i199;i+)for(j=i+l;j originalj%1000)data=originali;originali=original.;original j=data;)else if(originali%1000=original1%1000)if(originali originaljJ)data=original i;originali=originalj;originalj=data;)for(i=0;i10;i+)resulti=originali;容错分析:数组originali中两个数的位置交换要借助中间变量data。3.已知文件IN.dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字符型4 位)、产品名称name(字符型10位)、惭 uprice(整型)、数量amount(整型)、金额sum(长整型)5 部分组成。其中:金额=单价X 数量。函数RData()读取这100个销售记录并存入结构数组sell中。请编写函数DescSort。,其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WData(),把结果输出到文件OUT.dat中。注意:部分程序已给出。请勿改动主函数main。、读数据函数RData()和输出数据函数WData()的内容。#include#include#include#include#define MAX 100typedef struct char code5;char namel 1 J;int uprice;int amount;long sum;PRO;/*产品代码*/*产品名称*/*单 价*/*数 量*/*金 额*/PRO sellfMAXl;void RData();void WData();void DescSort()void main()memset(sell,0,sizeof(sell);RData();DescSort();WData();)void RData()FILE*fp;char str80,chl 1;int i;fp=fopen(nIN.dat,nrH);for(i=0;i100;i+)fgets(str,80,fp);memcpy(selli.code,str,4);memcpy(sell i J.name,str+4,10);memcpy(ch,str+14,4);ch4=0;selli.uprice=atoi(ch);memcpy(ch,str+18,5);ch5=0;selli.amount=atoi(ch);selli.sum=(long)selli.uprice*selli.amount;fclose(fp);void WData(void)FILE*fp;int i;fp=fopen(OUT.datn,Mw);for(i=0;i100;i+)printf(M%s%s%4d%5d%5dn;selli.code,selli.name,selli.uprice,selli.amount,selli.sum);fprintf(fp,u%s%s%4d%5d%5dn,selli.code,selli.name,selli.uprice,selli.amount,selli.sum);fclose(fp);【题目分析】首先我们来看看题中要求我们解决的问题有哪些。按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列;将排列结果存入结构数组sell中。分析题目可知,本题中使用结构数组sell来保存销售记录。产品代码存储在sell结构数组中的 code成员中,金额存储在sum成员中。【解题思路】我们可以利用两个for循环结构对产品销售记录(strcmp(seni.code,sellj.code)两两进行循环比较,如果这个表达式返回结果值小于0,则进行两个数据的交换,实现产品代码从大到小进行排序。如果上面的表达式的返回值等于0,说明这两个产品的代码相同,则比较seUi.sum与 sellj.sum的值。如果selli.sum sellj.sum,则进行两个数据的交换,实现金额从大到小进行排序。【答案】void DescSort()int i,j;PRO temp;for(i=0;iv99;i+)for(j=i+l;j100;j+)if(strcmp(sellij.code,selljj.code)0)temp=selli;selli=sellj;sellj=temp;else if(strcmp(selli.code,sellj.code)=0)if(selli.sum sellfj.sum)temp=selli;selli=sellfj;sellj=temp;容错分析:数组selli中两个数的位置交换要借助中间变量tempo4.函数RData()实现从文件IN.dat中读取一篇英文文章,存入到字符串数组s tr中;请编写encryptChar。函数,其功能是:按给定的替代关系对数组s tr 中的所有字符进行替代,仍存入数组str对应的位置上,最后调用函数W Data(),把结果str输出到文件OUT.dat中。替代关系:f(p)=p*ll mod 256(p 是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于1 等 于 32或大于1 3 0,则该字符不变,否则将f(p)所对应的字符进行替代。原始数据文件存放的格式是:每行的宽度均小于80个字符。注意:部分程序已给出。请勿改动主函数main。、读数据函数RData()和输出数据函数WData()的内容。#include#include#include#include unsigned char str5080;int maxline=0;/*文章的总行数*/int RData(void);void WData(void);void encryptChar()void main()if(RData()printf(数据文件 IN.dat 不能打开!n007);return;)encryptChar();WData();)int RData(void)FILE*fp;int i=0;unsigned char*p;if(fp=fopen(IN.dat,nrn)=NULL)return 1;while(fgets(stri,80,fp)!=NULL)p=strchr(stri,An);if(p)*p=0;i+;maxline=i;fclose(fp);return 0;)void WData(void)FILE*fp;int i;fp=fopen(”OUT.dat“,w);for(i=0;imaxline;i+)printf(n%snu,stri);fprintf(fp,u%snH,stri);fclose(fp);)【题目分析】分析题目可知,题中需要解决的问题就是实现encryptChar函数的功能问题,而 encryptChar函数的功能是:实现 按照指定的替代关系将数组str中的所有字符进行替代,替代后仍存入数组s tr的对应位置上。因此本题的关键在于用什么样的C 程序语言实现指定的替代关系,之后就可以通过一个双重循环来将这篇文章中的所有字符逐个替换。【解题思路】首先通过fo r循环对数组stri中 的 每 个英文字符按照题目给定的替代算法*pf*ll%256计算出其对应的字符的ASCH
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号