개발자/국비지원 SW

국비지원 27일차 - 아두이노 개발환경, C 자료형, printf, scanf, UNIQUE , NOT NULL

성찬쿤 2020. 5. 21. 10:53

아두이노 C개발 준비

1. MinGW 설치 
www.mingw.org
Minimalist GNU for Windows
윈도우용 무료 GNU 소프트웨어 도구 모음
C런타임 라이브러리를 컴파일하고 윈도우 프로그램 개발을 위한 
GCC툴체인.

2. 환경설정
path에 아래 경로 추가
C:\MinGW\bin
도스창 열어 gcc --version으로 컴파일러 버전 확인

컴파일 --> 목적파일 생성 --> 실행파일
                       링커
gcc -c hello.c (cmd)
  ==> hello.o 생성    ==> gcc -o hello hello.c  ==> hello.exe 생성 ==> hello 실행

Eclipse에서 작업 환경
Eclipse에서 switch workspace해서 directory 바꾸고 
Help -> Market place -> cdt 다운로드

ctrl + b 빌드 ctrl + f11 실행
빌드는 한 번만 해서 object 파일이 생기면 실행만 해도 된다.

#include <stdio.h>
#define MIN 20
//심볼릭 상수는 반드시 선언과 동시에 초기화 되어야 한다.
const int VAR =100; // SYMBOLIC 상수

int sum(int x, int y);//사용자 정의 함수를 선언

int main(){

	printf("Hello\n");
	printf("VAR=%d",VAR);
    //VAR=200; 상수는 값 변경 불가
	int num = sum(10,20);
	printf("\n%d",num);

	return 0;
}

int sum(int x, int y){
	return x+y;
}

C 자료형, printf, scanf

#include <stdio.h>

int main(){

	printf("char=%d bytes\n",sizeof(char));
	printf("short=%d bytes\n",sizeof(short));
	printf("int=%d bytes\n",sizeof(int));
	printf("long=%d bytes\n",sizeof(long));
	printf("float=%d bytes\n",sizeof(float));
	printf("double=%d bytes\n",sizeof(double));
	printf("unsigned long=%d bytes\n",sizeof(unsigned long));
	printf("long long=%d bytes\n",sizeof(long long));

	float num1 = 3.123456789123456;//소수점 이하 6자리
	double num2 = 3.123456789123456;//소수점 이하 16자리
	printf("변수 num1에 저장된 값 : %.20f\n",num1);
	//float유형은 소수점 이하 6자리까지 정확하게 출력되고, 7자리 부터는 틀린값이 저장되어 있다.
	printf("변수 num2에 저장된 값 : %.20f\n",num2);

	char a = 'A';
	printf("변스 a에 저장된 값: %c\n", a); //A
	printf("변스 a에 저장된 값: %d\n", a); //65 아스키 코드

	return 0;
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
#include <stdio.h>

int main(){
	//printf("출력양식",변수1, 변수2 ....)
	//주어진 양식으로 출력할 때 사용
	printf("|%d|\n",123); //숫자 길이만큼 폭이 자동 지정됨
	printf("|%5d|\n",123);//총 5자리로 오른쪽 부터 채움
	printf("|%-5d|\n",123);//왼쪽부터 채움
	printf("|%05d|\n",123);//오른쪽부터 채우고 남은 부분은 0으로 채움
	printf("|%6.1f|\n",123.45);
	printf("|%-8.3f|\n",123.45);
	return 0;
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
#include <stdio.h>

int main(){
	int x, y, sum;
	scanf("%d",&x);
	scanf("%d",&y);
	sum = x+y;
	printf("%d + %d = %d\n",x,y,sum);
	return 0;
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
#include <stdio.h>
#define PI 3.141595

float area(int r);

int main(){
	int r;
	scanf("%d",&r);
	float z= area(r);
	printf("반지름은 %d 면적은 %f",r,z);

	return 0;
}
float area(int r){
	float z = (float)PI*r*r;
	return z;
}

%d : 10진수 정수로 변환하여 출력(정수형, 문자형)
%f : 부동소수점 형식으로 (float)
%lf : double형
%e : 지수 형태로 출력(실수형)
%c : 한 문자 출력(정수형, 문자형)
%s : 문자열 출력
%o : 8진수(정수형, 문자형)
%x : 16진수(정수형, 문자형)

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
UNIQUE 제약조건
- 중복된 값을 가질 수 없음을 의미
- PK와 유사하나 NULL을 허용한다.
- 2개 이상 컬럼에 적용할 수도 있다. ==> COMPOSITE UNIQUE KEY
- UNIQUE KEY에 대해 UNIQUE INDEX가 생성된다.

1) 컬럼 수준 제약

create table uni_tab1(
  deptno number(2) constraint uni_tab1_deptno_uk unique,
  dname varchar2(20),
  loc varchar2(20)
);

insert into uni_tab1
values(10,'영업부서','서울');

insert into uni_tab1
values(20,'기획부서','서울');

select * from user_constraints
where table_name='UNI_TAB1';

2) 테이블 수준 제약

create table uni_tab2(
  deptno number(2),
  dname varchar2(10),
  loc varchar2(10),
  constraint uni_tab_2_uk unique (deptno)
);

NOT NULL 제약조건
- NULL을 허용하지 않도록 보장하는 제약조건
- NOT NULL 제약조건은 컬럼 수준에서만 제약할 수 있다.

create table men(
  no number(4) primary key,
  name varchar(20) constraint men_name_nn not null, --null을 허용하지 않는다.
  tel varchar2(20)--null 허용
);