用于计算数组总和的函数

时间:2017-06-22 09:43:09

标签: c

是的,这是我的C介绍网络课程的(最后一次)作业。

该作业提供了主程序,没有解释它的任何内容,并告诉你编写一个函数来打印并对其中的数组求和。

但是,我并不真正理解主程序中发生了什么。

为方便起见翻译;

源代码:

#include <stdio.h>
#include <stlib.h>

void print_count(int *, int);

int main(int argc, char *argv[]) {
    int x, sum = 0, size = 0, array[5];
    if (argc == 6) {
        /* Program name and parameters received from command line */
        for (x = 0; x < argc - 1; x++) {
            array[x] = atoi(argv[x + 1]);
        }
        print_count(array, size);
    } else {
        printf("Error\n");
    }
    return 0;
}       

现在我完全不知道如何开始编写所请求的程序以及要调用的变量/如何编写函数。

编辑3:完成练习

void print_count(int *array, int size) {
    int i;
    int sum = 0;

    printf("Elements: ");
    for (i = 0; i <= size; i++) {
        printf("%d ", (array[i]);
        sum = sum += array[i]);
    }
    printf("\nSum = %d ", sum);

    return 0;
}

我想了解主程序中发生了什么,最好能够自己解决如何实际编写函数的问题。

3 个答案:

答案 0 :(得分:3)

此:

array[5] = atoi(argv[x+1]);

显然是错误的,它总是试图分配到超出范围的array[5]。它应该是:

array[x] = atoi(argv[x + 1]);

这会将x + 1:th参数从字符串格式转换为整数,并将其存储在array[x]中。如果您不熟悉标准函数atoi(),请阅读the manual page

所以如果你这样开始这个程序:

./myprogram 1 2 3 4 5

这有6个参数(第一个是名称本身),并且最终将包含包含数字1到5的array

然后在求和函数中,第一行应该是:

void print_count(int *array, int size)

这样您就可以为参数指定名称,这使它们可以在函数中使用。我认为,不提供名称是一个错误。

它并不需要&#34;互动&#34;比main()更多; main()调用print_count(),向其传递指向array的第一个元素和数组长度的指针,这是计算总和所需的全部内容。

答案 1 :(得分:1)

您的print_count功能存在一些问题:

  • 循环过了一步:i应该在0size-1之间变化。这个循环的标准习惯是:

       for (i = 0; i < size; i++) {
           ...
    
  • 增加sum只需完成:

    sum += array[i];
    
  • 第一个(行还有一个额外的printf

  • 您应该在输出后打印换行符。
  • 0函数返回void无效。

以下是更正后的版本:

void print_count(int *array, int size) {
    int i;
    int sum = 0;

    printf("Elements: ");
    for (i = 0; i < size; i++) {
        printf("%d ", array[i]);
        sum += array[i]);
    }
    printf("\nSum = %d\n", sum);
}

答案 2 :(得分:1)

以下提议的代码:

  1. 干净利落地编译。
  2. 解释了'main()'函数每一步的完成情况。
  3. 将错误消息正确输出到'stderr'。
  4. 实现了通知命令行参数数量错误的典型方法。
  5. 现在提出的代码带有解释性注释:

    #include <stdio.h>    // printf(), fprintf()
    #include <stdlib.h>   // atoi(), exit(), EXIT_FAILURE
    
    
    void print_count(int *, int);
    
    int main(int argc, char *argv[])
    {
        if (argc != 6)
        {
            fprintf( stderr, "USAGE: %s int1 int2 int3 int4 int5\n", argv[0] );
            exit( EXIT_FAILURE );
        }
    
        // implied else, correct number of arguments
    
        // only declare variables when they are needed
        int array[5];
    
        // place each command line parameter into 'array', 
        // except program name
        // I.E. skip the program name in argv[0]
        for( int i = 1; i < argc;  i++ )
        {
            // array[] index starts at 0, but loop counter starts at 1
            array[i-1] = atoi(argv[i]);
        } // end for( each value pointed at by argv[], except program name )
    
        // print sum of command line parameters to stdout
        int size = argc-1;  // number of command line parameters after program name
        print_count(array, size);
        return 0;
    } // end function: main