user-0 提问: 求指教  这个代码怎么改才能实现相同成绩排名一样

回复:
user: user-1
content: 额,,加个代码吧void paiming(float score[] ,char name[N][12]) {    int i, j ,k;   float t;   float BeforeScore=0;   for(i=0;i<N;i++)   {  	   t=score[0]; 	   k=0; 	   for(j=0;j<N;j++) 	   {  		   if(t<score[j]) 		   {  			   t=score[j]; 			   k=j; 		   } 	   } 	  for(j=0;j<N;j++) 	  {  		  if(0==j) 		  { 			  if(t==score[j]) 			  printf("第%d名为:%s,分数为:%.2f\n",i+1,name[k],t);               BeforeScore=score[k]; 		  } 		  else if(BeforeScore==score[i]) 		  { 			  printf("第%d名为:%s,分数为:%.2f\n",i,name[k],t); 		       BeforeScore=score[k]; 		  } 		  else 			  printf("第%d名为:%s,分数为:%.2f\n",i+1,name[k],t); 		  score[k]=0; 	  }   }

user: user-1
content: 嗯嗯,明白了,,下次可以把代码都贴出来,,让人更好理解,,. 你可以在每一次输出的成绩的时候与前面一个的成绩进行比较判断,,,看是否成绩与前一位的相同,,,如果相同的话  输出的排名相同,..不同的话输出的排名向后推,,, 嗯恩 呵呵,,大概就是这样  好好学习天天向上,,,

user: user-2
content: 引用 6 楼 xuzhouweihao 的回复:既然说在这个代码上改，然后改了下。追加了一个参数： int tmp=0;   // 代表该分数有几名学生  其他的修改查看以下代码： ps：注意score[k] = 0;  还有if (t == score[j]) 的{}   void paiming(float score[], char name[N][12]) { 	int i, j, k; 	float t; 	int tmp=0;   // 代表该分数有几名学生 //	for (i = 0; i<N; i++) 	for (i = 0; i<N; i=i+tmp) 	{ 		t = score[0]; 		k = 0; 		tmp=0; 		for (j = 0; j<N; j++) 		{  			if (t<score[j]) 			{ 				t = score[j]; 				k = j; 			} 		} 		for (j = 0; j<N; j++) 		{ 			if (t == score[j]){ 				printf("  第%d名为:%s,分数为:%.2f\n", i+1, name[k], t); 				tmp++; 			} 		} 		score[k] = 0; 	} }   另外有没有考虑有的同学考0分的情况。  score[k]清空为0 有点不可思议。 另外刚才代码有点问题修改下。 void paiming(float score[], char name[N][12]) { 	int i, j; 	float t; 	int tmp=0;   // 代表该分数有几名学生 //	for (i = 0; i<N; i++) 	for (i = 0; i<N; i=i+tmp) 	{ 		t = score[0]; 		tmp=0; 		for (j = 0; j<N; j++) 		{  			if (t<score[j]) 			{ 				t = score[j]; 			} 		} 		for (j = 0; j<N; j++) 		{ 			if (t == score[j]){ 				printf("  第%d名为:%s,分数为:%.2f\n", i+1, name[j], t); 				tmp++; 				score[j] = 0; 			} 		} 	} }

user: user-2
content: 既然说在这个代码上改，然后改了下。追加了一个参数： int tmp=0;   // 代表该分数有几名学生  其他的修改查看以下代码： ps：注意score[k] = 0;  还有if (t == score[j]) 的{}   void paiming(float score[], char name[N][12]) { 	int i, j, k; 	float t; 	int tmp=0;   // 代表该分数有几名学生 //	for (i = 0; i<N; i++) 	for (i = 0; i<N; i=i+tmp) 	{ 		t = score[0]; 		k = 0; 		tmp=0; 		for (j = 0; j<N; j++) 		{  			if (t<score[j]) 			{ 				t = score[j]; 				k = j; 			} 		} 		for (j = 0; j<N; j++) 		{ 			if (t == score[j]){ 				printf("  第%d名为:%s,分数为:%.2f\n", i+1, name[k], t); 				tmp++; 			} 		} 		score[k] = 0; 	} }

user: user-3
content: 你的t是最高成绩   是第一名   你直接写第一名得了   不用写i+1了

user: user-4
content: 多定义一个数组用来存储名次，或者把学生的信息用结构体来存储 typedef struct student_data {     char school[10];     short int class_num ;     char name[12];     int exam_num ;     char score[9];     short int score_sum ;     short int position[3];     struct student_data* next ; } data ;

user: user-5
content: 楼主用c语言为什么你们用vb

user: user-4
content: 引用 1 楼 zhao4zhong1 的回复:仅供参考，尽管是VB6：     sc = GZsc(1)     mc = 1     GZmc(1) = mc     For i = 2 To GZDWS         If GZsc(i) = sc Then             GZmc(i) = mc         Else             sc = GZsc(i)             mc = i             GZmc(i) = mc         End If     Next 你应该用汇编的。。。

user: user-6
content: 仅供参考，尽管是VB6：     sc = GZsc(1)     mc = 1     GZmc(1) = mc     For i = 2 To GZDWS         If GZsc(i) = sc Then             GZmc(i) = mc         Else             sc = GZsc(i)             mc = i             GZmc(i) = mc         End If     Next