티스토리 뷰
이전 글
2021/02/07 - [코딩 공부/C 언어] - C 언어 기초 : scanf 로 원하는 데이터 입력 받기
이전 글에서 이어지는 scanf 함수 정답 풀이 과정입니다.
처음엔 아무것도 없는 프로젝트 화면에서 첫 글자를 쓰기도 막막한데 제가 시작했던 방식대로 따라하시면 처음의 막막함이 조금은 줄어들거에요.
처음엔 #include<stdio.h>도 못 쓰고 있던게 생각나네요...ㅎ
#include<stdio.h>
일단 코딩을 시작하기 전에 헤더파일을 먼저 써 줍니다.
c언어 코딩을 시작할 땐 헤더파일을 먼저 쓰고 시작합니다.
헤더 파일만 써도 뭔가 막막함이 줄어들어요 ㅋㅋ
#include<stdio.h>
void main()
{
}
그 다음엔 메인 함수를 적어줍니다.
c언어는 프로그램을 실행하면 가장 먼저 메인 함수부터 찾거든요.
#include<stdio.h>
void main()
{
char alphabet;
}
그 다음 우리가 맨 처음으로 만들 것은 알파벳 하나를 입력받아서 그 다음 순서 알파벳을 출력하는 프로그램입니다.
알파벳을 입력받으려면 char형 변수가 필요하겠죠.
먼저 char 를 쓰고 변수 이름 alphabet을 선언해줍시다.
변수 이름은 본인이 쓰고 싶은 것을 쓰시면 되는데 무슨 용도인지 한 눈에 알아보기 쉬운 것으로 적는 것이 좋습니다.
#include<stdio.h>
void main()
{
char alphabet;
printf("알파벳 하나를 입력하시오 : ");
}
그 다음 제가 이전 포스트에서 올려드렸던 이미지를 참고해서 printf 함수로 알파벳 하나를 입력하라는 메시지를 띄웁니다.
#include<stdio.h>
void main()
{
char alphabet;
printf("알파벳 하나를 입력하시오 : ");
scanf("%c", &alphabet);
}
알파벳을 입력받아야하니까 scanf 함수가 필요합니다.
다음 줄에서 scanf 함수를 쓰고 입력받을 변수의 자료형에 맞는 서식문자와 변수의 주소를 적어줍니다.
#include<stdio.h>
void main()
{
char alphabet;
printf("알파벳 하나를 입력하시오 : ");
scanf("%c", &alphabet);
printf("%c 다음 알파벳 : %c\n\n\n", alphabet, alphabet + 1);
}
알파벳을 입력받았으면 다음 알파벳을 출력해야하니까 printf 함수를 써야 합니다.
다음 줄에서 printf 함수를 사용해 다음 알파벳을 출력하라는 명령문을 적습니다.
그럼 입력받은 알파벳의 다음 알파벳을 출력하려면 어떻게 해야할까요?
아스키코드에서 알파벳들은 숫자로 차례대로 저장되어 있던 것이 기억나시나요?
컴퓨터는 문자도 숫자로 인식하기 때문에 우리 눈에는 글자로 보이지만 컴퓨터는 입력받은 알파벳도 숫자로 읽고 있습니다.
그러니까 입력받은 알파벳에 1을 더해주면 컴퓨터는 다음 순서 알파벳을 찾아낼 수 있을 것입니다.
그래서 마지막줄 printf에서 서식문자에 변수를 대입할 때 alphabet 변수에 더하기 1을 하면 컴퓨터는 다음 순서 알파벳을 찾아서 출력합니다.
여기까지 하면 첫번째 문제가 해결됩니다.
짝짝짝!!
#include<stdio.h>
void main()
{
//알파벳 하나를 입력받아 다음 순서 알파벳 출력하기
char alphabet;
printf("1. 입력한 알파벳 다음 순서 알파벳 출력하기\n\n");
printf("알파벳 하나를 입력하시오 : ");
scanf("%c", &alphabet);
printf("%c 다음 알파벳 : %c\n\n\n", alphabet, alphabet + 1);
}
첫번째 문제에 구분을 위해서 문장을 좀 더 추가해주었습니다.
쓰셔도 되고 안 쓰셔도 됩니다.
// 슬래시 두 개를 쓰면 그 줄을 주석처리하라는 뜻입니다.
주석처리하면 그 줄은 프로그램을 빌드할 때 실행되지 않습니다.
빌드할 때 잠깐 빼 놓고 실행하고 싶은 문장이 있으면 // 슬래시 두 개를 이용해서 주석처리하시면 됩니다.
비주얼 스튜디오에서는 주석처리하고 싶은 부분을 마우스로 드래그해서 블록지정한 다음
ctrl + / 을 누르면 한 번에 주석처리할 수 있습니다.
주석처리 해제는 ctrl + shift + /
근데 컴퓨터에 따라 단축키가 다른 경우가 많아서 저게 되지 않으면 구글에서 단축키 지정하는 방법 검색해서 본인이 편한 것으로 세팅하시는 것이 좋습니다.
그럼 두번째 문제로 가 보시죠.
#include<stdio.h>
void main()
{
float fnum;
}
두번째 문제는 실수를 입력받아 출력하기입니다.
실수형 변수를 만드려면 float으로 만들어야합니다.
float fnum을 선언해줍니다.
#include<stdio.h>
void main()
{
float fnum;
printf("실수 하나를 입력하시오 : ");
}
그리고 실수 하나를 입력하라는 메시지를 출력합니다.
#include<stdio.h>
void main()
{
float fnum;
printf("실수 하나를 입력하시오 : ");
scanf("%f", &fnum);
}
실수를 입력받아야하니까 scanf 함수를 씁니다.
#include<stdio.h>
void main()
{
float fnum;
printf("실수 하나를 입력하시오 : ");
scanf("%f", &fnum);
printf("입력된 수는 %.2f입니다\n\n\n", fnum);
}
그 다음 마지막으로 입력된 수를 소숫점 둘째자리까지만 출력합니다.
여기까진 쉽죠?
세번째 문제로 가 봅시다.
#include<stdio.h>
void main()
{
int kor, eng, math, sum = 0;
float avrg = 0;
}
세번째 문제는 국어 영어 수학 점수를 입력받아서 합계와 평균을 구하기입니다.
국어 영어 수학 점수를 저장할 변수 kor, eng, math는 어차피 값을 입력받을 것이라 초기화를 하지 않고 냅두고
마지막으로 계산된 값을 저장할 변수 sum과 avrg는 모두 0으로 초기화를 해 주었습니다.
안 하셔도 크게 상관은 없지만 혹시 모를 오작동을 막아주려고...
변수를 처음 만들고 초기화를 해 주지 않으면 그 변수에는 쓰레기값이 들어있어 출력하면 이상한 숫자와 글자가 출력됩니다.
여기서 0을 넣어주면 쓰레기값이 모두 사라지고 깔끔하게 0만 들어있게 되는 것이죠.
#include<stdio.h>
void main()
{
int kor, eng, math, sum = 0;
float avrg = 0;
printf("국어 점수를 입력하시오 : ");
scanf("%d", &kor);
printf("영어 점수를 입력하시오 : ");
scanf("%d", &eng);
printf("수학 점수를 입력하시오 : ");
scanf("%d", &math);
}
먼저 국어 영어 수학 점수를 입력받습니다.
#include<stdio.h>
void main()
{
int kor, eng, math, sum = 0;
float avrg = 0;
printf("국어 점수를 입력하시오 : ");
scanf("%d", &kor);
printf("영어 점수를 입력하시오 : ");
scanf("%d", &eng);
printf("수학 점수를 입력하시오 : ");
scanf("%d", &math);
sum = kor + eng + math;
}
점수들을 입력받았으면 이제 연산을 해 줍니다.
합을 저장할 변수 sum에 세 과목을 더한 값을 넣어줍니다.
이렇게 쓰면 sum에는 세 과목을 더한 값이 들어가게 됩니다.
#include<stdio.h>
void main()
{
int kor, eng, math, sum = 0;
float avrg = 0;
printf("국어 점수를 입력하시오 : ");
scanf("%d", &kor);
printf("영어 점수를 입력하시오 : ");
scanf("%d", &eng);
printf("수학 점수를 입력하시오 : ");
scanf("%d", &math);
sum = kor + eng + math;
avrg = (float)sum / 3.0;
}
그 다음 평균을 저장할 변수 avrg에 sum을 3으로 나눈 값을 넣어줍니다.
근데 여기서 주의하셔야 할 점이 있다면 sum 앞에 (float)을 써 주어야 한다는 것입니다.
앞전 암시적 형변환과 명시적 형변환에서 배웠듯이 서로 다른 자료형 간에 연산이 일어나면 컴퓨터는 우선순위가 더 높은 자료형으로 결과값을 제대로 저장하고 우선순위가 낮은 자료형으로는 제대로 저장하지 못하고 데이터를 일부 손실시키게 됩니다.
그래서 이번 연산을 수행할 때에만 일시적으로 int형 sum을 float형으로 바꿔서 연산하라는 뜻으로 (float)을 sum의 앞에 적어주는 것입니다.
이렇게 적으면 소숫점 자리까지 정상적으로 연산되는 모습을 볼 수 있습니다.
그리고 실수형 연산이기 때문에 그에 맞춰서 3.0이라고 소숫점을 적어주시면 좋습니다.
#include<stdio.h>
void main()
{
int kor, eng, math, sum = 0;
float avrg = 0;
printf("국어 점수를 입력하시오 : ");
scanf("%d", &kor);
printf("영어 점수를 입력하시오 : ");
scanf("%d", &eng);
printf("수학 점수를 입력하시오 : ");
scanf("%d", &math);
sum = kor + eng + math;
avrg = (float)sum / 3.0;
printf("세 과목의 합계 : %d점\n", sum);
printf("세 과목의 평균 : %.2f점\n\n\n", avrg);
}
그리고 마지막으로 세 과목의 합계와 평균을 출력해주면 세번째 문제도 마무리됩니다.
이제 마지막 문제!
#include<stdio.h>
void main()
{
int age;
char name[20];
}
마지막 문제는 이름과 나이를 입력받아 출력하기입니다.
먼저 이름과 나이를 입력받을 변수 age와 name을 만듭시다.
이름은 문자 하나가 아닌 여러 문자가 합쳐진 문자열이기때문에 name변수를 만들 때 [ ] 대괄호를 써서 배열로 만듭시다.
대괄호 안에 쓴 숫자만큼 문자를 저장할 수 있는 배열을 만들 수 있습니다.
한글은 배열 두 칸을 차지하기 때문에 넉넉하게 20칸으로 만들었습니다.
(영어와 띄어쓰기 등은 한 칸, 한글과 특수문자는 두 칸 차지)
#include<stdio.h>
void main()
{
int age;
char name[20];
printf("이름을 입력하시오 : ");
scanf("%s", name);
printf("나이를 입력하시오 : ");
scanf("%d", &age);
printf("이름 : %s\t나이 : %d세\n", name, age);
}
그 다음은 뭐 쉽습니다.
위에서 계속 했던대로 이름과 나이를 입력받고 마지막에 출력하기~
name 문자열 변수에 이름을 입력받을 때에 &를 쓰지 않아도 된다는 것만 주의하시면 이번 문제도 퍼펙트입니다.
짝짝짝!!!!
#include<stdio.h>
void main()
{
//알파벳 하나를 입력받아 다음 순서 알파벳 출력하기
char alphabet;
printf("1. 입력한 알파벳 다음 순서 알파벳 출력하기\n\n");
printf("알파벳 하나를 입력하시오 : ");
scanf("%c", &alphabet);
printf("%c 다음 알파벳 : %c\n\n\n", alphabet, alphabet + 1);
//실수를 입력받아 출력하기
float fnum;
printf("2. 실수를 입력받아 출력하기\n\n");
printf("실수 하나를 입력하시오 : ");
scanf("%f", &fnum);
printf("입력된 수는 %.2f입니다\n\n\n", fnum);
//국어 수학 영어 점수를 입력받아 합계와 평균 출력하기
int kor, eng, math, sum = 0;
float avrg = 0;
printf("3. 세 과목 합계와 평균점수 출력하기\n\n");
printf("국어 점수를 입력하시오 : ");
scanf("%d", &kor);
printf("영어 점수를 입력하시오 : ");
scanf("%d", &eng);
printf("수학 점수를 입력하시오 : ");
scanf("%d", &math);
sum = kor + eng + math;
avrg = (float)sum / 3.0;
printf("세 과목의 합계 : %d점\n", sum);
printf("세 과목의 평균 : %.2f점\n\n\n", avrg);
//이름과 나이를 입력받아 출력하기
int age;
char name[20];
printf("4. 이름과 나이를 입력받아 출력하기\n\n");
printf("이름을 입력하시오 : ");
scanf("%s", name);
printf("나이를 입력하시오 : ");
scanf("%d", &age);
printf("이름 : %s\t나이 : %d세\n", name, age);
}
마지막으로 정리한 정답 코드입니다.
프로그램이 실행되었을 때 구분을 쉽게 하려고 문장을 좀 더 추가해보았습니다.
제 풀이 과정이 도움이 되었길 바라며...
다음엔 연산자 파트로 돌아오겠습니다.
다음에 만나요!
'코딩 공부 > C 언어' 카테고리의 다른 글
C 언어 기초 : 연산자 2 (0) | 2021.04.16 |
---|---|
C 언어 기초 : 연산자 1 (0) | 2021.04.14 |
C 언어 기초 : scanf 로 원하는 데이터 입력 받기 (0) | 2021.02.07 |
C언어 기초 : 암시적 형변환과 명시적 형변환 (0) | 2021.02.06 |
C언어 기초 : 자료형 (0) | 2021.01.24 |
- Total
- Today
- Yesterday
- 아이패드
- 애플
- hackerrank
- 하드웨어
- BFS
- c언어
- C언어기초
- 그리디
- 알고리즘
- 캐나다생활
- 코딩공부
- 너비우선탐색
- 다이나믹프로그래밍
- 컴퓨터공부
- 기초
- dp
- greedy
- 컴퓨터사이언스
- 스위프트플레이그라운드
- 깊이우선탐색
- 백준
- 프로그래머스
- 컴퓨터
- 프로그래밍
- 해커랭크
- 문제풀이
- 캐나다
- 영어공부
- c++
- DFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |