回复 4楼 rjsp
您好,对于“3”,我看了链接,表达非常抱歉!
但对于1和2,却是陷入困境,以下是我的程序,始终有问题,谢谢!!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//常用于函数strlen、strcmp、strcpy等等
#include <time.h>
#define NUMBER 200200
//生成随机序列的长度
变化
#define ROUND
10
//生成50个随机序列
变化
#define N 200
//表示200个目标粒子可能对应的全部随机数
#define M 20000
//表示干扰粒子可能对应的全部随机数
int main()
{
//FILE *fp = NULL;
FILE * fp=fopen("E:\\fenbu.txt","wt");
static char rand_buff[NUMBER] = {0,};
//若NUMBER八九千万甚至过亿长,必须加static,若不是不需加static;NUMBER加上1是为给换行符一个位置
char rand_ret = 0;
//生成随机数赋值给rand_ret
char char_arr1[N];
char char_arr2[M];
short mubiao_count = 0;
short ganrao_count = 0;
char mubiao_flag = 0;
char 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];
//
mubiao_count++;
//AT_count用来计数
if(mubiao_count >= 200)
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,"%c",rand_buff[h]);
//fwrite(rand_buff, sizeof(rand_buff), 1, fp);
//将生成的每一段随机序列写入fp文件
}
fclose(fp);
return 0;
}