1

嗨,我是学习编写 c 的初学者,我想知道您将如何编写一个代码,提示您提供一个正整数并在您输入 0 并且 0 之前的前面的数字至少是 2 个正整数后结束。然后程序确定最大的正整数输入和最小的整数输入。

#include <stdio.h>

int main(void)
{
    int integer=0, largest_int, smallest_int;

    while (integer) {
        printf("Please enter a positive integer: \n");
        scanf("%d", &integer);
        if (integer = 0) {
            while (integer<=0) {
                printf("Please enter a positive integer: \n");
                scanf("%d", &integer);
                    if (integer>0) {
                        printf("Please enter a positive integer: \n");
                        scanf("%d", &integer);

                        if (integer>0) {
                            printf("the largest integer is.....and the smallest integer is......");printf("Please enter a positive integer: \n");
                            break;
                        }
                        else {
                            printf("Please enter a positive integer: \n");
                            scanf("%d", &integer);
                        }
                }
            }
        }
    }

    return 0;
}

起初我尝试使用 do/while 循环,但它根本不起作用。

当循环中有 if ese 语句时,我也对编译器如何读取循环感到困惑。

这就是我的想法:我想过让“输入正整数”重复询问,直到你输入两个正数。然后我会让程序检查下一个输入是否等于零,如果不等于;然后它会再次继续循环。如果用户确实输入了至少两个正整数,然后输入了一个零,则循环中断,我打印出最大的 int 和最小的 int。还让我感到困惑的是,您如何能够过滤所有用户的输入并确定这些值,因为我可以继续输入整数 100000000000000000000 次,并且在所有这些时间之外我怎么知道?

4

4 回答 4

1

由于这似乎是家庭作业,因此您需要思考一些要点。

当您在它之前初始化为零时,您while (integer)永远不会被执行。integer所以你真正拥有的是while(0),并且循环内没有任何内容被执行。您可以用 a 替换它,do { ... } while(condition)但我宁愿保留当前循环的类型并在循环之前添加额外的输入读数(原因是初始化变量以找到最大值和最小值 - 见下文)。

添加一个变量,比如NPos计算有多少最后一个条目是正整数。将其初始化为零。每次输入一个数字,如果是正数,则增加 的值NPos。否则将其设置为零(这可能很棘手,好像条目为零也可能意味着停止执行而不是 reset NPos)。当输入的数字为 0 时,检查NPos是否至少为 2,如果是,则停止。

为了找到极值,创建两个变量 (maxmin) 并将它们初始化为第一个用户输入。然后,在每个有效输入处,即不是输入意味着执行结束,检查该值是否大于max或小于min。如果是这样,请用输入替换maxmin

这些是算法的主要部分。实施取决于您。

最后一点:我不喜欢命名 value integer,但这可能只是我自己。

于 2012-10-12T15:55:42.003 回答
0

这不是解决方案,而是代码中的一些编码错误:

您的代码将首先无法正常工作,如下所示

 int integer=0, largest_int, smallest_int;

            while (integer) {
                    ........
                            }

这里整数是 0,你在 while 中给出这个,它会在第一次检查时出现。

于 2012-10-12T15:55:58.187 回答
0

例子

#include <limits.h>
#include <stdio.h>

int main() {
  int integer, largest_int = INT_MIN, smallest_int = INT_MAX;
  int count_positive = 0;

  for ( ; ; ) {
    printf("Please enter a positive integer: \n");
    scanf("%d", &integer); //XXX add error handling
    if (integer == 0 && count_positive > 1) 
      break;
    else if (integer > 0) {
      count_positive = count_positive > 1 ? 2 : count_positive + 1;
      if (largest_int < integer)
        largest_int = integer;
      if (smallest_int > integer)
        smallest_int = integer;
    }
  }
  printf("%d %d\n", smallest_int, largest_int);
  return 0;
}

如果“至少 2 个正整数”要求意味着它们应该是连续的,那么当您遇到小于或等于零的整数时,将 count_positive 重置为零。添加到循环中:

else if (integer <= 0) 
  count_positive = 0;
于 2012-10-12T15:56:08.453 回答
0
#include <stdio.h>
#include <limits.h>

int main(void)
{
    int integer, largest_int=INT_MIN, smallest_int=INT_MAX;

    do
    {
        printf("Enter a positive integer: ");
        scanf("%d", &integer);
        if (integer < 0)
        continue;
        else if (integer == 0)
        break;
        else
        {
            if (integer > largest_int)
            largest_int = integer;
            if (integer < smallest_int)
            smallest_int = integer;
        }
    } while(1);

    printf("Largest integer is %d\nSmallest integer is %d", largest_int, smallest_int);
}
于 2012-10-12T15:56:25.667 回答