C,C++/PROJECT
Day02-04. C++ 2차원 포인터 활용. 성적관리 프로그램 ver1.0
너래쟁이
2018. 3. 6. 14:34
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include<iostream> using namespace std; void main() { int a[2][3]={6,5,4,3,2,1}; int i,j; int (*p)[3]; p=a; //초기화 for(i=0;i<2;i++) { for(j=0;j<3;j++) { cout<<a[i][j]<<"\t"<<p[i][j]<<"\n"; cout<<*(a[i]+j)<<"\t"<<*(p[i]+j)<<"\n"; cout<<*(*(a+i)+j)<<"\t"<<*(*(p+i)+j)<<"\n"; } cout<<endl; } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | #include<iostream> using namespace std; //함수 프로토타입 선언 void input(char (*name)[10],int (*score)[4],int num); void oper(int (*score)[4],float *avg,int num); void output(char (*name)[10],int (*score)[4],float *avg,int num); void main() { char (*name)[10]; int (*score)[4]; float *avg; int num; cout<<"몇 사람 :"; cin>>num; name=new char[num][10]; score = new int[num][4]; avg = new float[num]; input(name,score,num); oper(score,avg,num); output(name,score,avg,num); delete []name; delete []score; delete []avg; } void output(char (*name)[10],int (*score)[4],float *avg,int num) { int i,j; system("cls"); for(i=0;i<num;i++) { cout<<name[i]<<"\t"; for(j=0;j<4;j++) { cout<<score[i][j]<<"\t"; } cout<<avg[i]<<endl; } } void oper(int (*score)[4],float *avg,int num) { int i,j; for(i=0;i<num;i++) { score[i][3]=0; for(j=0;j<3;j++) { score[i][3] += score[i][j]; } avg[i] =score[i][3]/3.f; } } void input(char (*name)[10],int (*score)[4],int num) { int i,j; for(i=0;i<num;i++) { cout<<"Name input :"; cin>>name[i]; // *(name+i) for(j=0;j<3;j++) { if(j==0) cout<<"Kor input :"; else if(j==1) cout<<"Eng input :"; else cout<<"Mat input :"; cin>>score[i][j]; // *(score[i]+j),*(*(score+i)+j) } } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | #include <iostream> using namespace std; // 함수 선언부 (3. 입력 4. 연산 5. 출력) void input(char (*name)[10], int (*score)[4], int num); void oper(int (*score)[4], float *avg, int num); void output(char (*name)[10], int (*score)[4], float *avg, int num); void main() { char (*name)[10]; int (*score)[4]; float *avg; int num; // 1. 인원수? cout << "인원수 : "; cin >> num; // 2. 메모리 할당 name = new char[num][10]; // 한 행의 크기가 10인데 num개 만큼 메모리 할당 score = new int[num][4]; // 한 행의 크기가 4인데 num개 만큼 메모리 할당 avg = new float[num]; // 3. 입력 input(name, score, num); // 4. 연산 oper(score, avg, num); // 5. 출력 output(name, score, avg, num); // 6. 해제 delete[] name; delete[] score; delete[] avg; } // 3. 입력 void input(char (*name)[10], int (*score)[4], int num) { int i, j; for (i = 0; i<num; i++) { cout << "\nName input : "; cin >> *(name+i); // ==name[i] for (j = 0; j < 3; j++) { if(j==0) cout<<"Kor input :"; else if(j==1) cout<<"Eng input :"; else cout<<"Mat input :"; cin >> *(*(score + i) + j); // == score[i][j] // == *(score[i]+j) } // 포인터 기준점 이동 name += 10; score += 4; } } // 4. 연산 void oper(int (*score)[4], float *avg, int num) { for (int i = 0; i < num; i++) { *(*(score+i)+3) = 0; // 쓰레기값 초기화 for (int j = 0; j < 3; j++) { // 합계 구하기 *(*(score+i)+3) += *(*(score + i)+j); } // 평균 구하기 *(avg + i) = *(*(score + i) + 3) / 3.f; // 포인터 기준점 이동 score += 4; } } // 5. 출력 void output(char (*name)[10], int (*score)[4], float *avg, int num) { int i, j; for (i = 0; i < num; i++) { // 이름 출력 cout <<"이름 : "<<*(name+i)<<"\n"; // 국영수 합계 출력 for (j = 0; j < 3; ++j) { cout << *(*(score + i)+j) << " "; } j = 3; cout <<"\n합계 : "<< *(*(score + i)+j)<< endl; // 평균 출력 cout << "평균 : "<<*(avg + i) <<"\n" << endl; // 포인터 기준점 이동 name += 10; score += 4; } } | cs |