【问题标题】:how to print output of a subroutine in C? [closed]如何在C中打印子程序的输出? [关闭]
【发布时间】:2014-08-12 10:22:03
【问题描述】:

我正在为子程序使用一个非常简单的代码,但它没有打印正确的值。 请帮助我。我的代码是:

#include<stdlib.h>
#include<stdio.h>

main(){
  int i, a, b=0.0, c=0.0;
  void sum(int a , int b);
  for ( i = 0; i < 2; i++ ) {   
    sum (a, b); c = c+b;
  }
  printf("%d\n", c);
}
void sum(int a , int b){
  int i;
  for ( i = 0; i <6; i++ )  {a = i*i;b = b+a;}
}

【问题讨论】:

  • sum (a, b)NOP
  • 另外,停止使用 25 岁以上的书,该书声明 main 没有返回类型,鼓励声明函数 within 函数等。 .
  • 这里我调用了一个函数 sum (a, b),它是子程序,因此它应该可以工作。
  • 感谢您的评论,我会改进的。

标签: c subroutine


【解决方案1】:

sum(int,int) 的效果对调用者是不可见的,因为ab 是按值传递的。你需要使用指针来达到你想要的结果:

void sum(int *a , int *b){
    for (int i = 0; i <6; i++ ) {
        *a = i*i;
        *b += *a;
    }
}

更改前向声明也使用指针,并调用sum (&amp;a, &amp;b) 传递指针。

【讨论】:

    【解决方案2】:

    sum(a, b)NOP,需要传递一个指针:

    #include <stdio.h>
    
    void sum(int *a, int *b)
    {
        int i;
    
        for (i = 0; i < 6; i++) {
            *a = i * i;
            *b = *b + *a;
        }
    }
    
    int main(void)
    {
        int i, a, b = 0.0, c = 0.0;
    
        for (i = 0; i < 2; i++) {   
            sum(&a, &b);
            c = c + b;
        }
        printf("%d\n", c);
        return 0;
    }
    

    【讨论】:

      【解决方案3】:

      您正在按值调用函数。您应该通过使用指针或引用的引用来调用函数。

      【讨论】:

        【解决方案4】:

        要添加子程序,您需要使用Call by reference Method。然后只有值被正确分配给变量。但是您使用的是Call by Value Method。所以它只会将值的副本传递给子程序函数。子程序中所做的哪些更改不影响主功能。尝试以下更改

        #include<stdlib.h>
        #include<stdio.h>
        
        main(){
        int i, a, b=0, c=0; // fix 1
        void sum(int *a , int *b); // fix 2
          for ( i = 0; i < 2; i++ ) {
          sum (&a, &b); c = c+b; // fix 3
          }
          printf("%d\n", c);
        }
        void sum(int *a , int *b){ // fix 4
          int i;
          for ( i = 0; i <6; i++ )  {*a = i*i;*b = *b+*a;}
        }
        

        【讨论】:

        • 对我帮助很大,谢谢。
        【解决方案5】:
        #include<stdio.h>
        
        
        void sum(int *a , int *b);
        int main() {
          int i, a, b=0.0, c=0.0;
          for ( i = 0; i < 2; i++ )
          {
                sum (&a, &b);
                c = c+b;
          }
          printf("%d\n", c);
        }
        
        void sum(int *a , int *b){
          int i;
          for ( i = 0; i <6; i++ )
          {
                *a = i*i;
                *b = (*b) + (*a);
          }
          return;
        }
        

        输出:

        165
        

        我已对您的代码进行了必要的格式化,并将函数参数更改为指针类型。

        【讨论】:

          猜你喜欢
          • 2015-12-02
          • 2015-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-04
          • 1970-01-01
          相关资源
          最近更新 更多