C Language Programming_문제.hwp

Similar documents
: 1 int arr[9]; int n, i; printf(" : "); scanf("%d", &n); : : for(i=1; i<10; i++) arr[i-1] = n * i; for(i=0; i<9; i++) if(i%2 == 1) print

금오공대 컴퓨터공학전공 강의자료

untitled

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - chap06-2pointer.ppt

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

OCW_C언어 기초

Microsoft PowerPoint - chap11-포인터의활용.pptx

슬라이드 1


untitled

untitled

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

11장 포인터

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Chapter_06

歯9장.PDF

중간고사

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

PowerPoint 프레젠테이션

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

PowerPoint 프레젠테이션

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - Chapter_08.pptx

Data Structure

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap-11.pptx

Microsoft PowerPoint - 제11장 포인터(강의)

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - chap04-연산자.pptx

PowerPoint 프레젠테이션

Microsoft PowerPoint - 제11장 포인터

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap05-제어문.pptx

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

11장 포인터

ch15

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-1Array.ppt

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

02장.배열과 클래스

Microsoft PowerPoint - Chapter_04.pptx

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

Infinity(∞) Strategy

윤성우의 열혈 TCP/IP 소켓 프로그래밍

KNK_C_05_Pointers_Arrays_structures_summary_v02

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - 7장 배열 pptx

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - C_Programming_Basics.ppt [호환 모드]

기초컴퓨터프로그래밍

본 강의에 들어가기 전

OCW_C언어 기초

Microsoft PowerPoint - chap06-5 [호환 모드]

PowerPoint Presentation

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - Chapter_09.pptx

Microsoft PowerPoint - Chapter_05.pptx

Microsoft PowerPoint - chap06-8 [호환 모드]

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap-06.pptx

Infinity(∞) Strategy

Microsoft PowerPoint - 10장 문자열 pptx

Microsoft PowerPoint - chap06-8.ppt

11장 포인터

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - Java7.pptx

설계란 무엇인가?

C 프로그래밊 개요

쉽게 풀어쓴 C 프로그래밍

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

PowerPoint Template

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

Microsoft PowerPoint - chap06-4 [호환 모드]

13 주차문자열의표현과입출력

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

K&R2 Reference Manual 번역본

Microsoft PowerPoint - chap-07.pptx

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

쉽게 풀어쓴 C 프로그래밍

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

설계란 무엇인가?

Microsoft PowerPoint - Chapter_07.pptx

PowerPoint Presentation

03장.스택.key

PowerPoint 프레젠테이션

Microsoft PowerPoint - Lesson6.pptx

C 프로그래밊 개요

PowerPoint 프레젠테이션

Transcription:

Chapter 1. C 프로그래밍시작 1. 예제 Ⅰ. 예제 _1.1 - 주석사용연습예제 /* */ 여기는주석부분입니다. 컴파일시이부분은컴파일되지않는 코드영역입니다. // 이것또한주석입니다. printf("hello World!\n"); Ⅱ. 예제 _1.2 - 특수문자사용연습예제 printf("\t#### 성적표 ####\n"); printf("=============================================\n"); printf(" 이름 \t국어\t영어\t수학\t체육\t음악\n"); printf("---------------------------------------------\n"); printf(" 김연아 \t95\t100\t76\t100\t97\n"); printf(" 박찬호 \t60\t100\t75\t100\t77\n"); printf(" 유이 \t90\t70\t70\t99\t90\n"); printf(" 안철수 \t100\t100\t100\t66\t65\n"); printf("---------------------------------------------\n"); 1

2. 문제 Ⅰ. 문제 _1.1 - 특수문자연습문제 Ⅱ. 문제 _1.2 - 특수문자연습문제 Ⅲ. 문제 _1.3 - 특수문자연습문제 2

Chapter 2. 데이터형, 변수, 상수 1. 예제 Ⅰ. 예제 _2.1 - 정수, 실수, 문자형변수에각각값을대입한후, 출력하는예제 int val1 = 100; double val2 = 200.0; char val3 = 'A' printf("val1 은정수이며값은 %d 입니다.\n",val1); printf("val2 은실수이며값은 %f 입니다.\n",val2); printf("val3 은문자이며값은 %c 입니다.\n",val3); Ⅱ. 예제 _2.2 - 원의넓이를계산하여출력하는예제 double pi = 3.141592; // PI( 파이 ) int radius = 7; // 반지름 double result = pi*radius*radius; // 결과 : 원의넓이 printf("pi 는 %f 입니다.\n", pi); printf(" 원의반지름은 %d 입니다.\n", radius); printf(" 원의넓이는 %.3f 입니다.\n", result); 3

Ⅲ. 예제 _2.3 - ASCII 코드문자출력예제 char lower = 'a' char upper = 'A' char number = '1' printf(" 입력문자 : %c\n", lower); printf("ascii 코드 10 진수 : %d\n\n", lower); printf("ascii 코드 16 진수 : %x\n\n", lower); printf(" 입력문자 : %c\n", upper); printf("ascii 코드 10 진수 : %d\n\n", upper); printf("ascii 코드 16 진수 : %x\n\n", upper); printf(" 입력문자 : %c\n", number); printf("ascii 코드 10 진수 : %d\n\n", number); printf("ascii 코드 16 진수 : %x\n\n", number); 2. 문제 Ⅰ. 문제 _2.1 - 점수 (val), 등급 (grade) 이란변수를선언한후, 점수는 100으로등급은 A로초기화 하여화면에아래와같이출력하는프로그램을작성 Ⅰ. 문제 _2.2 - 반지름의길이가 2 인원의넓이는구하는프로그램작성 4

