• 검색 결과가 없습니다.

우석대학교 에너지전기공학과

N/A
N/A
Protected

Academic year: 2021

Share "우석대학교 에너지전기공학과"

Copied!
19
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

전기실험회로 2 (C언어)

강의 (6)

우석대학교 에너지전기공학과

이우금 교수

(2)

/* 퀴즈1 - 2019년 9월 30일- */ /* 아래 소스코드의 오류를 모두 수정하라 (10점).*/ /* 수정 후 아래 한글 파일에 복사하여 (퀴즈1_홍길동), leew.woosuk.ac.kr 로 보내기 바람.*/ /* 시간 내에 보내지 않은 학생은 퀴즈 결시*/

#𝑖𝑛𝑐𝑙𝑢𝑑𝑒 < 𝑠𝑡𝑑𝑖𝑜

,

ℎ > 『

.

𝑖𝑛𝑡 𝑚𝑎𝑖𝑛(𝑣𝑜𝑑) 𝑚𝑎𝑖𝑛(𝑣𝑜

𝑖

𝑑)

{

𝑝𝑟𝑖𝑛𝑡𝑓(" ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗

n

"); 『

\n

𝑝𝑟𝑖𝑛𝑡𝑓("

과목: 전기회로 2 (C 언어

)" \n); (

"

과목: 전기회로 2 (C 언어

)\n

"

);

𝑝𝑟𝑖𝑛𝑡𝑓("

이름: (자기이름 기입)

\n" ("

이름: (자기이름 기입)

\n"

)

𝑝𝑟𝑖𝑛𝑡𝑓(" ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ \n")

:

;

𝑝𝑟𝑖𝑛𝑡𝑓("5 − 2 =

𝑑

\𝑛", 5 − 2);

%𝑑

𝑝𝑟𝑖𝑛𝑡𝑓("5 ∗ 2 = %𝑑 \𝑛"

.

5 ∗ 2);

,

𝑝𝑟𝑖𝑛𝑡𝑓("0/2 = %𝑑 \𝑛",

𝑂

/2);

0

𝑟𝑒𝑡𝑢𝑟𝑛 0;

)

}

(퀴즈 1 검토) 퀴즈검토

(3)

4-1. 주석  주석의 기능  주석은 프로그램 코드를 설명하는 글이며, 실행결과에 영향을 끼치지 않는다.  주석은 프로그램을 위한 것이 아니고, 읽는 사람을 위한 것.  주석은 프로그램의 구조 및 동작을 설명해 주는 문장들이 들어간다. 4-2. 들여쓰기  들여쓰기가 필요한 이유  들여쓰기는 코드의 가독성을 높이기 위해 같은 수준의 코드를 몇 자 안으로 들여 쓰는 것.  들여쓰기를 잘하면 코드를 보기가 매우 편해지나, 들여쓰기가 없으면 코드를 판독하기 매우 어려움.  규모가 큰 프로그램의 경우 들여쓰기와 주석이 없으면 코드를 이해하기 매우 어려워짐. (지난 시간 강의 복습) 지난 시간 강의 복습

(4)

<예시> 주석과 들여쓰기를 하지 않은 코드  무슨 처리를 위한 프로그램인지 쉽게 알 수 없음.

#𝑖𝑛𝑐𝑙𝑢𝑑𝑒 < 𝑠𝑡𝑑𝑖𝑜. ℎ >

𝑖𝑛𝑡 𝑚𝑎𝑖𝑛(𝑣𝑜𝑖𝑑) { 𝑖𝑛𝑡 𝑥; 𝑖𝑛𝑡 𝑦; 𝑖𝑛𝑡 𝑠𝑢𝑚;

𝑥 = 100; 𝑦 = 200; 𝑠𝑢𝑚 = 𝑥 + 𝑦;

𝑝𝑟𝑖𝑛𝑡𝑓(“

두수의 합:

%𝑑", 𝑠𝑢𝑚); 𝑟𝑒𝑡𝑢𝑟𝑛 0; }

(지난 시간 강의 복습) 지난 시간 강의 복습

(5)

4-3. 전처리기

#𝑖𝑛𝑐𝑙𝑢𝑑𝑒 <

𝑠𝑡𝑑𝑖𝑜. ℎ >

 위의 문장은 헤더파일『

𝑠𝑡𝑑𝑖𝑜. ℎ

』를 소스코드 안에 포함하라는 문장임.  여기서 『

#𝑖𝑛𝑐𝑙𝑢𝑑𝑒

』는 전처리기 지시어  전처리기 지시어는

#

기호로 시작하고, 첫 째 열부터 시작함.

#

𝑖𝑛𝑐𝑙𝑢𝑑𝑒

사이에는 공백이 없어야 함.  헤더파일(header file) 이란 코드의 일부분이 들어있는 텍스트파일로서 『

. ℎ

』의 확장자를 가짐.

 『

𝑠𝑡𝑑𝑖𝑜. ℎ

』 는 “standard input output”의 준말로 표준 입출력을 의미함. 표준 입력과 출력에 관한 라이브러리 함수들의 정의가 들어 있음.  표준입력이란 키보드로 부터의 입력을 의미하고, 표준출력이란 모니터의 출력을 의미함. 4-3. 전처리기

#include

<stdio.h>

• 외부 파일을 포함시키라는 의미의 전처리기 • #기호로 시작 • stdio.h는 표준 입출력에 대한 라이브러리 함수의 정의가 들어 있다.

(6)

4-3. 전처리기 (계속)  예제 소스코드에서 컴파일러는 함수

𝑝𝑟𝑖𝑛𝑡𝑓 』

에 대한 정의가 있어야만 컴파일 할 수 있음.  함수 『

𝑝𝑟𝑖𝑛𝑡𝑓( )

』의 정의는 『

𝑠𝑡𝑑𝑖𝑜. ℎ

』에 들어있음. 함수『

𝑝𝑟𝑖𝑛𝑡𝑓( )

』의 컴파일을 위해, 헤더파일『

𝑠𝑡𝑑𝑖𝑜. ℎ

』가 반드시 소스코드에 포함되어야 함. 4-3. 전처리기

/* 첫번째 프로그램 */

int

main(

void

)

{

printf(

"Hello World!"

);

return

0;

}

#include

<stdio.h>

// stdio.h

int

printf(

char

*,…);

stdio.h

(7)

4-4. 함수

𝑖𝑛𝑡

𝑚𝑎𝑖𝑛

(𝑣𝑜𝑖𝑑)』

 위의 문장은 함수

𝑚𝑎𝑖𝑛( )

을 정의하는 문장임.  C프로그램에서 가장 먼저 실행되는 함수가 바로

𝑚𝑎𝑖𝑛( )

 다른 함수들은 직접적 또는 간접적으로

𝑚𝑎𝑖𝑛( )

으로 부터 호출 됨.

𝑚𝑎𝑖𝑛( )

은 반드시 소문자.  함수(function)는 특정 기능을 수행하는 처리 단계들을 괄호로 묶어서 이름을 붙인 것.  함수는 외부에서 보면 입력을 받아서 지시대로 처리하고 결과물을 생성해내는 상자와 같음.  함수 안에는 무엇이 들어 있는가?  함수의 중괄호 안에는 작업의 세부 단계들이 나열되어 있음. 이러한 작업의 세부 단계를 문장(Statement)라고 함.  C에서는 함수 안에만 문장들을 입력할 수 있음. 몇 가지 예외를 제외하고, 함수외부에 문장을 입력하면 오류 발생.  문장은 프로그램을 이루는 가장 기본적인 단위 문장이 모여 함수가 되고 함수가 모여 프로그램이 된다.  문장의 끝은 항상 세미콜론(;)으로 끝나게 된다. 4-4. 함수

(8)

 함수의 구조  함수의 첫 번째 항은 『

𝑖𝑛𝑡

𝑚𝑎𝑖𝑛(𝑣𝑜𝑖𝑑)

함수의 출력형태, 함수의 이름, 함수의 입력형태 등이 차례로 나타남. ※

𝑛𝑜𝑡𝑒:

이 첫 번째 항은 문장이 아니기 때문에 세미콜론을 붙이지 않음에 주의. 

𝑖𝑛𝑡

는 함수의 출력 타입을 나타냄 즉, 함수가 반환하는 값의 형태가 integer (정수형) 

𝑣𝑜𝑖𝑑

는 함수의 입력을 나타내며, void 는 비었다는 뜻으로 함수입력이 없을 을 의미 함.  둘째 줄과 마지막 줄의 중괄호는 함수의 시작과 끝을 의미 함. 

𝑟𝑒𝑡𝑢𝑟𝑛

은 함수를 종료시키면서 값을 반환하는 키워드. 값을 변환하기 위해서는

𝑟𝑒𝑡𝑢𝑟𝑛

다음에 반환 값 0 을 써주면 된다. 4-4. 함수

(9)

 함수의 호출  함수의 호출은 어떻게 하는가? 함수의 시작과 종료를 의미하는 중괄호 사이에 함수의 이름을 적어 넣으면 된다.  함수 안에 있는 문장을 언제 실행 되는 가? 함수가 호출 되면, 그 안에 있는 문장들을 적힌 순서대로 실행 됨. ※

𝑛𝑜𝑡𝑒:

여러 함수 중 가장 먼저 실행되는 것은 함수

𝑚𝑎𝑖𝑛( )

이다. 4-4. 함수

𝑖𝑛𝑝𝑢𝑡( )

문장 1; 문장 2; 문장 3;

𝑜𝑢𝑡𝑝𝑢𝑡( )

𝑝𝑟𝑜𝑐𝑒𝑠𝑠( )

문장 1; 문장 2; 문장 3;

𝑚𝑎𝑖𝑛( )

𝒊𝒏𝒑𝒖𝒕( );

𝒑𝒓𝒐𝒄𝒆𝒔𝒔( );

𝒐𝒖𝒕𝒑𝒖𝒕( );

문장 1; 문장 2; 문장 3;

(10)

4-5. 변수 (variable)  변수란 데이터를 일시적으로 저장할 목적으로 사용하는 메모리 공간.  변수는 왜 필요한가? 데이터가 입력되면 어딘가에 저장해야만 사용할 수 있음.  변수를 사용하지 않은 코드와 사용한 코드 4-5. 변수

(11)

 변수선언  변수선언이란 컴파일러에게 지금부터 이러한 변수를 사용하겠다고 미리 말 해두는 것.  변수를 사용하려면 먼저 변수를 선언하여야 한다!  변수선언은 일반적으로 함수의 첫 부분에 선언 된다.  C언어에서는 다음과 같이 변수를 선언 할 수 있다. 예시)

𝑖𝑛𝑡 𝑥;

𝑖𝑛𝑡 𝑦;

𝑖𝑛𝑡 𝑠𝑢𝑚;

 자료형 (data type)  변수가 저장할 데이터가 정수인지 실수인지, 아니면 또 다른 어떤 데이터인지를 지정  자료형의 분류 • 정수형:

𝑠ℎ𝑜𝑟𝑡, 𝑖𝑛𝑡, 𝑙𝑜𝑛𝑔, 𝑙𝑜𝑛𝑔 𝑙𝑜𝑛𝑔

• 실수형:

𝑓𝑙𝑜𝑎𝑡, 𝑑𝑜𝑢𝑏𝑙𝑒, 𝑙𝑜𝑛𝑔 𝑑𝑜𝑢𝑏𝑙𝑒

• 문자형:

𝑐ℎ𝑎𝑟

4-5. 변수 자료형 변수이름

(12)

 정수형의 범위  int 형:  short 형:  long 형: 일반적으로 int 형과 같음. ※ 오버플로우 (overflow): 변수가 나타낼 수 있은 범위를 넘을 때 발생!!  정수형 선언의 예 『

𝑖𝑛𝑡

𝑐𝑜𝑢𝑛𝑡;

』 // int 형의 변수 count 를 생성. 『

𝑖𝑛𝑡

𝑔𝑟𝑎𝑑𝑒;

』 // short 형의 변수 grade 를 생성. 『

𝑙𝑜𝑛𝑔

𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒;

』 // long 형의 변수 distance 를 생성. 4-5. 변수 약 -21억에서 +21억

(13)

 실수형의 범위

 실수의 표현방법

예시)

(14)

 실수에서의 오버플로우

 실수에서의 언더플로우

4-5. 변수

#include <stdio.h>

int main(void) { float x = 1.2e39; printf("x = %e\n",x); }

숫자가 커서 오버플로우 발생

x = inf 계속하려면 아무 키나 누르십시오 . . . #include <stdio.h>

int main(void) { float x = 1.2e-38; float z = 1.2e-46; printf("x = %e\n",x); printf("z = %e\n",z); } x = 1.234560e-038

숫자가 작아서 언더플로우 발생

(15)

 변수 이름 짓기  변수는 반드시 이름이 있어야 함.  변수이름은 프로그래머가 마음대로 지을 수 있지만, 몇 가지 규칙을 지켜야 함.  변수의 이름이나 함수의 이름은 모두 식별자의 일종 임.  식별자  변수이름, 함수이름 등에 사용되어서 다른 것들과 식별할 수 있게 해주는 것.  식별자는 다음과 같은 규칙에 의해 만들어야 함. • 식별자는 영문자와 숫자, 밑줄 문자 『_ 』로 이루어 진다. • 식별자의 중간에 공백이 들어가면 안됨. • 식별자의 첫 글자는 반드시 영문자 또는 밑줄 문자『_ 』이어야 함. • 식별자는 숫자로 시작할 수 없으며 대문자와 소문자는 구별됨. • C언어의 키워드와 똑같은 식별자는 허용되지 않음. ※ 키워드 (keyword)는 C언어에서 고유한 의미를 가지고 있는 특별한 단어! 예시)

