#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);
}
我不知道我做错了什么,如果有人可以告诉我,我需要知道我做错了
答案 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);
}