C언어 응용 제1주 실습 해보기.

Slides:



Advertisements
Similar presentations
프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
Advertisements

Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
출석수업 과제 – 총 5문제, 10월 25일 제출 정보통계학과 장영재 교수.
재료수치해석 HW # 박재혁.
기초C언어 제1주 실습 강의 소개, C언어 개요, Cygwin/Eclipse 사용 컴퓨터시뮬레이션학과 2016년 봄학기
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
#include <stdio.h> int main(void) { float radius; // 원의 반지름
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
CUDA Setting : Install & Compile
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
7장 배열 ②.
1. C++ 시작하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Cross Compiler 설치.
SSL-VPN 설치 및 접속 설명서.
보고서 #5(제출기한: 10/14) 다음 문제를 해결하시오.
Tail-recursive Function, High-order Function
Chapter 07. 기본 함수 익히기.
13. 연산자 오버로딩.
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
프로그래밍 개요
어서와 C언어는 처음이지 제14장.
C언어 응용 제6주 실습 해보기 제5장.
Report #3 - due: 4/6 100*100의 2개의 희소 행렬 A, B를 전달 받아서 이들의 덧셈을 구하고, 그 결과의 행렬 C를 반환하는 add_sparse_matrix(A, B, C)를 다음과 같이 작성하라. 희소 행렬은 sparse_matrix 타입으로 표현된다.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
보고서 (due 5/8) 다음과 같은 방식으로 문제를 해결하시오. 문제 분석 알고리즘 작성 프로그램 작성 테스트 및 검증
Eclipse CDT에서 프로젝트를 Export 하고 Import 하는 방법
C언어 응용 제7주 실습 해보기 제6장.
김선균 컴퓨터 프로그래밍 기초 - 7th : 함수 - 김선균
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Chapter 08. 함수.
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
빌드 성공.
객체기반 SW설계 팀활동지 4.
( Windows Service Application Debugging )
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
Excel 일차 강사 : 박영민.
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
에어 PHP 입문.
STS 또는 Eclipse 에서 프로젝트를 Export 하고 Import 하는 방법
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
2장 PHP 기초 PHP의 시작과 끝을 이해한다. 주석문에 대하여 이해한다. echo 문을 이용하여 화면에 출력하
문자열 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
기초 C언어 제14주 실습 전처리 및 비트필드, 스트림과 파일 입출력, 동적메모리와 연결 리스트
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
Flow Diagram IV While.
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
함수, 모듈.
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
실습 UBLAB.
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
프로그래밍 개론 Ⅰ-실습 2장 데이터와 식①.
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
어서와 C언어는 처음이지 제21장.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
Report #2 (기한: 3/16) 데이터 구조 과목의 수강생이 50명이라고 가정한다. 이 학생(학번은 2016????으로 표현됨)들의 중간 시험(0~100), 기말 시험(0~100) 성적을 성적 파일에 작성하라(프로그램을 통해서 또는 수작업으로). 성적 파일을 읽어들여서.
C언어 응용 제11주 실습 해보기 제9장 그래프1.
7 생성자 함수.
BoardGame 보드게임 따라가기.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

C언어 응용 제1주 실습 해보기

연습문제 27번(84쪽) 1부터 500까지의 완전수를 출력하고 마지막에 완 전수의 개수를 출력하는 프로그램을 작성하시오. 완전수(complete number)는 자신의 약수를 모두 더한 값이 자신과 같은 수를 말한다.

문제 이해 1부터 시작하여 1씩 증가 시키면서 500까지의 수 에 대해서 완전수인지를 판단하고 완전수이면 그 수를 출력하고 완전수의 개수를 하나 증가 시킨다. 이에 대한 자연어 의사코드는 다음과 같이 쓸 수 있겠다.

자연어 기술 1부터 500까지 변화 시킬 수를 변수 n 이라고 한다. 완전수의 개수를 저장할 변수를 count 라고 한다. n이 완전수 이면 n을 출력하고 count를 1증가 시킨다. count를 출력한다.

의사 코드 기술 n ← 1; count ← 0; for ( n ← 1; n <= 500; n++) do { if (isComplete(n)) then { write n; count ← count + 1; } } write count;