𝑠𝑢𝑚

// 영문 알파벳으로 시작

_𝑐𝑜𝑢𝑛𝑡

// 밑줄 기호로 시작

𝑛𝑖𝑚𝑏𝑒𝑟_𝑜𝑓_𝑝𝑖𝑐𝑡𝑢𝑟𝑒

// 중간에 밑줄 기호를 넣을 수 있음

𝑘𝑖𝑛𝑔3

// 맨 처음이 아니라면, 숫자도 넣을 수 있음 4-5. 변수

(16)

 C언어의 키워드

𝑎𝑢𝑡𝑜 𝑑𝑜𝑢𝑏𝑙𝑒 𝑖𝑛𝑡 𝑠𝑡𝑟𝑢𝑐𝑡

𝑏𝑟𝑒𝑎𝑘 𝑒𝑙𝑠𝑒 𝑙𝑜𝑛𝑔 𝑠𝑤𝑖𝑡𝑐ℎ

𝑐𝑎𝑠𝑒 𝑒𝑛𝑢𝑚 𝑟𝑒𝑔𝑖𝑠𝑡𝑒𝑟 𝑡𝑦𝑝𝑒𝑑𝑒𝑓

𝑐ℎ𝑎𝑟 𝑒𝑥𝑡𝑒𝑟𝑛 𝑟𝑒𝑡𝑢𝑟𝑛 𝑢𝑛𝑖𝑜𝑛

