반응형

1020 : [기초-입출력] 주민번호 입력받아 형태 바꿔 출력하기

답 : 

#include <stdio.h>
int main(){
	int a,b;
	scanf("%06d-%07d", &a, &b); 
	printf("%06d%07d", a, b);
}

해설

더보기

위 문제는 printf의 형식 문자열에 따라 출력되는 형태가 다름을 이해할 수 있다.

 

scanf("%06d-%07d" 의 형식 문자열을 풀이해보면
0(필드너비 설정), 6만큼의 필드 너비를 지정한 후 10진수 정수를 입력받고 -(하이픈)으로 정수를 구분한다는 뜻이다.

0(필드 너비 설정), 7만큼의 필드 너비를 지정한 후 10진수 정수를 입력받는다.

  예시 주민번호 - 190101-1234567)

  scanf 입력을 받을 때 a변수에 190101를 입력하고 구분을위한 -(하이픈)을 입력한다. b변수에 뒷자리를 1234567입력한다.

  printf 출력시 두 변수를 붙여서 출력하고 싶다면 출력 형식 문자열에 변수 a,b를 붙여주면 된다 ㅡ> "%d%d"

% : 형식 지정자를 시작하는 기호
d : 10진수 정수를 출력할 때 사용하는 형식지정자

1021 : [기초-입출력] 단어 1개 입력받아 그대로 출력하기

답 : 

#include <stdio.h>
int main(){
	char data[51]="";
	scanf("%s",data);
	printf("%s",data);
	
}

해설

더보기

위 문제는 문자 1개가 아닌 문자열, 단어를 출력하는 문제이다.

 

문자 1개를 출력할 때는 

char을 사용하여 변수 생성,

형식 지정자 "%c"를 사용하여 입출력 이였을 때,

 

문자열, 단어의 경우

char을 사용하여 배열변수 data[51] 선언, ="" 으로 빈 문자열 초기화,

형식 지정자 "%s"를 사용하여 입출력을 하게 된다.

 

배열이란.

동일한 데이터 타입을 가진 여러 개의 변수를 하나의 이름으로 묶어서 관리하는 자료구조이다.

배열은 연속적인 메모리 공간에 저장되며, 각 요소는 인덱스를 사용하여 접근할 수 있다.

배열의 인덱스는 0부터 시작하며, 문자열의 경우 마지막의 null값을 가진다.

 

  인덱스 예시)

  int numbers[5] ㅡ> 배열 길이가 5인 int형 배열 선언

  - numbers[0]

  - numbers[1]

  - numbers[2]

  - numbers[3]

  - numbers[4]

 

  문자열 예시)

  char str[6] = "hello" ㅡ> 배열 길이가 6인 문자열 배열 선언

  - 'h'

  - 'e'

  - 'l'

  - 'l'

  - 'o'

  - '\o'

  마지막에는 항상 NULL (\o) 문자가 들어가야 하므로 5개의 문자열을 입력해도 널값이 들어갈 공간까지 +1해서 선언해줘야한다.

 

  \o : 문자열의 끝을 나타내며, 문자열 함수들이 문자열의 끝을 알 수 있게 해주는 역할

1022 : [기초-입출력] 문장 1개 입력받아 그대로 출력하기

답 : 

#include <stdio.h>
int main(){
	char data[2001]="";
	fgets(data, 2000, stdin);
	printf("%s",data);
	
}

해설

더보기

위 문제는 문장을 출력하는 문제이다.

 

문장을 출력할 때는 

char을 사용하여 배열변수 생성, 배열 초기화 ="" ,

fgets 함수를 이용하여 stdin(표준입력=키보드)로 문자열을 입력받는다.

  fgets(변수,배열크기,stdin) 

"%s" 형식 지정자로 문장을 출력한다.

 

문장은 함수가 문장의 끝을 알 수 있게 \o이 들어갈 공간까지  n+1 공간을 설정해준다.

2000개의 문자를 입력받고 싶을 때 2001의 배열 공간을 선언해야한다.

1023 : [기초-입출력] 실수 1개 입력받아 부분별로 출력하기

답 : 

#include <stdio.h>
int main()
{
    int a, b;
    scanf("%d.%d", &a, &b);
    printf("%d\n%d", a, b);
    
}

해설

더보기

위 문제는 .을 기준으로 앞, 뒤의 숫자를 출력하는 문제이다.

 

예시로 1.23을 1,23으로 출력하고싶다면

a 변수에 1을 담고, b 변수에 23을 담은 후 .으로 구분하여 입력받는다.

printf 함수로 "%d,%d",a,b를 출력하게 되면 1,23으로 출력된다.

 

문제에 맞게 줄바꿈으로 구분하고 싶으면 \n 이스케이프 문자를 사용하여 출력해주면 된다.

1024 : [기초-입출력] 단어 1개 입력받아 나누어 출력하기

답 : 

#include <stdio.h>
int main()
{
    char d[31];
    scanf("%s", d);
    for(int i=0; d[i]!='\0'; i++) {
    	printf("\'%c\'\n",d[i]);
	}
    
}

해설

더보기

위 문제는 문자열을 for문을 통해 나누어 출력하는 문제이다.

 

단어 Boy를 입력받기 위해 배열변수 char 변수이름[배열길이]를 선언한다.

scanf 함수로 "%s" 변수 안에 'Boy'를 입력한다.

 

이제 배열 안에는 d[0]='B' , d[1]='o' , d[2]='y'...  가 지정되어 있는 상태이다.

 

for 문을 사용하여 배열의 인덱스 별 값을 출력하는 코드를 작성할 차례이다.

