문제풀이/CodeUp

[코드업/CodeUp] C언어 기초 100제 1001~1050 - 은로그래머

은로그래머 2024. 2. 2. 00:48

1001번 문제

C/C++언어에서 가장 기본적인 명령이 출력문이다.
printf()를 이용해 다음 단어를 출력하시오.

Hello

참고
C/C++ IDE 프로그램을 설치한 후,
아래와 같은 소스 코드를 작성하고 "컴파일-실행"을 수행시키면,
지정한 "문장"이 출력된다.

#include <stdio.h>

int main()
{
  printf("문장");
  return 0;
}
#include <stdio.h>

int main() {
    printf("Hello");
    
    return 0;
}

 

 

1002번 문제

이번에는 공백()을 포함한 문장을 출력한다.
다음 문장을 출력해보자.

Hello World
(대소문자에 주의한다.)

참고
#include <stdio.h>

int main()
{
  printf("문장1 문장2");
  return 0;
}
을 실행시키면 "문장1”, "문장2"가 공백()을 사이에 두고 출력된다
#include <stdio.h>

int main() {
    printf("Hello World");
    
    return 0;
}

 

 

1003번 문제

이번에는 줄을 바꿔 출력하는 출력문을 연습해보자.
다음과 같이 줄을 바꿔 출력해야 한다.

Hello
World
(두 줄에 걸쳐 줄을 바꿔 출력)

참고
백슬래시 문자 '\'는 글꼴 설정에 따라,
'W'와 비슷한 원표시('₩')로 보이기도 하지만 같은 문자이다.
printf( ) 함수를 이용해 문장을 출력할 때, 줄을 바꾸기 위해서는
'\n'(new line을 의미)을 줄을 바꿀 위치에 넣어야 한다.
'\t'는 탭(tab),
'\c'은 캐리지리턴(carriage return, 그 줄의 맨 앞으로 커서를 보냄)
등이 있다.

이러한 문자를 이스케이프(escape) 문자라고 하고,
출력하는 문장 안에서 원하는 형식에 맞추어 출력할 수 있도록
줄을 바꾸는 등의 특별한 의미들을 나타내기 위해 사용한다.

예시
printf("Hello\nWorld");
#include <stdio.h>

int main() {
    printf("Hello\nWorld");
    
    return 0;
}

 

 

1004번 문제

이번에는 작은 따옴표(single quotation mark)가 들어있는
특수한 형태의 출력문에 대한 연습을 해보자.

다음 문장을 출력하시오.

'Hello'

참고
printf( ) 함수로 따옴표 문자 ' 를 출력하기 위해서는 \' 로 입력해야 한다.

\' 는 작은따옴표 문자 자체 출력
\" 는 큰따옴표 문자 자체 출력 …  등.

작은따옴표나 큰따옴표는 문자나 문장을 나타내기 위한 기호들로 쓰이는데,
그렇게 쓰이는 의미가 아니라 따옴표 그 자체를 표현해 주기 위해서이다.

예시
printf("\'");
#include <stdio.h>

int main() {
    printf("\'Hello\'");
    
    return 0;
}

 

 

1005번 문제

이번에는 큰따옴표(double quotation mark)가 포함된 출력문을 연습해보자.

다음 문장을 출력하시오.

"Hello World"
(단, 큰따옴표도 함께 출력한다.)

참고
printf( ) 함수로 큰 따옴표 문자 " 를 출력하기 위해서는 \" 로 출력해야 한다.

예시
printf("\"");
#include <stdio.h>

int main() {
    printf("\"Hello World\"");
    
    return 0;
}

 

 

1006번 문제

이번에는 특수문자 출력에 도전하자!!

다음 문장을 출력하시오.

"!@#$%^&*()"
(단, 큰따옴표도 함께 출력한다.)

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

예시
printf("%%");
#include <stdio.h>

int main() {
    printf("\"!@#$%%^&*()\"");
    
    return 0;
}

 

 

1007번 문제

윈도우 운영체제의 파일 경로를 출력하는 연습을 해보자.
 
파일 경로에는 특수문자들이 포함된다.

다음 경로를 출력하시오.

"C:\Download\hello.cpp"
(단, 큰따옴표도 함께 출력한다.)

참고
printf( ) 함수로 백슬래시 문자 \ 를 출력하기 위해서는 \\ 로 출력해야 한다.