완전수 인지의 판단 자신의 약수의 모든 합이 자신과 같아야 한다. 자신의 반보다 큰 약수는 없다. 따라서 1 부터 자신의 반보다 자거나 같은 수까지 1씩 증가 시키면서 약수 인지를 판단하여 약수 이 면 모두 더한다. 모두 더한 결과 가 자신과 같으면 완전수이다.

완전수 판단 자연어 기술 주어진 수를 n 이라고 한다. 주어진 수의 반을 half 라고 한다. 1부터 half 까지 변하는 수를 k라고 한다. 약수의 합을 sum 이라고 한다. sum에 0을 대입한다. k를 1부터 half 까지 1씩 증가 시키면서 다음을 반복한다. n을 k로 나눈 나머지가 0이면(약수이면) sum에 k를 더 한다. sum 이 n 과 같으면 완전수이다.

완전수 판단 의사코드 기술 isComplete(int n) half ← n/2; sum ← 0; for ( k ← 1; k <= half; k++) do { if ( n mod k = 0) then { sum ← sum + k; } } if (sum = n) then { return true; } return false; End isComplete(n)

프로젝트 생성 및 소스 작성 위에서 설명한 내용이 이해가 되면 이제 프로그램 을 작성할 준비가 된 것이다. 이해가 되지 않은 경우에는 처음부터 반복해서 읽 어서 이해하도록 한다. 몇 번을 읽었는데도 이해가 가지 않으면 질문하러 오시기 바랍니다.

Eclipse 실행 D:\Lec_hwl\CApp\y2014

Eclipse 실행

Workspace 확인 D:\Lec_hwl\CApp\y2014

CDT Perspective 확인 Dl 버튼을 클릭해서 수정 Java EE 로 되어 있음

CDT Perspective 확인 C/C++ 선택

CDT Perspective 확인 C/C++ 로 되어 있음

새 프로젝트 생성 File->New->C Project 반드시 C Project를 택할 것

프로젝트 명 설정 Ch02Ex27 Empty Project Cygwin GCC D:\Lec_hwl\capp\y2014\Ch02Ex27

프로젝트 구성 설정 Debug 버전과 Release 버전 모두 사용

생성된 빈 프로젝트

메인 소스 추가 프로젝트명 우클릭 -> New -> C File

파일명 설정 ex27.c 확장자 c를 꼭 사용해야 함. Default C source template

생성된 빈 소스 파일

기본 main 함수 작성

코드 작성 앞 알고리즘 작성에서 주어진 수가 완전수인지를 판단하는 함수 isComplete(n) 을 사용하므로 이 함수에 대한 원형을 먼저 선언해야 한다. 이 함수 는 정수를 하나 매개변수로 받아서 이 수가 완전수 이면 참(정수 값 1) 아니면 거짓(정수 값 0)을 돌려 주면 된다. 따라서 함수의 원형은 다음과 같이 하 면 된다. int isComplete(int n); main 함수 다음에 이 함수의 구현을 추가한다.

isComplete 함수가 추가 된 소스 main 함수는 아무 일도 하지 않고 바로 종료 한다. 이 코드는 우리가 작성한 알고리즘을 위해서 필요한 함수들만 작성한 것이다. 아직 실제로 알고리즘을 구현한 것은 없다.

main 함수 알고리즘 구현 변수 선언 줄넘김을 위하여 삽입

빌드 및 실행 여기 까지 작성한 코드는 isComplete() 함수가 항 상 거짓(0값)을 돌려 주므로 완전수를 하나도 출력 하지 않을 것이다. 즉 아직 정상적인 코드는 아니 다. 지금까지 작성한 코드가 빌드와 실행에 문제가 없 는지 테스트 해본다.

빌드 프로젝트명 우클릭 -> Build Project 빌드하기 전에 Save All 버튼을 클릭해서 수정 된 소스를 저장한다.

빌드 성공 메시지 확인

실행 프로젝트명 우클릭 -> Run As ->Local C/C++ Application