for 초기값; 조건식; 증감식 구조를 가지고 있다.

초기값 : index를 나타낼 변수 i를 선언한 후 배열의 index는 0부터 시작하니 초기값을 0으로 설정해준다.

조건식 : 문자열의 끝을 나타내는 \o 을 만나면 배열이 종료되게 선언한다. != (비교연산자)는 같지않음을 나타낸다.

증감식 : 0부터 1씩 증가하며 배열의 인덱스를 가져올거기 때문에 i ++(증감연산자)을 입력한다.

 

for문의 순서는 초기값->조건식 ->참이면 함수실행 -> 증감식실행 ->조건식 ->참이면 함수 실행 ... 이다.

 

i= 0일때 d [0]은 'B'이기 때문에 '\o'과 같지 않다-> 함수를 실행한다. 

d [0]=B를 가져온 후 이스케이프 문자 \' %c \' \n 이기 때문에 출력은 'B' 줄바꿈이 된다.

 

연산자

  1. 산술 연산자 (Arithmetic Operators):
    • +: 덧셈
    • -: 뺄셈
    • *: 곱셈
    • /: 나눗셈
    • %: 나머지 연산 (모듈로 연산)
  2. 할당 연산자 (Assignment Operators):
    • =: 변수에 값을 할당
    • +=: 덧셈 후 할당
    • -=: 뺄셈 후 할당
    • *=: 곱셈 후 할당
    • /=: 나눗셈 후 할당
    • %=: 나머지 연산 후 할당
  3. 비교 연산자 (Comparison Operators):
    • ==: 같음
    • !=: 다름
    • <: 작음
    • >: 큼
    • <=: 작거나 같음
    • >=: 크거나 같음
  4. 논리 연산자 (Logical Operators):
    • &&: 논리 AND (그리고)
    • ||: 논리 OR (또는)
    • !: 논리 NOT (부정)
  5. 증감 연산자 (Increment/Decrement Operators):
    • ++: 변수를 1 증가
    • --: 변수를 1 감소
  6. 비트 연산자 (Bitwise Operators):
    • &: 비트 AND
    • |: 비트 OR
    • ^: 비트 XOR
    • ~: 비트 NOT
    • <<: 왼쪽 시프트
    • >>: 오른쪽 시프트
  7. 조건(삼항) 연산자 (Conditional (Ternary) Operator):
    • condition ? value_if_true : value_if_false: 조건식이 참이면 첫 번째 값, 거짓이면 두 번째 값 반환
  8. sizeof 연산자:
    • sizeof(variable_type): 변수 또는 데이터 타입의 크기를 바이트 단위로 반환
  9. 형변환 연산자 (Type Casting Operator):
    • (new_type) expression: 표현식을 다른 데이터 타입으로 변환
  10. 포인터 연산자 (Pointer Operators):
    • &: 변수의 주소를 얻음

*: 포인터를 통해 변수를 간접적으로 조작

1025 : [기초-입출력] 정수 1개 입력받아 나누어 출력하기

답 : 

#include <stdio.h>
int main()
{
	int a,b,c,d,e;
    scanf("%1d%1d%1d%1d%1d", &a, &b, &c, &d, &e);
    printf("[%d]\n", a*10000);
    printf("[%d]\n", b*1000);
    printf("[%d]\n", c*100);
    printf("[%d]\n", d*10);
    printf("[%d]\n", e*1);
}

해설

더보기

위 문제는 산술연산자를 사용하는 문제이다.

 

12345를 입력받았을 때 

10000

  2000

   300

    40

     5

를 출력하려한다.

 

12345=10000*1+1000*2+100*3+10*4+1*5 로 풀이할 수 있다.

 

scanf 로 숫자 5개를 붙여서 입력받은 후 각 자리 숫자에 * 를 하면 되는 문제이다.

 

printf는 아래 구조로 입력해주면 된다.

printf(형식지정자,변수)

변수 위치에 원하는 연산자를 추가하여 값을 도출해낼 수 있다.

  예시

  a=1 ,b=2

  printf("%d", a+b) ㅡ> 1 + 2 = 3

  printf("%d", a-b) ㅡ> 1 - 2 = -1

  printf("%d", a*b) ㅡ> 1 * 2 = 2

  printf("%d", a/b) ㅡ> 1 / 2 = 0

  printf("%d", a%b) ㅡ> 1 % 2 = 1

1026 : [기초-입출력] 시분초 입력받아 분만 출력하기

답 : 

#include <stdio.h>
int main()
{
	int h, m, s;
    scanf("%d:%d:%d", &h, &m, &s);
    printf("%d", m);
}

해설

더보기

위 문제는 여러 번수를 입력받아도 원하는 변수만 출력할 수 있다는 것을 이해할 수 있다.

 

scanf 함수로 3개의 변수에 :로 구분을 두어 값을 저장하였다.

printf 함수로 특정 한 변수만 출력해보인다.

1027 : [기초-입출력] 년월일 입력받아 형식 바꿔 출력하기

답 : 

#include <stdio.h>
int main()
{
	int y,m,d;
    scanf("%d.%d.%d", &y, &m, &d);
    printf("%02d-%02d-%04d", d,m,y);
}

해설

더보기

위 문제는 입력받은 변수를 원하는 형식으로 출력하는 방법을 익힐 수 있다.

 

printf 함수의 소스를 확인해보면 %02d-%02d-%04d의 형태 지정을 확인할 수 있다.

%02d 하나를 풀어보면 2개의 최소너비를 가진 후 값이 없으면 그부분은 0으로 채운 10진수의 정수를 출력한다. 의 의미를 가지고있다.

반응형

+ Recent posts