예시
printf("\\");
#include <stdio.h>

int main() {
    printf("\"C:\\Download\\hello.cpp\"");
    
    return 0;
}

 

 

1008번 문제

이번에는 특수문자를 출력하는 연습을 해보자.

키보드로 입력할 수 없는 다음 모양을 출력해보자.
(** 참고 : 운영체제의 문자 시스템에 따라 아래와 같은 모양이 출력되지 않을 수 있다.)

┌┬┐
├┼┤
└┴┘

참고
다음과 같은 유니코드로 특수문자를 표현한다고 하자.
(운영체제 또는 컴파일러에 따라 사용되는 문자의 코드표가 다르다.)
윈도우에서는 "ㅂ+한자" 키를 누르면 선문자를 입력할 수 있다.
선문자를 이용하면 일반적인 텍스트 모드화면(메모장 등)에서도 표를 그릴 수 있다.

유니코드 특수문자를 출력하는 방법,
...
printf("\u250C\u252C\u2510\n");
...

┌┬┐
├┼┤
└┴┘

을 그려 출력하면 표처럼 선이 붙어 출력된다.

CLI 명령어 입출력 화면에서 표나 그림을 그리기 위해 사용되던 방법과 비슷하다.
#include <stdio.h>

int main() {
    printf("\u250C\u252C\u2510\n");
    printf("\u251C\u253C\u2524\n");
    printf("\u2514\u2534\u2518\n");
    
    return 0;
}

 

 

1010번 문제

정수형(int)으로 변수를 선언하고, 변수에 정수값을 저장한 후
변수에 저장되어 있는 값을 그대로 출력해보자.

예시
int main()
{
    int n;
    scanf("%d", &n);
    printf("%d", n);

    return 0;
}

와 같은 형태로 가능하다.
#include <stdio.h>

int main() {
    int n = 0;
    
    scanf("%d", &n);
    
    printf("%d", n);
    return 0;
}

 

 

1011번 문제

문자형(char)으로 변수를 하나 선언하고, 변수에 문자를 저장한 후
변수에 저장되어 있는 문자를 그대로 출력해보자.

참고
char x;
scanf("%c", &x);
printf("%c", x);

와 같은 방법으로 가능하다.
#include <stdio.h>

int main() {
    char c;
    
    scanf("%c", &c);
    
    printf("%c", c);
    
    return 0;
}

 

 

1012번 문제

실수형(float)로 변수를 선언하고 그 변수에 실수값을 저장한 후
저장되어 있는 실수값을 출력해보자.

참고
float x;
scanf("%f", &x);
printf("%f", x);
와 같은 방법으로 가능하다.
#include <stdio.h>

int main() {
    float a = 0.0;
    
    scanf("%f", &a);
    
    printf("%f", a);
}

 

 

1013번 문제

정수(int) 2개를 입력받아 그대로 출력해보자.

참고

int a, b;
scanf("%d%d", &a, &b);  //엔터/공백으로 입력 데이터가 구분되어 입력
printf("%d %d", a, b);

와 같은 방법으로 가능하다.
#include <stdio.h>

int main() {
    int a, b = 0;
    
    scanf("%d %d", &a, &b);
    
    printf("%d %d", a, b);
    
    return 0;
}

 

 

1014번 문제

2개의 문자(ASCII CODE)를 입력받아서 순서를 바꿔 출력해보자.

참고
char x, y;
scanf("%c %c", &x, &y);
printf("%c %c", y, x); //출력되는 순서를 작성
와 같은 방법으로 해결할 수 있다.
#include <stdio.h>

int main() {
    char x, y;
    
    scanf("%c %c", &x, &y);
    
    printf("%c %c", y, x);
    
    return 0;
}

 

 

1015번 문제

실수(float) 1개를 입력받아 저장한 후,
저장되어 있는 값을 소수점 셋 째 자리에서 반올림하여
소수점 이하 둘 째 자리까지 출력하시오.

참고
%.3f 와 같은 형식으로 지정하면,
소수점 이하 넷 째 자리에서 반올림하여 소수점 이하 셋 째 자리까지 출력하라는 의미이다.
#include <stdio.h>

int main() {
    float a = 0.0;
    
    scanf("%f", &a);
    
    printf("%.2f", a);
    
    return 0;
}

 

 