Chapter 3. 데이터형, 변수, 상수 1. 예제 Ⅰ. 예제 _3.1 - 출력변환문자와옵션지정자를이용하여출력한예제 int i = 28; int j = 77; double d = 135.7979; char c = 'A' printf("%d %#o %#X\n", j, j, j); // 10진수를10, 8, 16진수로출력 ( 접두어표시 : #); printf("%d %d %d \n", 10, 010, 0x10); // 10, 8, 16진수를10진수로출력 printf("%5d\n", i); // 5자리우측정렬 printf("%5c\n", c); // 5자리공간확보우측정렬 printf("%-5d%-5d\n", i, i); // 5자리좌측정렬 printf("%08d\n", i); // 8자리공간확보- 빈공간은 0으로채움 printf("%8.2f\n", d); // 8자리공간확보- 소수점이하 2자리출력 printf("100%% success\n"); // 문자 '%' 출력 5

Ⅱ. 예제 _3.2 - 입력변환문자를이용하여정수와실수두개씩을입력받아평균을구하는프로그램예제 int d1, d2; double f1, f2; double re1, re2; printf(" 정수두개입력 : "); scanf("%d %d", &d1, &d2); printf(" 실수두개입력 : "); scanf("%lf %lf", &f1, &f2); // double 형실수입력 re1 = (d1 + d2) / 2.0; // 정수연산의결과는정수 re2 = (f1 + f2) / 2; printf("\n정수평균 %.2f\n", re1); // 소수점이하2자리출력 printf(" 실수평균 %.2f\n", re2); 2. 문제 Ⅰ. 문제 _3.1 - 국어 (kor), 영어 (eng), 수학 (math) 점수를입력받아합계 (sum) 를계산하여화면에출력하는프로그램작성 6

Chapter 4. 연산자 1. 예제 Ⅰ. 예제 _4.1 - 조건연산자를이용한예제 int a, b, large; printf(" 첫번째수를입력하세요 "); scanf("%d", &a); printf(" 두번째수를입력하세요 "); scanf("%d", &b); large = a>b? a : b; printf("%d 와 %d 중큰수는 %d 입니다 \n", a, b, large); 7

Ⅱ. 예제 _4.2 - sizeof 연산자를이용한예제 double a = 3.14; short b = 3; printf("int = %dbyte\n", sizeof(int) ); printf("short = %dbyte\n", sizeof(short) ); printf(" 변수a = %dbyte\n", sizeof(a) ); printf(" 변수b = %dbyte\n", sizeof(b) ); printf(" 정수상수5 = %dbyte\n", sizeof(5) ); printf("5+4 = %dbyte\n", sizeof(5+4) ); printf(" 실수상수123.12 = %dbyte\n", sizeof(123.12) ); printf(" 실수상수123.12f = %dbyte\n", sizeof(123.12f) ); Ⅱ. 예제 _4.3 - 형변환연산자를이용한예제 int a = 5, b = 2; double re; re = a / b; printf("%.2f\n", re); // 정수연산의결과는정수 re = (double)a / b; printf("%.2f\n", re); // a 를형변환 re = (double)(a / b); // 나눗셈의결과를 double형으로변환 printf("%.2f\n", re); 8

Chapter 5. 제어문 Ⅰ 1. 예제 Ⅰ. 예제 _5.1 - if 문을이용한계산기프로그램예제 int opt; double num1, num2; double result; printf("1. 덧셈2. 뺄셈3. 곱셈4. 나눗셈 \n"); printf(" 선택? "); scanf("%d", &opt); printf(" 두개의실수입력 : "); scanf("%lf %lf", &num1, &num2); if(opt==1) result = num1 + num2; if(opt==2) result = num1 - num2; if(opt==3) result = num1 * num2; if(opt==4) result = num1 / num2; printf(" 결과 : %f \n", result); 9

Ⅱ. 예제 _5.2 - if, else if, else 를이용한성적처리프로그램예제 int kor, eng, math; double ave; char grade; printf("[ 국어 ] [ 영어 ] [ 수학 ] 점수입력 : "); scanf("%d %d %d", &kor, &eng, &math); fflush(stdin); ave = (double)(kor+eng+math)/3; if(ave>=90) grade = 'A'; else if(ave>=80) grade = 'B'; else if(ave>=70) grade = 'C'; else if(ave>=60) grade = 'D'; else grade = 'F'; printf(" 평균은 %2.f 로 %c 등급입니다.\n", ave, grade); 10

Ⅲ. 예제 _5.3 - switch 문을이용한등급계산프로그램예제 int score; char grade; int result; printf(" 점수입력 : "); scanf("%d", &score); result = score / 10; switch(result) case 10: case 9: grade = 'A'; break; case 8: grade = 'B'; break; case 7: grade = 'C'; break; case 6: grade = 'D'; break; default: grade = 'F'; printf("\n%d 점 ==> %c 등급 \n", score, grade); 11

2. 문제 Ⅰ. 문제 _5.1 - 정수를입력받아아래와같이출력하는프로그램을작성 (if문이용 ) 3의배수이면서, 4의배수에도해당 => [ ] 은 ( 는 ) 3의배수이면서, 4의배수입니다. 3의배수에만해당 => [ ] 은 ( 는 ) 3의배수입니다. 4의배수에만해당 => [ ] 은 ( 는 ) 4의배수입니다. 3의배수도 4의배수도해당안됨 => [ ] 은 ( 는 ) 3의배수도 4의배수도아닙니다. 0은어떤수의배수도아니기때문에 0은( 는 ) 3의배수도 4의배수도아닙니다. 라고출력되야함 Ⅱ. 문제 _5.2 - 점수를입력받아등급을출력하는프로그램을작성 (switch문이용 ) 점수는 0~100점까지만입력가능하며, 그외의점수를입력하면 잘못된입력 이라는메시지출력후종료 90점이상 : A등급 80점이상 : B등급 70점이상 : C등급 60점이상 : D등급 60점미만 : F등급 12

