반복문 while문 내부에서 특정 조건이 되면 break를 만나게 되는데, break문은 while문을 빠져나가게 해준다.
continue는 해당 분기의 반복만을 넘어가고 다시 반복문으로 돌아가게 한다.
연습문제
#include <stdio.h>
int main()
{
for(int i=1;i<=9;i++){
if(i%2==1){
continue;
}
for(int j=1;j<=9;j++){
printf("%d * %d = %d\n",i,j,i*j);
}
}
return 0;
}
대부분의 프로그래밍 언어는 함수의 집합체로, 함수들이 서로 연동하여 유기적으로 동작한다.
연습문제
void square(int width, int heigth){
printf("사각형의 넓이 : %d",width * heigth);
}
#include <stdio.h>
void minMax(int num1, int num2){
int min;
int max;
if(num1 > num2){
min = num2;
max = num1;
} else{
min = num1;
max = num2;
}
printf("최대값 : %d 최소값 : %d",max,min);
}
int main()
{
minMax(5,4);
return 0;
}
출력
최대값 : 5 최소값 : 4
void coffeeMachine(int price){
if(price == 100) {
printf("블랙커피");
}
else if(price == 200) {
printf("밀크커피");
}
}
지역 변수란, 그 지역에서만 사용하는 변수를 의미한다. 같은 이름의 변수더라도, 다른 영역에 속해있으면 독립된 다른 변수이다. 또한, 지역변수는 스택 메모리에 저장된다.
함수 a와 함수 b에 똑같은 num이란 변수가 있다고 할때, 이 변수는 서로 다른 변수이다.
함수 바깥쪽에 선언된 함수로, 모든 지역에서 사용 가능한 변수이다.
전역변수는 프로그램이 시작하자마자 메모리 상에 올라가서 프로그램이 종료될 때 소멸된다.
또한, 전역 변수는 데이터 영역에 저장된다.
static 변수는, 지역 변수처럼 중괄호 영역에서 선언되지만, 중괄호를 벗어나도 메모리 상에 고정되어 소멸하지 않는다.
static 변수는 함수내에서 선언될 때 생성되어, 프로그램이 종료될 때, 소멸한다
연습문제
전역 변수
#include <stdio.h>
int total = 0;
void bookMarathon(int page){
total += page;
printf("최종 누적 페이지 : %d\n",total);
}
int main()
{
int page;
while(1){
printf("읽은 책의 페이지 수를 입력하시오 : ");
scanf("%d",&page);
if(page == -1){
printf("더 분발하세요\n");
break;
}
bookMarathon(page);
}
}
static 변수
#include <stdio.h>
void bookMarathon(int page){
static int total = 0;
total += page;
printf("최종 누적 페이지 : %d\n",total);
}
int main()
{
int page;
while(1){
printf("읽은 책의 페이지 수를 입력하시오 : ");
scanf("%d",&page);
if(page == -1){
printf("더 분발하세요\n");
break;
}
bookMarathon(page);
}
}
배열이란, 같은 속성을 가진 것들을 나열해 놓은 것으로, 요소가 순서대로 여러 개 모여 있다. 반드시 같은 속성을 가져야 한다.
배열을 이용하면 지나치게 많은 변수들을 하나하나 선언할 필요가 없어진다.
배열은 배열 자체는 상수이기 때문에, 대입 연산자를 통해 값을 넘겨받을 수 없고, 각각 개별의 요소끼리 복사를해야한다.
연습문제
#include <stdio.h>
int main()
{
int arr1[5] = {1,2,3,4,5};
int arr2[5];
for(int i=0;i<5;i++){
arr2[4-i]=arr1[i];
}
for(int i=0;i<5;i++){
printf("%d\n", arr2[i]);
}
}
문자열 또한, 배열인데, 문자열의 개수보다 1더 큰 공간을 가진다 그 이유는 마지막에 null이 들어가는 공간이 필요하기 때문이다.
※ null 문자가 들어가는 이유?
문자열의 크기가 100이고, 문자수가 9개면 91개의 공간이 비어있게 된다. 이 91개의 쓰래기 값들을 효율적으로 관리하기 위해 문자의 마지막에 null을 추가하여, 공간을 효율적으로 사용하게 해준다.
포인터란? 포인터 변수의 약자로, 메모리의 주소값을 저장하는 변수다. 보통 주소값을 저장한다는 표현을 반대로 해당 메모리를 가리킨다고도 한다.
포인터 변수 선언 시 일반 변수명 앞에 * 기호를 붙여, 주소값만 저장할 수 있다.
& 기호를 통해 변수의 주소값을 얻어 낼 수 있다.
배열의 이름은, 배열의 첫번째 요소의 주소값을 가진다. 즉 arr이란 배열이 있을 때, arr은 배열을 가리키는 포인터이며, arr과 arr[0]의 값은 일치한다.
※ 배열의 이름은 주소값을 가지는 포인터이지만, 상수이므로 주소값을 변경할 수 없다.
기본적인 함수의 인자 전달 형태는 복사이며 두가지로 나뉜다.