请高手解答,处理文件的问题!
一段很长的基因序列,由A、T、C、G四个字符无序组成,现在要测知每种八联体组合(即8个位置,每个位置可有A、T、C、G中的任一个填充,则8个位置共有4^8个八联体组合)在文件(上面已给出)中的出现次数,并据此找到同出现1次、2次、3次……1999次和2000次的八联体组合的个数。注意:假设这一段基因序列为AGCGTACTAG,则这段序列里有3个八联体,即第一个字符至第八个字符,
第二个字符至第九个字符,第三个字符至第十个字符。
这是我编的程序:
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"ctype.h"
#include"math.h"
int main()
{
char *zf;
int j,sum,pw[2001];
long i;
char ch[4]={'A','T','C','G'},str[8],ls[4^8][8],num[4^8];
FILE *in,*out;
if((in=fopen("E:\\测试文件\\NC_003279.word.txt","r"))==NULL) //第13行
{
printf("can't open file!\n");
exit(0);
}
if((out=fopen("E:\\测试文件\\NC_003279.word.QS.txt","w"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(zf=ch;zf<ch+4;zf++) //第23行到第57行,因为每个位置都有A、T、C、G四个选择,
八个位置共4^8个组合,所以用8个for循环完成
{
str[0]=*zf;
for(zf=ch;zf<ch+4;zf++)
{
str[1]=*zf;
for(zf=ch;zf<ch+4;zf++)
{
str[2]=*zf;
for(zf=ch;zf<ch+4;zf++)
{
str[3]=*zf;
for(zf=ch;zf<ch+4;zf++)
{
str[4]=*zf;
for(zf=ch;zf<ch+4;zf++)
{
str[5]=*zf;
for(zf=ch;zf<ch+4;zf++)
{
str[6]=*zf;
for(zf=ch;zf<ch+4;zf++)
{
str[7]=*zf;
i=0;
ls[i][8]=str[8]; //把每一种组合都赋予给ls[i][8],共4的8次幂个。
i++;
}
}
}
} //第53行
}
}
}
}
while(feof(in)) //foof()用来测试文件是否结束
{
fgets(str,8,in);
fseek(in,sizeof(char),0); //第61行:把文件位置指针向前移到离文件开头一个字符的字
节处
for(i=0;i<pow(4,8);i++)
{
if(strcmp(str,ls[i])==0)
num[i]+=1; //把in文件中各种组合出现次数统计出来
break;
}
}
for(j=0;j<=2000;j++) //第69行
{
for(i=0;i<pow(4,8);i++)
if(j==num[i])
pw[j]+=1; //计算出出现了j次的组合的个数统计出来
fprintf(out,"%4d\t",pw[j]);
}
fclose(in);
fclose(out);
system("PAUSE");
}
不知哪里出了问题,无法运行,请高手解答,谢谢!!!!!