Chapter 6. 제어문 Ⅱ 1. 예제 Ⅰ. 예제 _6.1 - for 문을이용한 1~100 까지의누적합출력프로그램예제 int i, sum=0; for(i=1 ; i<=100 ; i++) printf("%5d", i); sum += i; printf("\n1 부터 100 까지의합은 %d 입니다!!\n", sum); Ⅱ. 예제 _6.2 - for문을이용한 1~1000사이 7의배수의합을출력하는프로그램예제 int i, sum=0; for(i=0 ; i<=1000 ; i+=7) printf("%5d", i); sum += i; printf("\n1~1000 사이의 7의배수의합은 %d입니다!!\n", sum); 13

Ⅲ. 예제 _6.3 - for 문을이용한시작값과끝값사이의합계를구하는프로그램예제 int start, end, result; printf(" 시작값끝값입력 : "); scanf("%d %d", &start, &end); for(result=0 ; start<=end ; start++) result += start; printf(" 시작과끝사이의합계 : %d \n", result); Ⅲ. 예제 _6.4 - 다중 for문을이용한예제 int i,j; for(i=1 ; i <=5 ; i++) for(j=1 ; j<=i ; j++) printf("*"); printf("\n"); 14

Ⅲ. 예제 _6.5 - 다중 for 문을이용한예제 int i,j; for(i=1 ; i <=9 ; i++) if(i<=5) for(j=1 ; j<=i ; j++) printf("*"); else for(j=1 ; j<=10-i ; j++) printf("*"); printf("\n"); 2. 문제 Ⅰ. 문제 _6.1 - 다중 for문을이용하여아래와같이출력되는프로그램작성 15

Ⅱ. 문제 _6.2 - 다중 for 문을이용하여구구단을가로와세로로출력하는프로그램작성 16

Chapter 7. 제어문 Ⅲ 1. 예제 Ⅰ. 예제 _7.1 - while 문을이용하여입력받은숫자만큼화면에문자열을출력하는예제 int num; int i=0; printf(" 숫자입력 : "); scanf("%d", &num); while(i<num) printf("hello World! \n"); i++; Ⅱ. 예제 _7.2 - while문을이용하여숫자를입력받아그수만큼 3의배수를출력하는예제 int i=0, num=0, cnt; printf("3 의배수의개수 : "); scanf("%d", &cnt); while(num++<cnt) i+=3; printf("%d ", i); 17

Ⅲ. 예제 _7.3 - do~while 문을이용하여 0 과 100 사이에존재하는짝수의합을출력하는예제 int total=0; int val=0; do total+=val; val=val+2; while(val<=100); printf("total : %d \n", total); Ⅳ. 예제 _7.4 - goto문을이용한프로그램예제 int num; printf(" 숫자입력 (1, 2, 3): "); scanf("%d", &num); if(num==1) goto label1; else if(num==2) goto label2; else goto label3; label1: printf("1 을입력하셨습니다! \n"); label2: printf("2 을입력하셨습니다! \n"); 18

label3: printf("3 또는다른값을입력하셨습니다! \n"); 2. 문제 Ⅰ. 문제 _7.1 - 입력받은분을시간과분으로나눠출력하는프로그램작성 - 프로그램은종료되지않고무한반복됨 - 분입력이 0이면프로그램종료 - 분입력이 0보다작으면다시입력받음 Ⅱ. 문제 _7.2 - 입력받은문자의 ASCII 코드를출력하는프로그램작성 - 프로그램은종료되지않고무한반복됨 - 계속 / 종료여부를입력받아 S/s를누르면프로그램종료 19

Chapter 8. 1 차원배열 1. 예제 Ⅰ. 예제 _8.1-5 층짜리건물의각층거주인원을입력받아건물의거주인원총합을구하는예제 int arr[5]; int total, i; for(i=0 ; i<5 ; i++) printf("%d층에사는사람의수 : ", i+1); scanf("%d", &arr[i]); total = arr[0]+arr[1]+arr[2]+arr[3]+arr[4]; printf(" 현재거주하는총인원 : %d\n", total); Ⅱ. 예제 _8.2-1차원배열을이용하여최대값을구하는예제 int i, max; int score[5]; for(i=0 ; i<5 ; i++) printf(" 입력 %d : ", i+1); scanf("%d", &score[i]); max = score[0]; for(i=1 ; i<5 ; i++) 20

if(max < score[i]) max = score[i]; printf("\n최대값 : %d\n", max); Ⅲ. 예제 _8.3 - 문자열을입력받아문자열의길이를계산하는예제 char string[100]; int len=0; printf(" 문자열입력 : "); scanf("%s", string); while(string[len]!='\0') len++; printf(" 입력한문자열의길이는 %d \n", len); 21

2. 문제 Ⅰ. 문제 _8.1 - 문자열을입력받아입력받은문자열을뒤집어출력하는프로그램작성 - 배열의크기는 100 으로함 Ⅱ. 문제 _8.2 - 문자열을입력받아입력받은문자중 ASCII코드값이가장큰문자출력하는프로그램작성 - 배열의크기는 100으로함 22

