1

好的,所以我需要让输出看起来像星号菱形,每行增加 2 个星号,直到中间有 9 个星号……然后行减少。功能 main 必须是:

int main (void){  
   int i;    
   i = 0;  
   while (i < 5){  
      printline (4-i, i*2+1);  
      i = i + 1;  
   }  
   i = 3;  
   while (i >= 0) {  
      printline (4-i, i*2+1);  
      i = i - 1;  
   }  
   return 0;  
}  

现在我应该定义函数 printline 以在每次调用时打印单行图形。它需要 2 个参数,空格数和应在行上打印的星号数。使用计数器控制重复打印适当数量的空格,然后再次打印适当数量的星号。

char print_line (int spaces, int stars){  
   for (int i = 4; i>=spaces; i--){  
      printf(" ");  
   }  
   for (int i = 1; i<=stars; i+=2){  
      printf("*");  
   }  
   printf("\n");  
}

呜呼!我就快完成了!输出有点正确,除了不是一行有 4 个空格和一个星,一行有 3 个空格和 3 个星,依此类推,直到没有空格和 9 个星,(然后反转)......我得到一条线有一个星,有一个空格和 2 个星的行,一个有两个空格的行,三个星,等等,最多 4 个空格,五个星(然后反转)......
printline 不同的原因是因为我写这个有问题有时,每当我尝试写它时,我都会不断地使用斜体......

4

1 回答 1

5

一些提示:

  • 你的函数只需要打印字符,它不返回任何东西(有一个特定的返回类型)
  • 空格数和要打印的星数可能是整数
  • 您可以使用打印单个空格printf(" ");
  • 您可以使用打印单个星printf("*");
  • 您可以使用打印“换行符”(转到下一行)printf("\n");
  • 如果您说您将总共int i=0; for(i=0; i<n; i++) { printf("X"); }打印该字母(此时您可能还没有学习 for 循环;如果没有,请使用下一个提示)Xn
  • 如果你说int i=0; while(i<n) { printf("X"); i++; }你也会打印这封信X的总n次数
  • a如果您使用和以外的参数名称,您会更开心b。试着想出一个与参数所代表的内容相对应的名称。

回复您的编辑:

  • 您将需要使用两个单独的循环;一个打印空格,然后一个打印星星
  • for循环总是由一个初始化器、一个检查条件和一个步长/增量构成
  • 您不需要为starsor赋值spaces;它们是调用你的函数的人给你的数字printline(即它们已经有一个值)

回复您的第二次编辑:

  • 在你的for循环中,你可能想要使用一个索引变量不是传入的参数(例如for(i=0; i<spaces; i++), wherei只是你在函数顶部声明的一个计数器,就像在赋值的代码中一样)在你当前的构造中,它无论调用者在调用您的函数时指定了什么,都会尝试打印 4 个空格。
  • 在完成所有空格和星号后,您只需要输出一次换行符(即输出换行符不属于for循环内)
  • 您可能只需要在1每次输出星号时增加计数器。
  • 如果分配说要调用一个函数printline,你不能调用它print_line;那不是一回事(也不是PrintLine

回复您的第三次编辑:

  • 不要忘记“您可能只需要在1每次输出星号时增加计数器。”
  • 不要忘记“你的函数只需要打印字符,它不返回任何东西(有一个特定的返回类型)”(即它不应该返回 a char
  • 我认为您希望打印空格的代码看起来更像打印星星的代码
于 2009-03-07T07:39:06.210 回答