我的作业可以与反控制的重复和参数有关吗?

时间:2009-03-07 07:30:43

标签: c arguments

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

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不同的原因是因为我有时候写这个有问题而且每当我试着写它时我都会一直使用斜体...

1 个答案:

答案 0 :(得分:5)

一些提示:

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

对您的修改的回复:

  • 您需要使用两个单独的循环;一个打印空间,然后一个打印星星
  • for循环始终使用一个初始化程序,一个检查条件和一个步骤/增量构建
  • 您不需要为starsspaces分配值;它们是通过调用您的printline函数给予您的数字(即它们已经有值)

对第二次修改的回复:

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

对第三次修改的回复:

  • 请勿忘记“每次输出星标时,您可能只需要将计数器增加1。”
  • 不要忘记“你的功能只需要打印字符,它不会返回任何内容(此处有特定的返回类型)”(即它不应该返回char
  • 我认为您希望打印空格的代码看起来更像打印星星的代码