제 2 장

1.

#include <stdio.h>

int main(void)

{

int x, y, z, avg;

printf("정수를 입력하시오 :");

scanf("%d",&x);

printf("정수를 입력하시오 :");

scanf("%d",&y);

printf("정수를 입력하시오 :");

scanf("%d",&z);

avg = (x + y + z) / 3;

printf("평균은 %d입니다.\n",avg);

return 0;

}

2.

#include <stdio.h>

int main(void)

{

double cm, inch;

printf("센티미터를 입력하시오 :");

scanf("%lf",&cm);

inch = cm / 2.54;

printf("%fcm 는 %finch입니다.\n",cm, inch);

return 0;

}

3.

#include <stdio.h>

int main(void)

{

double ounce, gram;

printf("온스를 입력하시오 :");

scanf("%lf",&ounce);

gram = ounce * 28.3;

printf("%founce 는 %fg입니다.\n",ounce, gram);

return 0;

}

4.

#include <stdio.h>

int main(void)

{

double kg, m_kg;

printf("몸무게를 입력하시오 :");

scanf("%lf",&kg);

m_kg = kg * 0.17;

printf("달에서의 몸무게는%fkg 입니다.\n",m_kg);

return 0;

}

제 3 장

1.

#include <stdio.h>

int main(void)

{

double x;

printf("실수를 입력하시오: ");

scanf("%lf",&x);

printf("지수 형식으로는 %e입니다.\n",x);

return 0;

}

2.

#include <stdio.h>

int main(void)

{

double x, f;

printf("x의 값을 입력하시오: ");

scanf("%lf",&x);

f = 3.0*x*x*x - 7.0*x*x + 9.0;

printf("다항식의 값은 %lf입니다.\n",f);

return 0;

}

3.

#include <stdio.h>

#define SM_PER_PY 3.3058

int main(void)

{

double py, sm;

printf("면적을 제곱미터 단위로 입력하시오: ");

scanf("%lf",&sm);

py = sm / SM_PER_PY;

printf("%.2lf제곱미터는 %.2lf평입니다.\n",sm,py);

return 0;

}

4.

#include<stdio.h>

int main(void){

printf("%d\n",sizeof(short));

printf("%d\n",sizeof(int));

printf("%d\n",sizeof(long));

printf("%d\n",sizeof(unsigned short));

printf("%d\n",sizeof(unsigned int));

printf("%d\n",sizeof(unsigned long));

printf("%d\n",sizeof(char));

printf("%d\n",sizeof(unsigned char));

printf("%d\n",sizeof(float));

printf("%d\n",sizeof(double));

return 0;

}

5.

#include<stdio.h>

int main(void){

int num;

char ascii;

printf("아스키 코드값을 입력하세요: ");

scanf("%d",&num);

ascii = num;

printf("%c\n",ascii);

return 0;

}

6.

#include<stdio.h>

int main(void){

printf("%d %o %x\n", 'a','a','a');

printf("%d %o %x\n", 'b','b','b');

printf("%d %o %x\n", 'c','c','c');

printf("%d %o %x\n", 'd','d','d');

printf("%d %o %x\n", 'e','e','e');

return 0;

}

7.

#include<stdio.h>

int main(void){

printf("%c\n", 'a'+1);

printf("%c\n", 'a'+2);

printf("%c\n", 'a'+3);

return 0;

}

--------------------------------------------

b

c

d

계속하려면 아무 키나 누르십시오 . . .

--------------------------------------------

아스키 코드가 연속적인 정수로 되어 있음을 알 수 있다.

8.

#include<stdio.h>

int main(void){

printf("\a");

printf("화재가 발생하였습니다.\n");

printf("\a");

return 0;

}

9.

#include<stdio.h>

int main(void){

printf("\"ASCII code\", \'A\', \'B\', \'C\',\n");

printf("\\t \\a \\n \n");

return 0;

}

10.

#include<stdio.h>

int main(void){

double value;

printf("실수를 입력하시오: ");

scanf("%lf", &value);

printf("%f\n", value);

printf("%e\n", value);

return 0;

}

------------------------------------------------------

실수를 입력하시오:3.14

3.140000

3.140000e+000

계속하려면 아무 키나 누르십시오 . . .

------------------------------------------------------

제 4 장

1.

#include <stdio.h>

int main(void)

{

int time, minute, second;

printf("시간을 입력하시오(초)");

scanf("%d", &time);

minute = time/60;

second = time%60;

printf("%d초는 %d분 %d초입니다\n", time, minute, second);

return 0;

}

2.

#include <stdio.h>

int main()

{

int x, y, result;

printf("정수를 입력하시오: ");

scanf("%d", &x);

printf("정수를 입력하시오: ");

scanf("%d", &y);

printf("%d + %d = %d\n", x, y, x+y);

printf("%d - %d = %d\n", x, y, x-y);

printf("%d * %d = %d\n", x, y, x*y);

printf("%d / %d = %d\n", x, y, x/y);

printf("%d %% %d = %d\n", x, y, x%y);

return 0;

}

3.

#include <stdio.h>

int main()

{

printf("정수	제곱	세제곱\n");

printf("%d	%d	%d\n", 1, 1*1, 1*1*1);

printf("%d	%d	%d\n", 2, 2*2, 2*2*2);

printf("%d	%d	%d\n", 3, 3*3, 3*3*3);

printf("%d	%d	%d\n", 4, 4*4, 4*4*4);

printf("%d	%d	%d\n", 5, 5*5, 5*5*5);

return 0;

}

4.

#include <stdio.h>

int main()

{

int value, value1, value2;

printf("정수를 입력하시오: ");

scanf("%d", &value);

value1 = value /10;

value2 = value1 /10;

printf("백의 자리수: %d\n", value2%10);

printf("십의 자리수: %d\n", value1%10);

printf("일의 자리수: %d\n", value%10);

return 0;

}

5.

#include <stdio.h>

int main()

