我可以在与反控制重复和论证有关的作业上获得一些帮助吗?

StackOverflow https://stackoverflow.com/questions/621483

  •  05-07-2019
  •  | 
  •  

好的,所以我需要让输出看起来像星号菱形,每行增加 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 不同的原因是因为我有时会遇到问题,每当我尝试写它时,我都会得到斜体......

有帮助吗?

解决方案

一些提示:

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

对您的编辑的回应:

  • 您将需要使用两个 分离 循环;一个打印空格,然后一个打印星星
  • for 循环始终由一个初始值设定项、一个检查条件和一个步长/增量来构造
  • 您不需要将值分配给 stars 或者 spaces;它们是打电话给您的人给您的号码 printline 函数(即他们已经有一个价值)

对您的第二次编辑的回应:

  • 在你的 for 循环,您可能想使用索引变量 其他 比传入的参数(例如 for(i=0; i<spaces; i++), , 在哪里 i 只是您在函数顶部声明的计数器,就像在赋值的代码中一样)在您当前的构造中,它将尝试打印 4 个空格,无论调用者在调用您的函数时指定什么。
  • 你只需要输出一次换行符, 你已经完成了所有的空格和星星(即输出换行符不属于 for 环形)
  • 您可能只需要增加计数器 1 每次输出一颗星。
  • 如果作业要求创建一个名为 printline, ,你不能调用它 print_line;那不是同一件事(也不是 PrintLine)

对您的第三次编辑的回应:

  • 不要忘记“您可能只需要增加计数器 1 每次你输出一颗星星。”
  • 不要忘记“您的函数只需要打印字符,它不会返回任何内容(有一个特定的返回类型)”(即它不应该返回 char)
  • 我认为您希望打印空格的代码看起来更像打印星星的代码
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top