𝑐𝑜𝑛𝑠𝑡 𝑓𝑙𝑜𝑎𝑡 𝑠ℎ𝑜𝑟𝑡 𝑢𝑛𝑠𝑖𝑔𝑛𝑒𝑑

𝑐𝑜𝑛𝑡𝑖𝑛𝑢𝑒 𝑓𝑜𝑟 𝑠𝑖𝑔𝑛𝑒𝑑 𝑣𝑜𝑖𝑑

𝑑𝑒𝑓𝑎𝑢𝑙𝑡 𝑔𝑜𝑡𝑜 𝑠𝑖𝑧𝑒𝑜𝑓 𝑣𝑜𝑙𝑎𝑡𝑖𝑙𝑒

𝑑𝑜 𝑖𝑓 𝑠𝑡𝑎𝑡𝑖𝑐 𝑤ℎ𝑖𝑙𝑒

 좋은 변수이름  변수의 이름을 지을 때는 변수의 역할을 잘 설명하는 이름을 지어야 함. 좋은 변수이름은 전체 프로그램을 읽기 쉽게 만든다. 예시) 연도와 달, 일을 나타내는 변수이름

𝑖, 𝑗, 𝑘 𝑦𝑒𝑎𝑟, 𝑚𝑜𝑛𝑡ℎ, 𝑑𝑎𝑡𝑒

