아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
후덕한라마카크162
후덕한라마카크16221.04.10

c언어 for 중첩문을 이용하여 다음 같이 출력하는법

*******

*****

***

*

이렇게 출력해야되는데 for 중첩문을 이용해서 어떻게 하나요..

일단 제일 궁금한게 공백과 \n을 나타내는 방법 입니다

for 중첩문 궁금합니다 ㅎㅎ

55글자 더 채워주세요.
답변의 개수7개의 답변이 있어요!
  • for(int i=7;i>0;i--){ //별이 7개부터 1개까지 한개씩 줄어드므로

    for(int j=0;j<i;j++) //i의 수만큼 반복해서 별 출력

    printf("★");

    printf("\n"); //한줄 출력후 개행

    }

    이외에도 다양한 알고리즘으로 구현 가능 합니다


  • 탈퇴한 사용자
    탈퇴한 사용자21.04.12

    프로그래밍을 하는 방법 중 한 가지는 가장 쉬운 방법으로 일단 동작하게 하고 개선을 하는 방법이 있습니다.
    전자를 최소기능제품(Minimum Viable Product, MVP)라고 이야기를 하고, 후자를 리팩토링(Refactoring)이라고 부릅니다.

    언어를 처음 배웠다면 Hello World 라는 문장을 출력을 해보았을 것입니다.

    #include <stdio.h> int main(int argc, const char * argv[]) { printf("Hello, World!\n"); return 0; }

    위의 코드는 Hello, World! 라는 문자를 콘솔에 출력을 합니다.

    위의 원하는 결과를 Hello World 프로그램을 수정해서 바꾸어보면 아래와 같습니다.

    #include <stdio.h> int main(int argc, const char * argv[]) { printf("*******\n"); printf("*****\n"); printf("***\n"); printf("*\n"); return 0; }

    이것을 원한 것이 아니라고 속으로 생각한다면, 일단 여기까지 코드를 따라서 실행을 해보세요.
    작은 진전이지만 원하는 결과가 화면에 나왔다는 것 만으로 기쁠 수도 있습니다.

    이제 원래 원했던 반복문 중 for 중첩문으로 개선을 해볼 차례입니다.
    일단 출력된 것을 분석해봅시다.

    처음에는 7개, 그다음은 5개, 3, 1 로 * 의 개수가 줄어들고 있음을 알 수 있습니다.

    #include <stdio.h> int main(int argc, const char * argv[]) { printf("*******\n"); // 7 printf("*****\n"); // 5 printf("***\n"); // 3 printf("*\n"); // 1 return 0; }

    일단은 문제를 단순하게 만들기 위해 별을 출력하는 부분을 담당하는 함수를 만들어보도록 하겠습니다.
    혹시 함수가 뭔지 모른다면 나중에 다시 합칠 것이므로 걱정안하셔도 됩니다. (일종의 과정으로 사용합니다)
    특정 갯수(howMany)를 입력받아 *을 출력하는 printStart라는 함수를 만들고, 7이라는 값을 적용해봅니다.

    #include <stdio.h> void printStars(int howMany) { for (int i = 0; i< howMany; i++) { printf("*"); } printf("\n"); } int main(int argc, const char * argv[]) { printStars(7); printf("*****\n"); // 5 printf("***\n"); // 3 printf("*\n"); // 1 return 0; }


    (참고로 printStars 라는 함수는 호출하는 main 함수보다 위에 있어야 됩니다. 아래에 있다면 컴파일 에러가 나올 수 있습니다.)

    위의 코드를 실행해보면 처음 코드와 마찬가지로 동일한 결과가 나옴을 알 수 있습니다.

    이제 나머지 5, 3, 1 부분도 printStars 으로 바꾸어봅니다.

    #include <stdio.h> void printStars(int howMany) { for (int i = 0; i< howMany; i++) { printf("*"); } printf("\n"); } int main(int argc, const char * argv[]) { printStars(7); printStars(5); printStars(3); printStars(1); return 0; }

    처음 코드보다 길어졌습니다. 하지만 이해가 쉬워졌습니다.

    다음은 main 함수의 부분을 리팩토링하도록 하겠습니다.

    혹시 고등학교 시절에 수열을 공부한 적이 있다면 이것은 '등차수열'이군이라고 생각할 수 있습니다.
    등차수열은 균이를 가지고 있는 시퀀스(수열)이기 때문입니다.

    바로 n = n - 2 라는 식으로 다음의 식을 표현할 수 있습니다.
    n의 초깃값은 7이고 종료 값은 1입니다.

    #include <stdio.h> void printStars(int howMany) { for (int i = 0; i< howMany; i++) { printf("*"); } printf("\n"); } int main(int argc, const char * argv[]) { for (int i = 7; i>= 1; ) { printStars(i); i = i - 2; } return 0; }

    main 함수를 보면 등차수열의 로직이 for 안에 들어가 있음을 알 수 있습니다.

    처음 문제에 이중 for 문을 원했으므로 이제 하나로 만들 차례입니다.
    printStars 와 main 에서 공통으로 i 라는 변수를 썼습니다. 따라서 이중 for 로 썼으면 변수가 겹쳐서 혼동이 될 수 있고 잘못 동작할 수 있습니다.

    그래서 printStars 의 변수를 i에서 j로 바꾸어줍니다.

    #include <stdio.h> void printStars(int howMany) { for (int j = 0; j< howMany; j++) { printf("*"); } printf("\n"); } int main(int argc, const char * argv[]) { for (int i = 7; i>= 1; ) { printStars(i); i = i - 2; } return 0; }

    그리고 printStars 함수를 호출하는 곳으로 옮겨주면 됩니다.

    #include <stdio.h> int main(int argc, const char * argv[]) { for (int i = 7; i>= 1; ) { for (int j = 0; j< i; j++) { printf("*"); } printf("\n"); i = i - 2; } return 0; }

    설명이 길어지긴 했습니다.
    하지만 1) 일단 만들고 2) 개선하는 과정은 단순하지만 강력한 힘을 가지고 있습니다.

    이 문제 뿐만 아니라 다른 문제들도 해결을 하는데 도움을 받을 수 있을 것이라 생각합니다.


  • for(int i=4; i > 0;i--)

    {

    for(int j=0; j< i*2 - 1; j++ )

    {

    printf("*");
    }

    printf("\n\n");
    }

    안녕하세요.

    뭐 대충 위처럼 하면 될텐데

    혹시 ... 장난으로 올리신건지.. 진심인지 모르겠지만

    이정도가 고민이라면 이런말 하기 좀 그렇습니다만

    심각하게 공부를 다시 제대로 해야하거나 다른 공부를 하시는게 좋아보입니다.


  • 역삼각형을 이중 for문으로 구현하는 것이라면 이렇게 구현하시면 될 것으로 보입니다.

    int i, j, n;

    // i j n에 대한 변수값 선언

    for ( i = n, i >= 1, --i) // 줄바꿈을 할 for문

    {

    for ( j = 1, j <= i, ++j) // 별을 찍어줄 for문

    {

    printf("*");

    }

    printf("\n");

    }


  • #include <stdio.h>

    int main(void)

    {

    int end = 7;

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

    {

    for (int k = 0; k < end; k++) printf("*");

    putchar('\n');

    end -= 2;

    }

    return 0;

    }

    putchar('\n'); = printf("\n");로 해도 됩니다.

    putchar는 보통 문자 1개만 출력할 때 사용합니다.


  • 아래는 자바 코드 인데요. 어차피 중첩 포문의 내용이 중요한 것이기 때문에 C로 간단하게 바꾸시면 될거 같네요.

    별을 찍을때 공백은 필요없습니다.

    그냥 별을 위에서 부터 7, 5, 3, 1개 씩 찍으시면 뒤에 공백이 붙는것 처럼 보입니다.

    그리고 개행문자(\n)는 C도 Java도 문자열로 출력하면 개행이 됩니다. ex) "\n"

    밑에 중첩 for문에서 i변수는 별을 찍는 행의 갯수(4줄)을 의미하고

    count 변수는 한줄에 찍어야 하는 별의 갯수를 의미하는데 첫줄에 7개, 두번째 줄에 5개... 이런식으로 줄이 바뀔때마다 별의 갯수를 2개씩 줄여주면 됩니다.

    이해가 되셨는지 모르겠네요. ^^

    int count = 7; // 줄마다 찍어야 하는 별 갯수for(int i = 0; i < 4; i++) { // 별찍는 전체 행의 갯수(4개) for(int j = 0; j < count; j++) { System.out.print("*"); // count 갯수만큼 찍기 } count -= 2; // 줄마다 찍는 별 갯수 2개씩 줄이기 System.out.print("\n"); // 개행문자 찍어서 줄을 바꿔주기}


  • #include <stdio.h> int main(void) { int $i ; int $j ; // your code goes here for ($i=5;$i>0;$i--) { for ($j=0;$j<$i;$j++) { printf ("*"); } printf ("\n"); } return 0; }