高手看看计算机数据库试题O(∩_∩)O~

来源:百度知道 编辑:UC知道 时间:2024/06/05 13:39:24
在文件in.dat中有200个正整数,且每个数均在1000至9999之间。调用函数readdat()读取这两百个数并存放到数组aa中。编制函数jssort(),要求按每个数的后三位的大小进行降序排列,然后取出满足此条件的前10个数依次存入数组bb中,如果后三位的数值相等,则按原先的数值进行升序排列。最后调用函数writedat()把结果bb输入到文件out.dat中。
例:处理前 9012 5099 6012 7025 8088
处理后 5099 8088 7025 6012 9012
给出的程序是:
include <stdio.h>
#include <string.h>
#include <conio.h>
int aa[200], bb[10];
void jsSort()
{
int i,j,data;
for(j=i+1;j<199;j++)
{
if(aa[i]%1000<aa[j]%1000)
{
data=aa[i];
aa[i]=aa[j];
aa[j]=data;
}
else if(aa[i]%1000==aa[j]%1000)
{
if(aa[i]>aa[j])
{
data=aa[i];
aa[i]=aa[j];
aa[j]=data;
}
}
}
for(i=0;i<10;i++)
bb[i]=aa[i];
}
void ReadDat()
{
FILE *in;
int i;
in = fopen("in.dat", "r");
for (i=0; i<200; i++)
fscanf(in, "%d,", &aa[i]);

i j 是供循环用的 应该在 而最开始j是i加一
说明 是从i后面的第一个开始和i比较 然后 以后第二个 第三个 。。。和他比较
最好在 void jsSort() 里面 把int i,j,data; 改成int i=0,j,data;
if(aa[i]%1000<aa[j]%1000)
{
data=aa[i];
aa[i]=aa[j];
aa[j]=data;
}

aa[i]%1000<aa[j]%1000 比较的是 aa[i] aa[j]他们和1000的余数 如 9012 5099 前面的余数是12 而后面一个的余数是99 那么 12<99 这个成立 执行
data=aa[i]; 把aa[i]赋值给data 用data来暂存 即 data为 9012 aa[i] 为 9012 aa[j]为5099

aa[i]=aa[j]; 然后 把 aa[j] 赋值给 aa[i] 后有 data为 9012 aa[i] 为 5099 aa[j]为5099

aa[j]=data; 然后 把data赋值给aa[j] 后有 data为 9012 aa[i] 为 5099 aa[j]为9012

实现了aa[i] 和aa[j] 的交换

它的排序是让余数大的排在前面 第一个if 是比较余数的大小 大的换到前面去
后面的else if 是相等的情况 相等的情况就比较两个数的大小 大的通过交换拍在后面
明白了么