{

int x, y, z, max;

printf("정수를 입력하시오: ");

scanf("%d", &x);

printf("정수를 입력하시오: ");

scanf("%d", &y);

printf("정수를 입력하시오: ");

scanf("%d", &z);

max = (x>y)? x:y;

max = (z>max)?z:max;

printf("가장 큰 수는 %d입니다.\n ", max);

return 0;

}

6.

#include <stdio.h>

int main()

{

int x;

printf("정수를 입력하시오: ");

scanf("%d", &x);

printf("수식의 값은 %f입니다.\n ", (x*x-20.0)/(x-7.0));

return 0;

}

7.

#include <stdio.h>

int main()

{

double r;

printf("구의 반지름을 입력하시오: ");

scanf("%lf", &r);

printf("표면적은 %f입니다\n ", 4.0*3.141592*r*r);

printf("부피는 %f입니다\n ", (4.0/3.0)*3.141592*r*r*r);

return 0;

}

8.

#include <stdio.h>

int main()

{

double ac, ae, bc;

printf("AC를 입력하시오: ");

scanf("%lf", &ac);

printf("AE를 입력하시오: ");

scanf("%lf", &ae);

printf("BC를 입력하시오: ");

scanf("%lf", &bc);

printf("높이는 %f입니다\n ", (ae*bc)/ac);

return 0;

}

9.

#include <stdio.h>

int main()

{

int x, y;

printf("x의 좌표를 입력하시오: ");

scanf("%d", &x);

printf("x의 좌표를 입력하시오: ");

scanf("%d", &y);

(x>0 && y >0)? printf("1사분면\n"):printf("");

(x<0 && y >0)? printf("2사분면\n"):printf("");

(x<0 && y <0)? printf("3사분면\n"):printf("");

(x>0 && y <0)? printf("4사분면\n"):printf("");

return 0;

}

10.

#include <stdio.h>

#include <math.h>

int main()

{

double a,b,c;

printf("a의 값을 입력하시오: ");

scanf("%d", &a);

printf("b의 값을 입력하시오: ");

scanf("%d", &b);

printf("c의 값을 입력하시오: ");

scanf("%d", &c);

printf("첫번째 근의 값=%f\n", (-b+sqrt(b*b-4.0*a*c))/2.0*a);

printf("두번째 근의 값=%f\n", (-b-sqrt(b*b-4.0*a*c))/2.0*a);

return 0;

}

제 5 장

1.

#include <stdio.h>

int main(void)

{

int x, y;

printf("정수를 입력하시오:");

scanf("%d",&x);

printf("정수를 입력하시오:");

scanf("%d",&y);

printf("두수의 합은 %d입니다.\n", x+y);

if( x > y )

printf("두수의 합은 %d입니다.\n", x-y);

else

printf("두수의 합은 %d입니다.\n", y-x);

return 0;

}

2.

#include <stdio.h>

int main(void)

{

int income;

int tax;

printf("과세 표준을 입력하시오(만원): ");

scanf("%d",&income);

if( income <= 1000 )

tax = income * 0.08;

else if( income <= 4000 )

tax = income * 0.17;

else if( income <= 8000 )

tax = income * 0.26;

else

tax = income * 0.35;

printf("소득세는 %d만원입니다\n", tax);

return 0;

}

3.

#include <stdio.h>

int main(void)

{

int in_hour, in_minute;

int out_hour, out_minute;

int time, money;

printf("들어온 시간을 입력하시오: ");

scanf("%d",&in_hour);

printf("들어온 분을 입력하시오: ");

scanf("%d",&in_minute);

printf("나가는 시간을 입력하시오: ");

scanf("%d",&out_hour);

printf("나가는 분을 입력하시오: ");

scanf("%d",&out_minute);

// 계산을 쉽게 하기 위하여 주차한 시간을 분으로 변환한다.

time = (out_hour-in_hour) * 60 + (out_minute-in_minute);

if( time < 30 )

money = 1500;

else {

money = 1500 + 500*(((time-30)+9)/10);

}

printf("주차 요금은 다음과 같습니다\n");

printf("주차한 시간: %d\n", time);

printf("주차 요금: %d\n", money);

return 0;

}

4.

#include <stdio.h>

int main(void)

{

int mid_score, final_score;

double w_average;

printf("중간 고사 점수를 입력하시오 :");

scanf("%d",&mid_score);

printf("기말 고사 점수를 입력하시오 :");

scanf("%d",&final_score);

w_average = (mid_score + final_score)/2.0;

if(w_average >= 90)

printf("당신의 학점은 A학점입니다.\n");

else if(w_average >= 80)

printf("당신의 학점은 B학점입니다.\n");

else if(w_average >= 70)

printf("당신의 학점은 C학점입니다.\n");

else if(w_average >= 60)

printf("당신의 학점은 D학점입니다.\n");

else

printf("당신의 학점은 F학점입니다.\n");

return 0;

}

5.

#include <stdio.h>

#include <math.h>

int main(void)

{

int nInputA = 0, nInputB = 0, nInputC = 0;

double dResultA = 0.0, dResultB = 0.0;

double dDiscriminant = 0.0;

printf("계수 a를 입력하시오 : ");

scanf("%d", &nInputA);

printf("계수 b를 입력하시오 : ");

scanf("%d", &nInputB);

printf("계수 c를 입력하시오 : ");

scanf("%d", &nInputC);

if(nInputA == 0)

{

dResultA = (double)(-nInputC)/nInputB;

printf("위의 이차 방정식의 실근은 %.2lf입니다.\n", dResultA);

}

else

{

dDiscriminant = sqrt(pow(nInputB,2)-(4*nInputA*nInputC));

if(dDiscriminant<0.0)

{

printf("판별식이 음수이므로 실근이 존재하지 않습니다.\n");

}

else

{

dResultA = ((double)(-nInputB) + dDiscriminant) / (2 * nInputA);

dResultB = ((double)(-nInputB) - dDiscriminant) / (2 * nInputA);

printf("위의 이차 방정식의 실근은 %.2lf과 %.2lf입니다.\n", dResultA, dResultB);

}

}

return 0;

}

6.

#include <stdio.h>

int main(void)

