2011. 5. 31. 15:29

C에서 배열(Array)과 포인터(Pointer)의 활용

구조체의 활용은 배열로 처리하는 것과 포인터를  이용하는 방식이 있는데 하나의 구조체를 만들고 그것을 필요한 수 만큼 배열로 선언하여 작업을 해도 되고, 배열없이 구조체를 포인터 변수에 할당하여 프로그래밍 할 수도 있다. 학생의 이름과 국영수 점수를 입력받아 총점과 평균을 구하는 프로그램을 두 가지 방법으로 코딩하면 아래와 같쑝. 테스트를 위해 학생 수를 일단 꼴랑 2명으로 했쑝.

1. 배열로 처리

 1: #include <stdio.h>
 2: #include <stdlib.h>
 3: 
 4: struct _student {
 5:     char name[10] ;
 6:     int korean ;
 7:     int english ;
 8:     int math ;
 9:     int total ;
10:     double avg ;
11: } students ;    
12: 
13: int main(void)
14: {    
15:  students student[2] ;
16: 
17:     int i ;
18:     
19:     for(i = 0 ; i < 2 ; i++) {
20:         printf("이   름 : ") ;
21:         scanf("%s", student[i].name) ;
22:         printf("국어점수 : ") ;
23:         scanf("%d", &student[i].korean) ;
24:         printf("영어점수 : ") ;
25:         scanf("%d", &student[i].english) ;
26:         printf("수학점수 : ") ;
27:         scanf("%d", &student[i].math) ;
28: 
29:         student[i].total = student[i].korean + student[i].english + student[i].math 
30:         student[i].avg = student[i].total / 3.0 ;
31:         putch('\n') ;
32:     }    
33: 
34:     printf("======= 성적 처리 결과 ===========\n\n") ;
35: 
36:     for(i = 0 ; i < 2 ; i++) {
37:         printf("이   름 : %s\n", student[i].name) ;
38:         printf("국어점수 : %d\n", student[i].korean) ;
39:         printf("영어점수 : %d\n", student[i].english) ;
40:         printf("수학점수 : %d\n", student[i].math) ;
41:         putch('\n') ;
42:         printf("총  합계 : %d\n", student[i].total) ;
43:         printf("평    균 : %.2lf\n", student[i].avg) ;
44:         printf("----------------------------------------------\n") ;
45:     }
46: 
47:     return 0;
48: }
2. 포인터로 처리
 1: #include <stdio.h>
 2: #include <stdlib.h>
 3: 
 4: struct _student {
 5:     char name[10] ;
 6:     int korean ;
 7:     int english ;
 8:     int math ;
 9:     int total ;
10:     double avg ;
11: } students, *sp ;    
12: 
13: int main(void)
14: {        
15:     sp = &students ;
16: 
17:     int i ;
18:     
19:     for(i = 0 ; i < 2 ; i++) {
20:         printf("이   름 : ") ;
21:         scanf("%s", sp -> name) ;
22:         printf("국어점수 : ") ;
23:         scanf("%d", &sp -> korean) ;
24:         printf("영어점수 : ") ;
25:         scanf("%d", &sp -> english) ;
26:         printf("수학점수 : ") ;
27:         scanf("%d", &sp -> math) ;
28: 
29:         sp -> total = sp -> korean + sp -> english + sp -> math ;
30:         sp -> avg = sp -> total / 3.0 ;
31:         sp++ ;      
32:         putch('\n') ;
33:     }
34: 
35:     sp = &student ;    
36: 
37:     printf("======= 성적 처리 결과 ===========\n\n") ;
38: 
39:     for(i = 0 ; i < 2 ; i++) {
40:         printf("이   름 : %s\n", sp -> name) ;
41:         printf("국어점수 : %d\n", sp -> korean) ;
42:         printf("영어점수 : %d\n", sp -> english) ;
43:         printf("수학점수 : %d\n", sp -> math) ;
44:         putch('\n') ;
45: 
46:         printf("총  합계 : %d\n", sp -> total) ;
47:         printf("평    균 : %.2lf\n", sp -> avg) ;
48:         sp++ ;
49:         printf("----------------------------------------------\n") ;
50:     }
51: 
52:     return 0;
53: }