我这样做了,没有工作,我做错了什么?

时间:2020-10-21 17:30:29

标签: c

#include <stdio.h>
#include <gotoxy.h>
#include <math.h>
#include <stdlib.h>
/* Perteneciente a: Danny Saldaña, Bryan Avila
   Fecha: 21 de octubre de 2020

   ADP
Entrada: No hay entrada
Proceso: Calcular la catidad de trigo con la funcion sacar() que tiene 3 variables
Salida: Imprimir el valor de cont que es la cantidad de trigo en peso.
*/

这里开始出现问题

float sacar(float a, float b,float c){
 do{

    a=a+pow(b,c);
    c++;
 } while (c<64);
 }

void main(void){
int resp,ans=2,j=0;
float cont, mover;

mover=sacar(resp,ans,j);
printf("%f \n",mover);

cont=mover*0.1;
printf("La cantidad de trigo es: %f", cont);

}

我不知道我做错了什么,如果有人可以告诉我,我需要知道我做错了

2 个答案:

答案 0 :(得分:1)

该代码中有很多错误。

该功能的目的似乎是从有关国际象棋的故事中计算出小麦的数量。

随着故事的发展,当向国王赠送国际象棋时,他向发明家提供了他想要的任何奖励。发明人谦虚地要求在棋盘的第一个方块上放一粒小麦,在第二个方块上放两粒谷物,在第三个方块上放四粒谷物,依此类推。每次加倍。

sacar函数似乎正在计算小麦的总量。

第一件事是错误的,该函数应该没有输入(“ No Hay Entrada”),但是该函数签名需要三个输入变量。不仅如此:三个变量之一(变量'a')的目标是存储结果...但未初始化使用,可作为答案的偏移量。

另一个答案是第二个问题,那就是该函数从不返回答案。

第三个(或第四个)麻烦是用于存储结果的变量溢出,这意味着结果根本不准确,只是一个数量级。那可能是也可能不是预期的行为。有趣的是,由于二的幂的工作方式,最终结果仅被一抵消。获得结果的另一种方法实际上是将规则标识为几何套件,其最终结果可以直接计算。

但是,我仅在下面使用整数值提出替代答案(我省略了最终乘法乘以0.1f的目的,这对我来说尚不清楚)。

#include <stdio.h>

unsigned long sacar()
{
    unsigned long a = 1;
    unsigned long result = 1;
    for (unsigned c = 0; c < 64 ; c++){
        a = a + a;
        result = result + a;
    }
     return result;
 }

int main(void)
{
    printf("%lu \n", sacar());
}

并且,请避免在SO上发布此类问题,该站点不用于家庭作业或没有实际问题的简单调试。如果我是你,我什至会删除我的问题,因为我不希望有人在十年后看到这个问题,并在我还是一个年轻程序员的时候取笑我。

答案 1 :(得分:0)

您似乎没有从函数“ sacar”返回“ a”的值

 do{

    a=a+pow(b,c);
    c++;
 } while (c<64);
   return a;
 }


void main(void){
int resp,ans=2,j=0;
float cont, mover;

mover=sacar(resp,ans,j);
printf("%f \n",mover);

cont=mover*0.1;
printf("La cantidad de trigo es: %f", cont);

}