컴퓨터를 공부하고자 마음먹은지 N일차

[9일차](홍정모의따배c)연산자, 표현식, 문장 본문

🖥C

[9일차](홍정모의따배c)연산자, 표현식, 문장

졸린새 2020. 9. 16. 19:16
728x90

[9일차](홍정모의따배c)연산자, 표현식, 문장

*본 강의수기는 교수님의 모든 ppt나 코드 화면을 붙인게 아닙니다. 따로 출처 표시나 과제표시

안한 모든 코드와 사진자료의 출처는 본 강의의 교수님 입니다.

정리는 다시한번 제가 보기위함과 어떤강의인지 알려드리는 것이고

제가 적은건 이해를 돕기 위한 부연설명과 제가 이해한 몇개의 중심적인 내용이 다소

생략이 되었습니다. 이 수기를 통해 공부하려 하지말고 흥미로운 내용이라면

'인프런- 홍정모의 따라하며 배우는c' 과정을 수강하시길 바랍니다.

반복 루프와의 첫 만남

#include <stdio.h>

int main()
{
    int n = 1;//초기값
    
    while (n < 101) //101미만이 될 때 까지
    {//이 블럭에 있는
        printf("%d\n", n);//이함수와
        n = n + 1; //이 연산을 반복하라
    }
    
    return 0;
}

곱연산

  • 과제 : 시드머니와 목표금액, 연이율을 입력받고 목표금액까지 몇년걸리는지 계산하는 프로그램을 만들어라

#include <stdio.h>

int main()
{
    float seedmoney, targetmoney, annual, annuallyinput\
, totalmoney;//annuallyinput은 매년저축액 , annual은 연이율

		int yearcount = 0; //연차가 지날때마다 저축이 되는 구조니까
    
    printf("Input your seedmoney");
    
    scanf("%f", &seedmoney);
    
    printf("Input your targetmoney");
    
    scanf("%f", &targetmoney);
    
    printf("Input your annually input money");
    
    scanf("%f", &annuallyinput);
    
    printf("Input annual interest");
    
    scanf("%f", &annual);
    
}

처음 입력창은 이렇게 구성했다.

방금 배운 while문을 써보자.

첫실패

#include <stdio.h>

int main()
{
    float seedmoney, targetmoney, annual, annuallyinput, totalmoney, annualinterest;//annualinterest는 연이자
    
    int yearcount = 0;
    
    
    printf("Input your seedmoney");
    
    scanf("%f", &seedmoney);
    
    printf("Input your targetmoney");
    
    scanf("%f", &targetmoney);
    
    printf("Input your annually input money");
    
    scanf("%f", &annuallyinput);
    
    printf("Input annual interest");
    
    scanf("%f", &annual);
    
    while (totalmoney > targetmoney);
    {
        yearcount = yearcount + 1;
        
        annualinterest = (seedmoney + annuallyinput) * annual / 100;
        
        totalmoney = seedmoney + annuallyinput + annualinterest;
        
        printf("%i년차\n총액%f", yearcount, totalmoney);
        
        
        
    }
    
    return 0;
}

난이도를 더낮춰보자

교수님이 예제를 주셨다

진작 이걸로 빈칸넣기 문제풀걸..

그래도 생각해볼 시간을 많이 가졌다..!

나의 풀이

#include <stdio.h>

int main()
{
    double seed_money, target_money, annual_interest;
    
    printf("Input seed money : ");
    scanf("%lf", &seed_money);
    
    printf("Input target money :");
    scanf("%lf", &target_money);
    
    printf("Input annual interest (%%) : ");
    scanf("%lf", &annual_interest);
    
    double fund = seed_money;
    int year_count = 0;
    
    while (fund < target_money)
    {
        year_count = year_count + 1;
        //연차가 지나면서 카운트가 하나씩 증가된다
        fund = fund + fund * annual_interest / 100;
        //현자산에 100분율로 계산해서 지금있는 자산에 대입한다
        printf("%d년차\n총액%lf\n", year_count, fund);
        // 현재자산과 연차를 매년마다 보여준다.
        
    }
    
    printf("총 %d년 걸림", year_count);
    
    return 0;
}

교수님 풀이

#include <stdio.h>

