CodeUp 기초100제

ttomy·2022년 1월 27일
0

입출력

scanf,printf

scanf("%d",&n);
printf("%d",n);

%d,%u,%c,%s 과 같이 입출력의 형식지정이 가능하다.

% 기호가 앞에 붙는 문자를 형식 지정자(format specifier)라고 하며, 그 위치에서 지정한 형식으로 값을 출력해 준다.
따라서, 퍼센트 문자 %를 출력하기 위해서는 %%로 출력해 주어야 한다.

  • printf(" \' ");
    작은따옴표,큰따옴표와 같이 문장을 나타내기 위한 기호 자체를 출력하기 위해서는 앞에 \를 붙여야 한다.

  • visual studio에서 scanf를 사용하려면 최상단에 #define _CRT_SECURE_NO_WARNINGS 입력해야함,

  • 데이터형의ㅣ 범위
    int: –2,147,483,648 ~ 2,147,483,647
    unsigned int: 0 ~ 4,294,967,295
    double: 1.7E+/-308(15개의 자릿수)
    float: 3.4E+/-38(7개의 자릿수)
    char: -128 ~ 127
    long: –2,147,483,648 ~ 2,147,483,647

형식 지정자

%d -> 10진수 정수 (4바이트) -> int
%ld -> 10진수 정수 (8바이트) -> long
%f -> 실수형 (4바이트) -> float
%lf -> 실수형 (8바이트) -> double
%c -> 문자 -> char
%s -> 문자열 -> char
%o -> 8진수 -> int
%x -> 16진수 -> int
%p -> 주소값 -> void

%u -> 부호없는 10진수 (4바이트) -> unsigned int

+참고: https://reallemonjuice.tistory.com/113

  • 같은 값이라도 어떤 형식으로 출력하느냐에 따라 다른 출력을 보인다.
    아스키 문자표에서 'A'는 65로,'B'는 66으로 저장된다.

연산

비트시프트 연산

왼쪽 비트시프트(<<)가 될 때에는 오른쪽에 0이 주어진 개수만큼 추가되고, 오른쪽 비트시프트(>>)가 될 때에는 왼쪽에 0(0 또는 양의 정수인 경우)이나 1(음의 정수인 경우)이 개수만큼 추가된다.
범위(32비트)를 넘어서 이동되는 비트는 삭제된다.

  • 예시
    int a=10;
    printf("%d", a<<1); //10을 2배 한 값인 20 이 출력된다.
    printf("%d", a>>1); //10을 반으로 나눈 값인 5 가 출력된다.

비교/관계 연산자

비교/관계연산자는 >, <, >=, <=, ==(같다), !=(다르다) 6개가 있다.
>=, <= 연산자는 같음(==)을 포함한다.
따라서 “작다/크다” 또는 "같다”는 의미를 가진다.

논리 연산자

삼항 연산자

3개의 요소로 이루어지는 3항(ternary) 연산자는
"조건식 ? (참일 때의 값) : (거짓일 때의 값)” 의 형태로 사용하는 연산자이다.

  • 조건식의 계산 결과가 참인 경우에는 ':' 왼쪽의 값 또는 식으로 바뀌고, 거짓인 경우에는 ':' 오른쪽의 값 또는 식으로 바뀐다.

-ex)

  • 123 > 456 ? 0 : 1
    과 같은 표현식은 123 > 456 의 비교연산 결과가 거짓이므로 1이 된다.
  • printf("%d", a>b ? a:b); //두 값 중 큰 값이 출력된다.

99번

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
	int map[11][11] = {};
	int now = 0;
	int i=2, j=2;
	for (int i = 1; i <= 10; i++) {
		for (int j = 1; j <= 10; j++) {
			scanf("%d", &map[i][j]);
		}
	}

	while (now != 2) {
		
		now = map[i][j];
		if (now == 0) {
			map[i][j] = 9;
		}
		else if (now == 1)
			break;
		else {
			map[i][j] = 9;
			continue;
		}

		//다음 어느 굴로 이동가능한지 계산
		j++; //오른쪽으로 이동해봄
		if (map[i][j] == 0) {
			continue; //오른쪽 이동 가능하면 이동
		}
		else if(map[i][j] == 1){// 오른쪽이 벽이면 
			i++; j--; 
			continue; //아래쪽으로 이동
		}

	}

	for (int i = 1; i <= 10; i++) {
		for (int j = 1; j <= 10; j++) {
			printf("%d ", map[i][j]);
		}
		printf("\n");
	}
	return 0;
}

0개의 댓글