[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");
}
확실히 깔끔하긴 하다.
증가연산과 감소연산의 활용이 아직조금은 헷갈린다.