[C] for문 두번째 이야기

장세민·2022년 7월 17일
0

📝 TIL

목록 보기
10/40

for문을 열심히 써보자.

1부터 n까지 합 구하는 프로그램

  • 필요한 변수:
    제어변수 i
    더할 마지막 값: n
    더한 결과 sum
#include <stdio.h>
 
int main()
{
	int i, n, sum;
 
	printf("1부터 얼마까지 합? \n");
	scanf("%d", &n);
 
	sum = 0;
 
	for(i = 1; i <= n; i++)
	{
		sum = n + i;
	}
 
	printf("1부터 %d까지의 합: %d \n", n, sum);
 
	return 0;
}

결과는!


잘 실행된다.

이번 예제에서 중요한 부분

sum = 0;

이 문장인데,
만약 이 문장 없이 프로그램을 실행시키면?

'sum' 변수가 초기화 없이 사용되고 있다는 오류가 발생한다.

즉, 'sum' 변수를 0으로 초기화 해주지 않아서, 더미값으로 저장되어 있다는 뜻이다.

그래서 꼭! 초기화를 해야한다.

2~n까지 짝수의 곱 출력하기

  • 필요한 변수:
    제어변수 i
    곱할 마지막 값: n
    곱셈 결과: result

  • 2~n까지의 곱은 result=result*i

#include <stdio.h>
 
int main()
{
	int i, n, result;
 
	printf("2에서 얼마까지의 짝수의 곱? \n");
	scanf("%d", &n);
 
	result = 1;
 
	for(i = 2; i <= n; i = i+2)
	{
		result = result * i;
	}
 
	printf("2~%d까지의 짝수의 곱: %d \n", n, result);
 
	return 0;
}
 

위에서 배운 내용과 마찬가지로,
'result' 변수는 1로 초기화를 시켜줘야 한다.
(곱셈이니깐)

ok

수열의 합 구하기

  • 필요한 변수:
    제어변수 i
    더한 결과 sum
#include <stdio.h>
 
int main()
{
	int i, n;
	double sum;
 
	printf("1/1부터 1/n까지의 합");
	scanf("%d", &n);
 
	sum = 0;
 
	for(i = 1; i <= n; i++)
	{
		sum = sum + (1.0/i);
	}
 
	printf("1/1 + 1/2 + 1/3 + ... + 1/n = %.2lf \n", sum);
 
	return 0;
}

여기서

sum = sum + (1.0/i);

이 문장을 조심하자.

앞에서 'sum' 변수를 실수형 변수로 선언을 잘 해줘도,

sum = sum + (1/i);

이렇게 1/i로 표현 했다면, 결과 값은

이렇게 도출되는데..

우리는 기본 연산자에서
정수/정수=정수 를 배웠다.
1/2 부터는 1 아래로 값이 떨어지기 때문에 n값에 어떤 값이 들어가도 0으로 인식한다.

그래서 실수/정수 형태로 표현해줘야 결과 값도 실수값으로 도출된다.

잊지말자!

1~100 중 3 또는 5의 배수 개수 구하기

  • 필요한 변수:
    제어변수 i
    판별할 마지막 값 n
    배수 개수 count
#include <stdio.h>
 
int main()
{
	int i, n, count;
 
	printf("1부터 n까지 중 3또는 5의 배수 개수는? \n");
	scanf("%d", &n);
 
	count = 0;
 
 
	for(i = 1; i <= n; i++)
	{
		if (i % 3 == 0 || i % 5 == 0)
		count++;
 
	}
 
	printf("%d개 입니다. \n", count);
	return 0;
}
 

for문 안에 if문도 활용할 수 있구나

ok

남학생/여학생 수 구하기

  • 필요한 변수:
    제어변수 i
    남학생 boy
    여학생 girl
    응답 reply

5명만 구해보자

#include <stdio.h>
 
int main()
{
	int boy, girl, reply, i;
 
	printf("남자면 1, 여자면 2를 입력하세요. \n");
 
	boy = 0;
	girl = 0;
 
 
	for(i = 1; i <= 5; i++)
	{
	printf("%d번은 남자/여자?", i);
	scanf("%d", &reply);
 
		if (reply == 1)
			boy++;
 
		else if(reply == 2)
			girl++;
 
	}
 
	printf("\n남자 %d명, 여자 %d명 \n", boy, girl);
 
	return 0;
}
 

계속

이렇게 나오길래 뭐가 잘못된건지 싶었는데,

for(i = 1; i <= 5; i++);
 

;

또 너냐..
세미콜론 실수 이제 그만하자..

이게 맞지.

삼각형으로 n층까지 만들려면 필요한 삼각형 개수는?

1층에는 1개, 2층에는 3개, 3층에는 5개...
층 하나 올라갈수록 2개씩 늘어간다.
이런 규칙을 이용해서 가보자.

  • 필요한 변수:
    제어변수 i
    필요한 삼각형 개수 total
    층수 n
#include <stdio.h>
 
int main()
{
	int i, floar, total;
 
	printf("몇층까지 만들건데? \n");
	scanf("%d", &floar);
 
	total = 0;
 
	for (i = 1; i <= floar+2; i = i + 2)
	{
		total = total + i;
	}
 
		printf("%d층까지 필요한 삼각형 개수는 %d개 입니다.", floar, total);
 
}
 

좋다.

근데 꼭 for문을 사용하지 않고, 만들 수도 있다.

이런식으로 반복문을 어떻게 사용해야 할 지 잘 떠오르지 않을 때
이런식으로 풀어서 코드를 작성해볼 수도 있다.

모든 층에 사용된 노랑/파랑 삼각형 개수는?

  • 필요한 변수:
    제어변수 i
    층 수 floar
    노랑 삼각형 yellow
    파랑 삼각형 blue
    1층 개수 count
#include <stdio.h>
 
int main()
{
	int i, floar, yellow, blue, count;
 
	printf("n층까지 사용된 노랑/파랑 삼각형 개수는? \n");
	scanf("%d", &floar);
 
	count = 1;
	yellow = 1;
	blue = 0;
 
	for (i = 1; i <= floar; i++)
	{
		yellow = floar + i;
		blue = yellow - i;
	}
 
		printf("%d층까지 필요한 파랑 삼각형은 %d개, 노랑 삼각형은 %d개 입니다.", floar, blue, yellow);
 
}
 

노랑/파랑 삼각형 모두 올라갈수록 1개씩 늘어나지만,
1층에서는 노랑 삼각형 1개만 사용되었으니
1층 개수는 count로 미리 세주자!

for문 공부를 하면서 주의해야할 점,
실수했던 부분은 항상 조심 하자!

profile
분석하는 남자 💻

0개의 댓글