C/C++ 기초 강의 요약 (섹션2)
산술연산자 컴퓨터로 하여금 산술적인 연산을 하도록 하는 기호
int a=5;
printf("a는 원래 %d였다...\n", a);
a=a+3;
printf("3을 더했더니 %d가 됐다..\n",a);
코드에서 a=a+3은 'a에 (a+3)의 값을 대입시켜'라고 해석된다. 그 결과 출력값은 5에 3이 더해진 8이 나온다.s
int a=5;
a+=3;
위의 코드와 printf문이 없는것 빼고는 같은 과정을 거치는 코드다. a라는 변수에 5의 값을 초기화하고, +=이라는 언뜻 보기에는 이상해보이는 연산자 뒤에 3이 있다. a+=3은 a=a+3과 같은 기능을 한다.
+= 외에도 -=, *=, /=, %=가 있다.
int a=5;
a++;
a--;
위의 코드에서 ++와 --는 무슨 기능을 할까? ++는 +=1과 같은 기능을 한다. --는 역시나 -=1과 같은 기능을 한다.
즉 a=a+1 과 a+=1 과 a++는 모두 같은 코드인 것이다.
int a=5;
int b;
b=++a;
printf("%d \n, a);
printf("%d\n", b);
int a=5;
int b;
b=a--;
printf("%d \n, a);
printf("%d\n", b);
전치와 후치
위 두 코드의 차이는 무엇일까?위의 코드의 출력값은 6 6 이고 그 아래 코드의 출력값은 6 5이다. ++이 1을 더해준다는 것은 앞서 말했다.
전치(++a)가 사용된 위의 코드는 a에 +1을 하고 그 값을 b에 대응시킨다. 이와 달리 후치(a++)가 사용된 그 아래의 코드는 a의 원래값인 5를 b에 대응시키고 난후 a에 +1을 한다. 그 결과 출력값이 다르게 나온것이다!
#include <stdio.h>
int main(){
int a,b;
scanf("%d%d", &a, &b);
int p = a>b;
int q = a<b;
int r = a==b;
printf("%d\n", p);
printf("%d\n", q);
printf("%d\n", r);
}
비교 연산자 < > ==
true는 숫자 1이고 false는 숫자 2이다. 위의 프로그램을 실행시켰을때 a에 5 b에 2의 값을 입력하면 출력값은 1 0 0이다.
==는 같은지 같지 않은지를 비교하는 연산자로서 같으면 1 같지 않다면 0을 반환한다.
bool은 진리값 저장용 변수로서 true 와 false를 저장하는 용도로 있는 변수이다.
#include <stdio.h>
int main(){
int a;
scanf("%d", &a);
bool p=(a>1)&&(a<=19);
bool q=(a==3) || (a==7);
bool r= !q;
printf("%d \n", p);
printf("%d \n", q);
printf("%d \n", r);
}
*논리연산자 && || ! *
&&는 '그리고', ||는 '또는', !는 'not'의 의미를 담고 있다.
위의 프로그램을 실행시켰을때 a에 7을 입력했다고 해보자.
그렇다면 a가 1보다 크고 19보다 작거나 같기 때문에 boolean형인 p에는 true를 의미하는 1이 대응될것이다.
두번째 a는 3이거나 또는 7이다 에서 참이기 때문에 q에도 true를 의미하는 1이 대응된다.
마지막 r은 q의 반대이기 때문에 not true,즉 false를 의미하는 0이 대응된다.
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
if (n%2==0){
printf("n은 짝수\n");
}
else{
printf("n은 홀수\n");
}
}
if else
if는 뜻에 걸맞게 '만약에..?'의 기능을 가진다. if(이 괄호안에 들어가는게 true값을 갖는다면){ 중괄호 안의 코드가 실행이 된다.}
만약 if문의 조건이 false 였다면 그 밑의 else문 중괄호 안의 코드가 실행이 된다.
()안에 false를 의미하는 0이 아닌 숫자가 들어가면 컴퓨터는 모두 true로 인지하고 코드를 실행한다
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
if (n>0){
printf("n은 양수\n");
}
else if(n==0){
printf("n은 0\n");
}
else {
printf("n은 음수\n");
}
}
새로운 녀석이 눈에 보인다. else if?? else if를 해석해보면 '음..그럼 이거는?'정도로 해석할 수 있다. if 조건문이 false의 값으로 인해 실행이 안되었을때 아까의 코드에서는 별도의 조건문 없이 바로 else문이 실행이 되었던것을 기억할 것이다. else if 는 그 사이에 들어가 다른 조건문으로 한 번 더 물어보는 친구다. 만약 if문에서 실행이 안되고 else if 문이 실행이 되었을때 else if문의 코드가 모두 실행이 되고 else는 마찬가지로 무시하고 지나가게 된다.
#include <stdio.h>
int main(){
int a,b,c;
scanf("%d%d%d", &a,&b,&b);
if(a>b){
if(a>c){
printf("%d",a);//최댓값은 a
}
else{
printf("%d", c);
}
}
else{//b>a
if(b>c){
printf("%d", b);
}
else{//b>a, b<c
printf("%d", c);
}
}
}
a,b,c 값을 입력받아서 최댓값을 출력하는 프로그램이다. if, else if, else문은 {}로 이루어져 있는데, 여기서 실행문이 만약 한 줄이라면 {} 중괄호를 생략해도 된다.
#include <stdio.h>
int main(){
int choice;
makeChoice:
printf("새 게임 : 1 \n");
printf("불러오기 : 2\n");
printf("설정 : 3\n");
printf("크레딧 : 4\n);
scanf("%d", &choice);
switch(choice){
case 1:
printf("새 게임\n");
break;
case 2:
printf("불러오기\n");
break;
case 1:
printf("설정\n");
break;
case 1:
printf("크레딧\n");
break;
default:
printf("잘못 입력하셨습니다 \n");
goto makeChoice;
}
}
위의 코드는 사용자로부터 1~4의 숫자 중 하나를 입력 받아서 그에 따른 값을 출력하는 코드다.
SWITCH switch를 몰랐다면 if문으로 숫자 하나하나씩 비교해서 각 if의 중괄호 안에 printf함수를 넣었을것이다. 그 불편을 없애기 위해 나온 switch다. switch 뒤의 ()괄호 안에는 따질 변수를 넣어준다. 그리고 {} 중괄호 안에는 위의 코드와 같이 case로 괄호 안에 넣어준 변수가 어떤 값인가 에 따라 실행할 코드를 넣어주고 break를 붙여준다. break는 꼭 작성해야 한다!!
default case가 들어갈 자리에 처음 보는 녀석이 들어와있다. default는 미처 예상치 못한 값이 입력되었을때, case로 따로 표현을 해놓지 않은 입력값이 들어오면 default로 예외사항을 커버한다. 위의 코드처럼 잘못 입력했다는 구문을 출력하는게 일반적이다.
goto 잘못 입력을 했는데 그냥 프로그램이 끝나버리면 너무 정이 없는 프로그램이다. 다시 한 번 선택할 기회를 주고자 있는게 goto 구문이라고 생각한다. goto 뒤에 makeChoice가 보일것이다. 이건 따로 의미가 있는것은 아니다. switch 구문이 나오기 바로 전 makeChoice;라고 떡하니 써있는 것이 보일 것이다. 그곳부터 다시 코드를 실행하게 된다. 유용한 코드라고 생각이 된당ㅎㅎ
반복문
#include <stdio.h>
int main(){
int n;
do{
printf("제발 0을 입력해주세요!!\n");
scanf("%d", &n);
}while(n!=0);
printf("드디어 0을 입력하셨군요!!!!\n");
}
while while, 말 그대로 ~하는동안이다. while뒤에 오는 ()안에 조건을 넣고 그 조건이 성립하는 동안 {}안의 코드가 실행이 된다.
do while 위의 코드에 사용된 구문이다. 기능인 while문과 비슷하지만 차이점은 do의 중괄호{} 안의 코드를 먼저 실행한 뒤 while 문 뒤의 괄호()안에 있는 조건을 따진다는 것이다. while은 조건을 먼저 따지고 중괄호 안의 코드를 실행하니 차이가 분명하다!
#include <stdio.h>
int main(){
for(int i=1; i<=10;i++){
printf("%d", i);
}
}
for for(;;~) 형태의 반복문이다. 첫번째 ~에는 변수 초기화 및 선언이 가능하다. 여기서 선언된 변수는 for문 밖에서는 사용할 수 없는 지역변수다. 두번째 ~에는 이 for 문이 실행될 횟수를 정할 수 있다. 위의 코드처럼 i<=10 또는 i<=n과 같이 횟수를 설정한다. 세번째 ~에는 위의 코드처럼 i++, 보통은 횟수를 세는 변수의 수를 더하거나 빼는 칸이다. 이 3칸중 쓸 필요가 없는 칸은 for(int i=0; ;i++){}와 같이 공백으로 남겨둘 수 있다.
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
for(int i=1;i<=n;i*=2){
printf("%d\n", i);
}
}
위의 코드는 입력받은 n보다 작은 2의 거듭제곱 수를 모두 출력한다. 그 위의 코드와 달리 for문의 ()안에 3번째 칸에 i++와 같이 1씩 더하는 것이 아닌 위의 코드처럼 i*=2 2씩 곱할 수 있다.
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
for(int i=0 ,t=1;i<=n;i++){
printf("2 ^ %d = %d\n", i, t);
t*=2;
}
int i=0,t=1;
while(i<=n){
printf("2 ^ %d = %d\n", i, t);
t*=2;
i++;
}
}
위의 코드에는 for문과 while문이 하나씩 들어가있다. 둘다 변수 i,t를 사용하며 같은 기능(2^i=t를 출력)을 갖고 있다.
while문은 필요한 변수를 밖에서 선언해야하지만 for문은 for문을 작성하며 한 번에 할 수 있어서 편리한거 같다.
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
int sum=0;
for(int i=1;i<=n;sum+=i, i++);
printf("%d\n", sum);
}
입력받은 n까지의 합을 구하는 프로그램이다. i++를 넣는 칸에 sum+=1이 들어간 것에서 알수 있듯이 저 곳에도 한 개만 들어가는 것이 아닌 원하는데로 넣을 수 있다. 저기 입력하는 순서대로 코드는 실행된다. 즉 위의 코드에서는 sum+=1 을 하고 i++가 실행이 된다. 이 점 유의하자!
#include <stdio.h>
int main(){
int k;
for(int i=1;;i++){
scanf("%d", &k);
if(k==0){ break; }
printf("%d번째 : %d\n", i, k);
}
}
break 반복문 한 개를 빠져나온다.
사용자가 값을 입력하면 'n번째 : k" 이런 식으로 다시 한 번 입력한 값을 보여주는 프로그램이다. for문 안에 if문을 넣어 사용자가 0을 입력하면 출력하기 전 break로 인해 for문을 나온다.
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
printf("*");
}
printf("\n");
}
}
중첩 for문 말 그대로 중첩하여 for문을 사용하였다.
위의 코드는 n의 값을 입력받아 nXn 크기로 *을 출력한다.
안쪽 for문에서 j<=n을 j<=i로 교체하면 i=1일때 한 번 출력되고, i=2일때 두 번 출력되고, 이걸 반복하면 n층의 *계단이 만들어진다!
종합문제
Q1.시험 점수를 사용자로부터 입력을 받는다. 그 점수가 90100이면 A 8089이면 B, 이렇게 10점 간격으로 성적을 나누고 성적을 출력하는 프로그램을 만들어보시오.
#include <stdio.h>
int main(){
int score;
checkpoint:
printf("성적을 입력하세요\n");
printf(">>>");
scanf("%d", &score);
if(score>100||score<50){
printf("그건 성적이라고 부를 수 없습니다\n");
goto checkpoint;
}
else if(score>=90){
printf("당신의 성적은 A입니다!! \n");
}
else if(score>=80){
printf("당신의 성적은 B입니다!! \n");
}
else if(score>=70){
printf("당신의 성적은 C입니다!! \n");
}
else if(score>=60){
printf("당신의 성적은 D입니다!! \n");
}
else if(score>=50){
printf("당신의 성적은 E입니다!! \n");
}
}
Q2.자연수를 사용자로부터 입력받고 그 자연수의 약수를 출력하시오. ex)12를 입력받았다면 1,2,3,4,6,12,
배고프다아ㅏ아아ㅏ아아
#include <stdio.h>
int main(){
int k;// 입력값 저장할 변수 선언
scanf("%d", &k);
for(int i=1;i<=k;i++){
if(k%i==0){
printf("%d, ", i);
}
}
}
Q3.사용자로부터 숫자를 입력받으면 1부터 그 숫자까지 출력하며 일의 자릿수가 3의 배수인 경우 *을 숫자 대신 *을 출력하시오.(일의 자리가 0인것도 3의 배수이므로 10의 배수일때도 *로 출력하도록 만들었다. 일의 자리가 3, 6, 9일때만 *를 출력하려면 p=i%10이라고 하고 p가 3 6 9 이라면 이라는 if문으로 만들면 된다.)
#include <stdio.h>
int main(){
int k;
printf("숫자 입력\n");
printf(">>>");
scanf("%d", &k);
int i=1,p;
while(i<=k){
if(i%10==0){
p=i;
}
if((i-p)%3==0){
printf("*\n");
}
else{
printf("%d\n", i);
}
i++;
}
}
Q4.사용자로부터 n을 입력받고 n층의 계단 형식으로 홀수를 출력하는 프로그램을 만들어라.
/*
n=4라면
1
1 3
1 3 5
1 3 5 7
을 출력함
*/
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
for(int i=1;i<=n;i++){
for(int k=1;k<=i;k++){
printf("%d ",2*k-1 );
}
printf("\n");
}
}
하 섹션2 드뎌 끝~
댓글
이 글 공유하기
다른 글
-
C/C++ 기초 강의 요약 (섹션7)
C/C++ 기초 강의 요약 (섹션7)
2020.03.27 -
C/C++ 기초 강의 요약 (섹션4)
C/C++ 기초 강의 요약 (섹션4)
2020.03.27 -
C/C++ 기초 강의 요약 (섹션3)
C/C++ 기초 강의 요약 (섹션3)
2020.03.27 -
C/C++ 기초 강의 요약 (섹션1)
C/C++ 기초 강의 요약 (섹션1)
2020.03.25