C언어 반복문 활용 코드 설명
C언어 뿐만이 아니라 대부분의 언어에서는 반복문의 종류가 for, while, do-while문으로 구성되어있습니다.
이중에서 단순 복복문과 중첩 반복문 나눠서 설명을 해나가려고 합니다.
1. 단순 반복문
아래의 코드는 구구단 중에서 원하는 단을 입력받은 후 그 단에 해당되는 구구단을 출력하는 코드입니다.
#include <stdio.h>
int main(void)
{
int num = 1, dan;
printf("몇 단인지 입력 : ");
scanf("%d", &dan);
while(num<10)
{
printf("%d * %d = %d \n", dan, num, dan * num);
num++;
}
return 0;
}
#include <stdio.h>
>> #의 기호는 전처리라고 하며, 메인이 시작하기 전, 현재 코드에 삽입하고자 하는 헤더파일 및 매크로 작업을 선행할때 사용됩니다. 이번 코드에서는 stdio.h(표준입출력 헤더파일)를 삽입하기위함입니다.
다른 코드분석에서도 나왔던 설명이기에 향후 코드설명할때 제외하도록 하겠습니다.
int main(void)
{
int num = 1, dan;
>> 정수값을 입력 받을 수 있는 num 변수와 dan이라는 변수를 선언합니다.
>> 이번 코드에서 num변수의 역할은 1씩 증가하는 역할이며, dan변수의 역할은 입력받은 단을 넣기 위한 방이됩니다.
printf("몇 단인지 입력 : "); //단순 출력
scanf("%d", &dan);
>> 서식문자 %d(정수를 나타내는 서식문자)로 지정된 값을 dan변수에 넣어줍니다.
while(num<10)
{
printf("%d * %d = %d \n", dan, num, dan * num);
num++;
}
return 0;
}
이제 반복문 시작입니다.
반복문의 경우, while(num < 10) 처럼 소괄호 안에 조건을 명시해 줍니다. 위족에서 num값에 1로 초기화를 해두었기에 시작 값은 1로 시작하여 10보다 작을때까지 9번을 반복하게 될 것입니다.
첫 시작하면 num값은 1이며, 10보다 작다는 조건을 만족하기때문에 블럭(중괄호)안으로 제어권이 이동합니다.
블럭안에서는 printf()함수를 만나 아래의 그림처럼 서식문자에 매칭되는 변수 나 연산이 출력됩니다.
예를들어 입력한 단이 scanf()함수에서 5단을 입력하였다면, "5*1=5"이렇게 출력이됩니다.
이제 제어권은 num++를 만나 num값이 기존 1에서 2로 증가하게되며, 9번의 반복동안 이렇게 출력이 됩니다.
2. 중첩 반복문
이번에는 반복문 안에 반복문이 들어가서 동작하는 흐름에대해 코드 분석을 해보겠습니다.
#include <stdio.h>
int main(void)
{
int num;
int cycle1 = 0;
int cycle2 = 0;
int alpha = 65;
printf("자연수 입력 : ");
scanf("%d", &num);
while(cycle1<num)
{
cycle2 = 0;
while(cycle2<num-cycle1)
{
printf("%c", alpha);
alpha++;
cycle2++;
}
printf("\n");
cycle1++;
}
return 0;
}
반복문 부분만 따로 빼내어서 설명해보도록 하겠습니다.
이 중첩 반복문은 아래의 그림처럼 알파벳은 증가하면서 반복되는 열은 행이 증가할수록 줄어드는 결과입니다.
반복문이 실행되기전에 변수들의 선언부분을 다시 확인해보겠습니다.
int cycle1 = 0;
int cycle2 = 0;
int alpha = 65;
>> 변수 cycle1은 행의 증가를 의미하고, 변수 cycle2는 열의 증가를 의미합니다.
>> 변수 alpha는 알파벳 대문자부터 출력하기위해, 아스키코드값(A)에 해당하는 65로 초기회되어있습니다.
while(cycle1<num)
{
//cycle1의 첫 시작값은 0이며, 사용자로부터 입력받은 행의수를 num변수에 넣고 행의 수 만큼 반복하기위한 구문
cycle2 = 0; //cycle2의 값을 0으로 대입하는 위치가 중요합니다.
while(cycle2<num-cycle1) //행이 증가할때마다, 열은 반대로 감소해야되기에 전체 행수에서 증가하는 행변수 cycle1만큼 빼기를 해줍니다.
{
printf("%c", alpha); //alpha변수에 대입된 값은 정수값 65이지만, %c로 출력하면서 아스크코드에 매칭된 A로 변합니다.
alpha++; //알파벳이 증가하고
cycle2++; //반복횟수(열)도 증가합니다.
}
printf("\n"); //한줄의 개행(줄바꿈)을 해주고
cycle1++; //마지막으로 행이 증가합니다.
}
사용자에게 입력받은 숫자 num이 3이라고 가정한다면
첫 줄 ABC가 출력되면 cycle1++구문으로 1이 증가하게되고 다시 while(cycle1<num)에서 조건에 맞는지 판별합니다.
두번째 반복이 시작되는 것이기에 cycle1값은 1이되고 1< num(사용자 입력값)과 비교하게됩니다.
다시 cycle2는 0값을 대입하면서 열의 시작을 명시합니다. while(cycle2<num-cycle1)에서 증가한 행의 수만큼 빼고 반복문을 진행하게됩니다. 이렇게 진행하게되면 두번재 줄은 DE가 나오게 되며, 같은 방법으로 행이 또 증가하게되면 마지막 줄은 C가 됩니다.
'→ 지식나눔 > C언어 코드 분석' 카테고리의 다른 글
C언어 헤더파일+main()함수+변수선언+printf()/scanf()와 서식문자 (0) | 2022.11.20 |
---|
댓글