{

int computer=0;	// 가위

int user;

printf("가위(0), 바위(1), 보(2)를 입력하세요: ");

scanf("%d",&user);

if( user == 0 )

printf("비겼습니다.\n");

else if( user == 1 )

printf("컴퓨터가 졌습니다.\n");

else

printf("컴퓨터가 이겼습니다.\n");

return 0;

}

제 6 장

1.

#include <stdio.h>

int main(void)

{

int i;

for(i=1;i<100;i++)

if( (i%3)==0 )

printf("%d ", i);

return 0;

}

2.

#include <stdio.h>

int main(void)

{

int i;

for(i=1;i<100;i++)

if( (i%3)==0 && (i%5)==0 )

printf("%d ", i);

return 0;

}

3.

#include <stdio.h>

int main(void)

{

int i, ctemp;

printf("======================\n");

printf("화씨온도      섭씨온도\n");

printf("======================\n");

for(i=0;i<=100;i++)

{

ctemp = (i-32)*5.0/9.0;

printf("%d      %d\n", i, ctemp);

}

return 0;

}

4.

#include <stdio.h>

int main(void)

{

int year=0, sum=1000;

while(sum < 2000)

{

sum += sum * 0.07;

year++;

}

printf("year=%d\n", year);

return 0;

}

5.

#include <stdio.h>

int main(void)

{

int i, k, n;

printf("숫자를 입력하시오: ");

scanf("%d",&n);

for(i = 1; i <=n; i++)

{

for(k = 1; k<= i; k++)

printf("%3d",k);

printf("\n");

}

return 0;

}

6.

#include <stdio.h>

int main(void)

{

int min=INT_MAX;

int max=INT_MIN;

while(1)

{

if( scanf("%d", &x) != 0 )

break;

if( x < min )

min = x;

if( x > max )

max = x;

}

printf("max=%d\n", max);

printf("min=%d\n", min);

return 0;

}

7.

#include <stdio.h>

int main(void)

{

int i,k, value;

for(i=0;i<10;i++)

{

printf("데이터를 입력하시오:");

scanf("%d", &value);

printf("막대의 높이: %d\n", value);

for(k=0;k<value;k++)

printf("*");

printf("\n");

}

return 0;

}

8.

#include <stdio.h>

int main(void)

{

int a, b, c;

for(a=1;a<=100;a++)

for(b=1;b<=100;b++)

for(c=1;c<=100;c++)

{

if( (a*a+b*b) == c*c )

printf("%d %d %d\n", a, b, c);

}

return 0;

}

9.

생략

10.

오타 수정해주시기 바랍니다.

“현재 정수에서 시작하여 100 사이에 약수가 하나라도 있으면 소수가 아니다. ”

->

“2부터 시작하여 자기 자신 사이에 약수가 하나라도 있으면 소수가 아니다. “

#include <stdio.h>

int main(void)

{

int x, y, prime;

for(x=2;x<=100;x++)

{

prime = 1;

for(y=2;y<x;y++)

if( x % y == 0 )

prime = 0;

if( prime == 1 )

printf("%d\n", x);

}

return 0;

}

제 7 장

1.

#include <stdio.h>

void get_divisor(int n);

int main(void)

{

get_divisor(8);

return 0;

}

void get_divisor(int n)

{

int i;

for(i = 1; i <= n; i++)

if( n%i == 0 )

printf("%d\n", i);

}

2.

#include <stdio.h>

int prime(int x);

int main(void)

{

int i;

for(i=2;i<=100;i++)

if( prime(i) == 1 )

printf("%d\n", i);

return 0;

}

int prime(int x)

{

int i;

for(i=2;i<x;i++)

if( (x%i)==0 )

return 0;

return 1;

}

3.

#include <stdio.h>

int ipower(int x, int y);

int main(void)

{

int i;

for(i=0;i<=10;i++)

printf("%d\n", ipower(3, i));

return 0;

}

int ipower(int x, int y)

{

int i;

int prod=1;

for(i=0;i<y;i++)

prod *= x;

return prod;

}

4.

#include <stdio.h>

#include <math.h>

double dist_2d(double x1, double y1, double x2, double y2)

{

return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

}

int main(void)

{

double x1,y1, x2,y2;

printf("첫번째 점의 좌표를 입력하시오:(x, y)");

scanf("%lf %lf", &x1, &y1);

printf("두번째 점의 좌표를 입력하시오:(x, y)");

scanf("%lf %lf", &x2, &y2);

printf("두점 사이의 거리는 %f입니다.", dist_2d(x1, y1, x2, y2));

return 0;

}

5.

#include <stdio.h>

int calc_parking_charge(int hours);

int main(void)

{

printf("%d\n", calc_parking_charge(3));

return 0;

}

int calc_parking_charge(int hours)

{

int fee;

if( hours <= 2 ) return 3000;

fee = 3000+ (hours-2)*2000;

if( fee > 6000 ) fee =6000;

return fee;

}

6.

#include <stdio.h>

#include <math.h>

void quad_eqn(double a, double b, double c);

int main(void)

{

double a,b,c;

printf("2차 방정식의 계수를 입력하시오:\n");

printf("a: ");

scanf("%lf", &a);

printf("b: ");

scanf("%lf", &b);

printf("c: ");

scanf("%lf", &c);

quad_eqn(a, b, c);

return 0;

}

void quad_eqn(double a, double b, double c)

{

double disc;

disc=b*b-4.0*a*c;

if( disc > 0 ){

printf("%lf\n", (-b + sqrt(disc))/(2.0*a));

printf("%lf\n", (-b - sqrt(disc))/(2.0*a));

}

else

printf("근이 없음\n");

}

7.

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

int user, computer;

while(1){

printf("앞(0) 또는 뒤(1)를 선택하시오(종료는 -1):");

scanf("%d", &user);

if( user == -1) break;

computer = rand()%2;

if( user == computer )

printf("사용자가 이겼습니다.\n");

else

printf("컴퓨터가 이겼습니다.\n");

}

return 0;

}

8.

(a)

void print_menu()

