1

我有一个 for 循环,我在其中放置了几个 if 语句。这些条件的目的是检查一个数的可整性,如果该数能被 3 整除,则输出一个字符串。如果该数能被 5 整除,则输出另一个字符串。但是,如果该数字可以被 3 和 5 整除,则会在其位置输出一个完全不同的字符串,而不是其他字符串。

这是我的代码:

for (i = 1; i <= file_int; i++){
     if (i % 3 == 0) {
        printf("Hoppity \n");
    }
    if (i % 5 == 0) {
        printf("Hophop \n");
    }
    if (i % 5 == 0 && i % 3 == 0) {
        printf("Hop \n");
    }   
}

如您所见,最后一个条件并不完全有效。我应该使用什么类型的控制结构?别的?

非常感谢。

4

4 回答 4

3
for (i = 1; i <= file_int; i++){
    if (i % 5 == 0 && i % 3 == 0) {
        printf("Five and three\n");
    } else if (i % 3 == 0) {
        printf("Three\n");
    } else if (i % 5 == 0) {
        printf("Five\n");
    } else {
        printf("None of the conditions passed\n");
    }
}
于 2011-12-29T21:32:50.443 回答
1

我会使用else-ifs并让我们知道这样一个事实

(i % 5 == 0 && i % 3 == 0) <=> (i % 15 == 0)

for (i = 1; i <= file_int; i++){
  if (i % 15 == 0)
    printf("Hop \n");
  else if (i % 3 == 0)
    printf("Hoppity \n");
  else if (i % 5 == 0)
    printf("Hophop \n"); 
}

当然,您也可以完全不使用任何控制结构,除了for-loop:

const char* values[15] = {"Hop \n", "", "", "Hoppity \n", "", 
                          "Hophop \n", "Hoppity \n", "", "", "Hoppity \n", 
                          "Hophop \n", "", "Hoppity \n", "", ""};
for (int i = 1; i <= 100; i++) 
  printf(values[i % 15]);

对于这个例子来说,这个解决方案有点疯狂,但它展示了你如何以不同的方式做事(在编写代码时,你永远不会在一个函数中拥有超过一定数量的分支路径(过分热心的编码约定.. .))。

于 2011-12-29T21:58:34.700 回答
0

只是为了它,而不是推荐它,因为它可能更难阅读,因为它滥用了从boolto 的转换int

int msg = (i % 3 == 0) + 2*(i % 5 == 0);
switch ( msg ) {
case 3:
   cout << "Multiple of 3 and 5";
case 2: 
   cout << "Multiple of 5";
case 1:
   cout << "Multiple of 3";
}

可以进一步浓缩为:

const char* msgs[] = { "", "Multiple 3", "Multiple 5", "Multiple 3 and 5" };
cout << msgs[ (i%3==0) + 2*(i%5==0) ];

当然,这两种解决方案都与问题本身背道而驰,因为它们不是if构造,而是避免在第一种情况下使用if ,而在第二种情况下通常使用分支

于 2011-12-29T23:03:33.790 回答
0

另一种解决方案,更接近您的原始代码。尽管该else解决方案确实更高效(也更优雅)。

for (i = 1; i <= file_int; i++){
    if (i % 3 == 0 && i % 5 != 0) {
        printf("Hoppity \n");
    }
    if (i % 5 == 0 && i % 3 != 0) {
        printf("Hophop \n");
    }
    if (i % 5 == 0 && i % 3 == 0) {
        printf("Hop \n");
    }   
}
于 2011-12-29T21:40:06.870 回答