1017번 문제

int형 정수 1개를 입력받아 공백을 사이에 두고 3번 출력해보자.

참고
printf("%d %d %d", a, a, a);
와 같은 방법으로 출력할 수 있다.
#include <stdio.h>

int main() {
    int x;
    
    scanf("%d", &x);
    
    printf("%d %d %d", x, x, x);
    
    return 0;
}

 

 

1018번 문제

어떤 형식에 맞추어 시간이 입력될 때, 그대로 출력하는 연습을 해보자.

참고
scanf( ) 함수는 지정한 형식(format)에 따라 입력받는 함수이다.
따라서, 입력받고자 하는 형식으로 표현해주면 된다.

예시
scanf("%d:%d", &h, &m); //콜론(:) 기호를 기준으로 두 수가 각 변수에 저장된다.
#include <stdio.h>

int main() {
    int h, m;
    
    scanf("%d:%d", &h, &m);
    
    printf("%d:%d", h, m);
    
    return 0;
}

 

 

1019번 문제

년, 월, 일을 입력받아 지정된 형식으로 출력하는 연습을 해보자.

(%02d를 사용하면 2칸을 사용해 출력하는데, 한 자리 수인 경우 앞에 0을 붙여 출력한다.)
#include <stdio.h>

int main() {
    int y, m, d;
    
    scanf("%d.%d.%d", &y, &m, &d);
    
    printf("%04d.%02d.%02d", y, m, d);
    
    return 0;
}

 

 

1020번 문제

주민번호는 다음과 같이 구성된다.

XXXXXX-XXXXXXX

앞의 6자리는 생년월일(yymmdd)이고 뒤 7자리는 성별, 지역, 오류검출코드이다.
주민번호를 입력받아 형태를 바꿔 출력해보자.
#include <stdio.h>

int main() {
    int birth;
    int info;
    
    scanf("%d-%d", &birth, &info);
    
    printf("%06d%d", birth, info);
    
    return 0;
}

 

 

1021번 문제

1개의 단어를 입력받아 그대로 출력해보자.

한 단어가 입력된다.(단, 단어의 길이는 50자 이하이다.)

문자를 50개 저장하기 위해서는 char data[51] 로 선언하면 된다.

#include <stdio.h>

int main() {
    char c[51];
    
    scanf("%s", &c);
    
    printf("%s", &c);
    
    return 0;
}

 

 

1022번 문제

공백 문자가 포함되어 있는 문장을 입력받고 그대로 출력하는 연습을 해보자.

예시
char data[2001];
fgets(data, 2000, stdin);
printf("%s", data);

위와 같이 실행하면 공백이 포함된 문장을 키보드(stdin)로 입력받아
최대 2000자까지 data[ ] 공간에 저장하고 출력할 수 있다.

%s 는 문자열(string, 실로 연결된 문자들. 문장)로 출력하라는 의미이다.

참고
fgets( ) 를 사용하면 공백문자가 포함되어잇는 문장을 입력받아 저장할 수 있다.
만약, 아래처럼
scanf("%s", ... ) 를 이용해 문장을 입력받으면, 첫 번째 단어까지만 저장된다.

char data[51] = ""; //최대 50문자까지 저장 가능
scanf("%s", data);
#include <stdio.h>

int main() {
    char c[2001];
    
    fgets(c, 2000, stdin);
    
    printf("%s", c);
    
    return 0;
}

 

 

1023번 문제

실수 1개를 입력받아 정수 부분과 실수 부분으로 나누어 출력한다.

** 여러 가지 방법들로 해결할 수 있다.

만약 실수 부분이 0으로 시작하지 않는다면(예를 들어 1.000009)
scanf("%d.%d", &a, &b)도 하나의 방법이 될 수 있다.
#include <stdio.h>

int main() {
    int a, b;
    
    scanf("%d.%d", &a, &b);
    
    printf("%d\n%d", a, b);
    
    return 0;
}

 

 

1024번 문제

단어를 1개 입력받는다.

입력받은 단어(영어)의 각 문자를

한줄에 한 문자씩 분리해 출력한다.