Chapter 9. 다차원배열 1. 예제 Ⅰ. 예제 _9.1-2 차원배열에 1~25 까지의숫자를가로와세로로저장한후, 출력하는예제 int arr[5][5]; int i,j; int k = 1; for(i=0 ; i<5 ; i++) for(j=0 ; j<5 ; j++) arr[i][j] = k++; // arr[j][i] = k++; <-- 세로출력 for(i=0 ; i<5 ; i++) for(j=0 ; j<5 ; j++) printf("%5d", arr[i][j]); printf("\n"); 23

Ⅱ. 예제 _8.2-2차원배열을이용하여숫자를짝수행은왼쪽부터오른쪽으로증가, 홀수행은오른쪽부터왼쪽으로증가하는예제 int arr[5][5]; int i,j,k=1; for(i=0 ; i<5 ; i++) if(i%2==0) for(j=0 ; j<5 ; j++) arr[i][j] = k++; else for(j=4 ; j>=0 ; j--) arr[i][j] = k++; for(i=0 ; i<5 ; i++) for(j=0 ; j<5 ; j++) printf("%5d", arr[i][j]); printf("\n"); 24

2. 문제 Ⅰ. 문제 _9.1-2 차원배열을사용하여구구단을 2~9 단까지출력하는프로그램작성 25

Chapter 10. 함수와기억클래스 1. 예제 Ⅰ. 예제 _10.1 - 사용자정의함수예제 void func_line(); void func_star(); // line 함수선언 // star 함수선언 func_star(); func_star(); func_line(); func_star(); func_line(); // star함수호출 // star함수호출 // line함수호출 // star함수호출 // line함수호출 void func_line() // line함수정의 printf("----\n"); void func_star() // star함수정의 printf("****\n"); 26

Ⅱ. 예제 _10.2 - 사용자정의함수예제 void sum(int a, int b); void div(int a, int b); int num1, num2; printf(" 입력 1 : "); scanf("%d", &num1); printf(" 입력 2 : "); scanf("%d", &num2); sum(num1, num2); div(num1, num2); void sum(int a, int b) printf("%d + %d = %d\n", a, b, a+b); void div(int a, int b) printf("%d / %d = %.2f\n", a, b, (double)a/b); 27

Ⅲ. 예제 _10.3 - 사용자정의함수예제 int sum(int a, int b); double div(int a, int b); int num1, num2, result; printf(" 입력 1 : "); scanf("%d", &num1); printf(" 입력 2 : "); scanf("%d", &num2); result = sum(num1, num2) * 10; printf("\n\n(%d + %d) * 10 = %d\n", num1, num2, result); printf("%d / %d = %.2f\n", num1, num2, div(num1, num2)); int sum(int a, int b) return a+b; double div(int a, int b) double result; result = (double)a/b; return result; 28

2. 문제 Ⅰ. 문제 _10.1 - 사용자정의함수를구현하여코드를완성시켜라ㅤ- 이름 : power, 기능 : 정수의제곱을구해리턴하는함수 double re; int n; printf(" 제곱을구할숫자입력 : "); scanf("%d", &n); re = power(n); printf("%d 의제곱은 %.0f 입니다.\n", n, re); Ⅱ. 문제 _10.2 - 사용자정의함수를구현하여코드를완성시켜라ㅤ- 이름 : samenum함수, 기능 : 2개의정수가일치하면 1을리턴아니면 0을리턴하는함수 int s1, s2; printf(" 두수입력 :"); scanf("%d %d", &s1, &s2); if(samenum(s1, s2)) printf(" 두수는같습니다.\n"); else printf(" 두수는같지않습니다.\n"); 29

Ⅲ. 문제 _10.3 - 사용자정의함수를구현하여코드를완성시켜라ㅤ- 이름 : primenum함수, 기능 : 소수라면 1을리턴, 아니라면 0을리턴하는함수 int su; printf(" 숫자입력 :"); scanf("%d", &su); if(primenum(su)) printf("%d는 ( 은 ) 소수입니다.\n", su); else printf("%d는 ( 은 ) 합성수입니다.\n", su); Ⅳ. 문제 _10.4 - 세개의수를입력받아가장큰수와가장작은수를출력하는프로그램작성 - 가장큰수는 Max라는이름의사용자정의함수로구현 - 가장작은수는 Min이라는이름의사용자정의함수로구현 30

Chapter 11. 포인터의이해 1. 예제 Ⅰ. 예제 _11.1 - & 연산자를이용하여변수주소출력예제 char c = 'a'; int i = 7; double d = 3.14; printf("c = %c\n", c); printf("i = %d\n", i); printf("d = %.2f\n", d); printf("c = %p\n", &c); printf("i = %p\n", &i); printf("d = %p\n", &d); 31

Ⅱ. 예제 _11.2 - 일반변수의크기와포인터변수의크기비교예제 char c = 'a'; int i = 7; double d = 3.14; // 포인터변수선언 char *cp; int *ip; double *dp; // 변수의주소를포인터에저장 cp = &c; ip = &i; dp = &d; // 일반변수의크기출력 printf("i = %dbyte\n", sizeof(i)); printf("c = %dbyte\n", sizeof(c)); printf("d = %dbyte\n", sizeof(d)); // 포인터변수의크기출력 printf("ip = %dbyte\n", sizeof(ip)); printf("cp = %dbyte\n", sizeof(cp)); printf("dp = %dbyte\n", sizeof(dp)); 32

