C 语言实验报告:碱基序列相似度比较 ByLegstrong Cannon 一.实验背景: 生物的基因是由碱基对排列而成的,庞大的遗传信息蕴含在碱基 A,T,C,G 的的排列顺序之中。然而现代人类科技的发展水平尚且 不能根据生物的碱基序列预测生物的遗传性状,我们的能力仅限于在 多个具有相同形状的个体中寻找近似度最高的一段基因序列。所以, 基因序列的比较工作在重多科研与医疗领域有重大作用。 二.实验目的: 通过 C 语言的程序设计,模拟基因链之间相似度的比较。 三.实验原理: 1.通过 1~4 随机正整数的生成,和 1-A、2-T、3-C、4-G 的数字与 碱基的对应关系,生成给定长度的碱基序列。 2.当两条链的位置暂定时,通过循环结构可以实现两条相似度的 比较。 四.实验步骤: 实验Ⅰ: 1.在 main 函数之外定义代表总基因链的全局字符数组 whole[N](define N100000)、和代表基因单链的全局字符数组 single[M](defineM100)、 以及代表基因单链某次与总基因链对比后相同碱基的个数的全集整 数数组 similarity[M-N+1],明显比较的次数是 M-N+1。 2.利用循环结构生成 N 个 1~4 内的随机整数,并按照 1-A、2-T、3-C、 4-G 的对应关系,将这一串字母写入名为 whole_gene_string.txt 的文 件夹,代表总基因链的生成;长度为 M 的基因单链的生成方法同理, 写入名为 single_gene_string.txt 的文件夹。 3.利用循环结构把 whole_gene_string.txt 里的碱基顺序读入字符数组 whole[N],把 single_gene_string.txt 里的碱基顺序读入字符数组。 4.定义计数变量 count=0,利用上述两字符数组各位包含的碱基的对 比开始单链与总链的对比工作: 1)利用循环结构,单链的第一位首先与总链第一位进行比较,之 后依次是单链的第二位和总链的第二位......直到单链的第 M 位与总链 的第 M 位完成比较.。比较过程中若两碱基相同则计数变量加一,完 2)利用循环结构,单链的第一位与总链的第二位进行比较,之后 依次是单链的第二位和总链的第三位......直到单链的第 M 位与总链的 第 M+1 位完成比较。比较过程中若两碱基相同则计数变量加一,完 成比较后计数变量的值赋予 similarity[1],计数变量清零; 3)利用循环结构重复上述步骤,直到单基因链的最后一位与总基因链 最后一位完成比较。 5.定义 max 的初始值为 0,利用循环结构依次比较 similarity[N-M+1] 的每一项与 max 的大小关系,当 similarity[i]的值大于 max 时,把 similarity[i]的值赋予 max。如此可找到 similarity[i]的最大值,即在步骤 4 的比较中相同次数最多的一次比较的相同次数。 6.实现步骤 5 之后 max 的值即是数组 similarity[]的最大值,利用循环 结构再次比较每一位与 max 值的大小关系,当 similarity[k]的值与 max 的值相等时 k+1 的值即是单链开始与总链上相同长度的基因片段有 最大相似度时总链上该片段的第一个碱基的位置。 7.输出最大相似度 a=max/M*100%. 从总链的第 k+1 位开始有最大相 似度 。 某次实验的实验结果: 实验ⅠⅠ: 通过分析不难发现,如果我们按顺序从 A 链抽取长度为 100 的子 链,然后去 B 链中分别比较,那么实验二便可以参照实验一的方法进 行。 具体步骤如下: 1.在 main 函数之外定义代表 A 链的全局字符数组 str_a[A](define A 10000)、和代表 B 链的全局字符数组 str_b[B](defineB100)、代表从 A 链中抽取的子链 str_temp[N] (defineN 100)以及代表某个子链某次与 总 基 因 链 对 比 后 相 同 碱 基 的 个 数 的 全 集 整 数 数 组 simi[(A-N+1)][(A-N+1)];,明显比较的次数是(M-N+1)^2。 2.利用循环结构生成 N 个 1~4 内的随机整数,并按照 1-A、2-T、3-C、 4-G 的对应关系,将这一串字母写入名为 gene_string_a.txt 的文件夹, 代表 A 链的生成;长度为 B 的 B 链的生成方法同理,写入名为 gene_string_a.txt 的文件夹。 3.利用循环结构把 gene_string_a.txt 里的碱基顺序读入字符数组 str_a[A],把 gene_string_a.tx 里的碱基顺序读入字符数组 str_b[B]。 4.利用循环结构从 A 链中提取(A-N+1)个子链:方法为分别以序号 为 1 至 N-A 的碱基作为起始点,将起始点后 N 位的字符存入数组 str_temp 中,其中每一个起始点对应一个 str_temp,共有(A-N+1) 个。 5.定义计数变量 count=0,利用上述两字符数组各位包含的碱基的对 比开始子链与 B 链的对比工作: 1)利用循环结构,按照顺序取出一个子链。 2)利用循环结构,子链的第一位首先与 B 链第一位进行比较,之 后依次是单链的第二位和总链的第二位......直到单链的第 M 位与总链 的第 M 位完成比较.。比较过程中若两碱基相同则计数变量加一,完 3)利用循环结构,子链的第一位与 B 链的第二位进行比较,之后 依次是单链的第二位和总链的第三位......直到单链的第 M 位与总链的 第 M+1 位完成比较。比较过程中若两碱基相同则计数变量加一,完 成比较后计数变量的值赋予 simi[(A-N+1)][(A-N+1)],其中二维数组前一 项代表所取子链序号,后一项代表所匹配的碱基序号。计数变量清零; 4)利用循环结构重复上述步骤,直到单基因链的最后一位与总基 因链最后一位完成比较。 6 定义 max 的初始值为 0, 利用循环结构依次比较 simi[(A-N+1)][(A-N+1)] 的每一项与 max 的大小关系,当 simi[(A-N+1)][(A-N+1)]的值大于 max 时,把 simi[(A-N+1)][(A-N+1)]的值赋予 max。如此可找到 similarity[i] 的最大值,即在步骤 5 的比较中相同次数最多的一次比较的相同次数。 7.实现步骤 6 之后 max 的值即是数组 simi[(A-N+1)][(A-N+1)]的最大值, 利用循环结构再次比较每一位与 max 值的大小关系, simi[(j)][(k)]的值 与 max 的值相等时 j+1 即是子链的起始碱基亦即 A 链匹配开始的位置。 k+1 的值即是子链开始与 B 链上相同长度的基因片段有最大相似度时 总链上该片段的第一个碱基的位置。 8.输出最大相似度 a=max/M*100%. 从 A 链的第 j+1 位从, B 链的第 k+1 位开始有最大相似度。 五.分析总结 实验Ⅱ中设立了全局的二维整数数组来记录每次比较的相似度, 然而 C 语言允许设立的二维数组不能超过 1000*1000.所以 A,B 链的 长度并不能达到一百万。 用 C 语言编写的的 BLAST 算法同样用到二维整数数组,所以同样会存在可比较 的序列长度不够的问题。了解到真正投入应用的 BLAST 算法程序是用 java 语言 编写的,或许这一问题会在不同的语言结构中有所改善。

