回复 12楼 ehszt
您好,这是最新的修改程序,输出有问题,严重偏离期望结果!
谢谢!!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//常用于函数strlen、strcmp、strcpy等等
#include <time.h>
#define NUMBER 2020
//生成随机序列的长度
变化
#define ROUND
1
//生成50个随机序列
变化
#define N 20
//表示200个目标粒子可能对应的全部随机数
#define M 2000
//表示干扰粒子可能对应的全部随机数
int main()
{
//FILE *fp = NULL;
FILE * fp=fopen("E:\\fenbu.txt","wt");
int rand_buff[NUMBER] = {0};
//若NUMBER八九千万甚至过亿长,必须加static,若不是不需加static;NUMBER加上1是为给换行符一个位置
int rand_ret = 0;
//生成随机数赋值给rand_ret
int char_arr1[N];
int char_arr2[M];
int mubiao_count = 0;
int ganrao_count = 0;
int mubiao_flag = 0;
int ganrao_flag = 0;
int i = 0, j = 0,h=0;
for(i=0;i<N;i++)
char_arr1[i]=i;
//给char_arr1[]字符数组赋值0-N间的数字
for(i=0;i<M;i++)
char_arr1[i]=i+N;
//给char_arr1[]字符数组赋值0-N间的数字
fp = fopen("random", "a+");
if(fp == NULL)
{
perror("fopen");
return -1;
}
srand(time(NULL));
for(i = 0; i < ROUND; i++)
{
memset(rand_buff, 0, sizeof(rand_buff));
//memset()函数的作用是对结构体或数组最快地进行清零,因此这里是对char rand_buff[]数组清零
mubiao_count = 0;
ganrao_count = 0;
mubiao_flag = 0;
ganrao_flag = 0;
for(j = 0; j < NUMBER; j++)
{
rand_ret = ((rand()*(RAND_MAX+1) + rand())%(M+N)+1);
//随机数赋值给rand_set
if(rand_ret <= N)
//上一行生成随机数共M+N个,令rand_ret<=N是为了确保
{
if(!mubiao_flag)
//AT_full_flag=0,故!AT_full_flag的值为1,而1表示满足条件可运行;当AT_count满足含量后AT_full_flag变为1,!AT_full_flag为零,于是停止生成A和T
{
rand_buff[j] = char_arr1[rand_ret%N];
//rand_ret介于1-6间,该行通过char_arr1[0]=A和char_arr1[1]=T来随机生成A和T
mubiao_count++;
//AT_count用来计数A和T的个数
if(mubiao_count >= 200)
//0.6表示A和T占的总量
变化
mubiao_flag = 1;
//AT_full_flag变为1后,!AT_full_flag为零,于是停止生成A和T
}
else
{
j--;
continue;
}
}
else
{
if(!ganrao_flag)
//CG_full_flag=0,!CG_full_flag=1,满足条件运行
{
rand_buff[j] = char_arr2[(rand_ret-N)%M];
//生成C和G
ganrao_count++;
if(ganrao_count >= M)
//0.4表示C和G的总量
变化
ganrao_flag = 1;
//当C+G满足总量后,CG_full_flag变为1,如此!CG_full_flag=0,停止生成C和G
}
else
{
j--;
continue;
}
}
}
//rand_buff[NUMBER]='\0';
for(h=0;h<NUMBER;h++)
{
fprintf(fp,"%d",rand_buff[h]);
printf("%d",rand_buff[h]);
}
//fwrite(rand_buff, sizeof(rand_buff), 1, fp);
//将生成的每一段随机序列写入fp文件
}
fprintf(fp,"\n");
fclose(fp);
return 0;
}