编写一个程序,将用户输入的数字相乘,直到这些数字的乘积达到1000

时间:2015-10-13 03:48:38

标签: c

我试着做了大约一个小时,但我似乎无法做到这一点。怎么做?

我目前的代码是:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(){
    int j=-1;
    while(j<0){
        printf("Enter a number: \n");
        scanf("%d", &j);
    }
    int i=j;
    for(i=j; i<=100; i++){
        printf("%d \n", i);
    }
    return 0;
} 

3 个答案:

答案 0 :(得分:3)

原始规范(在添加代码之前)有点模糊,但就后续流程而言,这是无关紧要的。让我们假设他们如下:

  • 从用户那里得到两个号码。
  • 如果他们的产品大于一千,请打印并停止。
  • 否则,打印产品并返回第一个项目符号点。

(如果您完全之后进程仍然相同,您只需调整各个步骤)

将其转换为伪代码通常是开发时的第一个好步骤。这会给你类似的东西:

def program:
    set product to -1
    while product <= 1000:
        print prompt asking for numbers
        get num1 and num2 from user
        set product to num1 * num2
        print product
    print "target reached"

从那时起,它就是将伪代码转换为正式的计算机语言,这通常接近于一对一的映射操作。

良好的首次尝试将遵循:

#include <stdio.h>

int main (void) {
    int num1, num2, product = -1;
    while (product < 1000) {
        printf ("Please enter two whole numbers, separated by a space: ");
        scanf ("%d %d", &num1, &num2);
        product = num1 * num2;
        printf ("Product is %d\n", product);
    }
    puts ("Target reached");
    return 0;
}

虽然毫无疑问会出现问题,因为它没有强有力地处理无效输入。但是,在您正在运营的水平上,这将是一个良好的开端。

就您提供的代码而言(虽然我现在已经添加了代码,但可能应该在原始问题中):

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(){
    int j=-1;
    while(j<0){
        printf("Enter a number: \n");
        scanf("%d", &j);
    }
    int i=j;
    for(i=j; i<=100; i++){
        printf("%d \n", i);
    }
    return 0;
}

进行最终循环的更好方法是:

int i = 1;
while (i < 1000) {
    i = i * j;
    printf ("%n\n", i);
}

这使用乘法数字的正确终止条件是千分之一或更多,而不是你所拥有的,固定数量的乘法。

您可能还想了解用户输入一个的可能性,这将导致无限循环。

执行此操作的(相对)专业计划类似于:

#include <stdio.h>

int main (void) {
    // Get starting point, two or more.

    int start = 0;
    while (start < 2) {
        printf("Enter a number greater than one: ");
        if (scanf("%d", &start) != 1) {
            // No integer available, clear to end of input line.

            for (int ch = 0; ch != '\n'; ch = getchar());
        }
    }

    // Start with one, continue while less than a thousand.

    int curr = 1;
    while (curr < 1000) {
        // Multiply then print.

        curr *= start;
        printf ("%d\n", curr);
    }

    return 0;
}

这具有以下特征:

  • 更合适的变量名称。
  • 检测和修复大多数无效输入。
  • 评价。

该代码仅作为一个教育示例,显示如何做一个相当不错的工作。如果你按原样使用它来做课堂作业,如果你的教育工作者因抄袭而让你失败,不要感到惊讶。我非常肯定他们中的大多数人会使用网络搜索工具来检测那种东西。

答案 1 :(得分:2)

我不是100%清楚你要求的是什么所以我假设以下你想让用户继续输入数字(我假设为正整数),直到它们全部相乘为止大于或等于1000)。

此处的代码以值1开头(因为从0开始意味着它永远不会得到除0之外的任何东西)并且将正整数乘以它,而所有这些的乘积都保持在1000以下。最后它打印总数(可能超过1000)以及用户输入的值的数量。

我希望这会有所帮助。

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

int main()
{
    char input[10];
    unsigned currentTotal = 1;
    unsigned value;
    unsigned numEntered = 0;

    while( currentTotal < 1000 )
    {
        printf( "Enter a number: \n" );
        fgets( input, sizeof(input), stdin );
        value = atoi( input );
        if( value > 0 )
        {
            currentTotal *= value;
            numEntered += 1;
        }
        else
        {
            printf( "Please enter a positive integer value\n" );
        }
    }

    printf( "You entered %u numbers which when multiplied together equal %u\n", numEntered, currentTotal );

    return 0; 
}

答案 2 :(得分:2)

试试这个:

#include <stdio.h>

int main()
{
    int input,output=1;
    while(1)
    {
        scanf("%d",&input);
        if(input<=0)
            printf("Please enter a positive integer not less than 1 :\n");
        else if(input>0)
            output*=input;
        if(output>1000)
        {
            printf("\nThe result is: %d",output);
            break;
        }
    }
    return 0;
}