참고
C언어에서는 문장을 저장하기 위해 특별한 방법을 사용하지 않고,
배열이라는 연속된 공간에 문자들을 연속으로 한 개씩 저장하는 방법을 사용한다.
단, 문자열(문자가 연속적으로 연결된 줄이라는 의미. 즉 문장)의 마지막임을 나타내기 위해
문자열의 마지막에 널(NULL) 문자라는 특별한 의미를 가지는 문자를 삽입해 문장임을 나타낸다.

널(NULL)은 영어 단어 자체의 의미로는, 아무런 가치가 없는 또는 아무것도 없는, 사용되지 않은 등의 의미를 가지는데,

문자로는 '\0', 아스키문자의 정수값은 0을 의미하며 NULL 로도 사용할 수 있다.

단어나 문장을 scanf("%s", ...); 로 입력받게 되면, 그 마지막에 널문자가 자동으로 입력되는 것이다.

그러므로, 본 문제는 그렇게 저장되어있는 영문자들을 한 개씩 순차적으로 검사해서,

문장의 마지막을 나타내는 널문자가 나올 때까지 모양을 만들어 출력하면 되는 것이다.

나중에 조건실행문, 반복문, 배열에 대해서 배우면 명확히 이해할 수 있게 된다.

printf("%s", ...); 는 결국, 저장되어있는 문자의 마지막까지, 즉 널문자가 나올 때까지 형식에 맞추어 출력해 주라는 의미를 가진다.

예시
char d[30]; //최대 30문자를 저장할 수 있는 저장 공간 준비. 마지막에 널문자 고려해야함
scanf("%s", d); //그 공간에 키보드로 입력된 내용을 저장. 단 공백이 있으면 거기까지만 입력됨.
for(i=0; d[i]!='\0'; i++) //저장된 내용을 하나하나씩 검사해서 널문자가 아닐 동안 아래 실행
{
   printf("\'%c\'", d[i]);
}
#include <stdio.h>

int main() {
    char c[30];
    
    scanf("%s", &c);
    
    for(int i = 0; c[i] != '\0'; i++) {
        printf("\'%c\'\n", c[i]);
    }

    return 0;
}

 

 

1025번 문제

다섯 자리의 정수 1개를 입력받아 각 자리별로 나누어 출력한다.

참고
scanf("%1d%1d%1d%1d%1d", &a, &b, &c, &d, &e);
를 사용하면 1개의 숫자로 각각 구분되어 저장된다.

예시
읽어들인 값을 적당히 바꿔 출력하기 위해서

printf("[%d]", a*10000);

과 같은 방법도 가능하다.
#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]", e);
    
    return 0;
}

 

 

1026번 문제

입력되는 시:분:초 에서 분만 출력해보자.

참고
int h, m, s;
scanf("%d:%d:%d", &h, &m, &s);

를 실행하면 콜론을 사이에 둔 형식으로 입력되어, h, m, s에 각각 정수값만 저장된다.
#include <stdio.h>

int main() {
    int h, m, s;
    
    scanf("%d:%d:%d", &h, &m, &s);
    
    printf("%d", m);
    
    return 0;
}

 

 

1027번 문제

년월일을 출력하는 방법은 나라마다, 형식마다 조금씩 다르다.

년월일(yyyy.mm.dd)를 입력받아,

일월년(dd-mm-yyyy)로 출력해보자.

(단, 한 자리 일/월은 0을 붙여 두자리로, 년도도 0을 붙여 네자리로 출력한다.) 


참고
출력하는 자리수를 지정하기 위해 %4d와 같은 형식을 사용할 수 있는데,
빈칸을 0으로 출력하기 위해서는 %04d와 같은 형식을 사용하면 된다.

예시
printf("%02d-%02d-%04d", d, m, y);
#include <stdio.h>

int main() {
    int y, m, d;
    
    scanf("%d.%d.%d", &y, &m, &d);
    
    printf("%02d-%02d-%04d", d, m, y);
    
    return 0;
}

 

 

1028번 문제

정수 1개를 입력받아 그대로 출력해보자.
(단, 입력되는 정수의 범위는 0 ~ 4,294,967,295 이다.)

참고
-2147483648 ~ +2147483647 범위의 정수를 저장하고 처리하기 위해서는
int 형으로 변수를 선언하면 된다.(int 로 선언하고 %d로 받고 출력)

하지만 이 범위를 넘어가는 정수를 저장하기 위해서는
보다 큰 범위를 저장할 수 있는 다른 데이터형을 사용해야 정상적으로 저장시킬 수 있다.

