C vs Python 조건문, 반복문 | dasfef

2023.02.22


Python 은 C 기반으로 만들어진 언어이다. 사실상 검증을 위해 만들어진 Python 이지만 접근성이 용이해 교육용으로 많이 쓰이고 있고 최근에는 AI 및 딥러닝 등의 분야에 효용성이 좋아 널리 익혀지고 있다.


파이썬 6개월 과정의 빅데이터 분석 및 머신러닝 교육 수료, 바로 이어서 충북대학교 공동훈련센터에서 진행하는 IoT기반 스마트솔루션 개발자 양성과정을 교육중에 있다.


C에 대한 기초를 잡고 추후 응용할 수 있는 분야를 배울 예정이고, 그 과정에 파이썬과 C의 다른점 등을 내가 공부하는겸 기술하고자 한다.


[ Tool ] : Microsoft Visual Studio


얘기하자면 길지만 가장 첫째로 눈에 띈건 프로그램 실행이다. 아무런 과정없이 그저~ print(“어쩌구 저쩌구”) 만 해도 실행됐던 파이썬인데 C에선 그 과정조차 순탄치 않았다.


전처리기를 호출하고 메인 함수를 써주고 중괄호 열어주고 프린트 써주고 그제서야 hello world가 ‘새로운 콘솔창’에서 출력이 된다.


“멋있다”


아무튼 서론이 길었으니 본론으로 가보자


① if 조건문


python 조건문 예시

왜 이렇게 간결하고 이쁘지? 단 세 줄이라니!



C 조건문 예시

욱.. 우욱.. 그런데 봐본 사람이면 알것이다. 로직에는 별반 차이가 없다.


그래서 파이썬을 배우고 C를 배우나 C를 배우고 파이썬을 배우나 둘 중 하나에 익숙하신 분이라면 로직 자체가 어렵지 않아 접근하기 좋다.


조건문에서의 차이는 눈에 띄지 않는다. C 에서는 switch 문이 있어 케이스별로 정리한다면 오히려 파이썬의 if 조건문의 반복적인 노가다 날코딩보다 훨씬 편하다고 생각한다.

// C 에서의 switch 문 예시

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int menu;

	printf("1.파일 열기\n");
	printf("2.파일 편집\n");
	printf("3.파일 저장\n");
	printf("선택 : ");

	scanf("%d", &menu);

	switch (menu) {
	case 1:
		printf("파일 열기\n"); break;

	case 2:
		printf("파일 편집\n");
		break;

	case 3 :
		printf("파일 저장\n");
		break;

	default :
		printf("잘못된 선택입니다");
		break;
	}
}


② 반복문
반복문도 마찬가지이다. 파이썬에도 있는 for, while 등의 구문으로 시작하는 것은 물론이요, 작성하는것도 비슷하다. 거의 동일하다고 보는데, 글자가 많아지니 조금 복잡해 보이는것 뿐.


Python 반복문 예시

[ Python ] 0 에서 8까지 range를 써서 두 줄에 출력이 가능하구나~



C 반복문 예시

[ C ] #include 로 입출력 전처리기를 호출하고 main 함수의 타입과 그 안에 i 를 먼저 int 타입 선언해준 후 for 문 안에 i의 각 조건들을 써주는구나! i 는 0이고, i 가 9와 작거나 같을때까지, i 를 1씩 늘려 나가는구나! 프린트문을 써서 %d 로 10진수 포맷을 만들어 주고, \n 으로 줄바꿈까지 해준 후, %d 포맷에 i 를 넣어주는구나! 그래야 한줄씩 0부터 9까지 출력이 가능하구나!


말은 편파적으로 했지만 사실상 로직으로는 파이썬이나 C나 똑같다. 다만 C 에서는 do while 이라는 구문이 한가지 더 있는데 추후에 실습 예제들로 다룰수 있으면 다루도록 하겠다.


이번에는 내가 C를 통해 반복문을 배우면서 풀어봤던 실습예제 중 헷갈리거나 시간이 오래 걸렸던 로직, 응용법 등을 복습해보자.


입력한 수만큼 별표(*)
- 문제 : 0~9까지 입력한 숫자만큼의 별 모양 출력 / ex) 2247을 입력하면 각 줄에 별을 2개, 2개, 4개, 7개 출력한다.


반복문 실습 예제 중 가장 시간을 많이 들였고, 아직은 문자에 대한 스플릿 개념이나 리스트 등의 개념을 배우지 않은 상태로 위와 같은 문제를 시도해보았다.


5914 라는 숫자를 입력하면 앞에서부터 각 1개 인덱스에 있는 값들을 알아내고 해당하는 수 만큼 별표(*)를 출력하면 된다.


1) 자릿수 활용
1 ~ 1000 이상 까지 10씩 곱해가며 입력된 수와 나눈 몫을 구한다. 반복문을 활용하면 1의 자리부터 1000 이상의 자리까지 각 자리에 해당하는 수를 구할 수 있고 그 수를 활용하여 별표(*)를 출력하면 해결할 수 있다.


2) 문자열 배열 활용
문자열 배열을 선언하고, 한 자리마다의 문자열의 값을 받는다. 해당 값으로 * 별표(*)를 해주면 숫자만큼의 별표 출력이 가능하다.


3) %1d 포맷 활용
찾다찾다 문자열 활용하는 방식은 배우지 않아 활용하고자 하는 마음이 적었고, 포맷으로 한 자리씩 출력하는 방식을 찾았다.


해당 방법으로 풀이를 하였으며 방법은 아래와 같다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int thousand, hundered, ten, one, user, i;
	printf("숫자대로 별 출력 : ");

	while (1) {
		scanf("%1d", &user);
		if (user == 0)
			break;

		for (i = 1; i < user; i++) {
			printf("*");
		}
		printf("\n");
	}
	
}

이전 페이지로 이동