본문 바로가기

c언어

11. 함수

1. 인자로 char*형을 받아서 문자열의 길이를 반환하는 함수를 작성하세요. 단, 절대로 strlen() 함수를 사용하지 말고 직접 계산하는 코드를 작성하세요.

[소스코드]

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int strlen(const char* str)
{
	int length = 0;
	char c;
	while((c = str[length]) != '\0') { ++length; }
	return length;
}

void main(void)
{
	const char* str = "안녕하세요.";
	int strLength = strlen(str);
	printf("[%s]의 길이: %d \n", str, strLength);
	return;
}

[실행결과]

 

 

 

2. 인자로 char*형을 받아서 문자열을 거꾸로 출력하는 함수를 작성하세요. 문제를 해결하기 위해서 strlen() 함수를 사용하거나 1번 문제에서 작성한 함수를 사용해도 좋습니다.

[소스코드]

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int strlen(const char* str)
{
	char c;
	int length = 0;
	
	while((c = str[length]) != '\0') { ++length; }
	return length;
}

void strrvs(char dst[255], const char* tg)
{
	char c;
	int i = 0;
	int length = strlen(tg);
	while (length - i > 0)
	{
		dst[i++] = tg[length - 1 - i];
	}
	return;
}

void main(void)
{
	const char* str = "abcde";
	char strReverse[255] = { 0 };
	printf("원본: [%s] \n", str);
	strrvs(strReverse, str);
	printf("반전: [%s] \n", strReverse);
	return;
}

[실행결과]

 

 

 

3. 인자로 int형 배열(혹은 주소)과 요소의 개수를 받은 후, 오름차순으로 정렬하는 함수를 작성하세요.

[소스코드]

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

void sort(int arr[], int length)
{
	int tmp = 0, select = 0;
	for (int i = 0; i < length; ++i)
	{
		select = i;
		for (int j = i+1; j < length; ++j)
		{
			if (arr[select] > arr[j])
			{
				select = j;
			}
		}

		tmp = arr[select];
		arr[select] = arr[i];
		arr[i] = tmp;
	}

	return;
}



void main(void)
{
	int arr[] = { 1, 5, 3, 2, 9, 7, 8, 6, 4 };
	sort(arr, sizeof(arr) / sizeof(int));

	for (int i = 0; i < sizeof(arr) / sizeof(int); ++i)
	{
		printf("%d ", arr[i]);
	}

	return;
}

[실행결과]

 

 

4. 인자로 정수를 받아서 해당 수에 대한 구구단을 출력하는 함수를 작성하세요.

[소스코드]

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

void printGuGuDan(int n)
{
	printf("\n[%d단]\n", n);
	for (int i = 1; i <= 9; ++i)
	{
		printf("%d x %d = %d\n", n, i, n * i);
	}
	return;
}

void main(void)
{
	int nInput = 0;
	printf("Input GuGuDan Number: ");
	scanf("%d", &nInput);
	printGuGuDan(nInput);
	return;
}

[실행결과]

 

 

5. 인자로 검색 대상 문자열이 저장된 메모리의 주소와 찾을 문자(char)를 받아 검색을 수행하고 인덱스를 반환하는 함수를 작성하세요. 만일 찾는 문자열이 없다면 -1을 반환합니다.

[소스코드]

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

int findIndexOfString(char* pszData, char c)
{
	int nIndex = -1;
	int length = strlen(pszData);
	for (int i = 0; i < length; ++i)
	{
		if (pszData[i] == c)
		{
			nIndex = i;
			break;
		}
	}

	return nIndex;
}

void main(void)
{
	char szData[] = "my name is hong-gil-dong.";
	char c;
	int nIndex = 0;
	printf("Input Your Find Character: ");
	c = getc(stdin);

	nIndex = findIndexOfString(szData, c);
	printf("Find Index: %d\n", nIndex);
	return;
}

[실행결과]

 

 

6. 열의 크기가 5인 2차원 int형 배열에 대한 포인터와 행의 개수를 인수로 받아 배열 전체의 합을 반환하는 함수를 작성하세요.

[소스코드]

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

int sumOfArray(int(*pnArr)[5], int row)
{
	int nSum = 0;
	for (int i = 0; i < row; ++i)
	{
		for (int j = 0; j < sizeof(pnArr[0]) / sizeof(int); ++j)
		{
			nSum += pnArr[i][j];
		}
	}

	return nSum;
}


void main(void)
{
	int nArr[3][5] = { { 2, 5, 3, 1, 4}, {1, 2, 3, 4, 5}, {5, 4, 3, 2, 1} };
	int nSum = sumOfArray(nArr, sizeof(nArr) / sizeof(nArr[0]));
	
	printf("[배열]\n");
	for (int i = 0; i < sizeof(nArr) / sizeof(nArr[0]); ++i)
	{
		for (int j = 0; j < sizeof(nArr[0]) / sizeof(int); ++j)
		{
			printf("%d ", nArr[i][j]);
		}
		putc('\n', stdout);
	}

	printf("\n[배열의 합]\n");
	printf("%d\n", nSum);
	return;
}

[실행결과]

 

'c언어' 카테고리의 다른 글

13. 유틸리티 함수  (0) 2023.06.23
12. 문자, 문자열 처리 함수  (0) 2023.06.21
10. 배열과 포인터  (0) 2023.06.13
9. 포인터와 메모리 관리  (0) 2023.06.09
8. 반복문  (0) 2023.06.07