|
求一个值delta,让选上了这一门课(未选的 成绩是0)的每个学生的成绩+delta,再计算这门课的平均分,这个平均分恰好等于选了这门课的所有的学生的平均成绩
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 //int count_in=0; 5 //int deta=0; 6 7 // (y1 + y2 + .....y_count_in+(count_in)*detal) / count_in = n1 = sum / count_in 8 // y1 表示本门课程的源成绩, 9 //sum逐个加每个学生(已经选了该门课)所有课程的平均,到下面再除一个count_in就是 所有选这课的学生的 所有成绩 的平均值。 10 // count_in表示选本门课的学生数 11 // n1表示选了本门课的 所有学生 的 所有的成绩 的平均值。 12 // detal即为所求的本门所需的差值。 13 // => detal=(sum-(y1+y2....y_count_in)) / count_in 14 // => detal= (sum - totalOfClass ) / count_in. 15 int f_pinjun(int data[][10],int student_num,int row,int class_num) 16 { 17 int count_in=0; 18 int i,sum=0,tmp_sum,j,n_stu_class_num,totalOfClass=0; 19 //deta=0; 20 21 for(i=0; i<student_num; i++) 22 { 23 if(data[row]!=0) 24 { 25 tmp_sum=0; 26 n_stu_class_num=0; 27 for(j=0;j<class_num;j++)//这个地方的重复的太多。,应当是预先保存每一个学生的平均值,然后调用,这样可以避免重复。 28 { 29 if(data[j]!=0) 30 { 31 n_stu_class_num++; 32 tmp_sum+=data[j]; 33 } 34 35 } 36 37 totalOfClass+=data[row]; 38 tmp_sum/=n_stu_class_num; 39 count_in++; 40 sum+=tmp_sum;//sum逐个加每个学生(已经选了该门课)所有课程的平均,到下面再除一个count_in就是 所有选这课的学生的 所有成绩 的平均值。 41 } 42 } 43 //deta=totalOfClass/count_in; 44 //return sum/count_in; 45 return (sum-totalOfClass)/count_in; 46 } 47 48 int main() 49 { 50 char class_name[10][15]; 51 int student_num,class_num,i,data[20][10],j; 52 //int pinjun[10]= {0,0}; 53 scanf("%d %d",;student_num,;class_num); 54 //printf("%d %d\n",student_num,class_num); 55 56 for(i=0; i<class_num; i++) 57 { 58 scanf("%s",class_name); 59 } 60 61 for(i=0; i<student_num; i++) 62 { 63 for(j=0; j<class_num; j++) 64 scanf("%d",;data[j]); 65 } 66 67 //print_data(data,student_num,class_num); 68 69 for(i=0; i<class_num; i++) 70 { 71 //pinjun=f_pinjun(data,student_num,i,class_num); 72 //printf("%d ",pinjun); 73 //if(i!=class_num-1) 74 //printf("%s %d\n",class_name,pinjun-deta); 75 //printf("%d\n",deta); 76 printf("%s %d\n",class_name,f_pinjun(data,student_num,i,class_num)); 77 } 78 //printf("%s %d",class_name[i-1],pinjun-deta); 79 80 return 0;
81 } ACM 2 分步实现 打基础 再实现 将对它改进。
| |