Ⅲ. 예제 _11.3 - * 연산자를사용하여메모리간접참조사용예제 char c = 'a'; int i = 7; double d = 3.14; // 포인터변수선언 char *cp = &c; int *ip = &i; double *dp = &d; // 포인터에저장된주소출력 printf("i = %p\n", ip); printf("c = %p\n", cp); printf("d = %p\n", dp); // 포인터가가리키는값출력 printf("ip = %d\n", *ip); printf("cp = %c\n", *cp); printf("dp = %.2f\n", *dp); Ⅳ. 예제 _11.4 - 포인터연산으로배열에접근하는예제 int arr[3] = 1, 2, 3; int *ip; ip = arr; // 배열이름은배열의시작주소 printf("%p %p %p\n", ip+0, ip+1, ip+2); printf("%d %d %d\n", arr[0], arr[1], arr[2]); printf("%d %d %d\n", *(ip+0), *(ip+1), *(ip+2)); 33

Ⅴ. 예제 _11.5 - 포인터연산으로배열에접근하는예제 int arr[5] = 1, 2, 3, 4, 5; int i, j = 1; int *ip; ip = arr; for(i=0 ; i<5 ; i++) printf("%d ", *ip++); // *ip와ip++ 이결합된형태 printf("\n"); ip = arr; for(i=0 ; i<5 ; i++) printf("%d ", *++ip); // ++ip와 *ip이결합된형태 printf("\n"); ip = arr; for(i=0 ; i<5 ; i++) printf("%d ", ++*ip); // ++arr[i] 과같은형태 printf("\n"); // 위연산에의해값이변한배열값초기화 for(i=0 ; i<5 ; i++) arr[i] = j; ip = arr; for(i=0 ; i<5 ; i++) printf("%d ", (*ip)++); // arr[i]++ 과같은형태 printf("\n"); 34

2. 문제 Ⅰ. 문제 _11.1 - 크기가 5인 int형배열 arr을선언하고 1,2,3,4,5로초기화한다음, 포인터 p를선언해서배열 arr의첫번째요소를가리키게함그다음포인터를조작 ( 포인터연산을의미함 ) 해서배열요소의값을 2씩증가시킨후, 전체배열요소를출력하는프로그램을작성 35

Chapter 12. 포인터와함수 1. 예제 Ⅰ. 예제 _12.1 - 함수에두개의정수를전달한후전달한두개의정수를교환하는함수 swapval함수와 swapadr함수비교예제 void swapval(int x, int y); void swapadr(int *p1, int *p2); int a=3, b=5; swapval(a,b); // Call-by-Value printf("swapval 함수호출후 %d %d\n", a, b); // 값바뀌지않음 swapadr(&a, &b); // Call-by-Reference printf("swapadr 함수호출후 %d %d\n", a, b); // 값바뀜 void swapval(int x, int y) int temp; temp = x; x = y; y = temp; void swapadr(int *p1, int *p2) int temp; temp = *p1; *p1 = *p2; *p2 = temp; 36

Ⅱ. 예제 _12.2 - 배열에저장된데이터를출력하는함수예제 void output(int *p); int arr[5] = 1, 2, 3, 4, 5; output(arr); void output(int *p) int i; for(i=0 ; i<5 ; i++) //printf("%d ", p[i]); printf("%d ", *(p+i)); printf("\n"); 2. 문제 Ⅰ. 문제 _12.1 - 정수를하나입력받아변수 a에저장후입력받은값의제곱을계산하여다시 a에대입해주는프로그램작성 - 입력받은값의제곱을계산하는함수 (Square) 를독립적으로구현 - main함수는사용자정의함수를호출하여결과값을받아출력 1 Call-by-Value 방식으로구현 - square 함수호출시변수 a를전달 - 함수는제곱값을계산하여반환, 반환값을변수 a에다시저장 - 함수의호출형태 : a = Square(a); 37

2 Call-by-Reference 방식으로구현 - square 함수호출시변수 a의주소값을전달 - 함수는주소값을참조해서변수 a의값을알아낸다음제곱을계산하여변수 a의값을변경 - 함수의호출형태 : Square(&a); 38

Chapter 13. 문자열 1. 예제 Ⅰ. 예제 _13.1 - 문자열이주소로처리됨을확인해보기위한예제 void func(char *p); printf("%s\n", "Hello World!!"); printf("%s\n", "Hello World!!"+2); printf("%s\n", "Hello World!!"+4); func("hello Korea!!"); void func(char *p) printf("\n"); printf("%s\n", p); printf("%s\n", p+2); printf("%s\n", p+4); 39

Ⅱ. 예제 _13.2 - 배열에저장된문자열을대문자는소문자로, 소문자는대문자로변환하는프로그램예제 void charconversion(char *str); char str[] = "Oh My God"; printf(" 변환전출력 : %s\n", str); charconversion(str); printf(" 변환후출력 : %s\n", str); void charconversion(char *str) int i = 0; while(str[i]!= '\0') if(str[i] >= 'A' && str[i] <= 'Z') str[i] += 32; else if(str[i] >= 'a' && str[i] <= 'z') str[i] -= 32; ++i; 40

2. 문제 Ⅰ. 문제 _13.1 - 문자열을입력받아대문자를모두 * 로변환하여출력하는프로그램작성 Ⅱ. 문제 _13.2 - 문자열을입력받아입력된알파벳의개수만큼별표를찍는프로그램작성 41