unsigned int 데이터형을 사용하면 0 ~ 4294967295 범위의 정수를 저장할 수 있다.


예시
unsigned int n;
scanf("%u", &n);
printf("%u", n);
#include <stdio.h>

int main() {
    unsigned int a;
    
    scanf("%u", &a);
    
    printf("%u", a);
    
    return 0;
}

 

 

1029번 문제

실수 1개를 입력받아 그대로 출력해보자.
(단, 입력되는 실수의 범위는 +- 1.7*10-308 ~ +- 1.7*10308 이다.)

참고
float 데이터형을 사용하면 +- 3.4*10-38 ~ +- 3.4*1038 범위의 실수를 저장할 수 있다.
(float 로 선언하고 %f로 입력 받아 출력하면 된다.)

이 범위를 넘어가는(더 작거나 더 큰) 실수를 저장하기 위해서는
보다 큰 범위를 저장할 수 있는 다른 데이터형을 사용해야 정상적으로 저장시킬 수 있다.
double은 더 정확하게 저장할 수 있지만, float보다 2배의 저장 공간이 필요하다.

double 데이터형을 사용하면
+- 1.7*10-308 ~ +- 1.7*10308 범위의 실수를 저장할 수 있다.
#include <stdio.h>

int main() {
    double d;
    
    scanf("%lf", &d);
    
    printf("%.11lf", d);
    
    return 0;
}

 

 

1030번 문제

정수 1개를 입력받아 그대로 출력해보자.
단, 입력되는 정수의 범위는
-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 이다.

참고
-2147483648 ~ +2147483647 범위의 정수를 저장하고 처리하기 위해서는
int 데이터형을 사용해 변수를 선언하면 된다.
(int 로 선언하고 %d로 입력받아 저장하고, 출력하면 된다.)

int 형으로 저장할 수 있는 범위를 넘어가는 정수 값을 저장하기 위해서는
보다 큰 범위를 저장할 수 있는 다른 데이터형을 사용해야 한다.

long long int 데이터형을 사용하면
-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 범위의 정수값을
저장시킬 수 있다.
#include <stdio.h>

int main() {
    long long int a;
    
    scanf("%lld", &a);
    
    printf("%lld", a);
    
    return 0;
}

 

 

1031번 문제

10진수를 입력받아 8진수(octal)로 출력해보자.

참고
%d(10진수 형태)로 입력받고,
%o를 사용해 출력하면 8진수(octal)로 출력된다.
#include <stdio.h>

int main() {
    int a;
    
    scanf("%d", &a);
    
    printf("%o", a);
    
    return 0;
}

 

 

1032번 문제

10진수를 입력받아 16진수(hexadecimal)로 출력해보자.

참고
%d(10진수 형태)로 입력받고
%x로 출력하면 16진수(hexadecimal) 소문자로 출력된다.

10진법은 한 자리에 10개(0 1 2 3 4 5 6 7 8 9)의 문자를 사용하고,
16진법은 한 자리에 16개(0 1 2 3 4 5 6 7 8 9 a b c d e f)의 문자를 사용한다.
16진수의 a는 10진수의 10, b는 11, c는 12 ... 와 같다.
#include <stdio.h>

int main() {
    int a;
    
    scanf("%d", &a);
    
    printf("%x", a);
    
    return 0;
}

 

 

1033번 문제

10진수를 입력받아 16진수(hexadecimal)로 출력해보자.

참고
%d(10진수 형태)로 입력받고
%X로 출력하면 16진수(hexadecimal) 대문자로 출력된다.

10진법은 한 자리에 10개(0 1 2 3 4 5 6 7 8 9)의 문자를 사용하고,
16진법은 한 자리에 16개(0 1 2 3 4 5 6 7 8 9 A B C D E F)의 문자를 사용한다.
(알파벳 대소문자는 표현만 다르고 같은 값을 의미한다.)
16진법의 A는 10진법의 10, B는 11, C는 12 ... 와 같다.
#include <stdio.h>

int main() {
    int a;
    
    scanf("%d", &a);
    
    printf("%X", a);
    
    return 0;
}

 

 

1034번 문제

8진수로 입력된 정수 1개를 10진수로 바꾸어 출력해보자.

