Posso obter alguma ajuda com meu dever de casa que têm a ver com a repetição e os argumentos contra-controlado?

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

  •  05-07-2019
  •  | 
  •  

Pergunta

Ok, então eu preciso ter a aparência de saída como um diamante de asteriscos, com cada linha crescente por 2 asteriscos até o meio tem 9 asteriscos ... e depois as linhas diminuir. função principal tem de ser:

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;  
}  

Agora eu devo definir a função PrintLine para imprimir uma única linha da figura cada vez que ele é chamado. Leva 2 argumentos, o número de espaços eo número de asteriscos que devem ser impressos na linha. Use a repetição contador controlado para imprimir o número apropriado de espaços e novamente para imprimir o número apropriado de asteriscos.

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");  
}

Woohoo! Estou quase pronto! As saídas meio certo, só que em vez de uma linha com 4 espaços com uma estrela, uma linha com 3 espaços com 3 estrelas, e assim por diante até sem espaços e 9 estrelas, (e seguida, inverte) ... eu recebo uma linha com uma estrela, uma linha com um espaço e 2 estrelas, uma linha com dois espaços de três estrelas, etc, até 4 espaços cinco estrelas (e seguida, inverte) ...
A razão PrintLine é diferente é porque eu tenho problemas de escrita com isso às vezes e eu continuei recebendo itálico sempre que eu tentei escrever isso ...

Foi útil?

Solução

Algumas dicas:

  • A sua necessidade função só imprimir caracteres, ele não retorna nada (há um tipo de retorno específico para isso)
  • O número de espaços e o número de estrelas para impressão são provavelmente inteiros
  • Você pode imprimir um único espaço usando printf(" ");
  • Você pode imprimir uma única estrela usando printf("*");
  • Você pode imprimir uma "nova linha" (que vai para a próxima linha) usando printf("\n");
  • Se você disser int i=0; for(i=0; i<n; i++) { printf("X"); } você vai imprimir a letra X um total de vezes n (você não pode ter aprendido para loops neste momento, se não, use a próxima dica)
  • Se você disser int i=0; while(i<n) { printf("X"); i++; } você também vai imprimir a letra X um total de vezes n
  • Você será muito mais feliz se você usar diferentes a e b nomes de parâmetro. Tente pensar em um nome que corresponde com o que o parâmetro representa .

A resposta à sua edição:

  • Você vai querer usar dois separados voltas; um que imprime os espaços, e depois um que imprime as estrelas
  • laços for são sempre construídos com um inicializador, uma condição de verificação, e um passo / incremento
  • Você não deve precisar de valores atribuir a stars ou spaces; são números que lhe foram dadas por quem chama sua função printline (ou seja, eles já têm um valor)

A resposta à sua segunda edição:

  • Em seus loops for, você provavelmente vai querer usar uma variável de índice outros do que o parâmetro sendo passado (por exemplo for(i=0; i<spaces; i++), onde i é apenas um contador você declarar no topo da sua função, como no código da atribuição) em sua construção atual, ele irá tentar imprimir 4 espaços, não importa o que o chamador especificado quando eles chamaram sua função.
  • Você só precisa de saída da nova linha uma vez, após você é feito com todos os espaços e as estrelas (ou seja outputing a nova linha não pertence dentro de um loop for)
  • Você provavelmente só precisa incrementar seu contador por 1 cada vez que você saída de uma estrela.
  • Se a atribuição diz para fazer uma função chamada printline, você não pode chamá-lo print_line; que não é a mesma coisa (nem é PrintLine)

A resposta à sua terceira edição:

  • Não se esqueça "Você provavelmente só precisa incrementar seu contador por 1 cada vez que você saída de uma estrela".
  • Não se esqueça "Sua necessidade função só imprimir caracteres, ele não retorna nada (há um tipo de retorno específico para isso)" (ou seja, ele não deve voltar a char)
  • Eu acho que você deseja que o código que imprime espaços para se parecer mais com o código que imprime estrelas
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top