C中的函数参数/调用函数问题

时间:2014-03-02 10:31:11

标签: c arrays function pointers parameters

由于参数类型的原因,我在程序中实现不同的功能有困难。我正在编写一个程序,从输入文件中读取三个字母序列,将这些序列存储在单独的数组中,然后比较数组并打印重叠百分比。我在我的程序中使用以下函数:

  1. 从输入中读取DNA序列的函数read_DNA(char sequence[]), 将其存储在数组sequence[]中,并返回读取的字母数,为int

  2. 存储在数组compare_DNA(char seq1[], char seq2[], char seq3[], int n)中的函数seq3[]存储在seq1 []seq2[]中的两个DNA序列的比较序列。假设这些DNA序列的长度为n。该函数以double的形式返回两个DNA序列之间重叠的百分比。

  3. 功能print_DNA(char seq1[], char seq2[], char seq3[], int n) 打印输出存储在seq1[]seq2[]中的DNA序列,以及它们的序列 根据上面解释的规则,存储在seq3[]中的比较序列。长度 假设所有这些序列都是n。该函数不返回值。

  4. 如果函数read_DNA()仅返回读取的字母数,如何访问每个序列中存储的实际字母?我不确定如何在我的函数read_DNA()中调用compare_DNA()并比较每个数组的实际字母。

    非常感谢任何帮助/建议。

1 个答案:

答案 0 :(得分:0)

我怀疑这比你想象的要简单。

read_DNA内,例如,如果i是表示字母索引的整数,则使用sequence[i]作为参数名称为sequence

compare_DNAprint_DNA内,您可以使用seq1[i]seq2[i]等。

如果你这样叫read_DNA

/* needs to be big enough for the sequence to be read in */
char my_sequence[1234]; 

int len;
len = read_DNA (my_sequence);

然后您可以通过my_sequence[i]引用它,例如:

int i;
for (i=0 ; i<len; i++)
{
    char c = my_sequence[i];
    /* do something with c */
}

例如,以下是编写比较函数(未经测试)的方法:

double
compare_DNA(char seq1[], char seq2[], char seq3[], int n)
{
    int i;
    int match = 0;
    for (i = 0; i < n; i++)
    {
        if (seq1[i] == seq2[i])
        {
            /* record the matching letter in seq3 */
            seq3[i] = seq1[i];
            match++;
        }
        else
        {
            /* record a '?' in seq3 */
            seq3[i] = '?';
        }
    }
    return (double)match * 100.0 / (double)n;
}

注意不知道任何比较DNA的内容,如果字母匹配,我会让seq3包含匹配的字母,如果不匹配,我会使?