~cpp
//458page 프로그래밍 연습 1번
#include<iostream.h>
int count=0;//함수가 호출된 횟수를 셈
void say(const char *);
void say(char *, int);
void main()
{
int input;//원하는 횟수만큼 호출하기 위해 입력을 받음
char string[20]="hahahaha\n";
char *p=string;
cout<<"함수를 몇번 호출 합니까?";
cin>>input;
for(int i=0;i<input;i++)
say(p);
say(p,count);
}
void say(const char *str)
{
cout<<str;
count++;
}
void say(char * str, int n)
{
cout<<"당신은 지금까지 "<<n<<"번 함수를 호출 하셨습니다.\n";
while(n!=0){
cout<<str;
n--;
}
}
=========================================================================
//458page 프로그래밍 연습 2번
#include<iostream.h>
struct CandyBar{
char *name;
double wei;
int cal;
}candy;
char temp1[20];
double temp2;
int temp3;
CandyBar input(CandyBar &, char *company="Millenium Munch", double weight=2.85, int
calorie=350);
void show(CandyBar);
void main()
{
//원래 입력된 값을 출력
candy=input(candy);
show(candy);
//사용자의 임의 입력
cout<<"\n회사 이름?";
cin>>temp1;
cout<<"\n무게?";
cin>>temp2;
cout<<"\n열량?";
cin>>temp3;
candy=input(candy, temp1, temp2, temp3);
show(candy);
}
CandyBar input(CandyBar & anycandy, char *company, double weight, int calorie)
{
CandyBar answer;
answer.name=company;
answer.wei=weight;
answer.cal=calorie;
return answer;
}
void show(CandyBar anycandy)
{
cout<<"\n상표: "<<anycandy.name;
cout<<"\n무게: "<<anycandy.wei;
cout<<"\n열량: "<<anycandy.cal;
}
==================================================================
//458page 프로그래밍 연습 3번
#include<iostream.h>
#include<string.h>
struct stringy{
char *str;//문자열을 가리키는 포인터
int ct; //문자열의 길이('\0'은 세지 않음)
};
//set(), show()의 원형이며 show()가 여기에 옴
void show(stringy string, int n=1);
void show(char * str, int n=1);
void set(stringy &, char *);
int main()
{
stringy beany;
char testing[]="Reality isn't what it used to be.";
set(beany, testing);//첫째 인수는 참조이며
//testing의 복사본을 보관할 공간을 할당하고
//beany의 str멤버를 새 블록을 지시하도록 설정
하고
//testing을 새 블록에 복사하고
//beany의 ct 멤버를 설정한다.
show(beany);
show(beany,2);
testing[0]='D';
testing[1]='u';
show(testing); //testing 문자열을 한 번 출력한다
show(testing, 3);//testing 문자열을 세 번 출력한다
show("Done!");
return 0;
}
void show(stringy string, int n)
{
for(int i=0;i<n;i++)
cout<<string.str<<endl;
}
void show(char * str, int n)
{
for(int i=0;i<n;i++)
cout<<str<<endl;
}
void set(stringy &string1, char *string2)
{
string1.str=string2;
string1.ct=strlen(string1.str);
}
==================================================================
//458page 프로그래밍 연습 4번(미완성->입력받을 때 초기화가 안 되어
긴 문자열입력->짧은 문자열 입력시 긴 문자열의 잔해가 남음)
//헤더파일
//golf.h
const int Len=40;
struct golf{
char fullname[Len];
int handicap;
};
//함수는 사용자에게 이름과 핸디캡을 요구한다
//이름이 입력되면 1을 리턴하고, 이름이 빈 문자열이면 0을 리턴한다
int setgolf(golf &g);
//함수는 전달인자로 전달된 값들을 사용하여
//golf 구조체를 제공된 이름과 핸디캡으로 설정한다
void setgolf(golf &g, const char *name, int hc);
//함수는 handicap을 새 값으로 초기화한다
void handicap(golf &g, int hc);
//함수는 golf 구조체의 이름을 표시한다
void showgolf(const golf &g);
//file1
#include<iostream.h>
#include<string.h>
#include"golf.h"
int setgolf(golf &g)
{
cout<<"\n이름은 무엇인가?";
cin>>g.fullname;
cout<<"\n핸디캡은 얼마인가?";
cin>>g.handicap;
if(g.fullname=='\0')
return 0;
else
return 1;
}
void setgolf(golf &g, const char *name, int hc)
{
int n=strlen(name);
for(int i=0;i<n;i++)
g.fullname[i]=name[i];
g.handicap=hc;
}
void handicap(golf &g, int hc)
{
g.handicap=hc;
}
void showgolf(const golf & g)
{
cout<<"\nGolfer's Name: "<<g.fullname<<endl;
cout<<g.fullname<<"'s Handicap: "<<g.handicap;
}
//file2
#include<iostream.h>
#include<string.h>
#include"golf.h"
void main()
{
int n;
int handi;
char name[40];
golf golfer1;
do{
n=setgolf(golfer1);//1이면 계속
if(n==1){
showgolf(golfer1);
cout<<"\n바꾸고 싶은 이름을 입력하시오: ";
cin>>name;
cout<<"\n원하는 핸디를 입력하시오: ";
cin>>handi;
setgolf(golfer1, name, handi);
showgolf(golfer1);
cout<<"\n원하는 핸디를 입력하시오: ";
cin>>handi;
handicap(golfer1, handi);
showgolf(golfer1);
}
}while(1);
}
====================================================================
//458page 프로그래밍 연습 5번
#include<iostream.h>
double array_double[5]={1.2, 13.4, 43.0, 33.2, 456.8};
int array_int[5]={10, 20, 30, 40, 43};
int count=0;
template<class T>
T max5(T array5[5]);
void main()
{
double maximum_double=max5(array_double);
int maximum_int=max5(array_int);
cout<<"제일 큰 수는 "<<maximum_double<<endl;
cout<<"제일 큰 수는 "<<maximum_int<<endl;
}
template<class T>
T max5(T array5[5])
{
T max;
for(int i=0;i<5;i++){
count=0;
for(int j=0;j<5;j++){
if(array5[i]>array5[j])
count++;
}
if(count==4){
max=array5[i];
break;
}
}
return max;
}
====================================================================
//458page 프로그래밍 연습 6번
#include<iostream.h>
#include<string.h>
template<class T>
T max(T arr[], int k);
template<class T>
void max<char *>(char * arr[], int i);
int main()
{
int arr_int[6]={10, 20, 30, 40, 50, 100};
double arr_double[4]={10.2, 20.5, 40.6, 132.4};
char * arr_char_p[5];
arr_char_p[0]="Drive";
arr_char_p[1]="Fly";
arr_char_p[2]="Swim";
arr_char_p[3]="Murder";
arr_char_p[4]="Write";
int ret_int=max(arr_int, 6);
double ret_double=max(arr_double, 4);
char * ret_char_p=max(arr_char_p, 5);
cout<<ret_int<<endl;
cout<<ret_double<<endl;
cout<<ret_char_p<<endl;
return 0;
}
template<class T>
T max(T arr[], int k)
{
T temp=arr[0];
for(int i=0;i<k;i++){
if(temp<arr[i])
temp=arr[i];
}
return temp;
}
char * max<char *>(char * arr[], int k)
{
char * temp=arr[0];
for(int i=0;i<k;i++){
if(strlen(temp)<strlen(arr[i]))
temp=arr[i];
}
return temp;
}