본문 바로가기

C

C vs Python 조건문, 반복문

Python 은 C 기반으로 만들어진 언어이다.

사실상 검증을 위해 만들어진 Python 이지만

접근성이 용이해 교육용으로 많이 쓰이고 있고

최근에는 AI 및 딥러닝 등의 분야에 효용성이 좋아 널리 익혀지고 있다.

 

파이썬 6개월 과정의 빅데이터 분석 및 머신러닝 교육 수료,

바로 이어서 충북대학교 공동훈련센터에서 진행하는

IoT기반 스마트솔루션 개발자 양성과정을 교육중에 있다.

 

C에 대한 기초를 잡고 추후 응용할 수 있는 분야를 배울 예정이고,

그 과정에 파이썬과 C의 다른점 등을 내가 공부하는겸 기술하고자 한다.

 

[ Tool ] : Microsoft Visual Studio

 

얘기하자면 길지만 가장 첫째로 눈에 띈건 프로그램 실행이다.

아무런 과정없이 그저~ print("어쩌구 저쩌구") 만 해도 실행됐던 파이썬인데

C에선 그 과정조차 순탄치 않았다.

 

전처리기를 호출하고 메인 함수를 써주고 중괄호 열어주고 프린트 써주고

그제서야 hello world가 '새로운 콘솔창'에서 출력이 된다.

 

"멋있다"

 

 

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

 

 

  1. 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;
	}
}

 

 

 

  2. 반복문  

반복문도 마찬가지이다.

파이썬에도 있는 for, while 등의 구문으로 시작하는 것은 물론이요,

작성하는것도 비슷하다.

거의 동일하다고 보는데, 글자가 많아지니 조금 복잡해 보이는것 뿐.

 

Python 반복문 예시

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

 

C 반복문 예시

 

[ C ]
#include <stdio.h> 로 입출력 전처리기를 호출하고
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");
	}
	
}

'C' 카테고리의 다른 글

C 배열과 포인터 그리고 함수 적용  (1) 2023.02.27
C vs Python 함수와 배열  (0) 2023.02.23
C 입출력 ASCII 코드 그리고 비트 연산자  (1) 2023.02.20