결과 확인 예상한 바대로 출력된 완전수는 없고 완전수의 개수는 0이라고 출력한다. 이는 아직 isComplete() 함수를 제대로 작성하지 않았기 때문이다.

isComplete 함수 수정

빌드 및 실행 결과 출력된 완전수는 6, 28, 496이고 따라서 완전수의 개수는 3이라고 출력한다. 6과 28은 비교적 확인하기 쉽지만 496dms 그리 쉽지 않다. 그러나 6과 28을 완전수로 제대로 찾아준 것과 같은 알고리즘으로 496을 찾은 것이므로 496은 완전수임이 확실하다.

도전 문제 사용자가 입력한 수까지의 완전수를 출력하고 완 전수의 개수를 출력하는 프로그램으로 수정하시오.

연습문제 28번(85쪽) 크기가 10인 정수형 배열에 양의 정수를 입력 받 아 최대 값을 제외한 나머지 9개의 정수에 대한 평 균을 구하여 출력하는 프로그램을 작성하시오.

문제 이해 우선 사용자로부터 10개의 양의 정수를 받아들이 고, 이 배열을 검사하여 최대 값을 제외한 나머지 9개의 수를 모두 더한 후 9로 나누어 평균을 구하 여 출력한다. 다음과 같이 두 단계로 나눌 수 있다. 사용자로 부터 10개의 양의 정수를 받아들인다. 배열의 최대값을 제외한 9개의 수의 합을 구한 후 9로 나누어 평균을 계산하여 출력한다. 이에 대한 자연어 의사코드는 다음과 같이 쓸 수 있겠다.

자연어 기술 사용자로부터 10개의 정수를 받아서 배열에 저 장한다. 최대값을 제외한 수의 평균을 구한다.

의사 코드 기술 inputArray(A); avg ← avgExceptMax(A); write avg; 이제 두 개의 함수, inputArray(A)와 avgExceptMax(A) 를 구현하면 된다.

inputArray(A) 설명 사용자로부터 양수를 입력 받아서 배열에 저장해 야 하므로 받아들인 수를 저장할 배열을 매개 변수 로 받아야 한다. 단, 배열의 크기는 10개라고 했으 므로 고정 크기의 배열을 사용하면 된다. 또한 입력을 받는 함수 이므로 리턴값은 필요없다. 따라서 리턴타입은 void 로 한다.

inputArray(A) 자연어 기술 0부터 9 까지 변하는 수를 k라고 한다. 사용자로부터 양수 n을 받아서 A(k)에 저장한다.

inputArray(A) 의사코드 기술 inputArray(int *A) for ( k ← 0; k <= 9; k++) do { read n; A[k] ← n; } End inputArray(int* A)

avgExceptMax(A) 설명 주어진 배열의 최대값을 제외한 수의 평균을 구하 는 것이므로 매개변수로 배열이 주어져야 하고, 구 한 평균값을 리턴해야 한다. 정수라고 하더라도 평 균은 실수 값이 될 수 있으므로 리턴 값은 실수로 한다.

avgExceptMax(A) 자연어 기술 합을 저장하는 변수를 sum, 최대값을 max, 평 균을 avg라 한다. 0부터 9 까지 변하는 수를 k라고 한다. max 를 -1로 sum 을 0으로 설정한다. k를 0부터 9 까지 1씩 증가 시키면서 다음을 반 복한다. sum에 A(k)를 더한다. A(k)가 max 보다 크면 max 를 A9K)로 설정한다. sum에서 max를 뺀다. avg를 sum/9로 설정한다.

avgExceptMax(A) 의사코드 기술 avgExceptMax(int *A) sum ← 0; max ← -1; for ( k ← 0; k <= 9; k++) do { sum ← sum + A[k]; if(A[k] > max) then { max = A[k]; } } sum ← sum – max; avg ← sum/9: return avg; End avgExceptMax(int* A)

프로젝트 생성 및 소스 작성 위에서 설명한 내용이 이해가 되면 이제 프로그램 을 작성할 준비가 된 것이다. 이해가 되지 않은 경우에는 처음부터 반복해서 읽 어서 이해하도록 한다. 몇 번을 읽었는데도 이해가 가지 않으면 질문하러 오시기 바랍니다.