Chapter 14. 문자열함수 1. 예제 Ⅰ. 예제 _14.1 - 이름을입력받아이름의길이를구하는예제 #include <string.h> char name[20]; int nlen; printf(" 이름입력 : "); gets(name); nlen = strlen(name); printf(" 글자수 : %d\n", nlen); Ⅱ. 예제 _14.2 - 배열의값을다른배열로복사하는예제 #include <string.h> char buf[255]; char copy[255]; printf(" 문자열입력 : "); gets(buf); printf("\n입력문자열 : %s\n", buf); // copy = buf; <-- 오류발생 : 배열에배열대입불가능 strcpy(copy, buf); printf(" 복사문자열 : %s\n", copy); 42

Ⅲ. 예제 _14.3 - 입력받은파일명에 ".txt" 문자열을연결하는예제 #include <string.h> char str[80]; printf(" 파일명입력 : "); gets(str); strcat(str, ".txt"); printf("\n파일명 : %s\n", str); Ⅳ. 예제 _14.4 - 가위 / 바위 / 보를선택한후문자열을비교하여조건에따라판별하는예제 #include <string.h> char in[10]; printf(" 가위 / 바위 / 보선택 : "); gets(in); printf("\n 컴퓨터보선택 -> "); if(strcmp(in, " 가위 ") == 0) printf(" 이겼습니다.\n"); else if(strcmp(in, " 바위 ") == 0) printf(" 졌습니다.\n"); else if(strcmp(in, " 보 ") == 0) printf(" 비겼습니다.\n"); else printf(" 잘못선택하셨습니다.\n"); 43

Ⅴ. 예제 _14.5 - atoi, atof를이용하여문자열을정수와실수형으로변환하는예제 #include <stdlib.h> char s[10] = "1234", s1[10] = "-1234", s2[10] = "12 34" char st[10] = "12.34", st1[10] = "12.34ab", st2[10] = "abcd" printf("s : %d, s1 : %d, s2 : %d\n", atoi(s), atoi(s1), atoi(s2)); printf("st : %.2f, st1 : %.2f, st2 : %.2f\n", atof(st), atof(st1), atof(st2)); 2. 문제 Ⅰ. 문제 _14.1 - 문자열을입력받아입력받은문자열안에존재하는숫자들의총합을계산 44

Chapter 15. 전처리기 1. 예제 Ⅰ. 예제 _15.1 - 배열의크기를매크로상수로선언한뒤 for문을매크로상수를이용하여수정예제 #define MAX 10 int arr[max]; int i; for(i=0 ; i<max ; i++) arr[i] = i + 1; for(i=0 ; i<max ; i++) printf("%d ", arr[i]); printf("\n"); 45

Ⅱ. 예제 _15.2 - 매개변수에괄호를쓰지않은경우매크로함수의문제점을확인하기위한예제 #define ADD(x, y) x+y #define MUL(x, y) x*y int result1, result2; result1 = 10 * ADD(3,4); // 10 * 3 + 4 result2 = MUL(1+2, 3+4); // 1 + 2 * 3 + 4 printf("result1 = %d\nresult2 = %d\n", result1, result2); 46

Ⅲ. 예제 _15.3 - 매크로함수연습예제 #define OUT(s) printf(#s) #define SUM1(a, b) printf("%d\n", a+b) #define SUM2(a, b) printf("a+b=%d\n", a+b) #define SUM3(a, b) printf(#a "+" #b "=%d\n", a+b) OUT(Hello World); printf("\n"); OUT("Hello World"); printf("\n"); SUM1(3, 5); SUM2(3, 5); SUM3(3, 5); printf("3" "+" "5" "=%d\n", 3+5); 47

Chapter 16. 구조체 Ⅰ 1. 예제 Ⅰ. 예제 _16.1 - 학생정보를저장하는 student 구조체를정의한후 student형의변수선언 - 선언된변수에학생정보를입력한후출력하는프로그램예제 struct student int no; char name[20]; int score; ; void lineprint(char ch, int cnt); struct student st1, st2; printf("\n\n\t\t*** 학생정보입력 ***\n\n"); st1.no = 1; printf(" 학번 : [%03d]\n", st1.no); printf(" 이름 : "); fflush(stdin); gets(st1.name); printf(" 점수 : "); fflush(stdin); scanf("%d", &st1.score); st2.no = 2; printf("\n 학번 : [%03d]\n", st2.no); printf(" 이름 : "); fflush(stdin); gets(st2.name); 48

printf(" 점수 : "); fflush(stdin); scanf("%d", &st2.score); printf("\n\n\t\t*** 학생정보출력 ***\n\n"); lineprint('=', 31); printf("%4s %-20s %5s\n", " 학번 ", " 이름 ", " 점수 "); lineprint('-', 31); printf("%4d %-20s %5d\n", st1.no, st1.name, st1.score); printf("%4d %-20s %5d\n", st2.no, st2.name, st2.score); lineprint('=', 31); void lineprint(char ch, int cnt) int i; for(i=0 ; i<cnt ; i++) printf("%c", ch); printf("\n"); 49

Ⅱ. 예제 _16.2-16.1 예제를구조체배열을이용하여 5명의학생정보를저장하는프로그램으로수정하는예제 #include <stdlib.h> // system(); #define STU_NUM 5 typedef struct student // typedef struct student student; int no; char name[20]; int score; student; void lineprint(char ch, int cnt); student s[stu_num]; int i; for(i=0 ; i<stu_num ; i++) system("cls"); printf("\n\n\t\t*** 학생정보입력 ***\n\n"); s[i].no = i+1; printf(" 학번 : [%03d]\n", s[i].no); printf(" 이름 : "); fflush(stdin); gets(s[i].name); printf(" 점수 : "); fflush(stdin); scanf("%d", &s[i].score); system("cls"); printf("\n\n\t\t*** 학생정보출력 ***\n\n"); lineprint('=', 31); 50