4-5. 변수

(17)

 변수 초기화 (initialization)  변수가 선언되면 변수의 값은 아직 정의되지 않은 상태임.  변수선언과 동시에 값을 넣기 위해서는 변수 이름 뒤에 『

=

』를 붙이고 초기값을 기입. 예시1) 초기값 설정

𝑖𝑛𝑡 𝑥 = 10 ;

𝑖𝑛𝑡 𝑦 = 20 ;

𝑖𝑛𝑡 𝑠𝑢𝑚 = 0 ;

예시2) 바람직하기 않은 초기값 설정

𝑖𝑛𝑡 𝑤𝑖𝑑𝑡ℎ, ℎ𝑒𝑖𝑔ℎ𝑡 = 200 ;

위 코드는 문법적으로 오류는 없으나, width는 초기화 되지 않고, height 만 초기화 되었음! ※

𝑛𝑜𝑡𝑒:

잘못 생각하면, width와 height 모두 200으로 착각할 수 있음. 4-5. 변수 초기값

(18)

4-6. 수식과 연산  산술연산: 컴퓨터의 가장 기본적인 연산.  산술연산자: 사칙연산을 수행하는 연산자.  나눗셈 7/4 =? • 변수선언에서 정수형인 경우:『

𝑖𝑛𝑡

