当前位置:编程学习 > C/C++ >>

C语言作业,求高手解答,或者帮忙找寻答案

输入:
一条字符串(由A、T、G、C构成)来表示DNA的一条链
输出:
 1.DNA中与之对应的另外一条链
 2.转录生成的mRNA链
 3.由mRNA控制合成的蛋白质的氨基酸序列

效果图:

我的编码,做到switch语句,发现黑框不执行,卡住了

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char s[100];
    printf("请输入DNA单链序列:\n");
    int i = 0,a = 0;
    for(i = 0; ;i++)
   {
    scanf("%c",&s[i]);
    printf("-");
    printf("%c",s[i]);
    int len = strlen(s);
    if(i == len)break;
   }
    printf("\n");
    for(a = 0;a <= i;a++)
   {
        switch (s[a])
        {
            case 'A':
                printf("-T");
                break;
            case 'G':
                printf("-C");
                break;
            case 'C':
                printf("-G");
                break;
            case 'T':
                printf("-A");
                break;
            default:
                printf("输入错误!\n");
        }

    }
    return 0;
}

答案:你是?小心别让水水或助教看见。。。(我2班的)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* DNA_strand(char* DNA5);
char* mRNA_strand(char* DNA);
char* amino_strand(char* mRNA);
void main()
{
     char DNA5[100];
     char* DNA3, * mRNA, * amino;
     printf("构成DNA的含氮碱基:\nA(腺嘌呤)\nG(鸟嘌呤)\nC(胞嘧啶)\nT(胸腺嘧啶)\n\n\n");
     printf("请输入一条DNA链:(请输入大写字母)\n");
     scanf("%s", DNA5);
     printf("\n");
     DNA3 = DNA_strand(DNA5);
     printf("另一条DNA链为:\n%s\n\n", DNA3);
     mRNA = mRNA_strand(DNA5);
     printf("对应的mRNA链为:\n%s\n\n", mRNA);
     amino = amino_strand(mRNA);
     printf("由mRNA控制合成的蛋白质的氨基酸序列为:\n%s\n\n", amino);

}
char* DNA_strand(char* DNA5)
{
     char* DNA3 = (char*)malloc(sizeof(char) * strlen(DNA5));
     char* head = DNA3;
     while (*DNA5)
     {
         switch (*DNA5)
         {
         case 'A':
             *DNA3 = 'T';
             break;
         case 'T':
             *DNA3 = 'A';
             break;
         case 'G':
             *DNA3 = 'C';
             break;
         case 'C':
             *DNA3 = 'G';
             break;
         default:
             printf("输入的DNA序列有误!\n%c不是构成DNA的含氮碱基!\n", *DNA5);
             exit(0);
         }
         ++DNA5;
         ++DNA3;
     }
     *DNA3 = '\0';
     return head;
}
char* mRNA_strand(char* DNA)
{
     char* RNA = (char*)malloc(sizeof(char) * strlen(DNA));
     char* head = RNA;
     while (*DNA)


{
         switch (*DNA)
         {
         case 'A':
             *RNA = 'U';
             break;
         case 'T':
             *RNA = 'A';
             break;
         case 'G':
             *RNA = 'C';
             break;
         case 'C':
             *RNA = 'G';
             break;
         default:
             printf("输入的DNA序列有误!\n%c不是构成DNA的含氮碱基!\n", *DNA);
             exit(0);
         }
         ++DNA;
         ++RNA;
     }
     *RNA = '\0';
     return head;
}
char* amino_strand(char* mRNA)
{
     char* amino = (char*)malloc(sizeof(char) * strlen(mRNA) / 3 + 1);
     char* head = amino;
     char* codes = NULL;
     int end = 0;/*用于判断是否有终止密码子*/
     while (*mRNA)
     {
         /* AUG(起始密码子)*/
         if (mRNA[0] == 'A' && mRNA[1] == 'U' && mRNA[2] == 'G')
         {
             codes = mRNA;
             break;
         }
         else
             ++mRNA;
     }
     if (codes == NULL)
     {
         printf("没有起始密码子!\n");
         exit(0);
     }
     for (; *codes; codes += 3, ++amino)
     {
         /* (Phe/F)苯丙氨酸 UUU UUC */



if       ((codes[0] == 'U' && codes[1] == 'U' && codes[2] == 'U')
               || (codes[0] == 'U' && codes[1] == 'U' && codes[2] == 'C'))
             *amino = 'F';      
         /* (Leu/L)亮氨酸 UUA UUG CU~ */
         else if ((codes[0] == 'U' && codes[1] == 'U' && codes[2] == 'A')
               || (codes[0] == 'U' && codes[1] == 'U' && codes[2] == 'G')
               || (codes[0] == 'C' && codes[1] == 'U'))
             *amino = 'L';
         /* (Ser/S)丝氨酸 UC~ AGU AGC */
         else if ((codes[0] == 'U' && codes[1] == 'C')
               || (codes[0] == 'A' && codes[1] == 'G' && codes[2] =='U')
               || (codes[0] == 'A' && codes[1] == 'G' && codes[2] =='C'))
             *amino = 'S';
         /* (Tyr/Y)酪氨酸 UAU UAC */
         else if ((codes

上一个:C语言编程求100—1000内的素数个数及和?
下一个:有谁能给我详细的介绍C语言吗?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,