printf("%4s %-20s %5s\n", " 학번 ", " 이름 ", " 점수 "); lineprint('-', 31); for(i=0 ; i<stu_num ; i++) printf("%4d %-20s %5d\n", s[i].no, s[i].name, s[i].score); lineprint('=', 31); void lineprint(char ch, int cnt) int i; for(i=0 ; i<cnt ; i++) printf("%c", ch); printf("\n"); 51

Ⅲ. 예제 _16.3 - 구조체포인터로구조체배열로선언된멤버에접근하는예제 typedef struct score int kor, eng, mat, sum; score; int i; score s[3] = 70, 70, 70, 80, 80, 80, 90, 90, 90 ; score *p = s; for(i=0 ; i<3 ; i++) s[i].sum = s[i].kor + s[i].eng + s[i].mat; printf("s[%d].sum = %d\n", i, s[i].sum); p[i].sum = p[i].kor + p[i].eng + p[i].mat; printf("p[%d].sum = %d\n", i, p[i].sum); (p+i)->sum = (p+i)->kor + (p+i)->eng + (p+i)->mat; printf("(p+%d)->sum = %d\n", i, (p+i)->sum); (*(p+i)).sum = (*(p+i)).kor + (*(p+i)).eng + (*(p+i)).mat; printf("(*(p+%d)).sum = %d\n", i, (*(p+i)).sum); printf("\n"); 52

Chapter 17. 구조체 Ⅱ 1. 예제 Ⅰ. 예제 _17.1 - 구조체대입연산예제 typedef struct data int a; double b; char c; DATA; DATA d1 = 50, 3.57, 'A'; DATA d2; d2 = d1; printf("%d, %.2f, %c\n", d1.a, d1.b, d1.c); printf("%d, %.2f, %c\n", d2.a, d2.b, d2.c); 53

Ⅱ. 예제 _17.2 - 구조체변수 Call-by-Value 예제 typedef struct data int a; double b; char c; DATA; void input(data d); DATA d1 = 10, 3.14, 'A'; input(d1); printf("\n%d, %.2f, %c\n", d1.a, d1.b, d1.c); void input(data d) printf(" 정수입력 : "); scanf("%d", &d.a); fflush(stdin); printf(" 실수입력 : "); scanf("%lf", &d.b); fflush(stdin); printf(" 문자입력 : "); scanf("%c", &d.c); 54

Ⅲ. 예제 _17.3 - 구조체변수 Call-by-Reference 예제 typedef struct data int a; double b; char c; DATA; void input(data *p); DATA d1 = 10, 3.14, 'A'; input(&d1); printf("\n%d, %.2f, %c\n", d1.a, d1.b, d1.c); void input(data *p) printf(" 정수입력 : "); scanf("%d", &p->a); fflush(stdin); printf(" 실수입력 : "); scanf("%lf", &p->b); fflush(stdin); printf(" 문자입력 : "); scanf("%c", &p->c); 55

2. 문제 Ⅰ. 문제 _17.1 - 학생한명의정보를 student 구조체에저장한후출력하는프로그램작성 학생정보는학번, 이름, 국어, 영어, 수학, 총점, 평균으로구성 학번은 1번으로저장하며, 이름과국 / 영 / 수점수는입력받음 입력받은점수로총점과평균을계산 입력기능은입력함수에서출력기능은출력함수에서각각구현 56

typedef struct student /* 여기에구조체멤버를선언하시오. */ student; /* */ 여기에함수원형을선언하시오. student s; // 구조체변수선언 // 입력함수호출 // 출력함수호출 /* */ 여기에입력함수를정의하시오. /* */ 여기에출력함수를정의하시오. 57

Chapter 18. 포인터고급 1. 예제 Ⅰ. 예제 _18.1 - 포인터배열예제 char *ptr[4] = "Apple", "Banana", "Orange", "Strawberry"; int i, j; // 문자열단위로출력 for(i=0 ; i<4 ; i++) printf("%s\n", ptr[i]); printf("\n"); // 문자열을문자단위로출력 for(i=0 ; i<4 ; i++) for(j=0 ; ptr[i][j]!='\0' ; j++) printf("%c", ptr[i][j]); // printf("%c", *(ptr[i]+j) ); printf("\n"); 58

Ⅱ. 예제 _18.2 - 더블포인터예제 void output(char ** p); char *fruit[4] = "apple", "banana", "orange", "strawberry"; output(fruit); // 배열의이름은배열의시작주소 ( 포인터의주소 ) // 포인터주소는더블포인터에저장 void output(char ** p) int i; for(i=0 ; i<4 ; i++) printf("%s\n", p[i]); // printf("%s\n", *(p+1)); printf("\n"); 59

Ⅲ. 예제 _18.3-2 차원배열이름의포인터예제 int a[6][4]; int (*p)[4]; int i, j, k=1; p = a; for(i=0 ; i<6 ; i++) for(j=0 ; j<4 ; j++) a[i][j] = k++; printf(" 1. %d\n", a[0]); printf(" 2. %d\n", *(a+0)); printf(" 3. %d\n", (*(a+1))[0]); printf(" 4. %d\n", *(a[1]+2)); printf(" 5. %d\n", *(*++p+3)+2); printf(" 6. %d\n", ++*(*(a+1)+2)+4); printf(" 7. %d\n", (*(*p++ + 2)+4)+6); printf(" 8. %d\n", (*p[2]+3)+5); printf(" 9. %d\n", **(p+1)+3); printf(" 10. %d\n", *(p[0]+6)+5); 60

