2016-12-26 8 views
0
die folgenden auf der Konsole drucken

ich aus der folgenden auf der Konsole drucken möchten:Ich möchte

+++++ 
++++* 
+++** 
++*** 
+**** 
***** 

Ich bin ein neuer Lerner der Programmierung, so einige Schwierigkeiten stoßen. Kann mir bitte jemand helfen? Ich habe das versucht, ist aber falsch. Was muss ich ändern?

#include<stdio.h> 
int main(){ 
    int i, j, k; 
    for(i=0; i<5; i++){ 
     for(j=i; j<5; j++){ 
      for(k=0; k<j; k++){ 
       printf("*"); 
      } 
      printf("+"); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 
+0

Bitte [Bearbeiten] Ihre Frage und den Code dort hinzufügen, nicht in den Kommentaren. –

+3

'für (int i = 0; i <= 5; i ++) printf ("%. * S \ n ", 5," +++++ ***** "+ i);' – BLUEPIXY

+0

wie bei jedem Programm das erste Problem ist, was getan werden muss, Schritt für Schritt. Was muss also getan werden, um die erste Zeile auszugeben? Was ist anders, als die zweite Zeile auszugeben? Nun gibt es eine Reihe von Möglichkeiten, den Code tatsächlich zu schreiben.Wenn sich die Anordnung niemals ändert, dann codiere eine Tabelle, die die Werte enthält, und drucke dann die Tabelle zeilenweise aus. Wenn Sie Flexibilität wünschen, geben Sie die Gesamtzeilen als Parameter ein. und verwenden Sie Schleifen, um die Zeilen auszugeben. – user3629249

Antwort

3

Sie haben die richtige Idee: Verwenden Sie drei for Schleifen.

#include <stdio.h> 

int main() { 
    for (int i = 0; i < 6; i++) { 
     for (int k = i; k < 5; k++) { 
      printf("+"); 
     } 
     for (int j = 0; j < i; j++) { 
      printf("*"); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 

-Test

+++++ 
++++* 
+++** 
++*** 
+**** 
***** 

Online demo

+0

vielen Dank – era

+0

Oder zwei Schleifen und ein ternäres: 'printf (j Qix

1

Zuerst verallgemeinern sie und wickeln Sie es in einer Funktion. Sie möchten ein Quadrat mit einer Diagonale. Es muss eine gerade Anzahl von Zeichen sein, um richtig auszusehen. Aber + und * könnten ein beliebiges Zeichen sein, und die Größe könnte 6 oder den ganzen Weg bis zur maximalen Bildschirmbreite betragen.

so

/* print a square with a diagonal 
    N - the size of the sides of the square 
    cha - character a (eg '+') 
    chb - character b (eg '*') 
*/  
void printdiagsquare(int N, char cha, char chb); 

Das ist unser Prototyp, und das ist die halbe Miete.

Jetzt müssen wir prüfen, ob N gerade und positiv ist, dann schreiben Sie die Schleifen.

Lassen Sie uns zuerst den Test weg.

if(N < 2 || (N % 2) == 1) 
    printf(N must be even\n"); 

Nun ist die Hauptschleife für jede Zeile

for(i=0;i<N;i++) 
    { 
     //printline code here 
     printf("\n"); 
    } 

Jetzt testen. Druckt N leere Zeilen?

main(void) 
    { 
     printdiagsquare(6, '+', '*'); 
    } 

Jetzt, um die Zeilen gedruckt zu bekommen.

zum Drucken von N-1 '+' s ist einfach. Wir brauchen j als Zähler, da ich die äußere

ist
for(j=0;j<N-1;j++) 
    printf("%c", cha); 

Aber wir müssen verallgemeinern, wir 6 ,, 5, 4, 3 und so weiter, wie ich erhöht drucken müssen.

 So 
    for(j=0;j<N-i-1;j++) 
     printf("%c", cha); 

Ich werde das letzte bisschen für Sie zu tun lassen. Kein Punkt, nur blind in eine Funktion eingeben.

+0

OP-Problem ist ein 5X6 Rechteck, kein Quadrat zu drucken. Was ist der Zweck der Tests für positive und gleichmäßige Eingabe und was schlagen Sie vor, wenn die Tests fehlschlagen? –

+0

Ich habe die Punkte falsch gezählt. Die Behandlung von Fehlern in C ist immer ein Problem. Beispiel bearbeitet –

1

Sie könnten versuchen, mehr optimierten Code für m-Reihen und n-Spalten in 2 for-Schleife nur: -

#include <stdio.h> 
    int main(void) { 
     int m = 6; // Rows 
     int n = 5; // Cols 
     int i,j,k; 
     for (i = 0; i < m; i++) { 
      k = i;  
      for (j = n; j >= 0; j--) { 
       if(k>=j) 
       printf("*"); 
       else 
       printf("+"); 
      } 
      printf("\n"); 
     } 
     return 0; 
    }