已知数据文件IN1.DAT和IN2.DAT中分别存有100个两位十进制数,并且已调用读函数readDat()把这两个文件中的数存入数组a和b中,请编制一个函数jsVal(),实现的功能是依次对数组a和b中的数按条件重新组成一个新数并依次存入数组c中,再对数组c中的数按从小到大的顺序进行排序,最后调用输出函数writeDat()把结果输出到文件OUT.DAT中.组成新数的条件:如果数组a和b中相同的下标位置的数必须符合一个是偶数,另一个是奇数,则数组a中的数按二进制数左移八位后再加上数组b对应位置上的数,把这样组成的新数一次存入数组c中.
例如:a:12 33 24 15 21
b:32 35 17 15 18
c:6161 5934
排序后c:5394 6161
#include <stdio.h>
#define MAX 100
unsigned int a[MAX], b[MAX], c[MAX];
int cnt = 0;
void writeDat();
void jsVal()
{
int i,j;
int temp;
for (i = 0;i <= MAX - 1;i++)
if (((a[i] % 2 == 0) && (b[i] % 2 != 0)) || ((a[i] % 2 != 0) && (b[i] % 2 == 0))){
c[i] = (a[i]<<8) + b[i];
cnt++;
}
for (i = 0;i < MAX - 1;i++)
for (j = 0;j < MAX - i - 1; j++)
if (c[j] > c[j+1]){
temp = c[j];
c[j] = c[j + 1];
c[j+1] = temp;
}
}
以上是参考答案,我自己编的在下面,标注粗体的是错误部分,参考答案排序的时候貌似用的不是起泡法。。迷糊中,跪求解答。
void jsVal()
{
int i,j;int temp;
for(i=0;i<MAX;i++)
if(((a[i]%2==0&&b[i]%2==1))||((a[i]%2==1&&b[i]%2==0)))
{ c[cnt]=(a[i]<<8)+b[i];
cnt++;}
for(i=0;i<cnt-1;i++)
for(j=i+1;j<cnt;j++)
if(c[i]>c[j])
{temp=c[i];
c[i]=c[j];
c[j]=temp;}
}
void readDat()
{
int i ;
FILE *fp ;
fp = fopen("in1.dat", "r") ;
for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ;
fclose(fp) ;
fp = fopen("in2.dat", "r") ;
for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &b[i]) ;
fclose(fp) ;
}
void main()
{
int i ;
for(i = 0 ; i < MAX ; i++) c[i] = 0 ;
readDat() ;
jsVal() ;
for(i = 0 ; i < MAX; i++)
if (c[i] > 0)
printf("%d\n", c[i]);
writeDat() ;
system("pause");
return 0;
}
void writeDat()
{
FILE *fp ;
int i ;
fp = fopen("out.dat", "w") ;
for(i = 0 ; i < MAX; i++)
if (c[i] > 0)
fprintf(fp, "%d\n", c[i]) ;
fclose(fp) ;
}