Chapter 19. 파일입 출력 1. 예제 Ⅰ. 예제 _19.1 - 입력받은한글자를스트림에출력하는프로그램예제 FILE *fp; char ch; fp = fopen("out.txt", "wt"); // 파일생성 - 쓰기모드 if(fp == NULL) printf("file Open Fail\n"); printf(" 문자입력 : "); scanf("%c", &ch); fputc(ch, fp); 61

Ⅱ. 예제 _19.2 - ctrl+z를누르기이전까지문자열을입력받은후스트림에출력하는프로그램예제 #include <stdlib.h> void input(char *str); FILE *fp; char str[255]; fp = fopen("out.txt", "wt"); if(fp == NULL) printf("file Open Fail\n"); input(str); fputs(str, fp); printf("out.txt 파일에저장완료 \n"); fclose(fp); void input(char *str) char temp; int i=0; printf(" 문자열입력 ( 종료- Ctrl + Z)\n"); while(temp = getchar()) if(temp == EOF) // Ctrl+Z break str[i++] = temp; str[i] = '\0' 62

Ⅲ. 예제 _19.3 - 저장할파일명을입력받아파일을복사하는프로그램예제 - 프로젝트 ( 파일이읽고쓰이는위치 ) 에 'test.txt' 파일을미리만들어준비해야함 #include <stdlib.h> void filecopy(file *fp, FILE *fp2); void filenameinput(char *filename); FILE *fp, *fp2; char filename[255]; filenameinput(filename); fp = fopen("test.txt", "rt"); fp2 = fopen(filename, "wt"); if(fp == NULL fp2 == NULL) printf("file Open Fail\n"); filecopy(fp, fp2); printf("%s 파일이복사되었습니다.\n", filename); fcloseall(); void filenameinput(char *filename) printf(" 저장파일명입력 : "); gets(filename); strcat(filename, ".txt"); void filecopy(file *fp, FILE *fp2) char temp[255]; 63

char *psave; while(psave = fgets(temp, 255, fp)) if(psave == NULL) break fputs(temp, fp2); 64

Chapter 20. 메모리관리와동적할당 1. 예제 Ⅰ. 예제 _20.1 - 학생수를입력받아입력받은학생수만큼수학점수를저장할수있는메모리를할당, 할당된메모리에점수를입력받아평균을구하는프로그램예제 #include <stdlib.h> int i, in, sum=0; int *p; printf(" 학생수입력 : "); scanf("%d", &in); p = (int *)malloc(in*sizeof(int)); printf("\n"); for(i=0 ; i<in ; i++) printf("%d번수학점수 : ", i+1); scanf("%d", &p[i]); sum += p[i]; printf("\n 학생수 : %d 명 \n 평균 : %.2f\n", in, (double)sum/in); free(p); 65

Ⅱ. 예제 _20.2 - 학생수를입력받은학생수만큼구조체를할당하여입출력하는프로그램예제 #include <stdlib.h> typedef struct Student int kor, eng, mat, sum; Student; void input(student *pst, int in); void output(student *pst, int in); int in; Student *pst; printf(" 학생수입력 : "); scanf("%d", &in); pst = (Student *)malloc(in * sizeof(student)); input(pst, in); output(pst, in); free(pst); void input(student *pst, int in) int i; for(i=0 ; i<in ; i++) printf("\n국어점수 : "); scanf("%d", &pst[i].kor); printf(" 영어점수 : "); scanf("%d", &pst[i].eng); printf(" 수학점수 : "); 66

scanf("%d", &pst[i].mat); pst[i].sum = pst[i].kor + pst[i].eng + pst[i].mat; void output(student *pst, int in) int i; printf("\n\n ***** 점수출력 *****\n\n"); printf("%4s %4s %4s %4s %4s\n", " 번호 ", " 국어 ", " 영어 ", " 수학 ", " 총점 "); for(i=0 ; i<in ; i++) printf("%4d %4d %4d %4d %4d\n", i+1, pst[i].kor, pst[i].eng, pst[i].mat, pst[i].sum); 67

Ⅱ. 예제 _20.3 - 구조체멤버의문자열을동적할당하여출력하는프로그램예제 #include <stdlib.h> #include <string.h> typedef struct employee char *name; char *phone; char *addr; emp; int i, in; char str[255]; emp *np; printf(" 사원수입력 : "); scanf("%d", &in); fflush(stdin); np = (emp*)malloc(sizeof(emp)*in); for(i=0 ; i<in ; i++) printf("\n사원번호 : [%04d]\n", i+1); printf(" 사원명 : "); gets(str); np[i].name = (char*)malloc(strlen(str)+1); strcpy(np[i].name, str); printf(" 전화번호 : "); gets(str); np[i].phone = (char*)malloc(strlen(str)+1); strcpy(np[i].phone, str); printf(" 주소 : "); gets(str); np[i].addr = (char*)malloc(strlen(str)+1); strcpy(np[i].addr, str); 68

printf("\n\n%-8s %-10s %-15s %-30s\n", " 사원번호 ", " 사원명 ", " 전화번호 ", " 주소 "); for(i=0 ; i<in ; i++) printf("%08d %-10s %-15s %-30s\n", i+1, np[i].name, np[i].phone, np[i].addr); for(i=0 ; i<in ; i++) free(np[i].name); free(np[i].phone); free(np[i].addr); free(np); 69