』 7/4 = 1 • 변수선언에서 실수형인 경우: :『

𝑓𝑙𝑜𝑎𝑡

』 7/4 = 1.25 예시) 산술연산자의 예 

𝑦 = 𝑚𝑥 + 𝑏 𝑦 = 𝑚 ∗ 𝑥 + 𝑏

𝑦 = 𝑎𝑥

2

+ 𝑏𝑥 + 𝑐 𝑦 = 𝑎 ∗

𝑥 ∗ 𝑥

+ 𝑏 ∗ 𝑥 + 𝑐

(※ C에서는 거듭제곱의 연산자는 없음!)

𝑚 =

𝑥+𝑦+𝑧 3

𝑚 = 𝑥 + 𝑦 + 𝑧 /3

4-6. 수식과 연산 연산자 기호 사용예 결과값 덧셈 + 7+4 11 뺄셈 - 7-4 3 곱셈 * 7*4 28 나눗셈 / 7/4 1 or 1.25 나머지 % 7%4 3

(19)

 나머지 연산자: 첫 번째 피 연산자를 두 번째 피 연산자로 나누었을 때의 나머지를 계산. 예시1) 

10%2 = 0 10 ÷ 2 = 5

… 나머지 = 0

29%9 = 2 29 ÷ 9 = 3

… 나머지 = 2

5%7 = 5 5 ÷ 7 = 0

… 나머지 = 5

예시2) 나머지 연산자를 이용한 짝수와 홀수 구분 

𝑥%2 = 0

이면

𝑥

는 짝수 

𝑥%2 = 1

이면

𝑥

는 홀수 예시3) 나머지 연산자를 이용한 5의 배수 판단 

𝑥%5 = 0

이면 𝑥 는 5의 배수  부호 연산자  변수나 상수의 부호 변경 예시)

𝑥 = −10;

𝑦 = −𝑥;

// 변수

𝑦

의 값은 10이 됨. 4-6. 수식과 연산

참조

관련 문서

두 변수가 높은 상관관계를 갖는다고 해도, 한 변수가 다른 변수의 원인이 된다는 것을 의미하지는 않는다. 예 , 식당의

 클래스계층 공유어프로치에서는, 부모(parent)클래스에 정의되어 있는 정보의 조작은 자식(child)클래스에서 정의되지 않고, 정의되지 않은 나머지 것만을

최종으로

우석대학교 공자아카데미 又石大学孔子学院.

™ 선언된 이름의 바인딩 정보를

잘못된 서식 문자, 변수의 개수, 변수의 자료형의 오류는 컴파일시 지적하지 않는다.. 서식과 변수의 자료형이 맞지 않으면 엉뚱한

Circular_Int_Queue circular_IntQ(MAX_QUEUE_SIZE); // Queue 생성 및 초기화 /*임계구역을 나누어 스레드간의 공유자원 사용을 관리하게 될

포인터가 가리키는 변수가 없을 때는