프로그래밍03 - C언어 서식 문자, pragma region, 관계연산자, 논리연산자, scanf 함수
23-03-17 수업 내용 입니다.
C언어에 대한 내용을 계속해서 수업합니다.
Visual Studio 2022 를 사용했습니다.
사용한 사진 자료의 출저는 윤성우의 열혈C 프로그래밍 입니다.
====== 오렌지 미디어 ====== (orentec.co.kr)
새프로젝트 만들기 > 템플릿 선택은 아래와 같이
프로젝트 이름은 아무렇게나 상관 없고, 소스파일 항목에 파일 유형만 *.c로 생성하면 됩니다.
서식문자를 사용한 입력출력의 활용
#include<stdio.h>
int main()
{
int n;
float f;
double d;
printf("정수를 입력 하시오");
scanf_s("%d", &n);//입력 감지 후 n에 대입함
printf("%4d \n", n);//폭 확보. 필드에 폭4칸을 확보하고 오른쪽 정렬해서 출력
printf("%-4d \n", n);//필드에 폭 4칸을 확보하고 왼쪽에 정렬해서 출력하기
printf("%+4d \n", n);//필드에 폭 4칸을 확보하고 양수면+를 표기한 후 오른쪽 정렬
printf("실수를 입력 하시오");
scanf_s("%f", &f);
printf("%1f \n", f);
printf("실수입력(double) :"), scanf_s("%lf", &d);
printf("%5f \n", d);
return 0;
}
출력창을 확인하면 확보된 칸수를 확인할 수 있다.
region 을 사용하면 접는 기능을 사용하여 접었다 폈다 할 수 있어요.
Visual Studio 상에서 region이라고 치고, 자동완성을 시키면
이런식으로 자동완성 되는데 MyRegion부분을 입맛대로 수정하면
임의의 이름으로 설정하고
pragma 사이의 부분을 접을 수 있습니다.
- 부분을 클릭해서 접었다 폈다 할 수 있네요.
위에서 연습했던 부분을 주석처리한 뒤에 pragma 부분에 넣어두기로 합니다.
전위 증가/감소
후위 증가/감소
1을 더하는 연산을 진행할 것인데, 자신이 속한 문장을 연산하기 전에 먼저 처리 할 지
++n
자신이 속한 문장을 끝내고 처리 할 지 결정한다.
n++
연습문제 1
#include<stdio.h>
int main()
{
int num1 = 12;
int num2 = 12;
printf("num1: %d \n", num1);
printf("num1++: %d \n", num1++); //후위 증가 속해있는 문장을 끝낸 후 증가한다.
printf("num1: %d \n\n", num1);
printf("num2: %d \n", num2);
printf("++num2: %d \n", ++num2); //전위 증가 속해 있는 문장에서 증가한채로 연산한다.
printf("num2: %d \n\n", num2);
printf("num1: %d \n", num1);
printf("num1--: %d \n", num1--); //후위 감소 속해있는 문장을 끝낸 후 증가한다.
printf("num1: %d \n\n", num1);
printf("num2: %d \n", num2);
printf("--num2: %d \n", --num2); //전위 감소 속해 있는 문장에서 증가한채로 연산한다.
printf("num2: %d \n", num2);
return 0;
//반환값 ←메인함수를 빠져나가면서 정수 0으로 반환 0으로 반환할 경우 정상적인 종료로 인식함
}
본인이 속한 문장 하나를 끝낸 후에 1을 더하거나 뺀다고 생각하면 된다.
연습문제 2
#include<stdio.h>
int main()
{
int num1 = 10;
int num2 = (num1--) + 2;
printf("num1: %d \n", num1);
printf("num2: %d \n", num2);
return 0;
}
결과를 보면서 전/후위 증가/감소 에 대해 이해하고 넘어 가요.
관계 연산자
관계 연산자를 사용해서 계산하면 조건이참이면 1을 반환, 조건이 거짓이면 0을 반환한다.
연습문제
#include<stdio.h>
int main()
{
int num1 = 10;
int num2 = 12;
int result1, result2, result3;
result1 = (num1 == num2);
result2 = (num1 <= num2);
result3 = (num1 > num2);
printf("result1: %d \n", result1);
printf("result2: %d \n", result2);
printf("result3: %d \n", result3);
return 0;
}
결과창을 보면 참 거짓 판별해서 0과 1이 반환됨을 볼 수 있다.
논리 연산자
#include<stdio.h>
int main()
{
int num1 = 10;
int num2 = 20;
int result1, result2, result3;
result1 = (num1 == 10 && num2 == 12);
result2 = (num1 < 12 || num2>12);
result3 = (!num1);//원래 값이 1보다 커서 true 였는데 !가 들어가서 false가 되었다.
printf("result1: %d \n", result1);
printf("result2: %d \n", result2);
printf("result3: %d \n", result3);
return 0;
}
첫번째 결과 num1과 num2의 값 중 우측 num2==12는 거짓이다.
&&은 AND 게이트이므로 둘중 하나만 거짓이어도 false값인 0이 출력된다. 따라서 0이 출력됨
두번째 결과 둘중 하나만 참이면 참(true)이 출력된다. 관계연산 결과는 둘다 참이므로 1이 출력됨
세번째 결과는 주석에 나와있다. num1의 값은 10인데, 이는 bool 자료형에 따르면 무조건 참, 1이다.
하지만 NOT 게이트가 적용되어있기 때문에 거짓, 0이 출력된 모습이다.
정수 입력을 위한 scanf 함수 호출
#include<stdio.h>
int main()
{
int result;
int num1, num2;
printf("정수 one: ");
scanf_s("%d", &num1); //변수명 앞에 붙은 &은 어디있는지 모르니까 주소값을 찾아준 것이다.
printf("정수 two: ");
scanf_s("%d", &num2); //scanf함수 에서 정수형태를 입력 받으라는 이야기.
result = num1 + num2;
printf("%d + %d = %d \n", num1, num2, result);
return 0;
{
문제 풀어보기
(더보기를 누르면 답이 나옵니다.)
1번 문제
프로그램 사용자로부터 두개의 정수를 입력 받아서 두개의 수를 가지고 뺄셈과 곱셈의 결과를 출력해 보자
#include<stdio.h>
int main()
{
int num1, num2;
printf("정수 두개를 입력 하십시오: ");
scanf_s("%d %d", &num1, &num2);
printf("뺄셈의 결과 입니다. %d - %d = %d\n", num1, num2, num1 - num2);
printf("곱셈의 결과 입니다. %d × %d = %d\n", num1, num2, num1 * num2);
return 0;
}
출력 화면은 아래와 같이 나온다.

2번째 문제
세개의 정수를 입력 받아서 다음의 결과를 출력해보는 프로그램을 작성해 보자
정수 세개 입력 : num1 num2 num3
2 * 4 +6 =14
#include<stdio.h>
int main()
{
int result;
int num1, num2, num3;
printf("세개의 정수를 입력하시오: ");
scanf_s("%d %d %d", &num1, &num2, &num3);
result = num1 * num2 + num3;
printf("%d × %d + %d = %d \n", num1, num2, num3, result);
return 0;
}
출력 화면은 아래와 같이 나온다.

3번째 문제
하나의 정수를 입력 받아서 그 수의 제곱의 결과를 출력하는 프로그램을 작성해보자
예를들면 5가 입력값인 경우 결과값이 25이다
#include<stdio.h>
int main()
{
int num1;
printf("제곱할 수를 입력하시오: ");
scanf_s("%d", &num1);
printf("%d의 제곱은 %d 입니다.", num1, num1*num1);
return 0;
}
.

4번째 문제
두개의 정수를 입력 받은 후 나누어서 몫과 나머지를 각각 출력해 보자
7과 2가 입력될 경우 몫:3 나머지1
#include<stdio.h>
int main()
{
int num1, num2;
printf("두개의 정수를 입력하시오 :");
scanf_s("%d %d", &num1, &num2);
printf("%d ÷ %d = %d\n", num1, num2, num1 / num2);
printf("%d %% %d = %d\n", num1, num2, num1 % num2);
printf("몫: %d\n", num1 / num2);
printf("나머지: %d\n", num1 % num2);
return 0;
}
