Download presentation
Presentation is loading. Please wait.
1
2장 프로그래밍 기초
2
2장 프로그래밍 기초 프로젝트 학습 목표 자기소개 수의 차이 구하기 평균과 표준편차 변수의 종류 및 이해
라이브러리 함수 printf()와 scanf() 함수의 사용법 이해 조건문, 제어 구조, 함수의 사용법 이해 배열과 포인터의 기본 개념 이해 충북대학교 소프트웨어학과
3
2.1 자기소개 프로젝트 본인이 다니는 학과, 학년, 입학년도, 이름을 입력 받고, 본인을 소개하는 문장을 출력하는 프로그램을 작성하라. 관련 주제 변수 선언 방법 정수 문자열 입출력 방법 printf()와 scanf() 사용법 이해 충북대학교 소프트웨어학과
4
요구사항 분석 목표 요구사항 분석 무엇을 해결할지 개념을 명확하게 정리한다.
사용 사례를 분석하기 위하여, 입출력 화면을 설계한다. 요구사항 분석 사용자가 입력한 데이터를 형식을 변경하여 출력한다. 자기소개 입출력 화면 입력 출력 정보를 입력하세요. 학과: 소프트웨어학과 학년: 1 입학년도: 13 이름: 고길동 나는 소프트웨어학과 1학년 13학번 고길동입니다. 충북대학교 소프트웨어학과
5
자료형과 변수 자료형 변수 선언 방법 식별자(identifier): 변수 및 함수 이름
변수를 할당할 기억장치 크기와 내부 표현 방법 종류: char, int, float, double 변수 선언 방법 자료형 변수이름1[, 변수이름2, …]; 식별자(identifier): 변수 및 함수 이름 영문자, 숫자, _(밑줄 기호)를 조합하여 만든다. 첫 번째 글자는 숫자일 수 없다. C 언어는 대문자와 소문자를 구별한다. 예약어(reserved word)는 식별자로 사용할 수 없다. 충북대학교 소프트웨어학과
6
변수 선언 예 char c1, c2; // 문자형 변수 두 개를 선언한다.
int grade; // 정수형 변수 한 개를 선언한다. float _under; // 실수형 변수 한 개를 선언한다. int for; // 예약어를 변수로 사용해서 잘못된 선언이다. int 3M; // 첫 번째 문자로 숫자가 사용되었으므로 잘못된 선언. int threeM, ThreeM; // 서로 다른 변수이다. 충북대학교 소프트웨어학과
7
배열 동일한 자료형의 변수를 여러 개 선언 선언 방법 배열 선언 예 자료형 배열이름[배열크기];
배열의 크기는 항상 정수형 상수 배열의 원소는 배열이름[0]~배열이름[크기-1] 배열 선언 예 int score[40]; // score[0] ~ score[39] 충북대학교 소프트웨어학과
8
문자와 문자열 문자(char) 문자열(string) 한 개의 영문자 또는 숫자 저장
문자형 배열 문자열은 큰 따옴표로 표시: 예) “hello”, “123”, “한글” 한글 한 글자는 두 개의 영문자에 해당한다. C 언어에서 문자열의 끝을 0(널, NULL)로 표시한다. 충북대학교 소프트웨어학과
9
자료구조 설계 요구사항 분석 결과로부터 입력 데이터와 출력 데이터를 저장할 자료구조를 결정한다. 자기소개 문제 자료구조 결정
요구사항 분석 결과로부터 입력 데이터와 출력 데이터를 저장할 자료구조를 결정한다. 자기소개 문제 입력 데이터 = 출력 데이터 학과, 학년, 입학년도, 이름 자료구조 결정 char dept[20]; // 학과를 저장할 문자열 변수 int grade; // 학년을 저장할 정수형 변수 int year; // 입학년도를 저장할 정수형 변수 char name[20]; // 이름을 저장할 문자열 변수 충북대학교 소프트웨어학과
10
문제해결 방법 입력 데이터로부터 출력 데이터를 유도하는 방법을 해결 한다. 자기소개 문제
입력 데이터를 가공하지 않고 그대로 출력한다. 출력 데이터 = 입력 데이터 충북대학교 소프트웨어학과
11
알고리즘 설게 문제 해결 방법을 프로그램으로 구현할 수 있도록 처리 절차를 기술한다. 자기소개 알고리즘
문제 해결 방법을 프로그램으로 구현할 수 있도록 처리 절차를 기술한다. 자기소개 알고리즘 “정보를 입력하세요.” 안내문을 출력한다. 학과를 입력 받는다. 학년을 입력 받는다. 학번을 입력 받는다. 이름을 입력 받는다. 자기 소개 글을 출력한다. 충북대학교 소프트웨어학과
12
printf() printf() 함수 사용 예 #include <stdio.h>
int printf(const char *format, …); 기능: 표준 출력장치(즉, 화면)으로 형식화된 문자열을 출력한다. 파라미터 const char *format: 표준출력장치로 출력할 문자열 추가 파라미터(…): format 안에 포함되어 있는 변환 기호 대신에 출력 할 값을 저장하고 있는 변수 리턴 성공적으로 출력한 문자의 수 (일반적으로 사용하지 않는다.) printf() 함수 사용 예 printf(“안녕하세요?\nprintf() 함수의 사용법을 소개합니다.\n”); printf(“정수형 변수의 값은 %d 입니다.\n”, varint); printf(“문자열의 내용은 %s 입니다.\n”, str); printf(“여러 개의 변환 기호를 포함할 수도 있습니다\n”); printf(“정수의 값은 %d, 문자열의 값은 %s 입니다.\n”, varint, str); 충북대학교 소프트웨어학과
13
변환 기호 변환 기호의 예 %c: 문자형 변수의 값을 문자로 변환하여 출력한다.
%d: 정수형 변수의 값을 십진수로 변환하여 출력한다. %f: 실수형 변수의 값을 십진수로 변환하여 출력한다. %s: 문자형 배열에 저장되어 있는 문자열을 출력한다. \n: 문자열을 출력하고, 다음 줄로 이동한다. 충북대학교 소프트웨어학과
14
scanf() #include <stdio.h> int scanf(const char *format, …) 사용 예
기능: 표준입력장치(즉, 키보드)에서 데이터를 읽는다. 파라미터 const char *format: 읽을 데이터의 형식을 나타내는 문자열. 추가 파라미터(…): 데이터를 받을 변수의 포인터 리턴 성공적으로 읽은 데이터의 수 (일반적으로 사용하지 않음) 사용 예 scanf(“%d”, &grade); // int grade에 데이터를 입력하는 방법 scanf(“%s”, dept); // char dept[20]에 데이터를 입력하는 방법 충북대학교 소프트웨어학과
15
자기소개 구현 #include <stdio.h> // 헤더 파일 포함 int main() {
int main() { char dept[20], name[20]; // 지역변수 선언 int grade, year; // 지역변수 선언 printf("정보를 입력하세요.\n\n"); // 안내문 출력 printf("학과: "); // 안내문 출력 scanf("%s", dept); // 학과 입력 printf("학년: "); // 안내문 출력 scanf("%d", &grade); // 학년 입력 printf("입학년도: "); // 안내문 출력 scanf("%d", &year); // 입학년도 입력 printf("이름: "); // 안내문 출력 scanf("%s", name); // 이름 입력 // 자기소개 출력 printf("\n나는 %s %d학년 %d학번 %s입니다.\n", dept, grade, year, name); return 0; // main() 함수의 리턴문 } 충북대학교 소프트웨어학과
16
실행 결과 충북대학교 소프트웨어학과
17
2.2 수의 차이 구하기 문제 세 개의 수를 입력 받고, 그 중에서 가장 큰 값과 가장 작 은 값의 차이를 구하여 출력하라. 관련 주제 float 형 변수 조건문 함수 사용 방법 하향식 프로그램 구현 충북대학교 소프트웨어학과
18
요구사항 분석 문제 입출력 화면 설계 세 개의 수 중에서 최대값과 최소값을 구하고, 두 수의 차 이를 출력한다.
실수를 사용한다. 입출력 화면 설계 입력 출력 세 개의 수를 입력하세요. 첫 번째 수: 47.6 두 번째 수: -20.4 세 번째 수: 100.1 가장 큰 수와 작은 수의 차이 = 120.5 충북대학교 소프트웨어학과
19
자료구조 설계 입력 데이터: 사용자에게 입력 받을 세 개의 수 출력 데이터: 최대값과 최소값의 차이
float num1, num2, num3; 출력 데이터: 최대값과 최소값의 차이 float difference; 처리 과정에서 필요한 데이터 float max, min; 충북대학교 소프트웨어학과
20
문제해결 방법 예) num1 = 47.6, num2 = -20.4, num3 = 100.1 미해결 문제
최대값을 구한다. max = 100.1 최소값을 구한다. min = -20.4 차이를 구한다. difference = max - min = 120.5 미해결 문제 세 개의 수 중에서 최대값을 찾는 방법 세 개의 수 중에서 최소값을 찾는 방법 충북대학교 소프트웨어학과
21
a, b, c 중에서 최대값 구하기 만일 (a > b)이면 만일 (a > c)이면 max = a 아니면
max = c 만일 (b > c)이면 max = b max = a; 만일 (max < b)이면 max = b; 만일 (max < c)이면 max = c; 충북대학교 소프트웨어학과
22
알고리즘 설게 처리 절차를 기술한다. 최대값과 최소값의 차이 구하기 알고리즘 안내문을 출력한다. // 데이터 입력 과정
안내문을 출력한다 // 데이터 입력 과정 num1, num2, num3를 입력 받는다. 최대값을 구하여 max에 저장한다. // 처리 과정 최소값을 구하여 min에 저장한다. difference = max - min을 구한다. difference를 출력한다. // 결과 출력 과정 충북대학교 소프트웨어학과
23
관계 연산자 관계 연산자 C 언어 관계 연산자의 실행 결과는 참일 때 1, 거짓일 때 0이다.
0이 아닌 숫자를 모두 참으로 판정하고, 0을 거짓으로 판정한다. 연산자 사용 예 결과 == x == y x와 y가 같으면 참, 다르면 거짓 != x != y x와 y가 다르면 참, 같으면 거짓 > x > y x가 y보다 크면 참, 작거나 같으면 거짓 < x < y x가 y보다 작으면 참, 크거나 같으면 거짓 >= x >= y x가 y보다 크거나 같으면 참, 작으면 거짓 <= x <= y x가 y보다 작거나 같으면 참, 크면 거짓 충북대학교 소프트웨어학과
24
조건문(선택형) if 문 if (관계식) // 관계연산자를 사용하여 관계식을 표현한다.
{ // 조건식이 참인 경우에 수행할 블록 시작 블록 A // 조건식이 참인 경우에 수행할 문장 } // 조건식이 참인 경우에 수행할 블록 끝 else { // 조건식이 거짓인 경우에 수행할 블록 시작 블록 B // 조건식이 거짓인 경우에 수행할 문장 } // 조건식이 거짓인 경우에 수행할 블록 끝 충북대학교 소프트웨어학과
25
함수의 파라미터 전달과 리턴 float find_max(float a, float b, float c) 파라미터 리턴
세 개의 수 중에서 가장 큰 실수 find_max()의 구조 float find_max(float a, float b, float c)// 함수 구현 { // 함수 시작 float max; // 지역 변수 선언 // 최대값 찾기 알고리즘에 따라 // a, b, c 중에서 최대값을 max에 저장한다. retrun max; // 실수 값 리턴 } // 함수 끝 충북대학교 소프트웨어학과
26
함수 호출 find_max() 함수 사용 예 float max = 0.0;
max = find_max(1.1, 2.2, 3.3); // find_max() 호출 printf(“가장큰 숫자는 %f 입니다.\n”, max); // 결과 출력 함수 호출 max = find_max(num1, num2, num3) // 아규먼트 함수 실행 복사 float find_max(float a, float b, float c) // 파라미터 { float max; // 지역변수 … // 처리문 return max; // 리턴문 } 충북대학교 소프트웨어학과
27
세 수의 차이 구현 1단계 #include <stdio.h> // 헤더 파일 추가 void main() {
float num1, num2, num3; // 지역변수 선언 float max, min; float difference; printf("세 개의 수를 입력하세요.\n\n"); // 데이터 입력 printf("첫 번째 수: "); scanf("%f", &num1); printf("두 번째 수: "); scanf("%f", &num2); printf("세 번째 수: "); scanf("%f", &num3); max = 100.1; // 임시 데이터 처리 min = -20.4; difference = max - min; printf("\n가장 큰 수와 작은 수의 차이 = %f\n\n", difference); // 결과 출력 } 충북대학교 소프트웨어학과
28
세 수의 차이 구현 2단계 float find_max(float a, float b, float c); // 함수 선언 추가
void main() { … max = find_max(a, b, c); // 함수 호출 min = find_min(a, b, c); // 함수 호출 difference = max - min; printf("\n가장 큰 수와 작은 수의 차이 = %f\n\n", difference); // 결과 출력 } float find_max(float a, float b, float c) { … }; // 함수 구현 float find_min(float a, float b, float c) { … }; 충북대학교 소프트웨어학과
29
함수 구현 float find_max(float a, float b, float c) {
float max; // 지역 변수 선언 if (a > b) if (a > c) max = a; else max = c; max = (b > c) ? b : c; return max; // 최대값 리턴 } float find_min(float a, float b, float c) { float min = a; // 지역 변수 선언과 초기화 if (min > b) // min보다 b가 더 작으면 min = b; // b를 min으로 설정 if (min > c) // min 보다 c가 더 작으면, min = c; // c를 min으로 설정 return min; // 최소값 리턴 } 충북대학교 소프트웨어학과
30
세 수의 차이 구현 2단계 충북대학교 소프트웨어학과
31
2.3 평균과 표준편차 문제 최대 10 개의 0보다 크고 100보다 작은 실수를 사용자로 부터 입력 받고, 평균과 표준편차를 구하여 출력하는 프 로그램을 작성하라. 단, 평균과 표준편차를 소수점 이하 두 자리까지 출력하라. 관련 주제 조건문 함수 사용 방법 하향식 프로그램 구현 충북대학교 소프트웨어학과
32
요구사항 분석 입력 방법 입출력 화면 설계 사용자가 최대 10개의 데이터를 입력하도록 제어한다.
사용자가 0보다 작은 수를 입력하면 입력을 중단한다. 사용자가 입력한 실수의 숫자를 세어서 데이터의 수를 결정한다. 입출력 화면 설계 입력 출력 최대 10 개의 실수를 입력하세요. 입력을 종료하려면 0 이하의 수를 입력하세요. 숫자 1: 68.9 숫자 2: 96.7 숫자 3: 80.5 숫자 4: 75.4 숫자 5: -1. 평균 = 80.38 표준편차 = 10.28 충북대학교 소프트웨어학과
33
자료구조 설계 입력 데이터 출력 데이터: 평균과 표준편차 사용자에게 최대 10개의 실수형 데이터입력
float num[10]; //크기가 10인 실수형 배열 Int n; //사용자가 입력한 데이터의 수 출력 데이터: 평균과 표준편차 float avg; // 평균(average) float stdev; // 표준편차(standard deviation) 충북대학교 소프트웨어학과
34
평균과 표준편차 구하기 평균을 먼저 구하고 표준편차를 구하는 방법 평균과 표준편차를 동시에 구하는 방법 데이터 입력 함수
프로그램 디버깅 평균 함수 구현 표준편차 함수 평균과 표준편차를 동시에 구하는 방법 평균과 표준편차를 동시에 구하는 공식 함수로 포인터를 전달하여 값을 받아오는 방법 평균과 표준편차 구현 충북대학교 소프트웨어학과
35
평균/표준편차 알고리즘 get_data(); 10 개 이하의 실수를 입력 받는다. calc_average(); 평균을 구한다.
calc_stdev(float mean); 표준편차를 구한다. 평균과 표준편차를 출력한다 충북대학교 소프트웨어학과
36
구현할 함수 void get_data() float calc_average()
파라미터도 없고 리턴 값도 없다. 기능 데이터를 입력 받아 전역변수로 선언되어 있는 num[] 배열에 저장하고, 사용자가 입력한 데이터의 수를 전역 변수 n에 저장한다. float calc_average() 파라미터는 없다. 리턴 평균을 구하여 리턴한다. float calc_stdev(float mean) 파라미터 float mean: 평균 값 표준편차를 구하여 리턴한다. 충북대학교 소프트웨어학과
37
평균 표준편차 main함수 구현 #include <stdio.h>
#define NUMMAX 10 // 데이터의 최대 수를 정의한다. void get_data(); // 함수 선언 float calc_average(); float calc_stdev(float mean); float num[NUMMAX]; // 전역변수 선언 int n; void main() { float avg, stdev; // 지역변수 선언 get_data(); // 데이터를 입력 받고 avg = calc_average(); // 평균을 구하고 stdev = calc_stdev(avg); // 표준편차를 구한다. printf("\n 평균 = %6.2f\n", avg); // 결과를 출력한다. printf("표준편차 = %6.2f\n\n", stdev); } void get_data() {} // 비어 있는 함수 구현 float calc_average() { return 1.0; } // 임시로 1.0 리턴 float calc_stdev(float mean) { return 1.0; } 충북대학교 소프트웨어학과
38
데이터 입력 함수 get_data() 데이터 입력 알고리즘 안내문을 출력한다. 데이터의 수 n을 0으로 초기화 한다.
사용자가 입력한 데이터를 배열 num[n]에 저장한다. 만일 사용자가 입력한 값이 0보다 크면 n을 증가시킨다. 그렇지 않다면 // 입력 값이 0보다 작다면 반복문을 중단한다. 충북대학교 소프트웨어학과
39
get_data() 함수 구현 void get_data() {
printf("최대 10개의 실수를 입력하세요.\n"); // 안내문 출력 printf("입력을 종료하려면, 0 이하의 수를 입력하세요.\n\n"); n = 0; // 데이터의 수를 0으로 초기화 한다. while (n < 10) // n<10이면 블록을 계속 반복한다. { // 블록 시작 printf("숫자 %d: ", n+1); // 안내문 출력 scanf("%f", &num[n]); // 데이터 저장 if (num[n] > 0.0) // 입력 받은 데이터가 0보다 크다면 n += 1; // 데이터의 수를 증가시킨다. else // 아니면 break; / / 반복문을 벗어난다. } // 블록 끝 } 충북대학교 소프트웨어학과
40
프로그래밍 디버깅 컴파일러는 프로그램을 디버깅 할 수 있도록 프로 그램을 추적(trace)하는 기능을 제공
소스 프로그램에서 프로그램 실행을 중단할 라인에 중 단점(break point)을 설정한다. 프로그래머가 조사하고자 하는 변수의 값을 확인한다 충북대학교 소프트웨어학과
41
프로그래밍 디버깅 배열 num[]과 변수 n의 값을 확인해 보자 1 단계: 중단점 설정 충북대학교 소프트웨어학과
42
프로그래밍 디버깅 배열 num[]과 변수 n의 값을 확인 2 단계: 디버그 모드에서 프로그램 실행 충북대학교 소프트웨어학과
43
프로그래밍 디버깅 유용한 디버깅 명령 한 단계씩 코드 실행(F11) 프로시저 단위 실행(F10)
프로그램을 소스 코드의 라인 단위로 실행한다. 만일 실행하 는 라인에 함수가 있다면, 함수 호출을 따라서 그 함수 안으 로 이동한다. 프로시저 단위 실행(F10) 프로그램을 소스 코드의 라인 단위로 실행한다. 만일 실행하 는 라인에 함수가 있다면, 그 함수를 모두 실행하고 다음 라 인에 정지한다 충북대학교 소프트웨어학과
44
평균 알고리즘 설계 평균을 구하기 크기가 n인 배열 array[]에 저장되어 있는 데이터의 평균 구하기
sum = 0 // 임시 변수 sum을 0으로 초기화. k=0부터 k<n까지 k를 증가시키면서 sum += array[k] // 합에 배열의 원소를 더한다. avg = sum / n; // 평균을 구한다. 충북대학교 소프트웨어학과
45
평균 함수 구현 float calc_average() { float sum, avg; // 합, 평균 지역변수
int k; // 반복문 제어 변수 sum = 0.0; // 합 초기화 for (k=0; k<n; k++) // k=0부터 k<n까지 k를 증가시키면서 sum += num[k]; // sum에 배열의 원소를 더한다. avg = sum / (float)n; // 평균을 구한다. return avg; // 평균을 리턴한다. } 충북대학교 소프트웨어학과
46
표준편차 알고리즘 설계 표준편차 구하기 표준편차 알고리즘 ssum = 0 // ssum을 0으로 초기화 한다.
k=0부터 k<n까지 k를 증가시키면서 diff = num[k] – mean; // 원소와 평균의 차이를 구한다. ssum = ssum + diff*diff; // ssum에 차이의 제곱을 더한다. variance = ssum / n; // 분산을 구한다. stdev = sqrt(variance) // 표준편차를 구한다. 충북대학교 소프트웨어학과
47
sqrt() 함수 라이브러리 함수 [예제] sqrt() 함수 사용 예 #include <math.h>
double sqrt(double x); 파라미터 double x: 제곱근을 구할 값. 리턴 x의 제곱근. 값이 음수인 경우에는 오류가 발생한다. [예제] sqrt() 함수 사용 예 double result = 0.0; max = sqrt(2.0); // 2.0 데이터 입력 printf(“제곱근은 %lf 입니다.\n”, result); // sqrt 결과 출력 충북대학교 소프트웨어학과
48
표준편차 구현 #include <math.h> // sqrt() 함수를 정의하고 있는 헤더 파일
float calc_stdev(float mean) { float ssum, diff, variance, stdev; // 제곱 합, 차이, 분산, 표준편차 int k; // 반복문 제어 변수 ssum = 0.0; // 합을 0으로 초기화 한다. for (k=0; k<n; k++) // 배열의 각 원소에 대하여 diff = num[k] - mean; // 차이를 구하고 ssum = ssum + diff * diff; // 합에 차이의 제곱을 더한다. } variance = ssum / (float)n; // 분산을 구한다. stdev = (float)sqrt((double)variance); // 제곱근 함수로 표준편차를 구한다. return stdev; // 표준편차를 리턴한다. 충북대학교 소프트웨어학과
49
실행 결과 충북대학교 소프트웨어학과
50
평균과 표준편차 동시 계산 #include <stdio.h> // 표준 입출력 함수
#include <math.h> // sqrt(0 함수 선언 #define NUMMAX 10 // 배열의 크기 정의 void get_data(); // 함수 선언 // 여기에 평균과 표준편차를 구하는 함수를 선언한다. double num[NUMMAX]; // 전역변수 선언, double 형으로 수정 int n; void main() { double avg, stdev; get_data(); // 여기에서 평균과 표준편차를 구하는 함수를 호출한다. printf("\n 평균 = %6.2lf\n", avg); // 변환기호를 %6.2lf로 변경한다. printf("표준편차 = %6.2lf\n\n", stdev); // 변환기호를 %6.2lf로 변경한다. } void get_data() { … } 충북대학교 소프트웨어학과
51
평균과 표준편차 충북대학교 소프트웨어학과
52
알고리즘 설계 평균과 표준편차 알고리즘 sum = 0 // 합을 누적할 변수를 0으로 초기화 한다.
ssum = 0 // 제곱 합을 누적할 변수를 0으로 초기화 한다. k=0부터 k<n까지 k를 1씩 증가시키면서 sum += num[k] // 데이터를 누적한다. ssum == (num[k] * num[k]) // 데이터의 제곱을 누적한다. mean = sum / n // 평균을 구한다. variance = ssum /n – mean*mean; // 분산을 구한다. std = sqrt(variance) // 표준편차를 구한다. 충북대학교 소프트웨어학과
53
포인터 전달 포인터 문제 평균과 표준편차를 구하는 알고리즘을 함수로 구현하려면, 두 개의 데이터를 리턴 받아야 한다. 리턴문 한번에 한 개의 결과만 리턴 문제를 해결하는 방법 평균과 표준편차를 저장할 변수를 전역변수로 선언하고, 함수는 전역변수에 결과값을 기록한다. 함수를 호출할 때, 평균과 표준편차를 저장할 변수의 포인 터를 파라미터로 전달하고, 함수는 포인터를 사용하여 간 접적으로 결과값을 전달한다. 충북대학교 소프트웨어학과
54
전역 변수 사용 방법 전역변수는 어느 함수에서나 사용할 수 있기 때문에 별도로 값을 리턴할 필요가 없다.
전역변수를 사용하는 방법 void calc_avgstd(); // 함수 선언 double avg, stdev; // 전역변수로 선언 void main() { … calc_avgstd(); // 평균과 표준편차를 구하는 함수 호출 } void calc_avgstd() // 평균과 표준편차를 구하는 알고리즘으로 평균과 표준편차를 구한다. avg = 평균; // 평균을 전역 변수에 저장한다. stdev = 표준편차; // 표준편차를 전역 변수에 저장한다. } 충북대학교 소프트웨어학과
55
포인터 전달 방법 포인터 전달 충북대학교 소프트웨어학과
56
평균과 표준편차 구현 소스 수정 함수 선언 함수 호출
void calc_avgstd(double *pavg, double *pstdev); 함수 호출 calc_avgstd(&avg, &stdev); // avg와 stdev의 주소를 전달한다. 충북대학교 소프트웨어학과
57
평균과 표준편차 구현 void calc_avgstd(double *pavg, double *pstdev) {
double sum, ssum, mean, variance, std; // 합, 제곱합, 평균, 분산, 표준편차 int k; // 반복문 제어 변수 sum = ssum = 0.0; // 합과 제곱합 초기화 for (k=0; k<n; k++) sum += num[k]; // 합 누적 ssum += (num[k] * num[k]); // 제곱합 누적 } mean = sum / (double)n; // 평균 variance = ssum / (double)n - mean*mean; // 분산 std = sqrt(variance); // 표준편차 *pavg = mean; // 포인터에 의한 평균 전달 *pstdev = std; // 포인터에 의한 표준편차 전달 충북대학교 소프트웨어학과
58
평균과 표준편차 구현 2 void calc_avgstd(double *pavg, double *pstdev) {
double sum, ssum, variance; // 합, 제곱합, 분산 int k; // 반복문 제어 변수 sum = ssum = 0.0; // 합, 제곱합 초기화 for (k=0; k<n; k++) sum += num[k]; ssum += (num[k] * num[k]); } *pavg = sum / (double)n; // 포인터 변수에 평균을 저장한다. variance = ssum / (double)n - (*pavg)*(*pavg); // 분산을 구한다. *pstdev = sqrt(variance); // 포인터 변수에 표준편자를 저장한다. 충북대학교 소프트웨어학과
59
요약 변수와 배열 변수와 배열을 선언하는 방법은 다음과 같다. 자료형 변수이름; 자료형 배열이름[배열크기];
변수의 이름은 변수의 값이다. 식별자는 영문자와 숫자, 그리고 밑줄 기호(_)의 조합으로 작성한 다. 다만, 첫 번째 글자가 숫자일 수 없다. 문자열은 문자형의 배열이고, 문자열의 끝은 널 문자로 표시된다. 한글의 한 글자는 영문자의 두 배 공간을 차지한다. 배열을 선언할 때 배열의 크기는 반드시 정수형 상수이어야 한다. 배열의 크기를 n이라고 할 때 배열의 원소는 0부터 n-1까지 n 개 가 생성된다. 자료형이 다른 변수들 간에 연산을 수행할 때는 자료형을 변환해 주어야 한다. 충북대학교 소프트웨어학과
60
표준 입출력 함수 printf() 함수의 형식 문자열은 %로 시작하는 변환기호를 포함하며, 추가 파라미터로 변 수를 제공하여야 한다. scanf() 함수로 데이터를 입력하려면 변수의 이름 앞에 &를 붙여야 한다. 제어 구조 C 언어에서 조건문은 if ~ else ~ 문으로 구현된다. while 반복문은 조건을 만족할 때까지 블록을 실행한다. for 반복문은 초기화, 조건식, 증감식으로 구성되며, 반복 횟수가 일정한 경우에 유리하 다. 함수 함수를 정의하는 방법은 다음과 같다. return_type function_name(parameter_list) return_type: 함수가 실행을 마치고 리턴하는 데이터의 자료형 function_name: 함수들을 서로 구별하기 위한 함수의 고유 이름 parameter_list: 0 개 이상의 파라미터 목록 함수를 호출할 때 아규먼트는 함수의 파라미터와 일대일로 대응되며 자료형과 수가 같 아야 한다. 함수는 파라미터를 자신의 지역변수로 취급한다. 함수의 파라미터를 통하여 간접적으로 값을 리턴 받으려면, 변수의 포인터를 전달해야 한다. 포인터 변수 앞에 *를 붙여 일반 변수와 같이 사용할 수 있다. 디버깅 프로그램 디버깅은 매우 중요하다. 중단점을 설정하고 디버그 모드로 실행하여 변수의 값을 확인할 수 있다. 충북대학교 소프트웨어학과
Similar presentations