{

printf("1. 햄버거\n");

printf("2. 치즈버거\n");

printf("3. 샌드위치\n");

printf("4. 종료\n");

printf("원하는 메뉴를 선택하시오.\n");

}

(b)

void get_menu_number()

{

int n;

do {

print_menu();

scanf("%d", &n);

} while( n < 1 || n > 4 );

if( n == 1)

do_1();

else if( n == 2 )

do_2();

else if( n == 3 )

do_3();

else

do_4();

}

(c)

void do_1()

{

printf("1번 메뉴가 호출되었습니다.\n");

}

void do_2()

{

printf("2번 메뉴가 호출되었습니다.\n");

}

void do_3()

{

printf("3번 메뉴가 호출되었습니다.\n");

}

void do_4()

{

printf("4번 메뉴가 호출되었습니다.\n");

}

9.

#include <stdio.h>

int add(int, int);

int sub(int, int);

int mult(int, int);

int div(int, int);

int main(void)

{

int op1, op2, result, quit;

char op;

while(1){

printf("연산을 입력하시오(종료는 Ctrl-Z):");

quit = scanf("%d %c %d", &op1, &op, &op2);

if( quit != 3 )

return 0;

switch( op){

case '+':

result = add(op1, op2);

break;

case '-':

result = sub(op1, op2);

break;

case '*':

result = mult(op1, op2);

break;

case '/':

result = div(op1, op2);

break;

}

printf("연산 결과:%d\n", result);

}

return 0;

}

int add(int op1, int op2)

{

static int count =0;

count++;

printf("덧셈은 총 %d번 호출되었습니다\n", count);

return op1+op2;

}

int sub(int op1, int op2)

{

static int count =0;

count++;

printf("뺄셈은 총 %d번 호출되었습니다\n", count);

return op1-op2;

}

int mult(int op1, int op2)

{

static int count =0;

count++;

printf("곱셈은 총 %d번 호출되었습니다\n", count);

return op1*op2;

}

int div(int op1, int op2)

{

static int count =0;

count++;

printf("나눗셈은 총 %d번 호출되었습니다\n", count);

return op1/op2;

}

10.

(a)

#include <stdio.h>

void save(int amount);

int total;

int main(void)

{

int n;

while(1){

printf("얼마를 저축하시겟습니까?(종료는 -1): ");

scanf("%d", &n);

if( n < 0 )

break;

save(n);

}

return 0;

}

void save(int amount)

{

total += amount;

printf("지금까지의 저축액은 %d입니다.\n", total);

}

(b)

#include <stdio.h>

void save(int amount);

int main(void)

{

int n;

while(1){

printf("얼마를 저축하시겟습니까?(종료는 -1): ");

scanf("%d", &n);

if( n < 0 )

break;

save(n);

}

return 0;

}

void save(int amount)

{

static int total;

total += amount;

printf("지금까지의 저축액은 %d입니다.\n", total);

}

(c)

#include <stdio.h>

void save(int amount, int *p);

int main(void)

{

int n, total=0;

while(1){

printf("얼마를 저축하시겟습니까?(종료는 -1): ");

scanf("%d", &n);

if( n < 0 )

break;

save(n, &total);

}

return 0;

}

void save(int amount, int *p)

{

*p += amount;

printf("지금까지의 저축액은 %d입니다.\n", *p);

}

(d)

// 전역 변수를 사용하면 된다.

#include <stdio.h>

void save(int amount);

void draw(int amount);

int total;

int main(void)

{

int n;

while(1){

printf("얼마를 저축하시겟습니까?(종료는 -1): ");

scanf("%d", &n);

if( n < 0 )

break;

save(n);

printf("얼마를 인출하시겟습니까?(종료는 -1): ");

scanf("%d", &n);

if( n < 0 )

break;

draw(n);

}

return 0;

}

void save(int amount)

{

total += amount;

printf("지금까지의 저축액은 %d입니다.\n", total);

}

void draw(int amount)

{

total -= amount;

printf("지금까지의 저축액은 %d입니다.\n", total);

}

11.

#include <stdio.h>

void show_digit(int x);

int main(void)

{

show_digit(1234);

}

void show_digit(int x)

{

if( x > 0 )

{

show_digit(x / 10);	// 재귀 호출

printf("%d\n", x % 10);	// 나머지를 출력

}

}

12.

#include <stdio.h>

#include <math.h>

int recursive(int n);

int main(void)

{

printf("%d\n", recursive(10));

}

int recursive(int n)

{

if(n==1) return 1;

else return n*n*n+recursive(n-1);

}

제 8 장

1.

#include <stdio.h>

int main(void)

