1004 成绩排名

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 struct stu{//定义一个数据结构来保存学生信息 
 6         char Name[11];//注意这里和下面一行,应该是11,10个字符还要加上结束符 
 7         char Num[11];
 8         int Grade;
 9     };
10 
11 int main(void)
12 {
13     int n,i,k=0,j=0,Maxi=0,Mini=0;//k和j用来记录第几个相对于上一个较大/小,最后就相当于是记录第几个是最大/小 
14     scanf("%d",&n); 
15     struct stu ss[n];//重命名结构体为一个结构体数组,表示学生数 
16     for(i=0;i<n;++i)//for循环输入 
17     {
18         scanf("%s%s%d",&ss[i].Name,&ss[i].Num,&ss[i].Grade);
19     }
20     Maxi=ss[0].Grade;//定义最大最小值为第一个 
21     Mini=ss[0].Grade;
22     for(i=0;i<n-1;++i)//这里是n-1,因为下面写i+1,i最多取到n-2,i+1就是n-1,这样做是为了跳过ss[0].Grade,因为我定义的最大最小值是那么多(当然你也可以,直接小于n,下面写i,因为这里面并没有相等情况的处理 
23     {
24         if(Maxi < ss[i+1].Grade)
25         {
26             Maxi=ss[i+1].Grade;//谁大就让谁等于Maxi 
27             k=i+1;//记录下这是第几个学生 
28         }
29     }
30     for(i=0;i<n-1;++i)
31     {
32         if(Mini > ss[i+1].Grade)
33         {
34             Mini=ss[i+1].Grade;//同上 
35             j=i+1;
36         }
37     }
38     printf("%s %s\n%s %s",ss[k].Name,ss[k].Num,ss[j].Name,ss[j].Num);//输出结果 
39     return 0;    
40 } 

在第18排代码那里,在Ubuntu16.04LTS中,用g++运行,出现警告char*....char*[10],需要在是、那两个字符串后面添上[10]才能没有警告,而在pat提交中如果有[10]会显示答案错误。有点迷。

 

刚开始我是用二维数组的方法做出来的。刚刚依照上面的方法改了下,对了,哈哈嗝!

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 int main(void)
 6 {
 7     int n,i,k=0,m=0,j=0,maxi=0,mini=0;//跟上面类似就不多解释 
 8     scanf("%d",&n);
 9     char name[n][11],num[n][11];//n表示学生数后面储存字符串,这种定义方法C99允许,或许有些编译器会报错,需要改一下标准 
10     int grade[n];
11     for(i=0;i<n;i++)//循环输入 
12     {
13         scanf("%s%s%d",&name[i],&num[i],&grade[i]); 
14     }
15     maxi=grade[0];//假设最大/小值是第一个 
16     mini=grade[0];
17     for(i=0;i<n;++i)
18     {
19         if(maxi<grade[i])
20         {
21             maxi=grade[i];//谁大,让maxi等于它 
22             m=i;//记录下这是第几个 
23         } 
24     }
25     for(i=0;i<n;i++)
26     {
27         if(mini>grade[i])//与上面类似 
28         {
29             mini=grade[i];
30             j=i;
31         } 
32     }
33     printf("%s %s\n%s %s",name[m],num[m],name[j],num[j]);
34     return 0;
35 }

 

posted @ 2018-03-24 19:44  Hk_Mayfly  阅读(199)  评论(0)    收藏  举报