C++ ESPRESSO 3장 실습문제 해설
C++ ESPRESSO 3장 실습문제 해설
1. 배열 days[]를 아래와 같이 초기화하고 배열 원소의 값을 다음과 같이 출력하는 프로그램을 작성하라.
#include <iostream>
using namespace std;
int main(void)
{
int days[] = {31,29,31,30,31,30,31,31,30,31,30,31}, i;
for(i = 0;i < 12; i++){
cout<<i+1<<"월은 "<<days[i]<<"일까지 있습니다."<<endl;
}
return 0;
}
<!--[endif]-->
2. 1차원 배열은 벡터라고도 불린다.
#include <iostream>
using namespace std;
void vector_add(int v1[],int v2[]);
int main(void)
{
int vector1[3] = {0}, vector2[3] = {0};
cout<<"벡터 x를 입력하시오(x1 x2 x3) : ";
cin>>vector1[0]>>vector1[1]>>vector1[2];
cout<<"벡터 y를 입력하시오(y1 y2 y3) : ";
cin>>vector2[0]>>vector2[1]>>vector2[2];
vector_add(vector1,vector2);
return 0;
}
void vector_add(int v1[],int v2[])
{
int vector[3] = {0}, i;
cout<<"벡터의 합은 vector ( ";
for(i = 0;i < 3; i++){
vector[i] = v1[i] + v2[i];
cout<<vector[i]<<" ";
}
cout<<")"<<endl;
}
3. 사용자로부터 20개 이하의 실수 자료를 읽어서 평균과 표준 편차를 계산하는 프로그램을 작성하라.
#include <iostream>
#include <cmath>
using namespace std;
void average(double number[]);
void standard(double number[],double ave);
int main(void)
{
double number[20];
int i;
cout<<"실수 20개를 입력하시오"<<endl;
for(i = 0;i < 20; i++){
cout<<">>";
cin>>number[i];
}
average(number);
return 0;
}
void average(double number[])
{
int i;
double ave = 0;
for(i = 0;i < 20; i++){
ave += number[i];
}
ave = ave/20;
cout<<"평균은 "<<ave<<endl;
standard(number, ave);
}
void standard(double number[], double ave)
{
int i;
double stand = 0;
for(i = 0;i < 20; i++){
stand += pow((number[i] - ave),2);
}
stand = sqrt(stand/20);
cout<<"표준편차는 "<<stand<<endl;
}
4. 0부터 9까지의 난수를 100번 생성하여 가장 많이 생성된 수를 출력하는 프로그램을 작성하시오.
#include <iostream>
#include <ctime>
using namespace std;
void GetNum(int num)
{
int i, chk_num=0, rnd = 0, lot = 0;
int count_arr[10] = {0};
for(i=0; i<num; i++){
rnd = rand() % 9 + 1;
switch(rnd){
case 0:
count_arr[0]++;
break;
case 1:
count_arr[1]++;
break;
case 2:
count_arr[2]++;
break;
case 3:
count_arr[3]++;
break;
case 4:
count_arr[4]++;
break;
case 5:
count_arr[5]++;
break;
case 6:
count_arr[6]++;
break;
case 7:
count_arr[7]++;
break;
case 8:
count_arr[8]++;
break;
case 9:
count_arr[9]++;
break;
}
}
chk_num = count_arr[0];
for(i=0 ; i< 9; i++)
{
if(chk_num < count_arr[i+1]){
chk_num = count_arr[i+1];
lot = i+1;
}
}
cout<<"▶ 수 : "<<lot<<" 총 : "<<chk_num<<" 생성!"<<endl;
}
int main()
{
srand(time(NULL));
cout<<"0부터 9까지의 난수를 100번 생성하여 가장많이 생성된 수는 ?\n";
GetNum(100);
return 0;
}
5. 다음 표의 각 행의 합계, 각 열의 합계를 구하는 프로그램을 작성하라.
#include <iostream>
using namespace std;
int main(void)
{
int table[3][5] = {{12,56,32,16,98},{99,56,34,41,3},{65,3,87,78,21}}, col[5] = {0}, row[3] = {0}, i, j;
for(i = 0;i < 3; i++){
for(j = 0;j < 5; j++){
row[i] += table[i][j];
col[j] += table[i][j];
}
}
for(i = 0;i < 3; i++){
cout<<i+1<<"번째 행의 합계 : "<<row[i]<<endl;
}
for(i = 0;i < 5; i++){
cout<<i+1<<"번째 열의 합계 : "<<col[i]<<endl;
}
return 0;
}
6. 2개의 정수 배열 a,b를 받아서 대응되는 배열 원소가 같은지를 검사하는 함수
array_equal(int a[], int b[], int size)를 작성하고 테스트하라.
#include <iostream>
#define ARR_SIZE 5
using namespace std;
int array_equal(int a[], int b[], int size);
int main()
{
int i;
int a[ARR_SIZE] = {1,2,3,4,5};
int b[ARR_SIZE] = {1,2,3,4,5};
cout<<"배열 A: ";
for(i=0; i < ARR_SIZE; i++)
cout<< a[i] <<"\t";
cout<<endl;
cout<<"배열 B: ";
for(i=0; i < ARR_SIZE; i++)
cout<< b[i] <<"\t";
cout<<endl;
if( array_equal(a,b, ARR_SIZE) == 1){
cout<<"배열 A와 배열 B의 전체 원소는 같습니다. "<<endl;
}
else{
cout<<"배열 A와 배열 B의 전체 원소는 같지 않습니다. "<<endl;
}
return 0;
}
int array_equal(int a[], int b[], int size)
{
int i;
for(i=0; i<size; i++){
if(a[i] != b[i])
return 0;
}
return 1;
}
7. 2차원 배열을 이용하여 tic-tac-toe 게임 프로그램을 작성하여 보시오.
#include <iostream>
using namespace std;
int main()
{
int i,j;
int ttt[3][3]={0};
//ttt[0][1] = 1; ttt[1][0] = 2; ttt[1][1] = 1; ttt[2][1] = 2;
for(i=0 ; i < 3; i++){
for(j=0 ; j < 3; j++){
cout<<"배열에 값을 입력하세요"<<"["<<i<<","<<j<<"] : ";
cin>>ttt[i][j];
}
}
for(i=0 ; i < 3; i++){
for(j=0 ; j < 3; j++){
if( ttt[i][j] == 0){
cout<<"■"<<"\t";
}
else if( ttt[i][j] == 1){
cout<<"○"<<"\t";
}
else if( ttt[i][j] == 2){
cout<<"×"<<"\t";
}
}
cout<<endl;
}
}
8. 학생들의 시험 점수를 통계 처리하는 프로그램을 작성하여 보라.
#include <iostream>
#define MAX_STU 10
using namespace std;
typedef struct Student{
int num;
int test1;
int test2;
int test3;
int h_s;
int l_s;
int sum;
double ave;
}STUDENT;
int MODE(int data[], int n);
void bubble_sort(STUDENT *std, int n);
void bubble_sort(int *a, int n);
int main()
{
int i;
int tmp=0;
int mid1[MAX_STU]={0}, mid2[MAX_STU]={0}, mid3[MAX_STU]={0};
int mode1 = 0, mode2 = 0, mode3 = 0;
double h_s[3]={0}, l_s[3]={0}, sum[3]={0}, ave[3]={0};
int stu_count = 0;
STUDENT std[MAX_STU];
cout<<"학생 수를 입력하세요 : ";
cin>>stu_count;
for(i=0; i < stu_count; i++)
{
cout<<"학번 시험#1 시험#2 시험#3 (ex 1 30 10 11) : ";
cin>>std[i].num>>std[i].test1>>std[i].test2>>std[i].test3;
sum[0] = sum[0] + std[i].test1;
sum[1] = sum[1] + std[i].test2;
sum[2] = sum[2] + std[i].test3;
mid1[i] = std[i].test1;
mid2[i] = std[i].test2;
mid3[i] = std[i].test3;
std[i].sum = (std[i].test1 + std[i].test2 + std[i].test3);
std[i].ave = std[i].sum / 3;
if(std[i].test1 > std[i].test2){
if( std[i].test1 > std[i].test3 ){
std[i].h_s = std[i].test1;
if( std[i].test2 > std[i].test3 )
std[i].l_s = std[i].test3;
else
std[i].l_s = std[i].test2;
}
else{
std[i].h_s = std[i].test3;
if( std[i].test1 > std[i].test2 )
std[i].l_s = std[i].test2;
else
std[i].l_s = std[i].test1;
}
}
else{
if( std[i].test2 > std[i].test3 ){
std[i].h_s = std[i].test2;
if( std[i].test1 > std[i].test3 )
std[i].l_s = std[i].test3;
else
std[i].l_s = std[i].test1;
}
else{
std[i].h_s = std[i].test3; // test2 <test3
if( std[i].test1 > std[i].test2 )
std[i].l_s = std[i].test2;
else
std[i].l_s = std[i].test1;
}
}
}
mode1 = MODE(mid1, stu_count);
mode2 = MODE(mid2, stu_count);
mode3 = MODE(mid3, stu_count);
bubble_sort(mid1, stu_count);
bubble_sort(mid2, stu_count);
bubble_sort(mid3, stu_count);
h_s[0] = std[0].test1;
h_s[1] = std[0].test2;
h_s[2] = std[0].test3;
l_s[0] = std[0].test1;
l_s[1] = std[0].test2;
l_s[2] = std[0].test3;
for(i=1; i< stu_count; i++){
if(h_s[0] < std[i].test1)
h_s[0] = std[i].test1;
if(h_s[1] < std[i].test2)
h_s[1] = std[i].test2;
if(h_s[2] < std[i].test3)
h_s[2] = std[i].test3;
if(l_s[0] > std[i].test1)
l_s[0] = std[i].test1;
if(l_s[1] > std[i].test2)
l_s[1] = std[i].test2;
if(l_s[2] > std[i].test3)
l_s[2] = std[i].test3;
}
ave[0] = sum[0] / stu_count;
ave[1] = sum[1] / stu_count;
ave[2] = sum[2] / stu_count;
cout<<endl<<endl;
cout<<" + 학생 성적 +"<<endl;
cout<<"-------------------------------------------------------------"<<endl;
cout<<" 학번 시험#1 시험#2 시험#3 최고 최저 평균 총점"<<endl;
cout<<"-------------------------------------------------------------"<<endl;
for(i=0; i < stu_count; i++)
{
cout<<" "<<std[i].num<<"\t"<<std[i].test1<<"\t"<<std[i].test2<<"\t"<<std[i].test3<<"\t"<<std[i].h_s<<"\t"<<std[i].l_s<<"\t"<<std[i].ave<<"\t"<<std[i].sum<<endl;
}
cout<<"-------------------------------------------------------------"<<endl;
cout<<" 시험#1 최대 점수 : "<<h_s[0]<<", 최저 점수 : "<<l_s[0]<<", 평균 점수 : "<<ave[0]<<endl;
cout<<" 시험#2 최대 점수 : "<<h_s[1]<<", 최저 점수 : "<<l_s[1]<<", 평균 점수 : "<<ave[1]<<endl;
cout<<" 시험#3 최대 점수 : "<<h_s[2]<<", 최저 점수 : "<<l_s[2]<<", 평균 점수 : "<<ave[2]<<endl;
cout<<"-------------------------------------------------------------"<<endl;
cout<<"-------------------------------------------------------------"<<endl;
cout<<" 시험#1 산술 평균 : "<<ave[0]<<", 중간값 : "<<mid1[stu_count/2]<<", 모드값(최빈값) : "<<mode1<<endl;
cout<<" 시험#2 산술 평균 : "<<ave[1]<<", 중간값 : "<<mid2[stu_count/2]<<", 모드값(최빈값) : "<<mode2<<endl;
cout<<" 시험#3 산술 평균 : "<<ave[2]<<", 중간값 : "<<mid3[stu_count/2]<<", 모드값(최빈값) : "<<mode3<<endl;
cout<<"-------------------------------------------------------------"<<endl<<endl;;
cout<<" + 학생 성적(총점 석차순) +"<<endl;
cout<<"-------------------------------------------------------------"<<endl;
cout<<" 학번 시험#1 시험#2 시험#3 최고 최저 평균 총점"<<endl;
cout<<"-------------------------------------------------------------"<<endl;
bubble_sort(std, stu_count);
for(i=0; i < stu_count; i++)
{
cout<<" "<<std[i].num<<"\t"<<std[i].test1<<"\t"<<std[i].test2<<"\t"<<std[i].test3<<"\t"<<std[i].h_s<<"\t"<<std[i].l_s<<"\t"<<std[i].ave<<"\t"<<std[i].sum<<endl;
}
return 0;
}
void bubble_sort(int *a, int n)
{
int temp;
int i, j;
for(i=0; i < n-1 ; i++){
for(j=0; j < n-i-1; j++){
if(a[j] > a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
void bubble_sort(STUDENT *std, int n)
{
STUDENT temp;
int i, j;
for(i=0; i < n-1 ; i++){
for(j=0; j < n-i-1; j++){
if(std[j].sum > std[j+1].sum)
{
temp = std[j];
std[j] = std[j+1];
std[j+1] = temp;
}
}
}
}
int MODE(int data[], int n)
{
int i, j;
int count;
int Max_C = 0;
int Max_I = 0;
for(i=0; i< n; i++){
count = 0;
for(j=0; j< n; j++)
{
if(data[i] == data[j])
count++;
}
if(count > Max_C)
{
Max_C = count;
Max_I = i;
}
if(count > n / 2)
break;
}
return data[Max_I];
}
9. 배열 A[]를 배열 B[]에 복사하는 함수를 작성하고 테스트하라.
#include <iostream>
using namespace std;
void copy(int *A, int *B, int n);
int main ()
{
int A[] = {1,2,3,4,5}, B[] = {6,7,8,9,10}, n = 0;
cout<<"A[] = {1,2,3,4,5}"<<endl;
cout<<"B[] = {6,7,8,9,10}"<<endl;
cout<<endl;
copy(A,B,5);
return 0;
}
void copy(int *A, int *B, int n)
{
int *C = NULL, i;
C = B;
B = A;
A = C;
cout<<"A[] = {";
for(i = 0;i < n; i++){
if(i == n-1)
cout<<A[i];
else
cout<<A[i]<<",";
}
cout<<"}"<<endl;
cout<<"B[] = {";
for(i = 0;i < n; i++){
if(i == n-1)
cout<<B[i];
else
cout<<B[i]<<",";
}
cout<<"}"<<endl;
}
10. 배열 A[]에서 주어진 숫자를 탐색하여 숫자를 가리키는 포인터를 반환하는 다음과 같은 원형을 가지는 함수를 작성하고 테스트하라.
#include <iostream>
#define MAX_SIZE 10
using namespace std;
void print(int *A, int size);
int *search(int *A, int n);
int main ()
{
int a[MAX_SIZE] = {1,2,3,4,5,6,7,8,9,10}, n =0, *ps = NULL;
print(a,MAX_SIZE);
cout<<"탐색할 수를 입력하시오 : ";
cin>>n;
ps = search(a,n);
if(*ps == -1){
cout<<"못찾았습니다."<<endl;
}
else{
cout<<"찾았습니다 : "<<*ps<<endl;
}
return 0;
}
int *search(int *A, int n)
{
int x = -1;
for(int i = 0;i < MAX_SIZE;i++){
if(*A+i == n){
return A+i;
}
}
return &x;
}
void print(int *A,int size)
{
cout<<"A[] = { ";
for(int i = 0;i < size;i++){
cout<<A[i]<<" ";
}
cout<<"}"<<endl;
}
11. 실수값들이 저장되어 있는 double형 배열 A{]에서 평균값, 최대값, 전체의 합을 계산하여 포인터 인수를 통하여 반환하는 함수 get_stat(double A[], double *p_avg, double *p_max, double *p_sum)을 구현하라.
#include <iostream>
#define MAX_SIZE 10
using namespace std;
void get_stat(double A[], double *p_avg, double *p_sum, double *p_max);
int main ()
{
double a[MAX_SIZE] = {1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.3}, sum = 0, avg = 0, max = 0;
double *p_sum = ∑
double *p_avg = &avg;
double *p_max = &max;
cout<<"A[] = { ";
for(int i = 0;i < MAX_SIZE;i++){
cout<<a[i]<<" ";
}
cout<<"}"<<endl;
get_stat(a,p_avg,p_sum,p_max);
cout<<"총합 : "<<sum<<endl;
cout<<"총 평균 : "<<avg<<endl;
cout<<"최대값 : "<<max<<endl;
return 0;
}
void get_stat(double A[], double *p_avg, double *p_sum, double *p_max)
{
for(int i = 0;i < MAX_SIZE;i++){
*p_sum += A[i];
if(*p_max < A[i]){
*p_max = A[i];
}
}
*p_avg = (*p_sum) / MAX_SIZE;
}
12. 간단한 철자 교정 프로그램을 작성하여 보자.
#include <iostream>
#define SIZE 100
using namespace std;
void ChangeText(char *str, int size);
int main()
{
char input[SIZE];
cin.getline(input, SIZE);
cout<<" 입력문 : "<<input<<endl;
ChangeText(input, SIZE);
cout<<" 변경문 : "<<input<<endl;
}
void ChangeText(char *str, int size)
{
int i;
if(str[0] >= 'a' && str[0] <= 'z')
str[0] = str[0] - 32;
for(i=0; i<size;i++){
if(str[i] == NULL){
if(str[i-1] != '.'){
str[i] = '.';
str[i+1] = NULL;
}
break;
}
}
}
13. 간단한 “찾아 바꾸기” 기능을 구현하여 보자.
#include <iostream>
#define SIZE 81
using namespace std;
int main()
{
char str[SIZE], tmp[SIZE];
char findStr[SIZE], replaceStr[SIZE];
char* pStr;
cout<<"문자열을 입력하시오: ";
cin.getline(str, 81);
cout<<"찾을 문자열: ";
cin.getline(findStr,81);
cout<<"바꿀 문자열: ";
cin.getline(replaceStr,81);
pStr = strstr(str, findStr);
if(findStr == NULL)
cout<<"입력하신 문자열을 찾을 수 없습니다."<<endl;
strncpy(tmp, str, (pStr-str));
tmp[pStr-str] = NULL;
strcat(tmp, replaceStr);
strcat(tmp, pStr+strlen(findStr));
strcpy(str, tmp);
cout<<"결과: "<<str<<endl;
return 0;
}
'IT > 프로그래밍' 카테고리의 다른 글
c언어 연습 (문제풀이 중심의) 2장 문제풀이 해설 (0) | 2021.04.29 |
---|---|
c언어 연습 (문제풀이 중심의) 1장 문제풀이 해설 (0) | 2021.04.29 |
C++ ESPRESSO 3장 연습문제 해설 (0) | 2020.12.15 |
파워 자바 컴팩트 5장 연습문제 해설 power java compact (0) | 2020.12.14 |
파워 자바 컴팩트 4장 연습문제 해설 power java compact (0) | 2020.12.14 |
댓글