{

int i;

int days[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

for(i=0; i<12; i++)

printf("%d월은 %d일까지 있습니다.\n", i+1, days[i]);

return 0;

}

2.

#include <stdio.h>

(a)

void get_stat_per_test(int score[][3])

{

int i, k, min, max, sum;

for(k=0;k<3;k++){

min=max=score[0][k];

sum=0;

for(i=0;i<10;i++){

if(score[i][k]<min) min=score[i][k];

if(score[i][k]>min) max=score[i][k];

sum += score[i][k];

}

printf("최대점수=%d\n", max);

printf("최저점수=%d\n", min);

printf("평균점수=%f\n", sum/(3.0*10));

}

}

(b)

void get_stat_per_student(int score[][3])

{

int i, k, min, max, sum;

for(i=0;i<10;i++){

min=max=score[i][0];

sum=0;

for(k=0;k<3;k++){

if(score[i][k]<min) min=score[i][k];

if(score[i][k]>min) max=score[i][k];

sum += score[i][k];

}

printf("최대점수=%d\n", max);

printf("최저점수=%d\n", min);

printf("평균점수=%f\n", sum/(3.0*10));

}

}

(c)

void get_stat_per_test1(int score[][3])

{

int i, k, sum, max, freq[100]={0};

for(k=0;k<3;k++){

for(i=0;i<100;i++){

freq[i]=0;

}

sum=0;

for(i=0;i<10;i++){

sum += score[i][k];

freq[score[i][k]]++;

}

printf("산술평균값=%f\n", sum/(3.0*10));

max=0;

for(i=1;i<100;i++){

if( freq[i] > freq[max]) max=i;

}

printf("최빈값=%d\n", max);

}

}

(d)

void sort(int score[][3])

{

int i, k, student[10]={0};

int j, temp, least;

for(i=0;i<10;i++){

for(k=0;k<3;k++){

student[i] += score[i][k];

}

}

for(i = 0; i < 10-1; i++)

{

least = i;   // i번째 값을 최소값으로 가정

for(j = i + 1; j < 10; j++)    // 최소값 탐색

if(student[j] < student[least])

least = j;

// i번째 원소와 least 위치의 원소를 교환

temp = student[i];

student[i] = student[least];

student[least] = temp;

}

for(i=0;i<10;i++){

printf("%d\n", student[i]);

}

}

int main(void)

{

int i, k;

int score[10][3];

for(i=0;i<10;i++){

for(k=0;k<3;k++){

printf("학생 %d의 %d번째 시험 성적: ", i, k);

scanf("%d", &score[i][k]);

}

}

get_stat_per_test(score);

get_stat_per_test1(score);

get_stat_per_student(score);

sort(score);

return 0;

}

3.

#include <stdio.h>

#include <math.h>

#define MAX_SIZE 10

int main(void)

{

int i;

double data[MAX_SIZE];

double sum = 0.0, avg, sd;

for(i=0; i<MAX_SIZE; i++){

printf("실수를 입력하시오: ");

scanf("%lf", &data[i]);

}

sum = 0.0;

for(i=0; i<MAX_SIZE; i++){

sum += data[i];

}

avg = sum/MAX_SIZE;

printf("평균:%f\n", avg);

sum = 0.0;

for(i=0; i<MAX_SIZE; i++){

sum += (data[i]-avg)*(data[i]-avg);

}

sd = sum/MAX_SIZE;

printf("표준편차:%f\n", sqrt(sd));

return 0;

}

4.

#include <stdio.h>

int main(void)

{

int i, max, freq[100]={0};

for(i=0;i<100;i++){

freq[rand()%10]++;

}

max=0;

for(i=1;i<100;i++){

if( freq[i] > freq[max])

max=i;

}

printf("최빈값=%d\n", max);

return 0;

}

5.

#include <stdio.h>

int main(void)

{

int i, j, sum;

int data[3][5] = { { 12, 56, 32, 16, 98 },

{ 99, 56, 34, 41, 3 },

{ 65, 3, 87, 78, 21 } };

for(i=0; i<3; i++){

sum = 0;

for(j=0; j<5; j++)

sum += data[i][j];

printf("%d행의 합계: %d\n", i, sum);

}

for(j=0; j<5; j++){

sum = 0;

for(i=0; i<3; i++)

sum += data[i][j];

printf("%d열의 합계: %d\n", j, sum);

}

return 0;

}

6.

#include <stdio.h>

void show_digit(int n)

{

int i;

int binary[64]={0};

for(i = 0; i < 64 && n > 0; i++)

{

binary[i] = n % 2;

n = n / 2;

}

for(i--;i>=0; i--)

{

printf("%d", binary[i]);

}

printf("\n");

}

int main(void)

{

show_digit(32);

return 0;

}

7.

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

int freq[6] = {0};

int i, face;

for(i=0; i< 60000; i++)

{

face = rand() % 6;

++freq[face];

}

printf("주사위면\t\t빈도\n");

for(i=0; i < 6; i++)

printf("   %d\t\t\t%d\n",i+1,freq[i]);

return 0;

}

8.

#include <stdio.h>

void print_seats(int seats[], int n);

int main(void)

{

char ans1;

int ans2;

int seats[10] = {0};

while(1)

{

printf("좌석을 예약하시겠습니까?(y 또는 n) ");

scanf(" %c",&ans1);

if(ans1 == 'y' || ans1 == 'Y')

{

printf("몇번째 좌석을 예약하시겠습니까?");

scanf("%d",&ans2);

if(ans2 >= 1 && ans2 <= 10)

if(seats[ans2-1] == 0)

{

seats[ans2-1] = 1;

printf("예약되었습니다.\n");

}

else

{

printf("이미 예약된 자리입니다. 다른 좌석을 선택하세요\n");

}

print_seats(seats, 10);

}

else break;

}

return 0;

}

void print_seats(int seats[], int n)

{

int i;

printf("-------------------------------\n");

printf("  1  2  3  4  5  6  7  8  9  10\n");

printf("-------------------------------\n");

for(i = 0; i < n; i++)

{

printf("  %d",seats[i]);

}

printf("\n");

}

9.

아주 간단한 알고리즘 사용하였음.

#include <stdio.h>

void draw_board(int b[][3])

{

printf("------------------------------\n");

printf("   %d   |  %d    | %d\n", b[0][0], b[0][1], b[0][2]);

printf("------------------------------\n");

printf("   %d   |  %d    | %d\n", b[1][0], b[1][1], b[1][2]);

printf("------------------------------\n");

printf("   %d   |  %d    | %d\n", b[2][0], b[2][1], b[2][2]);

printf("------------------------------\n");

}

int check_board(int b[][3])

{

if( ( b[0][0] == 1 && b[0][1] == 1 && b[0][2] == 1 ) ||

( b[1][0] == 1 && b[1][1] == 1 && b[1][2] == 1 ) ||

( b[2][0] == 1 && b[2][1] == 1 && b[2][2] == 1 ) ||

( b[0][0] == 1 && b[1][0] == 1 && b[2][0] == 1 ) ||

( b[0][1] == 1 && b[1][1] == 1 && b[2][1] == 1 ) ||

( b[0][2] == 1 && b[1][2] == 1 && b[2][2] == 1 ) ||

( b[0][0] == 1 && b[1][1] == 1 && b[2][2] == 1 ) ||

( b[0][2] == 1 && b[1][1] == 1 && b[2][0] == 1 ) ){

printf("컴퓨터 승리\n");

return 0;

}

if( ( b[0][0] == 2 && b[0][1] == 2 && b[0][2] == 2 ) ||

( b[1][0] == 2 && b[1][1] == 2 && b[1][2] == 2 ) ||

( b[2][0] == 2 && b[2][1] == 2 && b[2][2] == 2 ) ||

( b[0][0] == 2 && b[1][0] == 2 && b[2][0] == 2 ) ||

( b[0][1] == 2 && b[1][1] == 2 && b[2][1] == 2 ) ||

( b[0][2] == 2 && b[1][2] == 2 && b[2][2] == 2 ) ||

( b[0][0] == 2 && b[1][1] == 2 && b[2][2] == 2 ) ||

( b[0][2] == 2 && b[1][1] == 2 && b[2][0] == 2 ) ){

printf("인간 승리\n");

return 0;

}

return 1;

}

