【问题标题】:Trouble with function parameters/calling functions in CC中函数参数/调用函数的问题
【发布时间】:2014-03-02 10:31:11
【问题描述】:

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

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

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

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

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

任何帮助/建议将不胜感激。

【问题讨论】:

  • read_DNA(char sequence[]) 是一个引用调用。因此,这不会是一个问题
  • C 不支持引用调用。它传递一个数组变量,它在 C 中的工作方式类似于指针。

标签: c arrays function pointers parameters


【解决方案1】:

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

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,如果字母匹配,则包含匹配的字母,如果不匹配,则为 ?

【讨论】:

  • 我明白你在说什么......这是我对 read_DNA 的内容: int read_DNA (char sequence[]) { int i, count=0; /*从输入中读取 DNA 序列,将其存储在一个数组中,并以 int 形式返回读取的字母数 */ input=fopen("dna_input.dat", "r"); for(i=0; i
  • 我仍然对如何比较 compare_DNA 中的每个序列感到困惑
  • 我添加了一个示例来说明如何做到这一点。
  • 谢谢你,澄清了很多。
猜你喜欢
  • 2011-06-15
  • 1970-01-01
  • 2021-08-03
  • 2020-05-07
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多