C语言编程,求解 在线等~

程序按如下规则产生一个数列的前10项,并将这10项数据按其奇偶数性存放在数组的两端,奇数在数组的前端,偶数在数组的后端。数列生成规则:1、数列的前两项分别为1、4;2、从... 程序按如下规则产生一个数列的前10项,并将这10项数据按其奇偶数性存放在数组的两端,奇数在数组的前端,
偶数在数组的后端。
数列生成规则:
1、数列的前两项分别为1、4;
2、从第三项起,由数列前两项产生后一项或后两项,规则如下:前两项之积再加3,如果其和为一位数,则该数就是数列的
当前项;如果为两位数,且为奇数,则该数的十位数为数列的当前项,个位数为数列的后一项;如果为两位数,且为偶数,
则该数的个位数为数列的当前项,十位数为数列的后一项。
编写程序:
1、编写void gen(int a[])函数,该函数产生数列的前10项,保存在数组a中。
2、编写void split(int a[])函数,该函数按数据奇偶性调整数组a中元素的位置,奇数放在数组a的前端,偶数放在数组a的
后端。调整中不允许使用其他辅助数组。
结果为:1 7 7 3 1 5 9 6 4 8
*/
#include<stdio.h>
#include<stdlib.h>
void gen(int a[]){
/**********Program**********/

/********** End **********/
}
void split(int a[]){
/**********Program**********/

/********** End **********/
}
int main()
{
int a[10]={1,4},i;
FILE *fp;
gen(a);
split(a);
if((fp=fopen("DATA.TXT","w"))==NULL){
printf("File open error\n");
exit(0);
}
for(i=0;i<10;i++){
printf("%4d\t",a[i]);
fprintf(fp,"%4d\t",a[i]);
}
fclose(fp);
return 0;
}
展开
 我来答
wchyumo2011
2015-08-14 · TA获得超过2万个赞
知道大有可为答主
回答量:5810
采纳率:79%
帮助的人:2508万
展开全部

根据题意可得如下代码:

#include<stdio.h>
#include<stdlib.h>
void gen(int a[]){
/**********Program**********/
    int i, t;
    for (i = 2; i < 10;){
        t = a[i-1]*a[i-2]+3;
        if (t < 10){
            a[i] = t;
            i++;
        }
        else if (t % 2 == 1){
            a[i] = t/10;
            a[i+1] = t%10;
            i+=2;
        }
        else {
            a[i] = t%10;
            a[i+1] = t/10;
            i+=2;
        }
    }

/**********  End  **********/
}
void split(int a[]){
/**********Program**********/
    int i = 0, j = 9, t;
    while (i < j){
        while (a[i]%2==1){
            i++;
        }
        while (a[j]%2==0){
            j--;
        }
        if (i < j){
            t = a[i];
            a[i] = a[j];
            a[j] = t;
        }
    }

/**********  End  **********/
}
int main()
{
   int a[10]={1,4},i;
   FILE *fp;
   gen(a);
   split(a);
   if((fp=fopen("DATA.TXT","w"))==NULL){
      printf("File open error\n");
      exit(0);
   }
   for(i=0;i<10;i++){
  printf("%4d\t",a[i]);
  fprintf(fp,"%4d\t",a[i]);
   }
   fclose(fp);
   return 0;
}
追问

谢谢

  答案是对的 请问为什么会出现这个

追答
- -数组下标越界了
flyfit
2015-08-14 · TA获得超过457个赞
知道小有建树答主
回答量:595
采纳率:66%
帮助的人:284万
展开全部
void gen(int a[]){
/**********Program**********/
int i;
for(i=2;i<10;i++){
a[i]=a[i-2]*a[i-1]+3;
if(a[i]>9){
if(a[i]%2==0){
if(i<9) a[i+1]=a[i]/10;
a[i]%=10;

}else{
if(i<9) a[i+1]=a[i]%10;
a[i]/=10;
}
i++;

}

}

/********** End **********/
}

void split(int a[]){
/**********Program**********/
int i=0,j=9,k;
for(;i<j;){
if(a[i]%2==0){
k=a[i];
a[i]=a[j];
a[j]=k;
j--;
}else i++;

/********** End **********/
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式