본문 바로가기

학습공간/C++, MFC

[1주차] C++ 시작하기, C 보다 나은 C++ Ⅰ/Ⅱ(new, delete)

반응형

C++ 2단원 실습과제 1

#include <iostream> 
#include <cstring> 
using namespace std;
int strcmp(const char* s1, const char* s2);
int GetMin(int x, int y)
{
 return x < y ? x : y;
}
double GetMin(double x, double y)
{
 return x < y ? x : y;
}
char *GetMin(char* x, char* y)
{
 return strcmp(x, y) < 0 ? x : y;
}
int GetMin(int arr[], int size)
{
 int min = arr[0];
 for(int i = 1; i< size; i++)
  if(arr[i] < min)
   min = arr[i];
 return min;
}
int main()
{
 int a, b;
 cout << "두개의 정수를 입력하세요 : ";
 cin >> a >>b;
 cout <<"최소값은 "<< GetMin(a, b) <<"입니다.\n";
 double c,d;
 cout << "두개의 실수를 입력하세요 : ";
 cin >> c >> d;
 cout << "최소값은 " << GetMin(c, d) <<"입니다.\n";
 char s1[20], s2[20];
 cout << "두개의 문자열을 입력하세요 : ";
 cin >> s1 >> s2;
 cout << "최소값은 : "<< GetMin(s1, s2) << "입니다.\n";
 int arr[] = {2, 19, 34, 387, 1, 45, 78, 45, 11, 29};
 cout << "배열을 원소 : ";
 for(int i = 0; i< 10; i++)
  cout<< arr[i] <<" ";
 cout <<"\n최소값은 " << GetMin(arr, 10) << "입니다.\n";
 return 0;
}

 

C++ 2단원 실습과제 2

#include <iostream> 
using namespace std;
template Sort(T *arr, int size)
{
 for(int i = 0; i< size-1; i++)
 {
  for(int j = i+1; j< size; j++)
  {
   if(arr[i] > arr[j])
   {
    T temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
   }
  }
 }
}
int main()
{
 char menu;
 while(true)
 {
  //메뉴 출력
  cout << "1. 정수 정렬\n";
  cout << "2. 실수 정렬\n";
  cout << "3. 종료\n";
  cout << "메뉴 선택 : ";
  cin >> menu;
  if(menu == '3')
   break;
  switch(menu)
  {
  case '1':
   {
    int arr[5];
    cout << "5개의 정수를 입력하세요 : ";
    for(int i = 0; i< 5; i++)
     cin >> arr[i];
    Sort(arr,5);// 암시적 인스턴스화
    cout << "정렬 결과 : ";
    for(i = 0; i< 5; i++)
     cout << arr[i] << " ";
    cout << "\n";
    break;
   }
  case '2':
   {
    double arr[5];
    cout << "5개의 실수를 입력하세요 : ";
    for(int i = 0; i< 5; i++)
     cin >> arr[i];
    Sort(arr,5);// 명시적 인스턴스화
    cout << "정렬 결과 : ";
    for(i = 0; i< 5; i++)
     cout << arr[i] << " ";
    cout << "\n";
    break;
   }
   break;
  default:
   cout << "잘못 입력하셨습니다.\n";
   continue;
  }
 }
 return 0;
}

 

C++ 3단원 실습과제 1

#include <iostream> 
using namespace std;
namespace A
{
 int data = 10;
 void foo()
 {
  cout<< "foo 호출: "<<++data<<"\n";
 }
};
namespace B
{
 int data = 20;
 void foo()
 {
  cout<< "foo 호출: "<<++data<<"\n";
 }
}
void Test1()
{
 using B::data;
   cout<< "Test1의 data = "<<data<<"\n";
}
void Test2()
{
 using namespace A;
   cout<< "Test2의 data = "<<data<<"\n";
   foo();
}
int main()
{
 int data = 30;
 cout << "data = " << data << "\n";
 cout<< "A::data = "<<A::data<<"\n";
 
 Test1();
 Test2();
 return 0;
}

