2016-12-26 122 views
0

我想打印出以下到我要打印出以下控制檯控制檯

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

我是節目的一個新的學習,所以遇到一些困難。任何人都可以幫助我嗎?我試過這個,但是不正確。我需要改變什麼?

#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

請[編輯]你的問題,並添加代碼在那裏,不在評論中。 –

+3

'for(int i = 0; i <= 5; i ++)printf(「%。* s \ n」,5,「+++++ *****」+ i);' – BLUEPIXY

+0

程序的第一個問題是'需要做什麼',一步一步來。所以需要做什麼來輸出第一行然後輸出第二行有什麼不同呢現在,有很多方法可以實際編寫代碼。如果排列不會改變,則編碼一個包含這些值的表格,然後逐行打印表格。如果您想要靈活性,那麼請將總行作爲參數傳入。並使用循環來輸出行。 – user3629249

回答

3

您有正確的想法:使用三個for循環。

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

測試

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

Online demo

+0

非常感謝你 – era

+0

或者兩個循環和一個三元:'printf(j Qix

1

首先,概括它,並在功能包裹。你想要一個有對角線的正方形。它必須是偶數個字符才能看起來正確。但是+和*可以是任何字符,並且大小可以是6或者一直到屏幕最大寬度。

所以

/* 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); 

這就是我們的原型,這就是成功的一半。

現在我們需要檢查N是否爲正數,然後寫入循環。

讓我們先試一下。

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

現在主循環的每一行

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

立即進行測試。它是否打印N空行?

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

現在打印行。

打印N-1'+'很容易。我們需要J作爲計數器,因爲我是外

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

但是,我們需要推廣,我們需要打印6日5,4,3等爲我增加。

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

我會留下最後一點點爲你​​做。沒有意義只是盲目地輸入一個函數。

+0

OP的問題是打印一個5X6的矩形,而不是一個正方形。這些測試的目的是什麼?如果測試失敗,你有什麼建議? –

+0

我錯了點。如何處理C中的錯誤始終是一個問題。編輯示例 –

1

你可以嘗試更優化的代碼m行n列2只環: -

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