// 매우 간단한 알고리즘

void computer_move(int b[][3])

{

int x,y;

for(y=0;y<3;y++){

for(x=0;x<3;x++){

if( b[y][x] == 0 ){

b[y][x] = 1;

return;

}

}

}

}

// 매우 간단한 알고리즘

void human_move(int b[][3])

{

int r, c;

printf("행번호: ");

scanf("%d", &r);

printf("열번호: ");

scanf("%d", &c);

b[r][c] = 2;

}

int main(void)

{

int board[3][3]={0};

draw_board(board);

while(check_board(board)){

computer_move(board);

draw_board(board);

human_move(board);

draw_board(board);

}

return 0;

}

제 9 장

1.

#include <stdio.h>

void get(double value, int *i_part, double *f_part);

int main(void)

{

int n;

double f;

get(3.14, &n, &f);

printf("%d %f\n", n, f);

return 0;

}

void get(double value, int *i_part, double *f_part)

{

*i_part = (int)value;

*f_part = value - (int)value;

}

2.

#include <stdio.h>

void get_gcd_lcm(int x, int y, int *gcd, int *lcm);

int main(void)

{

int x, y, g, l;

printf("두개의 정수를 입력하시오: ");

scanf("%d %d", &x, &y);

get_gcd_lcm(x, y, &g, &l);

printf("최소공배수는 %d입니다.\n",l);

printf("최대공약수는 %d입니다.\n",g);

return 0;

}

void get_gcd_lcm(int org_x, int org_y, int *gcd, int *lcm)

{

int x = org_x;

int y = org_y;

int tmp;

while(y != 0)

{

tmp = y;

y = x % y;

x = tmp;

}

*gcd = x;

*lcm = org_x * org_y / *gcd;

}

3.

#include <stdio.h>

int check_isbn(int p[]);

int main(void)

{

int isbn[13]= { 9, 7, 8, 8, 9, 7, 0, 5, 0, 5, 9, 1, 6 };

if(check_isbn(isbn)==1)

printf("유효한 ISBN 번호입니다.\n");

else

printf("유효하지 않은 ISBN 번호입니다.\n");

return 0;

}

int check_isbn(int p[])

{

int result;

result = (p[0]+3*p[1]+p[2]+3*p[3]+p[4]+3*p[5]+p[6]+3*p[7]+p[8]+3*p[9]+p[10]+3*p[11]+p[12]) % 10;

if(result == 0) return 1;

else return 0;

}

4.

#include <stdio.h>

#define WIDTH 10

#define HEIGHT 10

void brighten_image(char *p, int n);

int main(void)

{

char image[HEIGHT * WIDTH] = {

0,0,0,0,9,0,0,0,0,0,

0,0,0,9,9,0,0,0,0,0,

0,0,9,0,9,0,0,0,0,0,

0,0,0,0,8,0,0,0,0,0,

0,0,0,0,9,0,0,0,0,0,

0,0,0,0,7,0,0,0,0,0,

0,0,0,0,8,0,0,0,0,0,

0,0,0,0,9,0,0,0,0,0,

0,0,0,0,9,0,0,0,0,0,

0,0,6,6,9,7,7,0,0,0};

brighten_image(image, 100);

return 0;

}

void brighten_image(char *p, int n)

{

int i;

for(i = 0; i < n; i++)

if(p[i] < 9) p[i]++;

}

5.

// 함수 포인터 배열

#include <stdio.h>

// 함수 원형 정의

void menu(void);

int add(int x, int y);

int sub(int x, int y);

int mul(int x, int y);

int div(int x, int y);

void menu(void)

{

printf("=====================\n");

printf("0. 덧셈\n");

printf("1. 뺄셈\n");

printf("2. 곱셈\n");

printf("3. 나눗셈\n");

printf("4. 종료\n");

printf("=====================\n");

}

int main(void)

{

int choice, result, x, y;

// 함수 포인터 배열을 선언하고 초기화한다.

int (*pf[4])(int, int) = { add, sub, mul, div };

while(1)

{

menu();

printf("메뉴를 선택하시오:");

scanf("%d", &choice);

if( choice < 0 || choice >=4 )

break;

printf("2개의 정수를 입력하시오:");

scanf("%d %d", &x, &y);

result = pf[choice](x, y);	// 함수 포인터를 이용한 함수 호출

printf("연산 결과 = %d\n",result);

}

return 0;

}

int add(int x, int y)

{

return x + y;

}

int sub(int x, int y)

{

return x - y;

}

int mul(int x, int y)

{

return x * y;

}

int div(int x, int y)

{

return x / y;

}

7. 오타 수정해주세요! --- 배열의 크기가 매개 변수로 전달되어야 합니다.

#include <stdio.h>

int *search(int *A, int size, int x);

int main(void)

