本文轉自博客園
1 /* *********************** 2 author : C / C# 3 data : 2011-8-19 4 Copyright 2011 5 *********************** */ 6 7 #include <stdio.h> 8 #include <stdlib.h> 9 #include <string.h> 10 11 #define N 5 12 13 void aver(score); 14 void menu(int *num , char *name , char *flag); 15 float *search(int *num , char *flag , char *name , char *p_name , int *p_num , float * score); 16 void repo(int *stu_num , char *stu_name , float * score , float *score_i); 17 18 int main(void) 19 { 20 int number , stu_num[N] = { 2 , 3 , 5 , 8 , 9 }; 21 22 float score[N][4] = { 23 {78 ,67 , 89} , 24 {90 ,87 , 65} , 25 {65 ,54 , 79} , 26 {98 ,87 , 69} , 27 {87 ,70 , 60} , 28 } ; 29 float *p_score ; 30 31 char stu_name[N][20] = { 32 "li dong" , 33 "zhu li" , 34 "wang ming" , 35 "tang tai guo" , 36 "bai dong hui" , 37 }; 38 char name[20] , flag ; 39 40 aver(score); 41 menu(&number , name , &flag); 42 p_score = search(&number , &flag , name , stu_name , stu_num , score); 43 repo(stu_num , stu_name , score , p_score); 44 45 } 46 47 void aver(float *score_a) 48 { 49 int i , j ; 50 float sum ; 51 52 for(i = 0 ; i < N ; i++) 53 { 54 for(sum = 0 , j = 0 ; j < 4 ; j++) 55 { 56 sum += *(score_a + i * 4 + j); 57 } 58 *(score_a + i * 4 + 3) = sum / 3 ; //將平均值賦給每一行的第四位數 59 } 60 61 return ; 62 } 63 64 void menu(int *num , char *name , char *flag) 65 { 66 printf("\nSelect the searching method : \n C—————— name | N —————— no : "); 67 *flag = getchar(); 68 69 if(*flag == 'n' || *flag == 'N') 70 { 71 printf("\nInput student number :"); 72 scanf("%d" , num); 73 } 74 else if(*flag == 'c' || *flag == 'C') 75 { 76 getchar(); //第一次編譯把這個掉了,找了好久才找到 ,要注意 77 printf("\nInput student name :"); 78 gets(name); 79 } 80 else 81 { 82 printf("\nInput Erroe !"); 83 exit(1); 84 } 85 86 return ; 87 } 88 89 float *search(int *num , char *flag , char *name , char *p_name , int *p_num , float *score) 90 { 91 int i ; 92 93 if(*flag == 'n' || *flag == 'N') 94 { 95 for(i = 0 ; i < N ; i++) 96 { 97 while(*num == *(p_num + i)) 98 return ( score + i * 4 ) ; 99 } 100 } 101 else if(*flag == 'c' || *flag == 'C') 102 { 103 for(i = 0 ; i < N ; i++) 104 { 105 while(strcmp(name , p_name + i * 20) == 0) 106 return ( score + i * 4 ) ; 107 } 108 } 109 else 110 { 111 printf("\nNot found !"); 112 exit(1); 113 } 114 } 115 116 void repo(int *stu_num , char *stu_name , float * score , float *score_i) 117 { 118 int i , j ; 119 i = (score_i - score) / 4 ; 120 printf("\nNo.\tName\t\tmath\tphys\tengl\taveragr"); 121 122 printf("\n%-8d", *(stu_num + i)); 123 124 printf("%-16s", stu_name + i * 20); 125 126 for(j = 0 ; j < 4 ; j++) 127 { 128 printf("%-8.2f", *(score_i + j)); 129 } 130 131 printf("\n"); 132 133 return ; 134 }
標籤: 指針