참고
%o로 입력받으면 8진수로 인식시켜 저장시킬 수 있다.
%d로 출력하면 10진수로 출력된다.

예시
int n;
scanf("%o", &n);
printf("%d", n);
(C언어에서 소스 코드 작성 시 0으로 시작하는 수는 8진수로 인식된다. int a = 013; // 10진수 11과 같은 값)
#include <stdio.h>

int main() {
    int n;
    
    scanf("%o", &n);
    
    printf("%d", n);
    
    return 0;
}

 

 

1035번 문제

16진수로 입력된 정수 1개를 8진수로 바꾸어 출력해보자.

참고
%x(영문자 소문자) 나 %X(영문자 대문자)로 입력 받으면
16진수로 인식시켜 저장시킬 수 있다. %o로 출력하면 8진수로 출력된다.

C언어에서 소스 코드 작성시 0으로 시작하는 수는 8진수로 인식된다.
또한 소스코드 내에서 //로 시작하면 1줄 설명을 넣을 수 있다.
여러 줄을 설명(주석) 을 넣을 경우 /* 와 */ 사이에 작성하면 된다.

예시
int n;
scanf("%x", &n); //소문자로 16진수 입력
printf("%o", n);
#include <stdio.h>

int main() {
    int n;
    
    scanf("%x", &n);
    
    printf("%o", n);
    
    return 0;
}

 

 

1036번 문제

영문자 1개를 입력받아 아스키 코드표의 10진수 값으로 출력해보자.

참고
아스키 코드는
(ASCII, 미국표준코드, American Standard Code for Information Interchange)
영문자, 특수 문자 등을 저장할 때 사용하는 표준 코드이다.

컴퓨터로 저장되는 모든 데이터는 2진 정수화되어 저장되는데,
영문자와 특수기호 등을 저장하는 방법으로 아스키코드가 기본적으로 사용된다.

예를 들어 영문 대문자 "A"는 10진수 65를 의미하는 2진수 값으로 저장된다.
#include <stdio.h>

int main() {
    char a;
    
    scanf("%c", &a);
    
    printf("%d", a);
    
    return 0;
}

 

 

1037번 문제

10진 정수 1개를 입력받아 아스키 문자로 출력해보자.
단, 0 ~ 255 범위의 정수만 입력된다.
#include <stdio.h>

int main() {
    int a;
    
    scanf("%d", &a);
    
    printf("%c", a);
    
    return 0;
}

 

 

1038번 문제

정수 2개를 입력받아 합을 출력하는 프로그램을 작성해보자.
(단, 입력되는 정수는 -1073741824 ~ 1073741824 이다.)
#include <stdio.h>

int main() {
    long long int a, b;
    
    scanf("%lld %lld", &a, &b);
    
    printf("%lld", a + b);
    
    return 0;
}

 

 

1039번 문제

정수 2개를 입력받아 합을 출력해보자.
단, 입력되는 정수는 -2147483648 ~ +2147483648 이다.

참고
+ 연산자를 사용하면 된다.
단, 계산된 결과가 int 형으로 저장할 수 있는 범위를 넘어갈 수 있기 때문에 다른 데이터형을 사용해야 한다.

주의
int 데이터형은 %d로 입출력하고,
long long int 데이터형은 %lld로 입출력한다.
#include <stdio.h>

int main() {
    long long int a, b;
    
    scanf("%lld %lld", &a, &b);
    
    printf("%lld", a + b);
    
    return 0;
}

 

 

1040번 문제

입력된 정수의 부호를 바꿔 출력해보자.
단, -2147483647 ~ +2147483647 범위의 정수가 입력된다.

참고
단항 연산자인 -(negative)를 변수 앞에 붙이면 부호가 반대로 바뀌어 계산된다.

예시
int a;
scanf("%d", &a);
printf("%d", -a);
#include <stdio.h>

int main() {
    int a;
    
    scanf("%d", &a);
    
    printf("%d", -a);
    
    return 0;
}

 

 

1041번 문제

영문자 1개를 입력받아 그 다음 문자를 출력해보자.

영문자 'A'의 다음 문자는 'B'이고, 영문자 '0'의 다음 문자는 '1'이다.

참고
숫자는 수를 표현하는 문자로서 '0' 은 문자 그 자체를 의미하고, 0은 값을 의미한다.

힌트
아스키문자표에서 'A'는 10진수 65로 저장되고 'B'는 10진수 66으로 저장된다.
따라서 문자도 값으로 덧셈을 할 수 있다.
#include <stdio.h>

int main() {
    char a;
    
    scanf("%c", &a);
    
    printf("%c", a + 1);
    
    return 0;
}

 

 

1042번 문제

정수 2개(a, b) 를 입력받아 a를 b로 나눈 몫을 출력해보자.
단, -2147483648 <= a <= b <= +2147483647, b는 0이 아니다.

참고
C언어에서 정수/정수 연산의 결과는 정수(몫)로 계산된다.
실수/정수, 정수/실수, (float)정수/정수, 정수/(float)정수 등의 연산 결과는 실수 값으로 계산된다.

(float)(정수/정수)는 정수/정수의 결과인 정수 값을 실수형(float)로 바꾸는 것으로,
계산 결과인 정수 값이 실수 형태로 변환되는 것이니 주의해야 한다.

정수/실수 계산결과가 자동으로 실수형으로 바뀌는 것을 묵시적 (데이터)형변환이라고 하고,
어떤 값이나 결과의 데이터형을 강제로 바꾸는 것을 명시적 (데이터)형변환이라고 한다.
#include <stdio.h>

int main() {
    int a, b;
    
    scanf("%d %d", &a, &b);
    
    printf("%d", a/b);
    
    return 0;
}

 

 

1043번 문제

정수 2개(a, b) 를 입력받아 a를 b로 나눈 나머지를 출력해보자.
단, 0 <= a, b <= +2147483647, b는 0이 아니다.

참고
C언어에서 정수%정수 연산의 결과는 나눈 나머지로 계산된다.

% 연산자(modulus, mod 연산) 수학자 가우스가 생각해낸 연산으로,
어떤 정수를 다른 정수로 나누고 난 후 남는 나머지를 계산하는 연산이다.

단, 음(-)이 아닌 정수에 대해서만 연산된다.
#include <stdio.h>

int main() {
    int a, b;
    
    scanf("%d %d", &a, &b);
    
    printf("%d", a % b);
    
    return 0;
}

 

 

1044번 문제

정수를 1개 입력받아 1만큼 더해 출력해보자.
단, -2147483648 ~ +2147483647 의 범위로 입력된다.

주의
계산되고 난 후의 값의 범위(데이터형)에 주의한다.

참고
어떤 변수(a)에 값을 저장한 후 a+1 의 값을 출력할 수도 있고,
++a 연산을 한 후에 출력할 수도 있다.

++a, --a, a++, a-- 와 같이 어떤 변수의 앞이나 뒤에 붙여
변수에 저장되어있는 값을 1만큼 더하거나 빼주는 연산자를 증감연산자라고 한다.

증감연산자를 변수 앞에 붙이면 그 변수를 사용하기 전에 증감을 먼저 수행하고,
증감연산자를 변수 뒤에 붙이면 일단 변수에 저장되어있는 값을 먼저 사용하고 난 후
나중에 증감을 수행한다.
#include <stdio.h>

int main() {
    long long int a;
    
    scanf("%lld", &a);
    
    a++;
    
    printf("%lld", a);
    
    return 0;
}

 

 

1045번 문제

정수 2개(a, b)를 입력받아 합, 차, 곱, 몫, 나머지, 나눈 값을 자동으로 계산해보자.
단 0 <= a, b <= 2147483647, b는 0이 아니다.

첫 줄에 합
둘째 줄에 차,
셋째 줄에 곱,
넷째 줄에 몫,
다섯째 줄에 나머지,
여섯째 줄에 나눈 값을 순서대로 출력한다.
(실수, 소수점 이하 셋째 자리에서 반올림해 둘째 자리까지 출력)
#include <stdio.h>

int main() {
    int a, b;
    
    scanf("%d %d", &a, &b);
    
    printf("%d\n", a + b);
    printf("%d\n", a - b);
    printf("%d\n", a * b);
    printf("%d\n", a / b);
    printf("%d\n", a % b);
    printf("%.2f", (float)a / b);
    
    return 0;
}

 

 

1046번 문제

정수 3개를 입력받아 합과 평균을 출력해보자.
단, -2147483648 ~ +2147483647
#include <stdio.h>

int main() {
    int a, b, c;
    
    scanf("%d %d %d", &a, &b, &c);
    
    printf("%d\n", a + b + c);
    printf("%.1f", (float)(a + b + c) / 3);
    
    return 0;
}

 

 

1047번 문제

정수 1개를 입력받아 2배 곱해 출력해보자.

참고
*2 의 값을 출력해도 되지만,
정수를 2배로 곱하거나 나누어 계산해 주는 비트단위시프트연산자 <<, >>를 이용한다.

2진수 형태로 저장되어 있는 값들을 왼쪽(<<)이나 오른쪽(>>)으로
지정한 비트 수만큼 밀어주면 2배씩 늘어나거나 반으로 줄어드는데,

왼쪽 비트시프트(<<)가 될 때에는 오른쪽에 0이 주어진 개수만큼 추가되고,

오른쪽 비트시프트(>>)가 될 때에는
왼쪽에 0(0 또는 양의 정수인 경우)이나 1(음의 정수인 경우)이 개수만큼 추가된다.

범위(32비트)를 넘어서 이동되는 비트는 삭제된다.

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

int main() {
    int a;
    
    scanf("%d", &a);
    
    printf("%d", a<<1);
    
    return 0;
}​

 

 

1048번 문제

정수 2개(a, b)를 입력받아 a를 2b배 곱한 값으로 출력해보자.
0 <= a <= 10, 0 <= b <= 10


참고
예를 들어 1 3 이 입력되면 1을 2^3(8)배 하여 출력한다.

예시
int a=1, b=10;
printf("%d", a << b); //2^10 = 1024 가 출력된다.
#include <stdio.h>

int main() {
    int a, b;
    
    scanf("%d %d", &a, &b);
    
    printf("%d", a<<b);
    
    return 0;
}

 

 

1049번 문제

두 정수(a, b)를 입력받아

a가 b보다 크면 1을, a가 b보다 작거나 같으면 0을 출력하는 프로그램을 작성해보자.


참고
어떤 값을 비교하기 위해 비교/관계연산자(comparison/relational)를 사용할 수 있다.

비교/관계연산자 > 는
왼쪽의 값이 오른쪽 값 보다 큰 경우 참(true)을 나타내는 정수값 1로 계산하고,
그 외의 경우에는 거짓(false)를 나타내는 정수값 0으로 계산한다.

비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고,
그 결과를 1(참), 또는 0(거짓)으로 계산해 주는 연산자이다.

비교/관계연산자는 >, <, >=, <=, ==(같다), !=(다르다) 6개가 있다.

예시
printf("%d", 123<456); //비교 연산자 < 의 계산 결과인 1(참)이 출력된다.#
#include <stdio.h>

int main() {
    int a, b;
    
    scanf("%d %d", &a, &b);
    
    printf("%d", a > b);
    
    return 0;
}

 

 

1050번 문제

두 정수(a, b)를 입력받아
a와 b가 같으면 1을, 같지 않으면 0을 출력하는 프로그램을 작성해보자.


참고
어떤 값을 비교하기 위해 비교/관계연산자(comparison/relational)를 사용할 수 있다.

비교/관계연산자 == 는
두 개의 값이 같은 경우 참(true)을 나타내는 정수값 1로 계산하고,
다른 경우 거짓(false)를 나타내는 정수값 0으로 계산한다.

비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고,
그 결과를 1(참), 또는 0(거짓)으로 계산해 주는 연산자이다.

비교/관계연산자는 >, <, >=, <=, ==(같다), !=(다르다) 6개가 있다.

** 수학에서 왼쪽과 오른쪽의 계산 결과가 같음(동치)을 나타내는 기호 = 는
C언어에서 전혀 다른 의미로 사용된다.

a=1 와 같은 표현은 a와 1의 값이 같다는 의미가 아니라
오른쪽의 계산 결과인 1을 왼쪽의 변수 a에 저장하라는 의미이다.
#include <stdio.h>

int main() {
    int a, b;
    
    scanf("%d %d", &a, &b);
    
    printf("%d", a == b);
    
    return 0;
}

 

 

코드업 기초 100제 추천 받아서 풀어 봤습니다

100 문제 모두 담기엔 포스팅이 너무 길어질 것 같아 50 문제에서 끊겠습니다

다음 포스팅은 1051~1100 풀이로 뵙도록 할게요 :)