{

int data[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

int *p = search(data, 10, 9);

printf("%d\n", *p);

return 0;

}

int *search(int *A, int size, int x)

{

int i;

for(i=0;i<size; i++){

if( A[i] == x ) return &A[i];

}

return 0;

}

제 10 장

1.

#include <stdio.h>

#include <string.h>

#include <ctype.h>

int main(void)

{

char s[100];

int i;

printf("텍스트를 입력하시오:");

gets(s);

for(i=0;i<strlen(s);i++)

s[i] = toupper(s[i]);

printf("대문자 출력:%s\n", s);

return 0;

}

2.

#include <stdio.h>

int main(void)

{

char c;

printf("문자를 입력하시오:");

c = getche();

printf("아스키 코드=%d\n", c);

return 0;

}

3.

#include <stdio.h>

#include <string.h>

#include <ctype.h>

int main(void)

{

char s[100]={0};

char t[100]={0};

int i, j=0;

printf("텍스트를 입력하시오:");

gets(s);

for(i=0;i<strlen(s);i++)

if( s[i] != ' ' )

t[j++] =s[i];

printf("결과 텍스트 출력:%s\n", t);

return 0;

}

4.

#include <stdio.h>

#include <string.h>

int main(void)

{

char s[100]={0};

int freq[256]={0};

int i;

printf("텍스트를 입력하시오:");

gets(s);

for(i=0;i<strlen(s);i++)

freq[s[i]]++;

for(i='a';i<='z';i++)

printf("%c: %d\n", i, freq[i]);

return 0;

}

5.

#include <stdio.h>

#include <string.h>

#include <ctype.h>

int main(void)

{

char s[200]={0};

printf("텍스트를 입력하시오:");

gets(s);

if( !isupper(s[0]) )

s[0] = toupper(s[0]);

if( s[strlen(s)-1] != '.' ){

s[strlen(s)] = '.';

s[strlen(s)+1] = NULL;

}

printf("결과 텍스트 출력:%s\n", s);

return 0;

}

6.

#include <stdio.h>

#include <string.h>

int main(void)

{

char source[1000]={0};

char input[100]={0};

printf("문장을 입력하시오: ");

gets(input);

strcpy(source, "\n#include <stdio.h>\n");

strcat(source, "int main(void)\n");

strcat(source, "{\n\t");

strcat(source, input);

strcat(source, "\n\treturn 0;\n");

strcat(source, "}\n");

printf("전체 프로그램: ");

printf("%s", source);

return 0;

}

7.

#include <stdio.h>

#include <string.h>

#include <conio.h>

int main(void)

{

char problem[]="____ ___ _____ ____";

char answer[]="This too shall pass";

char c;

int i;

while(strcmp(problem, answer) != 0){

printf("\n문제: %s\n", problem);

printf("글자를 추측하시오: ");

c = getche();

for(i=0;i<strlen(answer);i++)

if( c == answer[i] )

problem[i] = c;

}

return 0;

}

8.

#include <stdio.h>

#include <ctype.h>

#include <string.h>

int count_word(const char *s);

int main(void)

{

char input[100];

int count;

printf("텍스트를 입력하시오: ");

gets(input);

count = count_word(input);

printf("단어의 개수는 %d입니다.\n",count);

return 0;

}

int count_word(const char *s)

{

int i, wc = 0, waiting = 1;

for(i=0; s[i]!= NULL; ++i)

if(isalpha(s[i]))

{

if(waiting)

{

wc++;

waiting = 0;

}

}

else waiting = 1;

return wc;

}

9.

#include <stdio.h>

#include <string.h>

#include <conio.h>

int main(void)

{

char seps[]   = " ";

char s[200], find[100], replace[100], target[200]="";

char *token;

printf("문자열을 입력하시오: ");

gets(s);

printf("찾을 문자열: ");

gets(find);

printf("바꿀 문자열: ");

gets(replace);

token = strtok( s, seps );	// 문자열에서 첫번째 토큰을 얻는다.

while( token != NULL )

{

if( strcmp(token, find)==0 )

strcat(target, replace);

else

strcat(target, token);

token = strtok( NULL, seps ); // 다음 토큰을 얻는다.

strcat(target, " ");

}

printf("결과: %s", target);

return 0;

}

제 11 장

1.

#include <stdio.h>

#include <string.h>

struct email {

char title[100];

char receiver[50];

char sender[50];

char content[1000];

char date[100];

int priority;

};

int main(void)

{

struct email e;

strcpy(e.title, "안부 메일");

strcpy(e.receiver, "chulsoo@hankuk.ac.kr");

strcpy(e.sender, "hsh@hankuk.ac.kr");

strcpy(e.content, "안녕하십니까? 별일 없으신지요?");

strcpy(e.date, "2010/9/1");

e.priority = 1;

return 0;

}

2.

#include <stdio.h>

#include <math.h>

struct food {

char name[100];

int calories;

};

int calc_total_calroies(struct food array[], int size);

int main(void)

{

struct food food_array[3]=

{{"hambuger", 900}, {"bulgogi", 500}, {"sushi", 700}};

int total = calc_total_calroies(food_array, 3);

printf("%d\n", total);

return 0;

}

int calc_total_calroies(struct food array[], int size)

{

int i, total=0;

for(i=0;i<size;i++){

total += array[i].calories;

}

return total;

}

3.

#include <stdio.h>

#include <string.h>

// 직원

struct employee {

int number;	// 사번

char name[20];	// 이름

int age;	// 나이

char tel[20];	// 전화번호

};

int main(void)

{

struct employee e[10] = {

{ 1, "홍길동1", 20, "111-1111" },

{ 2, "홍길동2", 25, "111-1112" },

{ 3, "홍길동3", 60, "111-1113" },

{ 4, "홍길동4", 40, "111-1114" },

{ 5, "홍길동5", 50, "111-1115" },

{ 6, "홍길동6", 45, "111-1116" },

{ 7, "홍길동7", 32, "111-1117" },

{ 8, "홍길동8", 23, "111-1118" },

{ 9, "홍길동9", 29, "111-1119" },

{ 10, "홍길동10", 62, "111-1120" }};

int i;

for(i=0;i<10;i++)

if( e[i].age >= 20 && e[i].age <= 30 )

printf("%s\n", e[i].name);

return 0;

}

4.

#include <stdio.h>

struct complex{

double real;

double imag;

};

void get_input(struct complex *px);

struct complex complex_add(struct complex x, struct complex y);

int main(void)

{

struct complex x,y,z;

printf("첫번째 복소수를 입력하시오(a, b):");

get_input(&x);

printf("두번째 복소수를 입력하시오(a, b):");

get_input(&y);

z = complex_add(x, y);

printf("%.1lf + %.1lfi\n",z.real, z.imag);

}

void get_input(struct complex *px)

{

scanf("%lf",&(px->real));

scanf("%lf",&(px->imag));

}

struct complex complex_add(struct complex x, struct complex y)

{

struct complex z;

z.real = x.real + y.real;

z.imag = x.imag + y.imag;

return z;

}

5.

#include <stdio.h>

#include <string.h>

struct symbol_table {

char word[100];

int count;

};

struct symbol_table st[100];

int limit=0;

void st_put(char *p)

{

int i;

int found = 0;

for(i=0;i<limit;i++){

if( strcmp(p, st[i].word) == 0 ){

st[i].count++;

found =1;

}

}

if( found == 0){

strcpy(st[limit].word, p);

st[limit].count=1;

limit++;

}

return;

}

void st_print()

{

int i;

printf("-------------------------------------------\n");

printf("단어	빈도\n");

printf("-------------------------------------------\n");

for(i=0;i<limit;i++){

printf("%s    %d\n", st[i].word, st[i].count);

}

}

int main(void)

{

char seps[]   = " ";

char *token;

char s[100];

printf("텍스트를 입력하시오: ");

gets(s);

token = strtok( s, seps );	// 문자열에서 첫번째 토큰을 얻는다.

while( token != NULL )

{

st_put(token);

token = strtok( NULL, seps ); // 다음 토큰을 얻는다.

}

st_print();

return 0;

}

6.

#include <stdio.h>

#include <string.h>

#define TITLE_SIZE 50

#define NAME_SIZE 50

#define LOCATION_SIZE 50

enum book_type{COMIC, SCI, NOVEL, CLASSIC};

typedef struct book{

char title[TITLE_SIZE];

char author[NAME_SIZE];

char location[LOCATION_SIZE];

enum book_type genre;

} BOOK;

void add_record(BOOK library[], int count);

void menu();

int get_input();

void search_record(BOOK library[], int count);

void print_record(BOOK library[], int count);

void sort_record(BOOK library[], int n);

int main(void)

{

int num, count = 0;

BOOK library[30] = {'\0'};

while(1)

{

menu();

num = get_input();

switch(num)

{

case 1:

add_record(library, count);

count++;

continue;

case 2:

print_record(library, count);

continue;

case 3:

search_record(library, count);

continue;

case 4:

return -1;

}

return 0;

}

}

void add_record(BOOK library[], int count)

{

int type;

fflush(stdin);

printf("제목:");

gets(library[count].title);

printf("저자:");

gets(library[count].author);

printf("위치:");

gets(library[count].location);

printf("장르(0: 만화, 1: 공상소설, 2: 소설, 3: 고전)");

scanf("%d",&type);

if(type >= 0 && type <= 3)

library[count].genre = type;

else

library[count].genre = COMIC;

}

void menu()

{

printf("====================\n");

printf(" 1. 추가\n");

printf(" 2. 출력\n");

printf(" 3. 검색\n");

printf(" 4. 종료\n");

printf("====================\n");

}

int get_input()

{

int num;

printf("정수값을 입력하시오 : ");

scanf("%d",&num);

return num;

}

void search_record(BOOK library[], int count)

{

int i;

char title[TITLE_SIZE];

fflush(stdin);

printf("제목: ");

gets(title);

for(i = 0; i < count; i++)

{

if(strcmp(title,library[i].title) == 0)

{

printf("저장된 위치는 %s\n",library[i].location);

return;

}

}

printf("찾는 책이 테이블에 없습니다.\n");

}

void print_record(BOOK library[], int count)

{

int i;

fflush(stdin);

for(i = 0; i < count; i++)

{

printf("제목 : %s\n",library[i].title);

printf("저자 : %s\n",library[i].author);

printf("위치 : %s\n",library[i].location);

if(library[i].genre == 0)

printf("장르 : 코믹\n");

else if(library[i].genre == 1)

printf("장르 : 공상과학\n");

else if(library[i].genre == 2)

printf("장르 : 소설\n");

else if(library[i].genre == 3)

printf("장르 : 고전\n");

}

}

7.

#include <stdio.h>

enum game { scissor, rock, paper };

int main(void)

{

enum game computer=scissor;	// 가위

enum game user=scissor;

printf("가위(0), 바위(1), 보(2)를 입력하세요: ");

scanf("%d", &user);

if( user == scissor )

printf("비겼습니다.\n");

else if( user == rock )

printf("컴퓨터가 졌습니다.\n");

else

printf("컴퓨터가 이겼습니다.\n");

return 0;

}

8.

#include <stdio.h>

#include <math.h>

enum shape_type { TRIANGLE, RECTANGLE, CIRCLE };

struct shape {

int type;

union {

struct {

int base, height;

} tri;

struct {

int width, height;

} rect;

struct {

int radius;

} circ;

} p;

};

int main(void)

{

struct shape s;

enum shpae_type type;

printf("도형의 타입을 입력하시오(0, 1, 2): ");

scanf("%d", &type);

switch(type){

case TRIANGLE:

printf("밑변과 반지름을 입력하시오(예를 들어서 100 200): ");

scanf("%d %d", &s.p.tri.base, &s.p.tri.height);

printf("면적은 %d\n", (int)(0.5*s.p.tri.base*s.p.tri.height));

break;

case RECTANGLE:

printf("가로와 세로의 길이를 입력하시오(예를 들어서 100 200):");

scanf("%d %d", &s.p.rect.width, &s.p.rect.height);

printf("면적은 %d\n", (int)(s.p.rect.width*s.p.rect.height));

break;

case CIRCLE:

printf("반지름을 입력하시오(예를 들어서 100): ");

scanf("%d", &s.p.circ.radius);

printf("면적은 %d\n", (int)(3.14*s.p.circ.radius*s.p.circ.radius));

break;

}

return 0;

}