ここから本文です

C言語のプログラミングについて質問です!DNAの相補鎖変換のプログラミングを作っ...

handballer0914さん

2011/8/607:16:12

C言語のプログラミングについて質問です!DNAの相補鎖変換のプログラミングを作ったのですが、ifの構成とループの仕方がわかりません・・・よろしければおしえてもらえないでしょうか?

#include<stdio.h>
main()
{
char c;
int i;
printf("文字を入力");
for(i=1;i>0;i++){
scanf("%c",&c)

補足↓の方のため補足です A→T G→Cと変換され、それを何個も入力・出力をループさせたいです

閲覧数:
945
回答数:
2

違反報告

ベストアンサーに選ばれた回答

woele202さん

2011/8/707:05:04

/*
>A→T G→Cと変換され、それを何個も入力・出力をループさせたいです
0(ゼロ)を入力したらプログラム終了します。

if文でDNA配列の純粋化(AGCT)もできますが、switch文を使いましょう。
以下、コードを追記しました。
参考にしてください。
これ以上、何か変更点があれば、以下のコードを元に手を加えてみてください。
お願いします。
*/


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

/*入力できるDNA配列の最大長*/
#define MAXLEN 100

int main(int argc,char* argv[]){

int i=0,j,temp;
int LEN;
char DNA[MAXLEN];


while(1){

/*DNA配列格納用のインデックスを初期化*/
i = 0;

/*DNA配列を入力*/
printf("Input DNA array ->");
fgets(DNA,MAXLEN,stdin);

/*0(または先頭に0)が入力されたらプログラムを終了*/
if(DNA[0] == '0') return 0;


/*DNA配列の長さを取得*/
LEN = strlen(DNA);

/*A G C T変換 塩基以外の文字の削除*/
for(j=0;DNA[j] != '\0';j++){

switch(DNA[j]){
case 'a':
DNA[i] = 't';
i++;
break;
case 't':
DNA[i] = 'a';
i++;
break;
case 'g':
DNA[i] = 'c';
i++;
break;
case 'c':
DNA[i] = 'g';
i++;
break;
case 'A':
DNA[i] = 'T';
i++;
break;
case 'T':
DNA[i] = 'A';
i++;
break;
case 'G':
DNA[i] = 'C';
i++;
break;
case 'C':
DNA[i] = 'G';
i++;
break;
default: /*塩基以外の文字はDNA配列に格納しない*/
break;
}

}

/*文字列の最後は\0で止める*/
DNA[i] = '\0';

/*相補鎖化(配列の逆転)*/
for(j=0;j<i/2;j++){
temp = DNA[j];
DNA[j] = DNA[i-j-1];
DNA[i-j-1] = temp;
}

/*相補鎖化の結果の表示*/
printf("Yahoo! %s\n",DNA);

}

return 0;
}

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

編集あり2011/8/610:33:40

あなたが「どうしたい」の説明が無いと教えようがありません。

まず、どうしたいのかをきっちりと、あやふやな点がないくらいに日本語で説明してみて下さい。「DNAの相補鎖変換」でまとめちゃわないで、「これを入力をしたらこういう動作になる」を全て。
そうすれば、そこからCに落としこむのもずいぶん楽になるはずです。

あなたがプログラムを作ることに慣れてくれば、小さい単位は"プログラム言語で考える"のもいいですけれど。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。