#include <stdio.h>
/* 입력받은 수 만큼 별표 출력 */
int main(void)
{
int input = 0;
int i = 0, j = 0, k = 0;
printf("라인수 입력 : ");
scanf("%d", &input);
i = input;
for (i; i > 0; i--)
{
j = i - 1;
for (j; j > 0; j--)
{
printf(" ");
}
k = 2 * (input - i) + 1;
for (k; k > 0; k--)
{
printf("*");
}
printf("\n");
}
return 0;
}
const 선언이 갖는 의미, 안정성. const 선언은 추가적인 기능을 제공하기 위한것이 아니라, 코드의 안정성을 높이기 위한 것이다. 따라서 이러한 const의 선언을 소홀히 하기 쉬운데, const선언과 같이 코드의 안전성을 높이는 선언은 가치가 매우 높다. 즉, 내가 상수라고 생각하는, 즉 값이 바뀌지 않는다는 값 반드시 const선언을 해서 안전성을 높이는 습관을 갖도록 하자.
예를들면 아래 pi 값은 누가 뭐래도 3.1415... 으로 정해져 있는 상수값이다.
이 pi의 값을 실수로 누군가 pi라는 변수를 사용해서 바뀌는 것을 방지.
#include <stdio.h>
int main()
{
const double PI = 3.1415; // PI는 영원히 3.1415이다. 어떠한 경우에도 값이 바뀔일이 없는데, 이런 경우 const를 선언해서 나중에 PI값에 실수를 하는 것을 막아준다.
double rad;
// PI = 3.1454; 즉, 이와 같이 값에 이상한 값을 실수로 넣는 것을 방지.
return 0;
}
보통 흔히 선언하는 int, float 등은 현재 컴퓨터의 자원을 고려하여 컴퓨터가 유동적으로 알아서 해주는데,
임베디드 시스템 등의 제한된 메모리를 갖는 MCU는 그 자원을 최대한 아껴써야 한다.
한정된 자원을 효율적으로 쓰기 위해서는 딱 맞는 메모리를 부여해야한다.
임의로 비트를 지정한 선언을 아래와 같이 할 수 있다.
또한 printf문으로 출력시 아래와 같이 할 수 있다.
#include <stdio.h>
#include <Stdint.h> //메모리를 고정적으로 설정하기 위한 라이브러리.
/*
이식성을 염두해 둔 코드를 작성할때.
컴파일러 환경에 따라, char, short, int, long, long long 의 메모리크기가 다르게 설정될 수 있는데,
이를 강제적으로 고정된 메모리에 할당하게 만들어주는 라이브러리.
*/
int main()
{
int8_t num1 = -128; // 8비트(1바이트) 크기의 부호 있는 정수형 변수 선언
int16_t num2 = 32767; // 16비트(2바이트) 크기의 부호 있는 정수형 변수 선언
int32_t num3 = 2147483647; // 32비트(4바이트) 크기의 부호 있는 정수형 변수 선언
int64_t num4 = 9223372036854775807; // 64비트(8바이트) 크기의 부호 있는 정수형 변수 선언
// int8_t, int16_t, int32_t는 %d로 출력하고 int64_t는 %lld로 출력
printf("%d %d %d %lld \n", num1, num2, num3, num4); // -128 / 32767 / 2147483647 / 9223372036854775807
uint8_t num5 = 255; // 8비트(1바이트) 크기의 부호 없는 정수형 변수 선언
uint16_t num6 = 65535; // 16비트(2바이트) 크기의 부호 없는 정수형 변수 선언
uint32_t num7 = 4294967295; // 32비트(4바이트) 크기의 부호 없는 정수형 변수 선언
uint64_t num8 = 18446744073709551615; // 64비트(8바이트) 크기의 부호 없는 정수형 변수 선언
// uint8_t, uint16_t, uint32_t는 %u로 출력하고 uint64_t는 %llu로 출력
printf("%u %u %u %llu \n", num5, num6, num7, num8); // 255 / 65535 / 4294967295 / 18446744073709551615
return 0;
}
#include<stdio.h>
int ANDgate(int a, int b)
{
int output = (a * b);
return output;
}
int ORgate(int a, int b)
{
int output = a + b;
if (output == 2)
return 1;
return output;
}
int NANDgate(int a, int b)
{
int output;
output = ANDgate(a, b);
if (output == 0)
output = 1;
else
output = 0;
return output;
}
int NORgate(int a, int b)
{
int output;
output = ORgate(a, b);
if (output == 0)
output = 1;
else
output = 0;
return output;
}
int main()
{
int a = 0;
int b = 0;
int result = 0;
// 입력
printf("1 또는 0값을 입력하시오:\n");
scanf_s("%d %d", &a, &b);
// 예외처리
if (a > 1 || b > 1)
{
printf("잘못 입력하셨습니다.");
return 0;
}
// 결과출력
result = NORgate(a, b);
printf("%d", result);
return 0;
}