보관함

JUNGOL 기초다지기 17 포인터

niamdank 2020. 1. 9. 20:52

프로그래밍에서 가장 기초적인 내용을 다루는 기초 다지기입니다.

이번 포스팅은 기초 다지기 중 열일곱 번째인 포인터 문제를 풀어보도록 하겠습니다.

 

기초 내용인 만큼 다른 설명없이 문제와 코드만 간단하게 작성하도록 하겠습니다.


619 : 포인터- 자가진단1

#include <iostream>

using namespace std;

int main()
{
	int n;

	cin >> n;

	cout << &n << ' ' << n << endl;
}

 

620 : 포인터- 자가진단2

#include <iostream>

using namespace std;

int main()
{
	int *n = new int;

	cin >> *n;

	cout << (*n) / 10 << "..." << (*n) % 10 << endl;

	delete n;
}

 

621 : 포인터- 자가진단3

#include <iostream>

using namespace std;

int main()
{
	int* a = new int;
	int* b = new int;

	cin >> *a >> *b;

	int aVal = *a;
	int bVal = *b;

	cout << aVal << " + " << bVal << " = " << aVal + bVal << endl;
	cout << aVal << " - " << bVal << " = " << aVal - bVal << endl;
	cout << aVal << " * " << bVal << " = " << aVal * bVal << endl;
	cout << aVal << " / " << bVal << " = " << aVal / bVal << endl;

	delete a;
	delete b;
}

 

622 : 포인터- 자가진단4

#include <iostream>

using namespace std;

int main()
{
	int arr[5];

	for (int i = 0; i < 5; ++i)
	{
		cin >> *(arr + i);
	}

	for (int i = 0; i < 5; i += 2)
	{
		cout << *(arr + i) << ' ';
	}
	cout << endl;
}

 

623 : 포인터- 자가진단5

 

이 문제는 정확도 때문에 정답이 달라지는 문제가 있습니다. float 대신에 double 사용하셔야 합니다.

#include <iostream>

using namespace std;

int main()
{
    double arr[5];

    for (int i = 0; i < 5; ++i)
    {
        cin >> *(arr + i);
    }

    cout.setf(ios::fixed);
    cout.precision(1);

    for (int i = 0; i < 5; ++i)
    {
        cout << *(arr + i) << ' ';
    }
    cout << endl;
}

 

624 : 포인터- 자가진단6

 

이 문제도 마찬가지로 double을 사용하셔야 합니다.

#include <iostream>

using namespace std;

int main()
{
    int n;

    cin >> n;

    double* arr = new double[n];

    for (int i = 0; i < n; ++i)
    {
        cin >> arr[i];
    }

    cout.setf(ios::fixed);
    cout.precision(2);

    double hap = 0;
    double avg = 0;
    for (int i = 0; i < n; ++i)
    {
        cout << arr[i] << ' ';
        hap += arr[i];
    }
    cout << endl;

    avg = hap / n;

    cout << "hap : " << hap << endl;
    cout << "avg : " << avg << endl;

    delete[] arr;
}

 

625 : 포인터- 자가진단7

#include <iostream>

using namespace std;

int main()
{
	int n;

	cin >> n;

	int* arr = new int[n];

	for (int i = 0; i < n; ++i)
	{
		cin >> arr[i];
	}

	for (int i = 0; i < n; ++i)
	{
		for (int j = 0; j < n - i - 1; ++j)
		{
			if (arr[j] < arr[j + 1])
				swap(arr[j], arr[j + 1]);
		}
	}

	for (int i = 0; i < n; ++i)
	{
		cout << arr[i] << ' ';
	}
	cout << endl;

	delete[] arr;
}

 

200 : 포인터- 형성평가1

 

현재 이 문제는 문제는 바뀌었는데 체점이 과거 문제 기준으로 되고 있어서 풀 수 없습니다. 이전 문제에 대한 답은 다음과 같습니다.

#pragma warning (disable:4996)
 
#include <iostream>
#include <string.h>
#include <cmath>
 
using namespace std;
 
int cmp(char str1[], char str2[]) {
    int counter, len1, len2;
    len1 = strlen(str1);
    len2 = strlen(str2);
    counter = len1 > len2 ? len1 : len2;
 
    if (('a' <= str1[0] && str1[0] <= 'z' || 'A' <= str1[0] && str1[0] <= 'Z') &&
        (str2[0] > 'Z' && 'a' > str2[0] || str2[0] > 'z' || 'A' > str2[0]))
        return -1;
    else if (('a' <= str2[0] && str2[0] <= 'z' || 'A' <= str2[0] && str2[0] <= 'Z') &&
        (str1[0] > 'Z' && 'a' > str1[0] || str1[0] > 'z' || 'A' > str1[0]))
        return 1;
 
    for (int i = 0; i < counter; i++) {
        if (str1[i] < str2[i]) {
            return -1;
        }
        else if (str1[i] > str2[i]) {
            return 1;
        }   }
    if (len1 < counter)
        return -1;
    else if (len2 < counter)
        return 1;
    else
        return 0;
}
 
void cpy(char dst[], char src[]){
    int i;
    for (i = 0; i < strlen(src); i++)
        dst[i] = src[i];
    dst[i] = '\0';
}
 
int main(void) {
    char a;
    double b;
 
    printf("%#p %#p\n", &a, &b);
 
    return 0;
}

 

201 : 포인터- 형성평가2

#include <iostream>

using namespace std;

int main()
{
	int *n = new int;

	cin >> *n;

	for (int i = 0; i < *n; ++i)
		cout << '*';
	cout << endl;

	delete n;
}

 

202 : 포인터 - 형성평가3

#include <iostream>

using namespace std;

int main()
{
	int* a{ new int }, *b{ new int }, *c{ new int };

	cin >> *a >> *b;
	
	*c = *a - *b;

	cout << abs(*c) << endl;

	delete a;
	delete b;
	delete c;
}

 

203 : 포인터 - 형성평가4

#include <iostream>

using namespace std;

int main()
{
	int* arr{ new int[10] };

	for (int i = 0; i < 10; ++i)
	{
		cin >> arr[i];
	}

	int evenCount{ 0 };
	int oddCount{ 0 };
	for (int i = 0; i < 10; ++i)
	{
		if (arr[i] % 2 == 0)
			evenCount++;
		else
			oddCount++;
	}

	cout << "odd : " << oddCount << endl;
	cout << "even : " << evenCount << endl;

	delete[] arr;
}

 

204 : 포인터 - 형성평가5

#include <iostream>

using namespace std;

int main()
{
	int n;

	cin >> n;

	int* arr{ new int[n] };

	for (int i = 0; i < n; ++i)
	{
		cin >> arr[i];
	}

	int max = 0;
	int min = 999;
	for (int i = 0; i < n; ++i)
	{
		if (max < arr[i])
			max = arr[i];
		if (min > arr[i])
			min = arr[i];
	}

	cout << "max : " << max << endl;
	cout << "min : " << min << endl;

	delete[] arr;
}

 

http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&sca=10h0

 

JUNGOL | 문제은행 1 페이지

경기도 안양시 동안구 평촌대로 109 협성골드프라자 601호 TEL : 031-360-4144 FAX : 031-388-0996 E-mail : hancomc@hotmail.com, comkiwer@naver.com Copyrightⓒ 2010-2019 jungol. All right reserved. TOP

www.jungol.co.kr