본문 바로가기

Book

[한빛미디어] C로 배우는 쉬운 자료구조 (연습문제 3장)



3장 연습문제

1. 학생 10명의 국어, 영어, 수학 성적을 처리하는 프로그램을 작성하시오. 단, 배열을 사용하여 학생들의 학번, 국어, 영어, 수학, 총점, 평균을 저장하시오.

[출력 형식]

학번 국어 영어 수학 총점 평균

*********************************************

1 80 70 90 240 80

답 안

#include <stdio.h>

void main()

{

int num[4]= {1,2,3};

int kor[4] = {80,70,90};

int eng[4]= {88,77,99};

int math[4] = {81,71,91};

int i, total, avg;

puts(" 학번 국어 영어 수학 총점 평균", stdout);

puts("***********************************", stdout);

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

{

total= kor[i] + eng[i] + math[i];

avg= total/3;

printf("%4d%6d%6d%6d%6d%6d\n",num[i],kor[i],eng[i],math[i],total,avg);

}

}

2. 다차원 배열을 이용하여 키보드로부터 5개의 문자열을 입력받아서 화면에 출력하는 프로그램을 작성하시오.

답 안

#include <stdio.h>

void main()

{

int i;

char array[5][50];

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

{

printf("%d번 문자열 : ", i+1);

gets(array[i]);

}

printf("입력완료\n출력\n");

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

printf("입력된 %d번 문자열 : %s\n",i+1, array[i]);

}

3. 두 개의 문자열을 입력받아서 문자열이 같은지 다른지를 출력하는 프로그램을 작성하시오.

답 안

#include <stdio.h>

void main()

{

int i;

char array[2][20];

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

{

printf("%d번 문자열 : ", i+1);

gets(array[i]);

}

for(i=0; array[0][i]!='\0'; i++)

if(array[0][i] != array[1][i])

{

printf("%d번째가 이상해요\n",i+1);

return 0;

}

puts("두 문자열이 똑같습니다.",stdout);

}

4. 포인터를 사용하여 실수값 2개를 교환하여 저장하고 출력하는 함수를 만드시오.

답 안

#include <stdio.h>

void main()

{

float a,b;

int *p1=&a;

int *p2=&b;

int temp;

printf("1번 실수값 입력 : ");

scanf("%f",&a);

printf("2번 실수값 입력 : ");

scanf("%f",&b);

printf("교환전 1번 : %g, 2번 %g\n", a,b);

temp=*p1;

*p1=*p2;

*p2=temp;

printf("교환후 1번 : %g, 2번 %g\n", a,b);

}

5. 다음과 같은 두 개의 행렬의 곱을 구하는 프로그램을 작성하시오.

,

답 안

#include <stdio.h>

void main()

{

int a[3][3] = {{3, 2, 5}, {9, 2, 8}, {6, 1, 2}};

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

int i, j;

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

{

printf("|");

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

printf("%4d", a[i][0]*b[0][j] + a[i][1]*b[1][j] + a[i][2]*b[2][j]);

printf("|\n");

}

}

6. 입력받은 문자열을 역순으로 출력하는 reverse 함수를 작성하시오.

답 안

#include <stdio.h>

void main()

{

char str[100];

int i,count=0;

printf("입력 : ");

gets(str);

for(i=0;str[i]!='\0';i++)

count++;

printf("reverse : ");

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

printf("%c",str[i]);

printf("\n");

}

7. 이름과 생년월일과 오늘 날짜를 입력받아서 이름과 함께 오늘이 태어난지 몇칠째가 되었는지를 출력하는 프로그램을 작성하시오. 단, 구조체를 사용하시오.

답 안

(윤년 무시)

#include <stdio.h>

void main()

{

struct birthday{

char name[10];

int birth_year;

int birth_month;

int birth_day;

}birthday;

int birth, today, year, month, day;

printf("이름 : ");

gets(birthday.name);

printf("생년 : ");

scanf("%d",&birthday.birth_year);

printf("생월 : ");

scanf("%d",&birthday.birth_month);

printf("생일 : ");

scanf("%d",&birthday.birth_day);

printf("현년 : ");

scanf("%d",&year);

printf("현월 : ");

scanf("%d",&month);

printf("현일 : ");

scanf("%d",&day);

birth = (birthday.birth_year*365)+(birthday.birth_month*30)+(birthday.birth_day);

today = (year*365)+(month*30)+(day);

printf("==========\n%s 님 %d일 경과\n", birthday.name, today-birth);

}