Eclipse 실행 D:\Lec_hwl\CApp\y2014

Eclipse 실행

Workspace 확인 D:\Lec_hwl\CApp\y2014

CDT Perspective 확인 Dl 버튼을 클릭해서 수정 Java EE 로 되어 있음

CDT Perspective 확인 C/C++ 선택

CDT Perspective 확인 C/C++ 로 되어 있음

새 프로젝트 생성 File->New->C Project 반드시 C Project를 택할 것

프로젝트 명 설정 Ch02Ex28 Empty Project Cygwin GCC D:\Lec_hwl\capp\y2014\Ch02Ex27

프로젝트 구성 설정 Debug 버전과 Release 버전 모두 사용

생성된 빈 프로젝트

메인 소스 추가 프로젝트명 우클릭 -> New -> C File

파일명 설정 ex28.c 확장자 c를 꼭 사용해야 함. Default C source template

생성된 빈 소스 파일

기본 main 함수 작성 main 함수는 아무 일도 하지 않고 바로 종료 한다.

코드 작성 앞 알고리즘 작성에서 양의 정수 10개를 받아들이 는 함수 inputArray(A)와 최대값을 제외한 평균을 계산하는 avgExceptMax(A) 함수의 원형은 각각 다음과 같다. void inputArray(int * A); double avgExceptMax(int *A); main 함수 다음에 이 함수들의 구현을 추가한다.

필요한 함수가 추가 된 소스 필요한 함수의 원형 선언 main 함수는 아무 일도 하지 않고 바로 종료 한다. inputArray(A) 함수는 아무 일도 하지 않고 리턴한다. avgExceptMax(A) 함수는 아무 일도 하지 않고 0을 리턴한다. 이 코드는 우리가 작성한 알고리즘을 위해서 필요한 함수들만 작성한 것이다. 아직 실제로 알고리즘을 구현한 것은 없다. 현재는 자리만 만든 것이다.

main 함수 알고리즘 구현 변수 선언

빌드 및 실행 여기 까지 작성한 코드는 inputArray(A) 함수가 아 무 일도 하지 않고 항상 avgExceptMax(A) 함수가 항상 0을 돌려 주므로 출력은 항상 0이 될 것이다. 즉 아직 정상적인 코드는 아니다. 지금까지 작성한 코드가 빌드와 실행에 문제가 없 는지 테스트 해본다.

빌드 프로젝트명 우클릭 -> Build Project 빌드하기 전에 Save All 버튼을 클릭해서 수정 된 소스를 저장한다.

빌드 성공 메시지 확인

실행 프로젝트명 우클릭 -> Run As ->Local C/C++ Application

결과 확인 예상한 바대로 0이라고 출력한다. 이는 아직 inputArray(A) 함수와 avgExceptMax(A) 함수를 제대로 작성하지 않았기 때문이고, 출력된 결과는 avgExceptMax(A) 가 돌려준 0 값이다.

inputArray(A) 함수 수정 Eclipse CDT의 버그 때문에 printf 에 의해 출력된 것이 화면에 나타나지 않는 문제를 해결하기 위하여 추가함. 다른 툴을 사용할 때는 필요 없음.

avgExceptMax(A) 함수 수정

빌드 및 실행 결과 1부터 10까지의 정수를 입력하면 평균을 5.0이라고 출력해준다. 이는 1부터 9까지의 합 45를 9로 나눈 결과로 맞게 계산해 주는 것을 알 수 있다.

도전 문제 동일한 일을 하는 프로그램인데 다만 최대수가 두 개 이상인 경우에는 모두 제외한 수의 평균을 구하 도록 하시오. 동일한 일을 하는 프로그램인데 다만 최대수가 두 개 이상인 경우에는 모두 제외한 수의 평균을 구하 도록 하시오. 사용자로부터 10개의 양의 정수를 입력 받아서 최 대값과 최소값을 제외한 나머지 수의 평균을 구하 여 출력하는 프로그램을 작성하시오. 단, 최대, 최 소 수 가 여러 개 있어도 하나만 제하고 평균을 계 산하도록 하시오.