코드업 C언어 기초 100제에서 [기초-입출력] 풀기
#include <stdio.h>
int main() {
int a = 10;
printf(a);
return 0;
}
정답 여부: X -> scanf 활용 안해서 컴파일 오류남.
해설: 1) 변수 선언, 2) 변수에 정수값을 저장, 3) 그대로 출력
너무 오랜만에 C 하니깐 문법 다 틀리네 ㅋㅋ..
문제를 그대로 이해하고 풀어야 한다. 변수에 정수값을 저장한다는 뜻은 선언할 때 초기화를 한다는 뜻이 아닌 scanf
를 사용하라는 뜻이다.
그리고 문법은 이렇게 사용했었다.
scanf -> scanf("%d", &a);
printf -> printf("%d", a);
그러므로 아래와 같이 작성하면 될 것이다.
#include <stdio.h>
int main() {
int a;
scanf("%d", &a);
printf("%d", a);
return 0;
}
어휴
#include <stdio.h>
int main() {
int a;
scanf("%c", &a);
printf("%c", a);
return 0;
}
#include <stdio.h>
int main() {
float a;
scanf("%f", &a);
printf("%f", a);
return 0;
}
#include <stdio.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("%d %d", a, b);
return 0;
}
#include <stdio.h>
int main() {
char a, b;
scanf("%c %c", &a, &b);
printf("%c %c", a, b);
return 0;
}
정답 여부: X -> 순서를 안바꿨어..
해설: printf 부분만 조금 바꿔주면 될 것 같다.
#include <stdio.h>
int main() {
char a, b;
scanf("%c %c", &a, &b);
printf("%c %c", b, a);
return 0;
}
진짜 문제 좀 잘 읽어야겠다.
#include <stdio.h>
int main() {
float a, b;
scanf("%f %f", &a, &b);
printf("%3f %3f", a, b);
return 0;
}
정답 여부: X -> 반올림이 그건줄 몰랐어..
해설: 예를 들어서 소수점 이하 셋 째 자리까지 출력하라고 하면 %.3f
로 입력해주면 된다. 이렇게 되면 소수점 이하 넷 째 자리에서 반올림한다.
이번 문제는 소수점 셋 째 자리에서 반올림해야하기 때문에 아래처럼 작성하면 된다.
그리고 이번에는 변수 1개를 입력받아야 하므로 b는 없애주면 된다.
#include <stdio.h>
int main() {
float a;
scanf("%f", &a);
printf("%.2f", a);
return 0;
}
#include <stdio.h>
int main() {
int a;
scanf("%d", &a);
printf("%d %d %d", a, a, a);
return 0;
}
#include <stdio.h>
int main() {
int a, b;
scanf("%d:%d", &a, &b);
printf("%d:%d", a, b);
return 0;
}
#include <stdio.h>
int main() {
int a, b, c;
scanf("%d-%d-%d", &a, &b, &c);
printf("%d-%d-%d", a, b, c);
return 0;
}
그리고 8과 5를 입력했을 때 08과 05가 출력되야 한다. 이런 경우는 %02d
를 사용해야 한다. 2칸을 사용해 출력하는 대신 한 자리 수인 경우는 앞에 0이 붙도록 해준다.
거기에 년도도 무조건 4자리가 나오도록 해줘야 한다.
밑처럼 작성하면 잘 작동할 것이다.
#include <stdio.h>
int main() {
int a, b, c;
scanf("%d.%d.%d", &a, &b, &c);
printf("%04d.%02d.%02d", a, b, c);
return 0;
}
주민번호는 다음과 같이 구성된다.
XXXXXX-XXXXXXX
앞의 6자리는 생년월일(yymmdd)이고 뒤 7자리는 성별, 지역, 오류검출코드이다.
#include <stdio.h>
int main() {
int a, b;
scanf("%d-%d", &a, &b);
printf("%d%d", a, b);
return 0;
}
문제에서 앞의 6자리는 생년월일이라고 얘기한 점, 전 문제에서 빈 자리 수를 특정 문자로 채워 넣는 점을 합쳐 문제를 해결하면 된다.
#include <stdio.h>
int main() {
int a, b;
scanf("%d-%d", &a, &b);
printf("%06d%07d", a, b);
return 0;
}
단어의 길이는 50자 이하이다.
#include <stdio.h>
int main() {
char a;
scanf("%c", &a);
printf("%c", a);
return 0;
}
char에 대한 설명을 읽어본 결과, char로 선언한 '변수'로는 문자만 저장할 수 있는 듯하고 포인터를 사용하여 문자열을 저장할 수 있는 듯하다. 포인터를 사용하지 않아도 문자열을 저장하는 방법은 배열을 char로 선언하는 것이라고 한다.
그리고 문자열은 %s를 사용하므로 주의해야 한다.
배열을 이용하면 이렇게 작성할 수 있다.
#include <stdio.h>
int main() {
char a[50];
scanf("%s", &a);
printf("%s", a);
return 0;
}
공백이 포함되어 있는 한 문장이 입력되며, 입력되는 문장은 여러 개의 단어로 구성되고, 엔터로 끝나며, 최대 길이는 2000 문자를 넘지 않는다.
#include <stdio.h>
int main() {
char a[2001];
scanf("%s", &a);
printf("%s", a);
return 0;
}
fgets -> fgets(배열이름, 크기, 파일포인터)
배열이름의 경우는 char로 선언한 배열을 의미하며, 크기는 배열에 저장될 커트라인이다.
만약 크기를 60으로 설정했을 때 문자가 59개를 넘어가면 작업을 중단하고 작업했던 부분까지만 저장한다. 거기에 fgets은 한 줄 단위로 문자열을 읽어들이는데 한 줄이 너무 길어 설정했던 부분을 넘어서면 한 줄을 다 못 읽고 중단할 수도 있다고 한다.
#include <stdio.h>
int main() {
char a[2001];
fgets(a, 2000, stdin);
printf("%s", a);
return 0;
}
+) stdin: standard input - 표준 입력에 대한 포인터(키보드 입력)
아 너무 어렵다..
여러 가지 방법들로 해결할 수 있다.
입력값은 절댓값이 10000을 넘지 않으며, 소수점 이하 자릿수는 최대 6자리까지이고 0이 아닌 숫자로 시작한다.
#include <stdio.h>
int main() {
int a, b;
scanf("%d.%d", &a, &b);
printf("%d %d", a, b);
return 0;
}
단어의 길이는 20자 이하이다.
단어의 문자(영어)를 하나씩 나누어 한 줄에 한 개씩 ' '로 묶어서 출력한다.
#include <stdio.h>
int main() {
char a[21];
scanf("%s", &a);
for (int i=0; i<21; i++) {
printf("\'%c\'\n", a[i]);
}
return 0;
}
char
배열에 문자를 저장할 때 문자 끝에 Null
이 같이 저장된다. 이 Null
은 자리 한 칸을 차지하므로 저장할 때는 저장공간을 꼭 생각하면서 작업해야 한다.
지금 빈 공간이 같이 출력되는 이유가 Null
때문이므로 for
문에서 이 부분을 판별할 수 있는 조건이 필요하다. Null
을 문자로 표현하면 \0
이므로 만약 a[i]
가 \0
이라면 for 문에서 나오도록 해야하기 때문에 i<21
를 a[i]!='\0'
로 바꿔줘야 한다.
#include <stdio.h>
int main() {
char a[21];
scanf("%s", &a);
for (int i=0; a[i]!='\0'; i++) {
printf("\'%c\'\n", a[i]);
}
return 0;
}
각 자리의 숫자를 분리해 한 줄에 하나씩 [ ]속에 넣어 출력한다.
예를 들어 12345를 출력한다고 하면,
[10000]
[2000]
[300]
[40]
[5] 형식으로 출력해야 한다.
#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;
}
#include <stdio.h>
int main() {
int a, b, c;
scanf("%d:%d:%d", &a, &b, &c);
printf("%d", b);
return 0;
}
단, 한 자리 일/월은 0을 붙여 두자리로, 년도도 0을 붙여 네자리로 출력한다.
#include <stdio.h>
int main() {
int a, b, c;
scanf("%d.%d.%d", &a, &b, &c);
printf("%02d-%02d-%04d", c, b, a);
return 0;
}
1) 보니깐 1009번이랑 1016번이 없다. ㅇ0ㅇ 아무래도 중간중간에 빠진게 있는거 같다.
2) 생각보다 깊게 알고있지 않으면 어려운 문제들이 많은 것 같다. 그냥 시작하게 된 코테지만 하기 잘한 것 같다.