展开阅读全文

C语言数组相似度比对,C语言实验报告:碱基相似度比较相关推荐

  1. 北京电大c语言实验作业二,大学大一c语言程序设计实验室上机题全部代码答案(实验报告).doc...

    大学大一c语言程序设计实验室上机题全部代码答案(实验报告).doc C语言实验报告实验1-1:helloworld程序:源代码:#includemain(){printf("hellowor ...

  2. 沈航C语言上机实验题答案,大学大一c语言程序设计实验室上机题全部代码答案(实验报告).doc...

    大学大一c语言程序设计实验室上机题全部代码答案(实验报告) C语言实验报告 实验1-1: hello world程序: 源代码: #include main() { printf("hell ...

  3. C语言数组测试函数,(完整word版)C语言数组与函数阶段测试题答案---(20200807070313)(8页)-原创力文档...

    } } C语言数组与函数阶段测试题答案 一.选择题( 18*2=36 分) 1. 在定义" int a[5][6]; "后,第 11个元素是 [ C ] A.a[2][5] B . ...

  4. c语言数组数据用指针查找,c语言数组与指针_指针篇_2011.ppt

    c语言数组与指针_指针篇_2011 指 针 6.2 指针的概念6.3 指针与数组6.4 字符串的指针6.5 指针数组和指向指针的指针;6.2.1 地址与指针的概念 ;指针的概念;内存地址;2.数组与地 ...

  5. c语言数组相同字符主元素,C语言数组考点归纳

    C语言数组考点归纳 下面是百分网小编为大家收集的C语言数组考点归纳,欢迎借鉴学习! 9.1 一维数组的定义.初始化和引用 1.一维数组的定义方式为: 类型说明符 数组名[常量表达式] (1)数组名的命 ...

  6. c语言数组的作用是什么,C语言数组是什么

    C语言数组是什么 C语言数组是什么呢?大家是否清楚呢?下面是小编分享的C语言数组的概念,欢迎大家参考! 例子:输出一个 4×4 的整数矩阵,代码如下: #include #include int ma ...

  7. 华理c语言设计网上作业,华理c程序实验报告(共9篇).doc

    华理c程序实验报告(共9篇) 华理c程序实验报告(共9篇) 2011华理<C语言实验报告> C程序设计课程 实验报告册 所在学院 班 级 学 号 姓 名 任(来自:www.XIelw.Co ...

  8. 工程热力学c语言 朗肯循环第二题,软件工程上机实验报告_相关文章专题_写写帮文库...

    时间:2019-05-12 14:56:17 作者:admin <数据库与软件工程>上机实验答案 实验三 SQL语言的DDL 3.CREATE TABLE aa( Bb1 VARCHAR( ...

  9. a星算法实现8数码问题c语言,A星算法求八数码问题实验报告.doc

    A星算法求八数码问题实验报告.doc 人工智能实验报告实验名称八数码问题姓名xx学号2012210 xx xx计算机学院 2014年1月14日1 实验目的 掌握A*的思想,启发式搜索,来求解在代价最小 ...

  10. c语言数组的一维编程,【C语言】转换一维数组

    #include #define MAX_SIZE 20 /* 最大数组个数 */ void TransposeArray(int *arr,int size); int main() { int s ...

最新文章

  1. STM32 基础系列教程 18 – IWDG
  2. Oracle checkpoint详解
  3. case when else 默认随机_SQL高级知识——CASE的用法
  4. 「分布式系统理论」系列专题
  5. linux常用操作符,Shell常用操作符总结
  6. 用汇编的眼光看C++ (之x86汇编)
  7. python安卓下载-python手册中文版apk下载
  8. 来自汽车行业的20个优秀的汽车推广网站
  9. Hexo+Github博客搭建教程
  10. VirtualBox上安装WindowsXP的完整教程
  11. 直播礼物特效新格式-Pag格式
  12. 首开先河 | 脑机接口让这位ALS患者可读可写
  13. Python爬虫实训案例之爬取豆瓣电影Top250并保存至excel
  14. When I’m old and dying
  15. 闲鱼,越分享才越有价值
  16. 邮箱,手机号的正则表达式
  17. 迪厅装修后地板清洁与保养
  18. Eigen实现克罗内克内积
  19. TypeError Cannot instantiate abstract class xxx with abstract method
  20. Spring框架中的单例Beans是线程安全的么

热门文章

  1. 用计算机专业术语写寄语,教师给计算机专业学生寄语
  2. 麦克劳林公式求sin(x)
  3. mysql hint 驱动_MySQL HINT:Straight_JOIN
  4. 软件测试oracle怎么学,怎么自学软件测试?
  5. PS CS6 打不开RAW格式文件
  6. [渝粤教育] 西南科技大学 计算机网络应用基础 在线考试复习资料2021版
  7. python爬虫:爬取链家深圳全部二手房的详细信息
  8. 【论文解读】(2019-EMNLP)Tackling Long-Tailed Relations and Uncommon Entities in Knowledge Graph Completi
  9. 渗透测试-业务逻辑与非常规漏洞原理与利用
  10. win10 蓝牙耳机已连接但是耳机仍没有声音,音频仍是扬声器输出问题的出现条件及解决方案