2. 새싹교실 정보 ¶
- C와 C++
- 난이도: 중 하
- 목적: C언어를 다양한 프로그래밍 실습을 통해 재미있게 배운다.
- 강의 시간: 화 목 금 오후 6시 또는 6시 30분부터 약 1시간 30분
3. feedback ¶
- 새싹교실이 ZeroPage에서 시행되는만큼 4F(ThreeFs + Future Action Plan)에 맞게 feedback을 작성합니다.
- Facts, Feelings, Findings, Future Action Plan. 즉, 사실, 느낀 점, 깨달은 점, 앞으로의 계획.
- 예를 들어 지난주에 돈가스를 먹은 것에 대해 후기를 쓴다면 : "지난주에 강남에 가서 하나에 5만원하는 돈가스를 먹었다.(사실) 기대를 잔뜩 했는데 별로 맛이 없었다.(느낌) 강남은 땅값이 비싸서 값만 보고 엄청 맛있을거라 기대하면 안된다는 것을 알았다.(깨달은점) 다음에는 미리 인터넷에서 평을 찾아보고 별점이 높은 돈가스집을 찾아서 가봐야겠다.(앞으로의 계획)"
- 설마 이것보다 더 짧게 쓰진 않겠죠? 믿을게요
- 설마 이것보다 더 짧게 쓰진 않겠죠? 믿을게요
- Facts, Feelings, Findings, Future Action Plan. 즉, 사실, 느낀 점, 깨달은 점, 앞으로의 계획.
- feedback은 최대한 성의있게 써주세요.
- 반드시 ZeroWiki에 작성해주세요. 하위 페이지를 만드는 것도 허용합니다.
- 여러분들이 배운 내용을 정리해주세요. 학습효과가 더 커집니다.
- 반드시 ZeroWiki에 작성해주세요. 하위 페이지를 만드는 것도 허용합니다.
- 참고로 ZeroWiki는 MoniWiki Engine을 사용하며 Google Chrome이나 Mozila Firefox, Safari보다는 Internet Explorer에서 가장 잘 돌아가는 것 같습니다.
4.1.1. 주요 수업 내용 ¶
- 변수의 선언 방법: Datatype name or Datatype name,name,name,...
- Data type: 변수가 표현할 수 있는 데이터의 범위를 나타낸다. 변수의 메모리상의 공간의 크기를 나타낸다.
- sizeof(parameter): 매개변수가 가지고 있는 메모리상의 바이트 단위의 정수를 반환한다.
- sizeof(int) = 4, sizeof(char) = 1, sizeof(short) = 2 etc.
- sizeof(int) = 4, sizeof(char) = 1, sizeof(short) = 2 etc.
- overflow: 변수가 표현할 수 있는 범위를 넘어선 데이터를 대입할때 나타나는 현상으로, 데이터의 손실이 일어난다. 프로그래밍할 때 오버플로우를 조심해야 한다!
- Global variable의 특징
- 프로그램 어디서나 참조 가능하다.
- 프로그램이 끝날 때 메모리상에서 지워진다.
- Local variable의 특징
- 변수가 포함되어 있는 지역(블럭 { })에서만 참조 가능하다.
- 블럭이 끝나면 메모리상에서 지워진다.
- Static variable의 특징
- 선언된 이후로부터 전역변수처럼 사용 가능하다.
- 선언된 이후 프로그램이 끝날 때 메모리상에서 지워진다.
- 나중에 함수 배울때 다시 배웁니다.
- 변수를 참조할 때 지역변수를 전역변수보다 우선으로 참조한다.
- 전역변수를 왠만해선 사용하지 마라! 값을 원하지 않을 때 임의로 변경할 수 있다.
4.1.2. 과제 ¶
- #define pi 3.141592를 이용하여 구의 겉넓이, 부피를 계산하고 출력하는 프로그램을 만드시오.(코드를 여기에 올려주세요)
- swap(int num1, int num2)함수를 구현하시오. 함수 호출을 배우지 않았기 때문에, 그리고 포인터를 아직 배우지 않았기 때문에 기본적인 코드를 제공합니다.
void swap(int num1,int num2); int main(void){ int num1, num2; printf("정수 2개를 입력하시오: "); scanf("%d %d",&num1,&num2); printf("num1: %d, num2: %d\n",num1, num2); swap(num1,num2); } void swap(int num1,int num2){ // 이곳에 코드 넣기 printf("after swap\nnum1: %d, num2: %d\n",num1, num2); }
강재곤 후기 : 변수에 대해 배웠다. 첫날이라 많은 내용을 배운게 아니라 부담은 없었다. 오버플로우가 일어나면 자료의손실이 일어나므로 조심해야 한다는 것을 알았다. 다음시간부턴 직접 실습을 해보고 싶다
4.2.1. 주요 수업 내용 ¶
- 조건문 if
if(조건식){ 처리내용 }
- 조건식이 만족해야 블록 진입
- 조건식엔 논리식이 들어간다 (일반적으로 참 = 0이 아닌 숫자, 거짓 = 0)
- 조건식엔 논리식이 들어간다 (일반적으로 참 = 0이 아닌 숫자, 거짓 = 0)
- 논리식이란?
- true/false로 판별이 가능한 식
- 논리연산자(&&,||,== 등)를 쓴다.
- 예제1) 정수를 입력받고 숫자가 짝수인지 홀수인지 판별하는 프로그램
#include <stdio.h> int main(void){ int num; scanf_s("%d",&num); if(num%2==0) printf("짝수"); else printf("홀수"); return 0; }
- 다중 조건식
- 조건식을 여러개 쓸 수 있다.
- 논리연산자로 연결한다. ex) if(x==2&&y==3)
- parenthesis(괄호)를 이용하여 우선순위를 부여할 수 있다. ex) if((x==2&&y==3)||z==4)
- 예제2) 윤년 계산하기
#include <stdio.h> int main(void){ int year; scanf_s("%d",&year); if((year%4==0&&year%100!=0)||year%400==0) printf("윤년입니다"); else printf("아닙니다"); return 0; }
- 조건문 if 속에 또다른 if문을 넣을 수 있다. (dangling else)
if(){ 처리내용 if(){ 처리내용 } }
- 반복문
- while: 조건식을 만족하는 경우 무한 반복으로 처리
- for: 조건식을 만족할때 까지만 반복 처리
- do while: 3일차에 다시 설명.
- while
- 무한반복의 성질이 있기 때문에 영원히 빠져나오지 못하는 프로그램을 만들 수 있다.
- 임의로 무한반복의 상태를 벗어나게 할 수 있다. -> break,return
- continue
- continue 아래에 있는 명령어들을 처리하지 않고 반복문의 처음으로 다시 돌아간다.(물론 조건식을 다시 확인)
- 예제3) a부터 z까지 출력하는 프로그램 만들기
#include <stdio.h> int main(void){ char letter = 'a'; while(letter<='z'){ printf("%c",letter); letter++; } return 0; }
- 예제4) -1값을 입력할 때 까지 정수를 입력 받고 평균을 구하는 프로그램
#include <stdio.h> int main(void){ int number; int sum = 0; int count = 0; scanf_s("%d",&number); while(number!=-1){ sum += number; count++; scanf_s("%d",&number); } if(sum==0&&count==0) printf("0"); else printf("%d",sum/count); return 0; }
- 예제5) -1값을 입력할 때 까지 정수를 입력 받고 짝수인 정수들만 평균 구하기
#include <stdio.h> int main(void){ int number; int sum = 0; int count = 0; scanf_s("%d",&number); while(number!=-1){ if(number%2==0){ sum += number; count++; } else scanf_s("%d",&number); } if(sum==0&&count==0) printf("0"); else printf("%d",sum/count); return 0; }
4.3.1. 주요 수업 내용 ¶
- for(초기식;조건식;증감식)
- 초기식, 조건식, 증감식이 꼭 필요한 건 아니다!
- for를 while처럼 사용할 수도 있다.
- for를 사용하는 경우: 반복처리할 횟수가 명확할 때
- while을 사용하는 경우: 반복처리할 횟수가 명확하지 않을 때(특정 조건이 되어야 반복을 그만두게 할 때)
- 예제1) 숫자를 입력 받고 그 숫자만큼 #자 출력하기
#include <stdio.h> int main(void){ int num,i; scanf("%d",&num); for(i=0;i<num;i++) printf("#"); return 0; }
- 예제2) 다음을 출력하시오.
#1 * #2 ** #3 *** #4 ****
#include <stdio.h> int main(void){ int i,j; for(i=0;i<4;i++){ printf("#%d ",i+1); for(j=0;j<i;j++) printf("*"); printf("\n"); } }
- 예제3) 별 출력하기 <과제>
(1)* (2)**** ** *** *** ** **** * (3)**** (4) * *** ** ** *** * **** (5) * (6)***** *** *** ***** * ******* (7) * (8)***** *** *** ***** * *** *** * ***** (9) * * (10) ***** ** ** ** ** ***** * * ** ** ** ** * * ***** (11) 1 1 2 2 3 3 4 4 5 6 6 7 7 8 8 9 9
- 예제4) 숫자를 하나 입력 받고 그것을 2진수로 출력하시오.
#include <stdio.h> int main(void){ int num,tmp,count=0; int i,j; scanf("%d",&num); tmp=num; while(tmp>=1){ tmp/=2; count++; } for(i=0;i<count-1;i++){ tmp=num; if(i==0){ for(j=0;j<count-2;j++) tmp/=2; printf("%d%d",tmp/2,tmp%2); continue; } for(j=0;j<count-2-i;j++) tmp/=2; printf("%d",tmp%2); } return 0; }강재곤 : for 구문을 어떻게 사용해야하는지 알았고 직접 실습을 해봤다. 자신감이 생기는거같다
4.4.1. 주요 수업 내용 ¶
- switch문의 사용 방법: case by case로 분류
- if문으로도 switch를 똑같이 구현할 수 있다.
- switch 문에서 break를 주지 않는 경우, 각 case를 전부 처리할 수도 있다.(if문과 다른 점)
- getch(): 입력 버퍼 stdin에 값을 넣는다. 얘는 이 처리만 하고 명령이 끝난다!
- putch(): 입력 버퍼에 있는 값을 화면에 출력한다. 얘도 마찬가지로 이 처리만 하고 끝난다.
#include <stdio.h> #include <conio.h> int main(void){ char ch; ch=getch(); switch(ch){ case 'a': printf("누른 키는 a 입니다."); break; case 'b': printf("누른 키는 b 입니다."); break; default: printf("누른 키는 "); putch(); printf("입니다."); } return 0; }
- 함수는? 수학에서의 함수와 동일한 개념. 매개변수를 넘겨주면 결과값이 나온다!
- 매개변수: func(int a,int b)에서 a와 b의 역할
- 결과값: 함수의 자료형, 즉 반환형
- 함수의 반환형은 변수의 자료형과 같이 쓰면 된다.
- void형은 반환하는 값이 없는 함수다.
- int main()함수에서 return 0를 하는 이유: 메인 함수는 0을 반환하면 프로그램이 끝났다는 것을 알린다.
- void main()은 메인 함수가 아니다!
- 함수의 선언: 컴파일러에게 '이런 이런 함수를 쓸것이다'라고 알리는 것.
- 함수의 정의: 컴파일러에게 '이런 이런 함수는 이런 이런 일을 한다'라고 알리는 것.
- 함수의 호출: 함수에게 매개변수 등을 넘겨주어 결과값을 기다리는 것.
- printf("%d",add(1,3));에서 add(1,3)의 자리엔 4의 값이 들어간다.
- 예제2) 숫자 2개를 입력 받아 평균을 구하는 프로그램 만들기.
#include <stdio.h> int mean(int a,int b); int main(void){ int num1,num2; scanf("%d",&num1); scanf("%d",&num2); printf("%d",mean(num1,num2)); return 0; } int mean(int a,int b){ int count=2//여기서 count 변수까지 동원하는 데에는 이유가 있습니다. 나중에 배열 배울 때 다시 알려드립니다. return (a+b)/count; }