永发信息网

求解C语言,帮帮忙2

答案:3  悬赏:70  手机版
解决时间 2021-05-05 10:37

已知数据文件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) ;
}

最佳答案

粗体部分看了下没有错,参考答案反而错了,不知道你是不是两者想混了。


上面那个的确是起泡法,反而下面那个你说自己编的是选择排序,不了解选择排序的话搜索一下吧。


主函数最好别用void型,标准是int main,而且你用了一个return语句,就更不能定义为void了。


一定要准备“数据文件IN1.DAT”,否则运行错误。

全部回答

你写的是对的,只不过你没对cnt声明

int cnt=0;

就可以了

   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;}

cnt 改MAX

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么我的QQ秀下面写的是广州呀,我怎么改过
株洲有比熊犬卖吗?
DNF怎么进决斗场??
我的电脑中毒了怎么办??
DNF白天,50级的号可以出售2500W吗?
霸气的猴子台词,关于猴子的诗句
今天冲了100块RMB的天龙点卡为什么半小时不到
谁空间有QQ头像?
急!路由器连接问题!
为什么我有铠甲勇士的变身器却无法变身成铠甲
为什么要“煮酒论英雄”
东莞二手车市场2W左右的江铃或五十铃皮卡有几
每天惠生活超市怎么去啊,有知道地址的么
合肥爱索尔包装有限公司怎么样?待遇、上班时
现在投资什么项目最好
推荐资讯
诺基亚E66上网,为什么在百度首页页面太大,
3GQQ为什么没有提醒
强打是怎么发力
谁有《是美男啊》的第十一集的下载视频啊??
东北街村在什么地方啊,我要过去处理事情
上网有什么好处?可以做什么有意义事?
有一个女孩她说爱上我了,她长得很美,我只想好
霸气侧漏的黄河句子,关于黄河的诗句
白细胞计数3.6 中性粒细胞47.8 淋巴细胞46.0
父母反对的恋情该怎么办。
路虎和捷豹哪个贵,捷豹xf和路虎极光哪个好
中秋放假规定
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?