2016-11-26 9 views
0

Ich habe gerade angefangen, Informationstechnologien zu studieren, und ich bin derzeit auf einer Programmieraufgabe fest.Wie drucke ich ein Kreuz auf die Konsole in C?

Ich muss einen Code in C schreiben, der ein Kreuz auf der Konsole anzeigt, wobei die Größe des Kreuzes durch eine anfängliche Eingabe bestimmt wird.

size?: 5(user input) 

xooox 

oxoxo 

ooxoo 

oxoxo 

xooox 

(ersetzen Sie das o mit Leerzeichen)

ich jetzt bin gekommen, soweit dies:

So ist die Ausgabe der Konsole sollte wie folgt aussehen

#include <stdio.h> 

int main(void) 
{ 
    int n; 

    printf("size?: "); 
    scanf("%d",&n); 

    for(int i=1;i<=n;i++) 
    { 
     for(int j=1;j<=n;j++) 
     { 
      if((i==j)) 
       printf("*"); 
      else 
       printf(" "); 
     } 
     printf("\n"); 
    } 

    return 0; 
} 

Aber das zeigt nur eine Diagonale des Kreuzes an, ich denke, dass die entgegengesetzte Diagonale durch eine andere Bedingung nach dem erstellt werden kann, wenn ich jedoch verloren bin, was diese Bedingung sein könnte.

+0

'if (i == j || i - 1 == n - j)' – BLUEPIXY

+0

Es ist idiomatischer, von '0' zu loopen, bis 'n' nicht, wie 'für (int i = 0; i pat

Antwort

2

Sie sind definitiv auf dem richtigen Weg! Gib nicht auf.

Die Art, darüber nachzudenken, ist, über die Schleifenzähler nachzudenken. Du hast die Hälfte davon herausgefunden. Wenn die Zeile und die Spalte identisch sind, müssen Sie eine * ausgeben. Also, was ist die andere Bedingung? Denken Sie darüber nach rückwärts zu zählen. Wenn die Zeile dieselbe wie die rückwärts gezählte Spalte ist, möchten wir auch eine *.

Ich möchte Ihre Hausaufgaben nicht für Sie machen, also werde ich den Code schreiben, aber hoffentlich gibt das Ihnen einen Hinweis darauf, was Sie tun müssen.

+0

Ich habe festgestellt, dass ich die Spalte irgendwie invertieren muss, aber ich kann nicht ganz begreifen, wie ich C sagen kann, es rückwärts zu zählen. Ich weiß, dass es nicht schwer ist, denke ich, ich habe gerade zu lange vor den Hausaufgaben gesessen, heh, ich werde morgen weitermachen, aber vielen Dank für deine Antwort! – Blacktoblue

+0

[Diese Geschichte] (http://www.wbilljohnson.com/journal/math/gauss.htm) könnte Ihnen helfen, in die richtige Richtung zu denken. – user1118321

0

Sollte benötigen Sie Hilfe, haben Sie auch die Spalte von der anderen Seite zu überprüfen:

#include <stdio.h> 
int n; 

int main(void) { 
    printf("size?: "); 
    scanf("%d",&n); 
    for(int i = 1; i <= n; i++) { 
     for(int j = 1; j <= n; j++) { 
      if (i == j || i == n - j + 1) printf("*"); 
      else printf(" "); 
     } 
     printf("\n"); 
    }  
    return 0; 
} 

Edit: Es Vorschläge sind i + j == n + 1 zu tun, aber ich glaube, i == n - j + 1 mehr Sinn macht, da:

  • i ist Ihre aktuelle Zeile
  • j Ihre aktuelle Spalte
  • n die Größe Ihres Platzes ist (max Zeilen/max Spalte)
  • i == n - j + 1 Mittel * bei max - current + 1 Spalte
0

if((i==j)) mit if((i==j)||(i+j)==n+1) ersetzen ziehen, dass ,:

#include <stdio.h> 

int main(void) 
{ 
    int n; 

    printf("size?: "); 
    scanf("%d",&n); 

    for(int i=1;i<=n;i++) 
    { 
    for(int j=1;j<=n;j++) 
    { 
     if((i==j)||(i+j)==n+1) 
     printf("*"); 
     else 
     printf(" "); 
    } 
    printf("\n"); 
    } 



    return 0; 
} 
0

Das erste, was der erste ist, C-Compiler mögen nicht

for (int i = 0; i < n; i++) 

Sie mögen

int i = 0; 
for (i = 0; i < n; i++) 

Aber wenn Sie einen C++ - Compiler verwenden, werden Sie wahrscheinlich dieses Problem nicht bekommen.

Jetzt; zurück zur Lösung des Problems zur Hand!

Auf der Linie:

if((i==j)) 

Mit dieser Bedingung, Sie Plotten Punkte bei (1, 1), (2, 2), (3, 3) ...

Sie wollen auch Punkte bei (1, n) plotten, (2, n - 1), (3, n - 2) ...

So haben Sie eine zweite bedingte zu dieser if-Anweisung hinzufügen müssen:

if ((i==j) || (i == (n - j) + 1)) 

Dann können Sie diese ein wenig vereinfachen, wenn Sie wollen ...

if ((i==j) || (i == n - j + 1)) 

Und los gehts! Es druckt jetzt ein Kreuz, wie Sie es in Ihrer Frage beschrieben haben.

Verwandte Themen