DNA操作.docx
- 文档编号:4380648
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:14
- 大小:197.40KB
DNA操作.docx
《DNA操作.docx》由会员分享,可在线阅读,更多相关《DNA操作.docx(14页珍藏版)》请在冰豆网上搜索。
DNA操作
设计性综合性实验
实验课题名称:
DNA生物学操作
院系:
计算机科学与技术学院专业:
计算机科学与技术
课程:
数据结构教师:
学号:
姓名:
2013至2014学年度1学期
实验名称:
生物学操作
实验性质:
设计性(*) 综合性(*)
实验器材:
PC机并装有VC++6.0环境
实验目的:
解决生物学DNA操作
实验任务:
设计函数实现DNA的以下生物学操作:
实验内容、过程及结果:
一.问题描述
脱氧核糖核酸(DNA)承载着生命的遗传代码,它是由4种核苷酸(又称为碱基)组成:
腺嘌呤(A)、胸腺嘧啶(T)、鸟嘌呤(G)和胞嘧啶(C)。
这4种碱基有无穷种组合,形成一条碱基单链,而DNA是由等长的两条相互缠绕的碱基单链所构成,在两条链上位置相同的碱基相互连接,称为碱基对。
但是构成碱基对必须遵循一定的原则,其中A只能连接T,G只能和C连接,这称为WC兼容性。
二.设计思路
实行生物学上DNA的操作,要涉及到DNA的混合,溶合,匹配,输出。
我们可以通过链表来形成一个DNA,利用DNA的碱基互补配对来完成相应的操作。
三.解决问题
碱基的互补配对如下:
腺嘌呤(A)——胸腺嘧啶(T)
鸟嘌呤(G)和胞嘧啶(C)
1)混合:
互为WC补体的2条单链横向配对连接,形成一条完整的DNA双链。
2)溶合:
一条DNA双链,通过加热使得碱基对断裂,形成2条DNA单链。
3)匹配:
输入任何一条DNA单链,输出其匹配的WC补体单链。
4)输出:
输出任何一条DNA单链或双链。
四.实现
1.功能函数设计
dna*chuangjian()
此函数的作用是常见一个DNA单链,通过输入来确定DNA的长度与DNA的碱基
voidxianshia(dna*head)
此函数的作用是用来显示DNA的第一条链
voidxianshib(dna*head)
此函数的作用是用来显示DNA的另外一条链
voidpd(dna*head)
此函数的作用是用来通过碱基互补配对利用第一条链生成另外一条互补链
voidbijiao(dna*head,dna*b[max],inti)
此函数的作用是用来比较两个DNA单链是否互补形成一个DNA单链
voidmenu()
此函数的作用是打印出用户操作菜单
voidmain()
此函数是该程序的主函数
下面是源代码:
#include
#include
#include
#include
#include
#definemax200
typedefstructDNA
{
chara,b;
intlen;
structDNA*next;
}dna;
dna*head;
dna*L[max];
dna*chuangjian()//初始化链表
{
dna*r,*t;
intj,a;
chari;
r=head=(dna*)malloc(sizeof(dna));
printf("待创建DNA的长度:
");
scanf("%d",&a);
for(j=1;j<=a;j++)
{
printf("第%d个核苷酸:
",j);
getchar();
scanf("%c",&i);
if(i=='A'||i=='C'||i=='T'||i=='G')
{
t=(dna*)malloc(sizeof(dna));
t->a=i;
r->next=t;
r=t;
}
else
{
printf("输入错误!
\n");
j--;
}
}
head->len=a;
r->next=NULL;
returnhead;
}//chuangjian
voidxianshia(dna*head)//遍历链表
{
dna*p;
p=head->next;
while(p)
{
printf("%c",p->a);
p=p->next;
}
printf("\n");
}//xianshi
voidpd(dna*head)
{
dna*p;
p=head->next;
while(p)
{
switch(p->a)
{
case'A':
p->b='T';
break;
case'T':
p->b='A';
break;
case'C':
p->b='G';
break;
case'G':
p->b='C';
break;
}
p=p->next;
}
}
voidxianshib(dna*head)
{
dna*p;
p=head->next;
pd(head);
while(p)
{
printf("%c",p->b);
p=p->next;
}
printf("\n");
}
voidbijiao(dna*head,dna*b[max],inti)
{
intm;
dna*p,*q;
p=head->next;
for(m=1;m<=i;m++)
{
q=b[m]->next;
if(head->len!
=b[m]->len)
continue;
else
{
pd(b[m]);
while(p)
{
if(p->a==q->b)
{
p=p->next;
q=q->next;
}
else
break;
}
if(!
p)
break;
}
}
if(m<=i)
{
printf("找到与之配对的单链!
\n配对后的DNA为:
\n");
xianshia(head);
for(intc=0;c
{
printf("|");
}
printf("\n");
xianshia(b[m]);
}
else
printf("没有找到与之配对的单链!
\n");
}
voidmenu()
{
printf("\n\n\n\n");
printf("★★★★★★★★★★〖DNA的生物学操作〗★★★★★★★★★★\n\n");
printf("☆1.混合☆\n");
printf("☆2.溶合☆\n");
printf("☆3.匹配☆\n");
printf("☆4.输出☆\n");
printf("☆0.退出☆\n\n");
printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
}
voidmain()
{
inti,n,m;
while
(1)
{
system("cls");
menu();
printf("请输入您的选择:
");
scanf("%d",&i);
printf("\n");
if(i==0)
break;
switch(i)
{
case1:
printf("请先输入要配对的DNA单链!
!
!
\n");
chuangjian();
L[0]=head;
printf("要输入几条要进行配对的单链:
");
scanf("%d",&m);
for(n=1;n<=m;n++)
{
chuangjian();
L[n]=head;
printf("\n");
}
bijiao(L[0],L,m);
break;
case2:
printf("请先创建一个DNA!
!
!
\n");
chuangjian();
printf("您创建的DNA为:
\n");
xianshia(head);
for(n=0;n
{
printf("|");
}
printf("\n");
xianshib(head);
printf("加热成功....\n");
printf("加热后的第一条单链为:
");
xianshia(head);
printf("加热后的第二条单链为:
");
xianshib(head);
break;
case3:
chuangjian();
printf("您输入的DNA单链为:
");
xianshia(head);
printf("与之匹配的单链为:
");
xianshib(head);
break;
case4:
printf("请先创建一个DNA!
!
!
\n");
chuangjian();
printf("您创建的DNA为:
\n");
xianshia(head);
for(n=0;n
{
printf("|");
}
printf("\n");
xianshib(head);
break;
}
getch();
}
五.}运行与测试
运行结果:
算法分析:
DNA的结构体中含有两条链上的碱基a,b还有指向下一个碱基对的指针next,通过用户输入碱基a,通过函数pd生成与a互补的碱基b
测试信息:
通过用户输入选择1,2,3,4,0程序执行不同的操作,程序能正常运行。
实验总结:
通过编写生物DNA操作程序,让我们对链表问题有了更深层次的了解,同时在也知道了数据结构在实际当中的运用,在编写程序的过程中,我们组的各个组员也学会了团队编写程序,分工明确,相互配合。
通过这次综合性试验,我们收获都非常大,提高了我们编写代码的能力,还有在程序出错时如何去解决。
学号
姓名
课题小组自评分数
最后得分
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DNA 操作