为什么我的程序会接受小数?

时间:2016-09-09 23:09:58

标签: c decimal

我正在尝试使我的程序正常工作,但在第二个提示中,当我输入小数时,程序停止工作。我不明白我做错了什么。这是今晚美国东部时间晚上11:59!请帮忙!“它适用于整数而不是小数!”

#include <stdio.h>
#include <math.h>


//main function
int main() {

    //variables
    int people, squares, blankets, leftovers;
    float newpeople;

    //prompt user
    printf("How many people are knitting blanket squares at the beginning of the week?\n");
    scanf("%d", &people);

    printf("How many new people are knitting blanket squares?\n");
    scanf("%f", &newpeople);

    //function

    squares = people * pow((1 + newpeople), 7);
    blankets = squares / 60;
    leftovers = squares % blankets;

    //output
    printf("%d blanket squares will be made this week!\n", squares);
    printf("You will be able to make %d blankets and start next week with %d squares.\n", blankets, leftovers);

    return 0;
}

作业#2 C编程简介 - COP 3223

目标     让学生练习打字,编译和运行简单程序。 2.加强对赋值语句和算术表达式的了解

简介:程序员明天会更好 Better Meorrow的程序员是一个致力于帮助慈善机构,医学协会和奖学金组织管理各种任务的组织,以便他们可以专注于让世界变得更美好!他们已经要求您和您的同学帮助他们开发一些新计划,以使他们的组织受益。

问题:针织乐趣和非营利第2部分(knit2.c) 程序员为更好的明天提供的程序之一是为那些可能没有足够温暖的人们提供针织帽子,毛衣和毯子。这些可能会被发送到国内或海外的其他地方。

每个捐赠的毯子由60个针织方块制成。这些毯子方块很简单,可以在一天内制作。 BlanketSquares计划正变得非常流行,每天制作的正方形数量呈指数增长。

在此程序中,您将使用指数增长函数跟踪一周内的正方形数量(如下所示)。

X = A(1 + B)^ T

a表示初始人口,这是在本周的第一周已经制作毯子方格的人数。 b表示增长率,这是每天编织毯子方块的新人数。 t表示我们的计划的时间间隔,即7天。

你的程序应该计算X--本周制作的方格数 - 并为用户打印该信息。

然后,您的程序应该计算可以从这些方块中制作的毯子数量。打印此信息和左侧方格的数量。

输入规格     在一周的第一天制作正方形的人数,a,其中a是正整数     每天制作正方形的新人数b,其中b是正数值。 (此值可能是小数。如果每两天有三个新人,则可以每天1.5人表示)

输出规格 使用以下格式输出结果:

本周将制作X个方块! 你可以制作Y毯子,下周用Z方格开始。

输出样本 以下是运行程序的一些示例输出。请注意,这些样本不是全面的测试。您应该根据上面给出的规范,使用与此处显示的数据不同的数据来测试您的程序。

在下面的示例运行中,为了清晰和易于阅读,用户输入以斜体显示,而程序输出以粗体显示。 (注意:实际运行程序时,根本不应出现粗体或斜体。为了清楚起见,这些仅用于本说明中。)

示例运行#1 本周初有多少人在编织毯子方块?  1 每天有多少新人在编织毛毯广场? 0.5

本周将制作17个毯子方块! 你将可以制作0条毯子并在下周开始使用17个方格。

示例运行#2 本周初有多少人在编织毯子方块? 3 每天有多少新人在编织毛毯广场? 2

本周将制作6561个毯子方块! 你将可以制作109条毯子并在下周开始使用21个方格。

交付 一个源文件 - knit2.c - 将通过WebCourses提交。

限制 虽然您可以使用其他编译器,但您的程序必须使用Code :: Blocks编译和运行。您的程序应包含标题注释,其中包含以下信息:您的姓名,课程编号,部门编号,作业标题和日期。此外,请确保在整个代码中包含注释,说明解决问题的主要步骤。

评分详情 您的课程将根据以下标准评分:

1)你的正确性

2)您的编程风格和白色空间的使用。即使您有一个计划并且您的程序运行良好,如果您的编程风格很差或者您使用的空白区域很差,您可以从您的成绩中扣除10%或15%。

3)兼容性 - 您必须提交可在标准C开发环境中编译和执行的C源文件。如果你的程序没有编译,你将从你的成绩中获得相当大的推论。

3 个答案:

答案 0 :(得分:0)

如果要将实数存储为浮点值,请使用类型为double的变量,而不是类型为int的整数。然后会像这样调用scanf

scanf("%lf", &variable);

打印相同:您尝试使用float打印%d值,使用%lf%f打印float类型。

另外,请确保使用正确的十进制分隔符,即C中的点(.),而不是,或其他任何内容。

答案 1 :(得分:0)

似乎工作,至少如果你听到评论者的笔记。

#include <stdio.h>
#include <math.h>

int main()
{
  //variables
  int people, squares, blankets, leftovers;
  float newpeople;

  //prompt user
  printf
      ("How many people are knitting blanket squares at the beginning of the week?\n");
  scanf("%d", &people);

  printf("How many new people are knitting blanket squares?\n");
  scanf("%f", &newpeople);

  // only an integer number of people is able to knit
  squares = people * (int)pow(1 + newpeople, 7);
  blankets = squares / 60;
  // checking for division by zero
  if (blankets != 0) {
    leftovers = squares % blankets;
  } else {
    // not enough squares for a single blanket
    // so all squares go to the next week
    leftovers = squares;
  }
  //output
  printf("%d blanket squares will be made this week!\n", squares);
  printf("You will be able to make %d blankets and start next week with %d squares.\n",
       blankets, leftovers);

  return 0;
}

答案 2 :(得分:0)

在此之前:

leftovers = squares % blankets;

检查零。所以你想要这样的东西:

leftovers = blankets ? squares % blankets : 0;
相关问题