본문 바로가기
흔한 학교 생활/든든한 C 프로그래밍

[C언어] 든든한 C 프로그래밍 3판 9장 연습문제 답 풀이

by 흔한 학생 2023. 7. 6.
반응형

yundu.co.kr

[9-1]

1) 문자열 복사 함수는 strcpy 이다.

2) 문자열 추가 함수는 strcat 이다.

3) 문자열 비교 함수는 strcmp 이다.

4) 첫 번째 문자열 중 두 번째 문자열이 포함되어 있는지 확인할 수 있는 함수는 strstr 이다.

5) 답: 가로줄

6) 답: 2

7) 답: 0

 

[9-2]

i는 문자열의 길이인 7 에 -1인 6이며 i가 6, 4, 2, 0 일 때 문자열이 출력된다.

때문에 m d n k 가 출력된다.

 

 

[9-3]

정답 4

 

[9-4]

정답 1

 

[9-5]

#include <stdio.h>
#include <string.h>
#pragma warning(disable:4996)

int main(void)
{
	int num[10], count[10], i, j;
	for (i = 0; i < 10; i++)//값 입력받기
	{
		printf("%d, 값 입력 ", i + 1);
		scanf("%d", &num[i]);
	}
	for (i = 0; i < 10; i++)//count 하기
	{
		count[i] = 0;
		for (j = 0; j < 10; j++)
			if (num[j] == i)
				count[i]++;
	}
	for (i = 9; i >= 0; i--)
	{
		for (j = 0; j < 10; j++)
			if (count[j] == i)
			{
				printf("\n가장 많이 입력한 수 : %d, 횟수 :%d", j, i);
				goto A;
			}
	}A:
	return 0;
}

결과

1, 값 입력 4
2, 값 입력 8
3, 값 입력 7
4, 값 입력 2
5, 값 입력 9
6, 값 입력 7
7, 값 입력 3
8, 값 입력 7
9, 값 입력 1
10, 값 입력 7

가장 많이 입력한 수 : 7, 횟수 :4

 

[9-6]

#include <stdio.h>
#include <string.h>
#pragma warning(disable:4996)

void main()
{
	int A[3][3] = { 13,4,30,34,2,5,7,15,27 };
	int B[3][3],i,j;

	printf("A 배열 리스트\n"); //A배열 출력
	for (j = 0; j < 3; j++)
	{
		for (i = 0; i < 3; i++)
			printf("   %2d", A[j][i]);
		printf("\n");
	}

	for (j = 0; j < 3; j++) // B배열에 저장
	{
		for (i = 0; i < 3; i++)
			B[i][j] = A[j][i];
	}

	printf("B 배열 리스트\n"); //B배열 출력
	for (j = 0; j < 3; j++)
	{
		for (i = 0; i < 3; i++)
			printf("   %2d", B[j][i]);
		printf("\n");
	}
}

[9-7]

#include <stdio.h>
#include <string.h>

void main()
{
	int num[7][7], i, j;
	for (j = 0; j < 7; j++)
	{
		for (i = 0; i < 7; i++)
		{
			if(i<=j)
				num[j][i] = j*7+i+1; //숫자 대입해주기
			else if (i = j + 1) //\0 넣어주기
			{
				num[j][i] = "\0";
				break;
			}
			printf("%2d  ", num[j][i]); //출력하기
		}
		printf("\n"); //한 행 쓰고 띄우기
	}
}

결과

 1
 8   9
15  16  17
22  23  24  25
29  30  31  32  33
36  37  38  39  40  41
43  44  45  46  47  48  49

 

[9-8]

성명 오름차순

#include <stdio.h>
#include <string.h>

int main()
{
	char names[10][20] = { "kim","lee","sin","jo","kim2",
	"chae","jin","bak","so","chol" };
	
	int i, j;
	char tmp[20];
	printf("\n배열 초기화\n");
	for (j = 0; j < 10; j++)
		printf("%5s", names[j]);
	printf("\n");

	for(i=0;i<9;i++)
		for (j = 0; j < 9 - i; j++)
		{
			//문자배열 비교 strcmp 이용
			if (strcmp(names[j], names[j + 1]) >= 0)
			{
				strcpy(tmp, names[j]);
				strcpy(names[j], names[j + 1]);
				strcpy(names[j + 1], tmp);
			}

		}

	printf("\nSorted Result\n");
	for (j = 0; j < 10; j++)
		printf("%5s", names[j]);
	printf("\n");

	return 0;
}

결과

배열 초기화
  kim  lee  sin   jo kim2 chae  jin  bak   so chol

Sorted Result
  bak chae chol  jin   jo  kim kim2  lee  sin   so

[9-9]

성명과 주소 입력받아 문자배열에 저장

입력되는 문자열은 배열보다 커서는 안되며 검증해야 한다

 

#include <stdio.h>
#include <string.h>

int main()
{
	char name[20] = ""; //성명 저장
	char address[50] = ""; //주소 저장
	char tmp[100]; //임시배열

	do {
		printf("성명 ? ");
		gets(tmp);
	} while (strlen(tmp)>=sizeof(name));

	strcpy(name, tmp);

	//주소 배열범위 확인 및 복사
	do {
		printf("주소 ? ");
		gets(tmp);
	} while (strlen(tmp) >= sizeof(address));
	strcpy(address, tmp);

	printf("\n성명: %s, 주소: %s \n", name, address);

	return 0;
}

결과

성명 ? kim aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
성명 ? 김 원선
주소 ? seoul bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
주소 ? 서울시 강남구 역삼동 멀티캠퍼스

성명: 김 원선, 주소: 서울시 강남구 역삼동 멀티캠퍼스

 

반응형