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

C语言中函数参数/调用函数的问题,c,arrays,function,pointers,parameters,C,Arrays,Function,Pointers,Parameters,由于参数的类型,我在程序中实现不同的函数时遇到困难。我正在编写一个程序,从输入文件中读取三个字母序列,将这些序列存储在单独的数组中,然后比较数组并打印重叠的百分比。我在程序中使用以下功能: 从输入读取DNA序列的函数read_DNA(char sequence[]), 将其存储在数组序列[],并以int的形式返回读取的字母数 函数compare_DNA(char-seq1[],char-seq2[],char-seq3[],int-n)存储在数组seq3[]中的两个DNA序列的比较序列seq1[

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

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

  • 函数
    compare_DNA(char-seq1[],char-seq2[],char-seq3[],int-n)
    存储在数组
    seq3[]中的两个DNA序列的比较序列
    seq1[]
    seq2[]
    。假设这些DNA序列的长度为
    n
    。函数返回两个DNA序列之间重叠的百分比,作为双精度

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

  • 如果函数
    read\u DNA()
    仅返回读取的字母数,如何访问每个序列中存储的实际字母?我不确定如何调用函数
    compare\u-DNA()
    中的
    read\u-DNA()
    ,并比较每个数组的实际字母


    如有任何帮助/建议,将不胜感激

    我想这比你想象的要简单

    read_DNA
    内部,例如,如果
    i
    是一个表示字母索引的整数,您将使用
    sequence[i]
    作为参数名
    sequence

    compare_-DNA
    print_-DNA
    内部,您将使用
    seq1[i]
    seq2[i]

    如果你这样打电话给
    读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 */
    }
    
    inti;
    
    for(i=0;i
    read\u-DNA(char-sequence[])
    是一个引用调用。因此,这不会是一个问题C不支持引用调用。它传递一个数组变量,它在C中的工作方式类似于指针。我明白你的意思了……下面是我对read\u-DNA的说明:int-read\u-DNA(char-sequence[]){int i,count=0;/*从输入中读取DNA序列,将其存储在一个数组中,并返回读取为int*/input=fopen(“DNA_input.dat”,“r”);for(i=0;我仍然对如何在compare_DNAI中比较每个序列感到困惑。我们添加了一个如何进行比较的示例。谢谢,这澄清了很多。
    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;
    }