Python 은 C 기반으로 만들어진 언어이다.
사실상 검증을 위해 만들어진 Python 이지만
접근성이 용이해 교육용으로 많이 쓰이고 있고
최근에는 AI 및 딥러닝 등의 분야에 효용성이 좋아 널리 익혀지고 있다.
파이썬 6개월 과정의 빅데이터 분석 및 머신러닝 교육 수료,
바로 이어서 충북대학교 공동훈련센터에서 진행하는
IoT기반 스마트솔루션 개발자 양성과정을 교육중에 있다.
C에 대한 기초를 잡고 추후 응용할 수 있는 분야를 배울 예정이고,
그 과정에 파이썬과 C의 다른점 등을 내가 공부하는겸 기술하고자 한다.
[ Tool ] : Microsoft Visual Studio
얘기하자면 길지만 가장 첫째로 눈에 띈건 프로그램 실행이다.
아무런 과정없이 그저~ print("어쩌구 저쩌구") 만 해도 실행됐던 파이썬인데
C에선 그 과정조차 순탄치 않았다.
전처리기를 호출하고 메인 함수를 써주고 중괄호 열어주고 프린트 써주고
그제서야 hello world가 '새로운 콘솔창'에서 출력이 된다.
"멋있다"
아무튼 서론이 길었으니 본론으로 가보자
1. if 조건문
왜 이렇게 간결하고 이쁘지?
단 세 줄이라니!
욱.. 우욱..
그런데 봐본 사람이면 알것이다.
로직에는 별반 차이가 없다.
그래서 파이썬을 배우고 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 ]
0 에서 8까지 range를 써서 두 줄에 출력이 가능하구나~
[ 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 |