int main()
{
    double seed_money, target_money, annual_interest;
    
    printf("Input seed money : ");
    scanf("%lf", &seed_money);
    
    printf("Input target money :");
    scanf("%lf", &target_money);
    
    printf("Input annual interest (%%) : ");
    scanf("%lf", &annual_interest);
    
    double fund = seed_money;
    int year_count = 0;
    
    while (fund < target_money)
			{
			  year_count += 1;
        
        fund += fund * annual_interest / 100;
        printf("%d년차\n총액%lf\n", year_count, fund);

				}

		printf("총%d년걸림", year_count);

나누기 연산자

#include <stdio.h>

int main()
{
    
    printf("Integer division\n");
    printf("%d\n", 14 / 7);
    printf("%d\n", 7 / 2);
    printf("%d\n", 7 / 3);
    printf("%d\n", 7 / 4);
    printf("%d\n", 8 / 4);
    
    printf("Truncating toward zero (C99)]\n");
    printf("%d\n", -7 / 2);
    printf("%d\n", -7 / 3);//형이 맞지않아
    //정상적인 변환이 어렵다
    printf("%d\n", -7 / 4);
    printf("%d\n", -8 / 4);
    //소수점 계산은 플로팅을 써주자
    
    printf("\nfloating divisions\n");
    printf("%f\n", 9.0 / 4.0);
    printf("%f\n", 9.0 / 4);
    //대입할땐 정수로 대입했지만 자동으로 형변환해서
    //정상적으로 계산해준다.
    
    return 0;
    
}

나머지 연산자

  • 실습문제

scanf 와 printf사이 연산식을 만들어라

나의 코드

#include <stdio.h>

int main()
{
    int seconds = 0, minutes = 0, hours = 0;
    
    printf("Input seconds : ");
    scanf("%d" ,&seconds);
    
    hours = seconds / 3600;
    minutes = (seconds % 3600) / 60;
    seconds = (seconds % 3600) % 60;
    
    printf("%d hours, %d minutes, %d seconds\n", hours, minutes, seconds);
    
    printf("Good bye\n");
    
    
    
}

교수님 해설

#include <stdio.h>

int main()
{

		int seconds = 0, minutes = 0, hours = 0;

		printf("Input seconds : ");
		scanf("%d" ,&seconds);

		minutes = seconds / 60;
    seconds %= 60;
    
    hours = minutes / 60;
    minutes %= 60;

		printf("%d hours, %d minutes, %d seconds\n", hour, minutes, seconds);

		printf("Good bye\n");

}

  • 문제2

음수나 0을 입력했을때 프로그램이 꺼지게 만들고 싶다.

#include <stdio.h>

int main()
{
    int seconds = 0, minutes = 0, hours = 0;
    
    while (seconds >= 0)
    
    {
    
    printf("Input seconds : ");
    scanf("%d" ,&seconds);
    
//    hours = seconds / 3600;
//    minutes = (seconds % 3600) / 60;
//    seconds = (seconds % 3600) % 60;
    
    //교수님코드
    minutes = seconds / 60;
    seconds %= 60;
    
    hours = minutes / 60;
    minutes %= 60;
    
    printf("%d hours, %d minutes, %d seconds\n", hours, minutes, seconds);
        
    }
    
    
    printf("Good bye\n");
    
    
    
}

그런데 이렇게 했는데

-1초가 출력이되고 꺼진다

어떻게 출력이 안되게 할 수 있을까?

그것이 바로 문제

나의코드

도저히 모르겠다.

나와라 해설

#include <stdio.h>

int main()
{
    int seconds = 0, minutes = 0, hours = 0;
    
    printf("Input seconds : ");
    scanf("%d" ,&seconds);
    //앞으로 한번 더 해준다.
    while (seconds >= 0)
    
    {
    
    printf("Input seconds : ");
    scanf("%d" ,&seconds); //이걸
    
//    hours = seconds / 3600;
//    minutes = (seconds % 3600) / 60;
//    seconds = (seconds % 3600) % 60;
    
    //교수님코드
    minutes = seconds / 60;
    seconds %= 60;
    
    hours = minutes / 60;
    minutes %= 60;
    
    printf("%d hours, %d minutes, %d seconds\n", hours, minutes, seconds);
        
    }
    
    
    printf("Good bye\n");
    
    
    
}

증가연산자 감소연산자

// a++ 일 경우

b = c + a;

a += 1;

// ++가 뒤에 있다면 a += 1 연산이 계산 후 적용

// ++a 일 경우

a += 1;

b = c + a;

// ++가 앞에 있다면 a += 1 연산이 계산 전에 적용

함수의 인수와 매개변수

  • 문제

#include <stdio.h>

void draw(int n);// 프로토타입선언

int main()
{
    int i = 5;
    char c = '#';
    float f = 7.1f;
    
    draw(i);
    draw(c);
    draw(f);
    
    return 0;
    
}
void draw(int n);
{
    
    print("\n");
}

밑에 void draw 에 함수를 만들어서

숫자대로 별을 출력하는 프로그램을 만들어라

나의 풀이

진짜 한30분정도 화장실변기에 앉아서 고민했다

어떻게 저 별을 출력하지???

하다가 정말 간단하게 고민이끝났다

숫자가 더해질때마다 별을 출력하면 되자나!!

#include <stdio.h>

void draw(int n);// 프로토타입선언

int main()
{
    int i = 5;
    char c = '#';
    float f = 7.1f;
    
    draw(i);
    draw(c);
    draw(f);
    
    return 0;
    
}
void draw(int n)
{
    printf("\n");
    int x = 0;
    int i = 5;
    while(++x <= i)
    {
        printf("*");
    }
    printf("\n");
    
    
    int y = 0;
    char c = '#';
    while(++y <= c)
    {
        printf("*");
    }
    printf("\n");
    
    
    int z = 0;
    float f = 7.1f;
    while(++z <= f)
    {
        printf("*");
    }
    printf("\n");
}

그런데..

별의갯수는 만족하고 잘나왔다

이게 왜 세번이나 반복해서 나올까?

풀이를 보기전에 다시 생각했다

void draw(int n)이 ..n에 맞춰서.. n에맞춰서????

코드를 두번이나 각 변수마다 만들 필요가 없었다..!

#include <stdio.h>

void draw(int n);// 프로토타입선언

int main()
{
    int i = 5;
    char c = '#';
    float f = 7.1f;
    
    draw(i);
    draw(c);
    draw(f);
    
    return 0;
    
}
void draw(int n)
{
    printf("\n");
    int x = 0;
    while(++x <= n)
    {
        printf("*");
    }
    printf("\n");
    
}

n이 선언돼있었다 ..!

성공이다~!!!!!!

와 진짜 문제하나 풀때 쾌감이 장난이 아니다.

이제 교수님 풀이를 보도록 하자

예제생략
void draw(int n);
{

while (n-- > 0)
    //n이 만약5면 출력후-1을 반복해가는
        //구조다 그렇기때문에 마지막출력후 0이된다.
        printf("*");
    printf("\n");

}

확실히 깔끔하긴 하다.

증가연산과 감소연산의 활용이 아직조금은 헷갈린다.

Comments