C++ 3단원 실습과제 2
#include <iostream> 
using namespace std;
int main()
{
 int *data = NULL; // data 라는 NULL 공간을 만들어냄
 int num;
 cout<< "데이터의 개수를 입력하세요 : ";
 cin >> num;
 data = new int [num]; // new 를 사용해서 동적 할당 해주고 data에 주소를 넣어줌
 for(int i=0; i<num; i++)
  data[i] = rand() % 100; // *(data+i) 랑 같음
 cout<< "생성된 데이터 : ";
 for(i =0; i<num; i++)
  cout << *(data+i)<<" ";
 cout << "\n";
 delete [] data; // delete 를 사용해서 동적 할당을 해제 해줌
 data = NULL; // 다시 비워줌
 return 0;
}

C++ 3단원 실습과제 3
#include <iostream>
using namespace std;
struct CUSTOMER
{
 char name[10];
 int age;
 char sex;
};
void InputCustomer(CUSTOMER* &cust,int& maxCustomer,int& numCustomer);
void PrintCustomer(const CUSTOMER *cust,int numCustomer);
int main()
{
 int max=10;
 int num=0;
 CUSTOMER *customer=new CUSTOMER[max];
 
 char menu;
 
 while(1)
 { 
  cout<<"1. 고객 정보 입력"<<endl;
  cout<<"2. 고객 정보 출력"<<endl;
  cout<<"3. 종료"<<endl;
  cout<<"메뉴선택 : ";
  cin>>menu;
 
  if(menu=='3')
   break;
 
  switch(menu)
  {
  case'1':
   InputCustomer(customer,max,num);
    break;
  case'2':
   PrintCustomer(customer,num);
    break;
  default:
   cout<<"잘못 입력하셨습니다."<<endl;
   continue;
  }
 }
 delete[] customer;
 customer=NULL;
 return 0;
}
void InputCustomer(CUSTOMER* &cust,int& maxCustomer,int& numCustomer)
{
 if(numCustomer==maxCustomer)
 {
  maxCustomer *= 2;
  CUSTOMER *temp = new CUSTOMER[maxCustomer];
  memcpy(temp,cust,sizeof(CUSTOMER)*numCustomer);
  delete cust;
  cust=temp;
 }
 cout<<"고객 이름 : ";
 cin>>cust[numCustomer].name;
 cout<<"나이 : ";
 cin>>cust[numCustomer].age;
 cout<<"성별(M, F) : ";
 cin>>cust[numCustomer].sex;
 numCustomer++;
 
}
void PrintCustomer(const CUSTOMER *cust,int numCustomer)
{
 cout<<"-----------------------------------"<<endl;
 cout<<"이름     나이  성별"<<endl;
 cout<<"-----------------------------------"<<endl;
 for(int a=0;a<numCustomer;a++)
 {
  cout.width(20);
  cout.setf(ios_base::left);
  cout<<cust[a].name;
  cout.width(5);
  cout<<cust[a].age;
  cout<<cust[a].sex<<endl;
 }
 cout<<"-----------------------------------"<<endl;
}

C++ 3단원 실전연습문제 2

#include <iostream> 
using namespace std;
namespace A
{
 int data = 10;
 void f1() {}
 void f2() {}
};
namespace B
{
 int data = 20;
 char str[20];
 void f1() {}
 void f2() {}
 void f3() {}
};
void f3()
{
 using A::data;
 using A::f1;
 data = 100;
 f1();
 f2(); //에러발생 A::f2();
 
}
int main()
{
 using namespace B;
 A::data = 200;
 f1();
 f2();
 f3(); //에러발생 ::f3();
 
 return 0;
}

 

C++ 3단원 실전연습문제 4

#include <iostream> 
using namespace std;
int main()
{
 double *p = NULL;
 int num;
 cout << "실수의 개수를 입력하세요 : ";
 cin >> num;
 p= new double[num];
 cout << num << "개의 실수를 입력하세요 :";
 for(int i=0; i<num; i++)
  cin >> p[i];
 double *arr = p;
 double min,max;
 min = max = arr[0];
 for(int i=1; i<num; i++)
 {
  if(arr[i] > max)
   max = arr[i];
  if(arr[i] < min)
   min = arr[i];
 }
 cout << "최소값 : "<<min<<", 최대값 : "<<max<<"\n";
 delete [] p;
 for(int i=0; i<num;i++)
  p[i]= 0.0;
 delete [] arr; // new로 할당을 해준적이 없는데 해제 하기때문에 불필요함.
 return 0;
}

반응형