C中的初级函数

时间:2017-02-14 20:05:48

标签: c function clang

我的程序计算用户提供的两个数字的和,差,商和乘积。在我的代码中,我使用 main 函数中的print语句向用户提供此信息,但是,我试图找出一种方法来使用我可以简单调用的函数,以便将所有过程结果打印给用户。我是新手,所以非常感谢帮助。非常感谢。

//declare functions
int firstuserinput(void);
int seconduserinput(void);
int calcSum(int, int);
int calcProduct(int, int);
int calcDifference(int, int);
int calcQuotient(int, int);

#include <stdio.h>

int main()
{
    int sum, product, difference, quotient, num1, num2;
    num1=firstuserinput();
    num2=seconduserinput();

    sum = calcSum(num1, num2);
    product = calcProduct(num1, num2); 
    difference = calcDifference(num1, num2);
    quotient = calcQuotient(num1, num2);

    printf("\nThe sum of the two numbers: %d\n", sum );
    printf("The product of the two numbers: %d\n", product);
    printf("The difference of the two numbers: %d\n", difference);
    printf("The quotient of the two numbers: %d", quotient);    

}
//Input Functions
int firstuserinput()
{
    int num1; 
    printf("Please enter a number: ");
    scanf("%d", &num1);
    return num1;   
}

int seconduserinput()
{
    int num2;
    printf("Please enter another number: ");
    scanf("%d", &num2);
    return num2; 
}
//Process functions
int calcSum(int x, int y)
{
    return x+y;


}

int calcProduct(int x, int y)
{
    return x*y;


}

int calcDifference(int x, int y)
{
    return x-y;


}

int calcQuotient(int x, int y)
{
    return x/y; 


} 

4 个答案:

答案 0 :(得分:2)

创建一个获取结果并打印出来的函数:

<form>
    <a href=# id="link">Some Value</a>
    <input type="hidden" name="link" value="Some Value"/>
</form>

主要:

void printResults(int sum, int product, int difference, int quotient) {
    printf("\nThe sum of the two numbers: %d\n", sum );
    printf("The product of the two numbers: %d\n", product);
    printf("The difference of the two numbers: %d\n", difference);
    printf("The quotient of the two numbers: %d", quotient);
}

答案 1 :(得分:1)

您可以将此功能扩展到其他运营商:

void printResult(char operator, int result) {
char *op;
switch(operator)
{
case '+':
op="Sum";
break;
case '-':
op="difference";
break;
case '*':
op="multiplication";
break;
case '/':
op="division";
break;
}
printf("The %s of the two numbers: %d",op, result);
}

答案 2 :(得分:0)

我认为你能为自己做的最好的事情就是学习伪代码。如同,请不要先写任何实际的应用程序代码。相反,坐下来写下程序的行为。您当前计划的一个示例是:

  
      
  • 接受输入以获取第一个号码
  •   
  • 接受输入以获取第二个号码
  •   
  • 计算总和
  •   
  • 计算产品
  •   
  • 计算差异
  •   
  • 计算
  •   
  • 打印结果
  •   

现在,您要做的是隔离动词。因为函数是按照定义由代码执行的动作,而普通英语中的动词是一个动作,用简单的英语写下你希望程序做的事情并挑出动词是确定函数候选者的好方法。在这种情况下,我们有Accept Input,Calculate和Print。接下来,您希望尽可能地概括它们,隔离在不同版本的操作之间发生变化的部分,并将这些部分更改为变量,同时牢记您使用的语言的局限性。

例如,C(和大多数现代语言)只能返回单个值。创建一次完成所有操作的Calculate函数远非不可能,但由于C不会从函数中返回多个值,因此您必须定义一个包含四个值的结构整数或传递指向整数而不是值的指针,以便您可以更改实际数字而不仅仅是它们的副本。我将在这里详细介绍功能版本。函数定义如下所示:Calculate(int lvalue, int rvalue, int *sum, int *product, int *difference, int *quotient)。要理解这一点,您需要知道在调用函数时,传入的参数默认情况下是按值传递。这意味着您将数据的副本发送到要运行的功能。当您使用*符号将指针传递给数据时,您会将函数 location 发送到内存中,允许您(除其他外)直接修改值而不是使用数据副本。这意味着您可以通过在函数中执行*sum = lvalue + rvalue之类的操作,为内存中的该位置指定值。由于指针的巨大力量和众多细微差别,这是一个更高级的选择,但你应该认真考虑研究。你真正想学的越多,你就会发现越多。编程最令人兴奋的是学习永远不会停止。你可以根据自己的心愿深入潜水。

那就是说,让我们看一下其余的 - 而且更简单的 - 动词。接受输入 - 特别是接受数字输入 - 可以通过两种方式完成。使用指针,您可以创建一个返回void并接受int*而不仅仅是int的函数。在该函数中,您将读取用户输入(并希望检查错误并确保它确实是一个数字)并一次性将其分配给int*。如果你能掌握指针,那么无论是在课堂上还是在课堂上,你都会让生活更轻松。确保指针指向某个值的事情会浮现在脑海中。函数定义看起来像void AcceptInput(int *value),前两行看起来更像是这样:

AcceptInput(&num1);
AcceptInput(&num2);

AcceptInput函数的更简单版本可能看起来更像你现在拥有的。阅读输入,检查以确保它是有效数字,然后返回结果。因为您只返回单个值,所以应该选择更简单的代码,除非您有充分的理由选择其他值。几乎在每种情况下,我都会亲自选择这个选项。您的函数定义如下所示:int AcceptInput();并且您的第一行代码会稍微改变:

num1 = AcceptInput();
num2 = AcceptInput();

顺便说一句,我也会花点时间指出其他问题。我个人会避免为变量使用无意义的名称。究竟是什么num1?那是什么意思?立即踢这个练习。通过查看它应该做什么或做什么,总是将变量命名为显而易见的东西。拥有一个无意义的变量名称的整个程序是一个很好的方法,使调试比它必须更加困难,并挫败那些必须在继承代码后维护代码的人。这是一个风格的建议,请注意,但是在我的大学生活和职业生涯中,这些都会让我们回过头来看待旧代码,而不是那么痛苦。

最后一个动词是Print。我们印刷什么?结果。我可以将不同的各种类型的结果(商,差等)分开,但我们仍然会在同一个地方结束:他们都打印了一种结果,我们已经拥有了将它们简化为&#34;打印结果&#34;最后无论如何。那么现在怎么办?好吧,让我们定义一下这个功能。它不会回报任何东西。它需要知道它正在打印的结果。所以定义看起来像void PrintResults(int sum, int product, int difference, int quotient);。注意这次没有任何*;我们只需要价值观。我们没有改变任何东西,所以传递值的副本而不是内存位置是绰绰有余的。

这个答案真的很长,其中一些可能有些混乱(我刚刚醒来)但我真诚地希望我的回答可以教你一些事情并鼓励你提出更多问题,深入研究,并更多地研究C. C是大多数现代语言的祖先;对它有充分的了解(以及之后的C ++)将为您提供快速获取大多数其他语言所需的构建块。快乐的编码!

答案 3 :(得分:0)

#include <stdio.h>
#define PI 3.14

int main()
{
    int  a,b,c,d;
    printf("The first integer is:");
    scanf("%d",&a);
    printf("The second integer is:");
    scanf("%d",&b);
    c=add(a,b);
    d=sub(a,b);
    printf("The sum of a and b is %d and the difference is %d",c,d);
}
    int add (int a,int b)

    {

       return (a+b);
    }
    int sub (int a,int b)

    {

       return(a-b);
    }