没有合适的资源?快使用搜索试试~ 我知道了~
3级数据库上机100题.doc
5星 · 超过95%的资源 需积分: 9 33 下载量 122 浏览量
2010-12-13
09:09:03
上传
评论 2
收藏 856KB DOC 举报
温馨提示
试读
64页
下列程序的功能是:把s字符串中的所有字符左移一个位置,字符串中的第一个字符移到最后。请编写函数change(char*s)实现程序要求,最后调用函数readwriteDAT()从IN.dat文件中读取50组数据,分别得出结果,且把结果输出到OUT.dat文件中。 例如,s字符串中原有内容为:Mn.123xyZ,调用该函数后结果为:n.123xyZM。 注意:部分源程序已经给出。请勿改动主函数main()和输出数据函数readwriteDAT()中的内容。 题目分析】分析题目可知,本题只要实现change(char*s)函数的功能即可。change(char*s)要实现的功能是:把s字符串中的所有字符左移一个位置,串中的第一个字符移到最后。因此解答本题的关键在于如何将字符串拆分成单个字符并赋值给数组,并通过数组的下标将字符逐个左移一位。 【解题思路】首先用字符串函数strlen求出字符串s的长度,赋给变量strl;再把字符串的首字符赋给字符变量ch;然后在for循环语句中,变量i从0递增到strl-1,字符串s中的所有字符左移一个位置;最后把字符变量ch的值赋给*(s+strl-1),即完成了题目要求的功能。 【答案】......................
资源推荐
资源详情
资源评论
1.调用函数 rwdata(),从 IN.dat 文件中读取 10 组数据(m 和 k 值),并嵌套调用 primenum
函数分别得出 array[]数组。请编写函数 primenum(int m,int k,int array[]),该函数的功能
是:将紧靠 m 的 k 个素数存入数组 array 并在屏幕上显示。最后把结果输出到文件 OUT.dat
中。
例如,若输入 3 9,则应输出 5 7 11 13 17 19 23 29 31。
注意:部分程序已经给出。请勿改动主函数 main()和输出数据函数 rwdata()的内容。
#include <conio.h>
#include <stdio.h>
void rwdata();
void primenum(int m, int k, int array[])
{
}
main()
{ int m, n, array[1000];
printf("Please enter two integers:");
scanf("%d%d", &m, &n);
primenum(m, n, array);
for (m=0; m<n; m++)
printf("%d ", array[m]);
printf("");
rwdata();
}
void rwdata()
{ int m, n, array[1000], i;
FILE *readfile, *writefile;
readfile = fopen("in.dat", "r");
writefile = fopen("out.dat", "w");
for (i=0; i<10; i++)
{ fscanf(readfile, "%d %d", &m, &n);
primenum(m, n, array);
for (m=0; m<n; m++)
fprintf(writefile, "%d ", array[m]);
fprintf(writefile, "");
}
fclose(readfile);
fclose(writefile);
}
【知识点播】素数的定义:如果一个数的正因子只有1和这个数本身,那么这个数就是素
数。
【题目分析】分析题目可知,题中需要解决的问题就是 Primenum 函数的功能问题(rwdata
函数功能题中已经给出),而 Primenum 函数的功能是求在指定数 m 之后的 k 个素数,因
此本题的关键在于如何判断一个数是素数,之后就可以通过一个 for 循环来求得在 m 之后
的 k 个素数了。
【解题思路】根据素数的定义,本题采用的算法是:首先定义一个变量 Value,并把 m 之
后的数逐个赋值给该变量;然后用 2~value/2 数除 value,如果 value 能被 2~value/2 之中的
任何一个整数整除,则 value 不是素数,结束循环;如果 value 不能被 2~value/2 之间的任
一整数整除,则退出循环,然后判断循环变量 i 是否大于 value/2,如果大于,则 value 是素
数,并将 value 值赋给 array[n],然后 n++;再判断 n 是否大于等于 k,如果大于等于 k,就
完成了程序要求的功能,退出循环,否则 value 加 1,根据以上算法继续进行。
【答案】
void primenum(int m, int k, int array[])
{ int value = m+1;
int half, n = 0, i;
while(1)
{ half = value/2;
for (i=2; i<=half; i++)
if (value%i == 0)
break;
if (i > half)
{ array[n] = 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 位的数值相等,则按原先的数值进行降序排列。最后调用函数 WData(),把结果 result 输
出到文件 OUT.dat 中。
例如,处理前:6012 5099 9012 7025 8088
处理后:9012 6012 7025 8088 5099
注意:部分程序已给出。请勿改动主函数 main()、读数据函数 RData()和输出数据函数
WData()的内容。
#include <stdio.h>
#include <string.h>
#include <conio.h>
int original[200], result[10];
void numascend()
{
}
void RData()
{ FILE *in;
int i;
in = fopen("IN.dat", "r");
for (i=0; i<200; i++)
fscanf(in, "%d,", &original[i]);
fclose(in);
}
void WData()
{ FILE *out;
int i;
out = fopen("OUT.dat", "w");
for (i=0; i<10; i++)
{ printf(" %d", result[i]);
fprintf(out, "%d\n", result[i]);
}
fclose(out);
}
void main()
{ RData();
numascend();
WData();
}
【题目分析】首先我们来看看题中要求我们解决的问题有哪些。①按 original 数组中各元素
数字的后 3 位数的大小进行升序排列,如果数值相等,则按原先的数值进行降序排列;②
取出排序后的 original 数组中的前 10 个数依次存入 result 数组中。
【解题思路】根据上面的分析,编写程序有以下几个步骤:
第 1 步:首先分解出数组中两个元素的后三位,这里采用在两次循环中求出正整数
original[i]和 original[j]对 1000 的余数的方法;
第 2 步:然后比较两个数余数的大小,如果正整数 original[i]和 original[j]对 1000 的余数不
相同,则按照升序进行排序,如果相同,则比较 original[i]和 original[j]的大小,按照降序进
行排序;
第 3 步:利用一个 for 循环语句把 original 数组中的前 10 个数输出给 result 数组。
【答案】
void numascend()
{ int i, j, data;
for (i=0; i<199; i++)
for (j=i+1; j<200; j++)
{ if (original[i]%1000 > original[j]%1000)
{ data = original[i];
original[i] = original[j];
original[j] = data;
}
else if (original[i]%1000 == original[j]%1000)
{ if (original[i] < original[j])
{ data = original[i];
original[i] = original[j];
original[j] = data;
}
}
}
for (i=0; i<10; i++)
result[i] = original[i];
}
容错分析:数组 original[i]中两个数的位置交换要借助中间变量 data。
3.已知文件 IN.dat 中存有 100 个产品销售记录,每个产品销售记录由产品代码 code(字符
型 4 位)、产品名称 name(字符型 10 位)、单价 uprice(整型)、数量 amount(整型)、
金额 sum(长整型)5 部分组成。其中:金额=单价×数量。函数 RData()读取这 100 个销售
记录并存入结构数组 sell 中。请编写函数 DescSort(),其功能要求:按产品代码从大到小进
行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组
sell 中,最后调用函数 WData(),把结果输出到文件 OUT.dat 中。
注意:部分程序已给出。请勿改动主函数 main()、读数据函数 RData()和输出数据函数
WData()的内容。
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 100
typedef struct
{ char code[5]; /* 产品代码 */
char name[11]; /* 产品名称 */
int uprice; /* 单价 */
int amount; /* 数量 */
long sum; /* 金额 */
} PRO;
PRO sell[MAX];
void RData();
void WData();
void DescSort()
{
}
void main()
{ memset(sell, 0, sizeof(sell));
RData();
DescSort();
WData();
}
void RData()
{ 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].code, str, 4);
memcpy(sell[i].name, str+4, 10);
memcpy(ch, str+14, 4);
ch[4] = 0;
sell[i].uprice = atoi(ch);
memcpy(ch, str+18, 5);
ch[5] = 0;
sell[i].amount = atoi(ch);
sell[i].sum = (long)sell[i].uprice * sell[i].amount;
}
fclose(fp);
}
void WData(void)
{ FILE *fp;
int i;
fp = fopen("OUT.dat", "w");
for (i=0; i<100; i++)
{ printf("%s %s %4d %5d %5d\n",
sell[i].code, sell[i].name, sell[i].uprice, sell[i].amount, sell[i].sum);
fprintf(fp, "%s %s %4d %5d %5d\n",
sell[i].code, sell[i].name, sell[i].uprice, sell[i].amount, sell[i].sum);
剩余63页未读,继续阅读
资源评论
- 随心小子882014-11-12题库挺全面的,解题思路也比较清晰。
- iAviator2014-05-19挺好的题库,很全面。不过自己没过三级。
- dyzc20082018-02-01好!!!!!!!!!!
lq89075595
- 粉丝: 12
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功