[중간대비] ch06 Pointer & Array

2022. 10. 30. 16:48카테고리 없음

[Exercise 6-1 배열 사용하기]

숫자 5개를 정수형 배열에 입력 받고, 거꾸로 화면에 출력하라

[실행 예]

배열의 기본적인 사용법을 익히기 위한 연습문제이다. 5개의 요소를 가지는 int 자료형 배열을 선언하고, 사용자로부터 5개의 정수를 입력받아 배열에 저장한 후, 거꾸로 화면에 출력한다. 입력과 출력은 for 순환문을  사용하자.

배열은 가장 기본적이고 많이 사용되는 자료구조이다. 배열에 익숙해져야 프로그래밍이 쉬워진다. 배열 선언하는 방법과 for 순환문으로 각 요소를 접근하는 방법에 익숙해져야 한다.

#include <iostream>
using namespace std;
int main() {
	int arr[5];
	int i;

	cout << "5 Numbers? ";
	for (int i = 0; i < 5; i++) {
		cin >> arr[i];
	}
	cout << "Reversed numbers: ";
	for (i = 4; i>=0; i--) {
		cout << arr[i];
		cout << " ";
	}
	cout << endl;
	return 0;
}

 

 

[Exercise 6-2 포인터와 문자열]

포인터를 사용하여 문자열의 내용을 모두 대문자로 바꾸는 함수를 작성하라

-void strUpper(char *str)

-입력:hello my world

-출력:HELLO MY WORLD

int main() {
	char str[] = "hello my world";
	strUpper(str);
	cout << str;
	return 0;
}

문자열을 잘 다루는 것은 프로그래밍 하는데 굉장히 중요하다. 문자열을 표현하는 문자 포인터를 인자로 넘겨받아, 문자열을 구성하는 각 문자들을 대문자로 변경하는 함수 strUpper(char *str)를 작성해 보라.

포인터에 대한 이해도와 문자열을 다루는 기술을 향상시키는 것잉 본 연습의 목표이다.

+p.159 참고

sol1)

#include <iostream>
using namespace std;
void strUpper(char* str) {
	for (int i = 0; str[i]; ++i)
		if (str[i] >= 'a' && str[i] <= 'z')
			str[i] = (str[i] - 'a') + 'A';
}
int main() {
	char str[] = "hello my world";
	strUpper(str);
	cout << str;
	return 0;
}

sol2)

#include <iostream>
using namespace std;
void strUpper(char* str) {
	for (; *str; ++str) {
		if (*str >= 'a' && *str <= 'z')
			*str = (*str - 'a' + 'A');
	}
}
int main() {
	char str[] = "hello my world";
	strUpper(str);
	cout << str;
	return 0;
}

 

 

[Exercise 6-3 포인터와 동적 배열]

다음 요구사항을 만족하는 프로그램을 작성하라

-정수 N을 입력 받아 N개의 정수를 저장할 배열을 만들 것

-입력 : 5 1 2 3 4 5 출력 : 1 2 3 4 5

-new/delete version과 malloc/free version 두 번 작성할 것

 

여기서는 동적으로 배열을 생성하고 이를 활용하는 방법을 숙지한다. c/c++프로그래밍의 가장 기본적이면서도 중요한 기술이므로 반드시 실습해 보기 바란다.

첫 번째 입력되는 수가 동적으로 생성될 배열의 크기이다. 슬라이드에서처럼 첫 입력이 5라면, 프로그램에서 5개의 정수를 저장할 배열을 내부적으로 생성하고, 5개의 숫자를 차례대로 읽어 배열에 저장한다. 입력이 완료되면 다시 for 루프를 사용하여 배열에 저장될 숫자를 차례대로 화면에 출력한다.

c버전의 malloc/free로 작성을 해 본 후에, c++ 버전의 new/delete를 이용하여 동일한 기능의 프로그램을 작성해 본다.

sol1) new/delete version

#include <iostream>
using namespace std;

int main() {
    int N;
    cout << "N = ?";
    cin >> N;

    int* values = new int[N];

    for (int i = 0; i < N; ++i)
        cin >> values[i];

    cout << "Output: ";
    for (int i = 0; i < N; ++i)
        cout << values[i];

    delete[] values;

    return 0;
}

sol2) malloc/free version

#include <iostream>
using namespace std;

int main() {
    int N;
    cout << "N = ?";
    cin >> N;

    int* values = (int*)malloc(sizeof(int) * N);

    for (int i = 0; i < N; ++i)
        cin >> values[i];

    cout << "Output: ";
    for (int i = 0; i < N; ++i)
        cout << values[i];

    free(values);

    return 0;
}

 

[Exercise 6-4 다차원 배열]

matrix 연산을 수행하는 다음 함수를 작성하라

-matrix 크기는 고정되어 있다고 가정 (3x3)

-