回复 5楼 TonyDeng
											#include"stdio.h"
#include"stdlib.h" 
#define M 1348
       //cds区间数不为0且为负链的基因数
         
FILE *str1,*date1;
     
struct motif
{
      
int num;
              
char gene[20];
   
char xulie[9500000];
      //选择9500000是因为1438行序列中最长的一行为9000000多 
}lead[M]
                    
int main()
{
 int i,j,m;
 char zifu;
 date1=fopen("E:\\寻找内含子序列\\内含子负序列.txt","rt"); 
 str1=fopen("E:\\寻找内含子序列\\内含子最终负序列.txt","wt");
  for(i=0;i<M;i++)
  fscanf(date1,"%s\t%d\t%s",&lead[i].gene,&lead[i].num,&lead[i].xulie);
   //读取基因、cds序列长度、cds序列
   
  for(i=0;i<M;i++)
    for(j=0;j<lead[i].num/2;j++)
    {
       m=lead[i].num;
   //m指序列长度
       zifu=lead[i].xulie[j];
       lead[i].xulie[j]=lead[i].xulie[m-1-j];
       lead[i].xulie[m-1-j]=zifu;
     //第一个与最后一个、第二个与倒数第二个等替换
   
    }
  for(i=0;i<M;i++)
    for(j=0;j<lead[i].num;j++)
    {
      if(lead[i].xulie[j]=='A')
      {
       lead[i].xulie[j]='T';
       continue;
     //加continue表明完成操作后继续循环,不执行下面的;要加{}否则不管第一个if是否成立执行continue继续循环
      }
      if(lead[i].xulie[j]=='T')
      {
       lead[i].xulie[j]='A';
       continue;
      }
      if(lead[i].xulie[j]=='C')
      {
       lead[i].xulie[j]='G';
       continue;
      }
      if(lead[i].xulie[j]=='G')
      lead[i].xulie[j]='C';
    }
  for(i=0;i<M;i++)
  {
    fprintf(str1,"%s\t%d\t",lead[i].gene,lead[i].num);
    for(j=0;j<lead[i].num;j++)
    fprintf(str1,"%c",lead[i].xulie[j]);
    fprintf(str1,"\n");
  }
 fclose(str1); 
 fclose(date1);
}
这个程序,当最长序列为900多万时运行不了,求解