프로그래밍 기초(C언어) 3_28일 과제
- 첫 번째 빈칸에는 scanf 함수로 입력받은 데이터를 저장할 정수형 변수인 score_kr과 score_math를 선언해준다.
*주의 할 점은 scanf함수를 사용하기 위해 맨 윗줄에 #define _CRT_SECURE _NO _WARNINGS를 넣어준다. 또한 scanf 함수로 입력을 받을 때는 변수명 앞에 **앰퍼센트(&)**를 붙여줘야 한다. - 두 번째 빈칸에는 scanf 함수를 통해 입력받은 데이터를 출력하기 위해 각각 변수명을 적어준다. 그리고 출력 가독성을 높이기 위해 문자열 끝에 ‘\n’을 넣어준다.
출력결과:
아래와 같은 결과물이 나오게 코딩하기
💡 <결과>
두 숫자를 입력하시오 >> 10.0 3.0
10 / 3 = 3.333
- 실수형(float)으로 변수 두 개를 선언한다.
- scanf함수로 선언한 두 변수를 입력받는다.
- 문제에서 두 변수의 소숫점이 버려지게 출력되어야 한다고 적혀있기 때문에 출력서식에 ‘.0’을 붙이고 계산된 결과는 소숫점 3번째 자리까지 출력되게 .3을 붙인다.
출력결과:
- 다음 수식을 연산하시오.
- 1 + 3 * 5 + 10 / 2
풀이: 사칙연산은 곱셈과 나눗셈이 더하기와 빼기보다 더 먼저 계산되어야하기 때문에,
3*5부터 계산되어 15, 그 다음은 10 / 2가 계산되어 5, 따라서 1 + 15 + 5가 되어 정답은 21이다.
20 >> 1 + 1 ^ 3 계산
풀이:
연산자 우선순위에 따라, 1+1이 우선 계산되어 2라는 값이 나오고,
두 번째는 비트 연산자를 사용한 20 >> 2이 우선 계산된다.
계산을 해보면 20의 2진수는 0001 0100이고 오른 쪽으로 2비트 옮기면 0000 0101, 즉 십진수로 5가 된다.
마지막으로는 5 ^ 3이 계산된다.
5의 2진수는 0101, 3의 2진수는0011
0과 1이 서로 다른 값이 나올 때만 1로 계산이 되는 배타적 논리합에 따라 2진수 계산은 0110이 되어 십진수로 6이라는 값이 최종적으로 나오게 된다.
- 다음 수식의 결과 값과 결과 후 x값은 무엇인가?
- x = 1일 때 x++ + ++x + x++ =?
풀이:
우선 첫 번째 출력문에서는 x를 1 증가 시켰어도 후위 연산자이기 때문에 1로 출력된다. 하지만 실제 변수 x에 저장되어 있는 값은 2가 된다.
두 번째 출력문에서는 전위 연산자로 x를 1 더했기 때문에 출력문에도 3이 나오고 실제 x의 값도 3이 된다.
마지막 출력문에서는 첫 번째와 마찬가지로 후위 연산자로 증가시켰기 때문에 출력문은 3이 나오지만 최종적으로 x의 값은 4가 되면서 코드 실행이 끝난다.
따라서 ‘x++ + ++x + x++ =?’ 식의 정답은 1 + 3 + 4가 되어 7이 된다.
3월 29일 정리
문제: ‘1부터 순서대로 더한 숫자가 입력한 숫자 이상인 순간의 숫자를 구하는 프로그램 구현’
➡️ <결과>
숫자를 입력하시오 : 20 정답 : 6
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int num, cnt = 1, sum = 0;
printf("숫자를 입력하시오 : ");
scanf("%d", &num);
while (sum <= num & num != 0)
{
cnt++;
sum += cnt;
}
printf("정답 : %d", cnt-1);
return 0;
}
- 입력받은 숫자를 저장하는 변수 ‘num’, 1부터 계속해서 증가하면 몇 번째까지 증가했는지를 저장하는 변수’cnt’, 마지막으로 **1부터 입력받은 num의 값 이하까지 계속해서 총 더하면 얼마인지 저장하는 변수 ‘sum’**을 선언해준다.
- while 문에 총 더한 값(sum)이 입력받은 숫자(num)보다 작으면 계속해서 프로그램을 반복하라는 조건을 준다. 또한 0이 입력되면 결과값도 0으로 출력되어야 하기 때문에 조건도 num이 0이 아닐 시 while 문이 동작하게 만든다.
- cnt의 값을 계속해서 1씩 더해준다.
- sum 변수를 코드가 계속해서 돌아갈 때 마다 1씩 올라가는 cnt 변수에 재귀적으로 자기 자신인 sum 값을 계속해서 더해준다.
- cnt의 초기값이 1로 설정되어 있기 때문에 결과를 출력할 때는 1을 다시 빼줘서 결과를 출력한다.
출력 결과:
구구단 3X3 형태로 출력하기(2중 또는 3중 for문 사용하기)
#include <stdio.h>
int main(void)
{
int num = 1;
for (int i = 0; i <= 2; i++) // 총 세번 반복
{
for (int j = 1; j <= 9; j++) // 구구단 곱셈 기준
{
for (int k = num; k <= num + 2; k++) //num의 초기값은 1, 조건은 num + 2로 해서 한 줄에 3개씩 출력하기
{
printf("%d * %d = %d\t", k, j, k*j); // 구구단 결과 출력
}
printf("\n");
}
printf("\n"); // 세 단이 끝날 때마다 띄어쓰기
num += 3; // 단의 기준이 되는 num에 3씩 더해줘서 1, 4, 7로 나누기
}
return 0;
}
- num의 초기 값을 1로 설정한다. num 변수는 구구단의 맨 앞에 해당하는 값의 역할을 한다.
- 총 3줄의 결과가 나와야 하기 때문에 첫 번째 for 문은 0부터 2까지, 총 3번 걸쳐 실행하게 한다.
- 두 번째 for 문은 구구단 곱셈의 기준이 되는 두 번째 숫자의 역할 한다. (1부터 9)
- 아까 초기에 설정한 num 값을 세 번째 for 문의 인자에 해당하는 k에 대입하여, 1부터 k + 2 즉 3까지 조건을 설정하여 1단 부터 3단까지 한 줄에 나오게 만든다.
- 구구단 결과를 출력한다. 이때 연산이 하나씩 끝날 때 마다 간격을 벌리기 위해 ‘\t’를 사용한다.
- 연산이 끝날 때 마다 가독성을 위해 ‘\n’을 출력한다.
- 이번엔 3단의 연산이 전체적으로 끝났을 때 마찬가지로 위와같이 가독성을 위해 ‘\n’을 사용한다.
- 마지막으로 단의 기준이 되는 num에 3씩 더해줘, 1단에서 3단, 4단에서 6단, 7단에서 9단으로 연산을 나눠준다.
출력 결과:
이외에도 직접 지뢰찾기를 만들어보는 시간도 가졌다.
하루만에 지뢰찾기 게임을 만드느라 진짜 죽는 줄 알았다...
'Challenge > SK 뉴스쿨 정보보안과 3기' 카테고리의 다른 글
SK 뉴스쿨 프로그래밍 기초 파이썬 (2022.04.05) (0) | 2022.04.08 |
---|---|
SK 뉴스쿨 프로그래밍 기초 파이썬 (2022.04.04) (1) | 2022.04.08 |
SK 뉴스쿨 네트워크 기초 & 인프라 기초 (2022.03.14 ~ 03.24) (0) | 2022.04.06 |
SK 뉴스쿨 시스템 기초 (2022.03.03 ~ 03.11) (0) | 2022.04.02 |
SK 뉴스쿨 정보보안과 3기 최종 합격 (0) | 2022.03.13 |