C语言输出三个学生中成绩最高的学生的成绩

#include<stdio.h>
int main()
{
int i,max,score1,score2;
struct student
{ char name[20];
char sex;
int number;
int score;
}stu[3] ;
printf("%-13.13s %-3.3s %-15.11s %-15.8s\n","name","sex","number","maxscore");
for(i=1;i<=25;i++)
printf("- ");
printf("\n");
scanf("%s%c%s%d\n",&stu[0].name,&stu[0].sex,&stu[0].number,&stu[0].score);
scanf("%s%c%s%d\n",&stu[1].name,&stu[1].sex,&stu[1].number,&stu[1].score);
scanf("%s%c%s%d\n",&stu[2].name,&stu[2].sex,&stu[2].number,&stu[2].score);
score1=stu[0].score>stu[1].score?stu[0].score:stu[1].score;
score2=score1>stu[2].score?score1:stu[2].score;
printf("%d",score2);
return 0;
}
为什么最后输出的数字不是最高成绩?

输入可以改为:

    scanf("%s%d%d%c",stu[0].name,&stu[0].number,&stu[0].score,&stu[0].sex);


上述测试的输出结果:



注意:

1.scanf内不能有\n

2.注意输入的类型(你的number为int类型,输入时为%d)

3.类型为%s的时候,后面的stu[0].name前就不需要加上取地址符&了


输入顺序改为上述之后,输入时依次为:

1.输入姓名字符串,以回车结束

2.接着输入一个整数表示学号,以空格,或tab键,或回车结束

3.再输入一个整数表示成绩,以下一个要输入的字符(即表示的是性别)结束

4.性别在3中已经输入,此时直接回车结束整个输入。


一般的,当一次性要输入好几个不同类型的数据时,字符型的一般最后输入。(此题中如果学号为字符串类型,亦不影响输入的结果,只是此时只能输入一个字符串代表学号后以回车结束了)

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-01-10
scanf("%s%c%s%d\n",&stu[0].name,&stu[0].sex,&stu[0].number,&stu[0].score); 这一句中的第一个&需要去掉

仅仅排高低分的那个算法是对的
第2个回答  2013-01-10
格式控制不正确追问

什么意思??

追答

scanf("%s%c%s%d\n",&stu[0].name,&stu[0].sex,&stu[0].number,&stu[0].score);
%s 和%c怎么区分?
name是字符串,为什么加“&”符合?
第三个%s对应的怎么又是整数属性的number?
sacnf最后一个怎么又是“\n”?
无语了.......

C语言输出三个学生中成绩最高的学生的成绩
scanf("%s%d%d%c",stu[0].name,&stu[0].number,&stu[0].score,&stu[0].sex);上述测试的输出结果:注意:1.scanf内不能有\\n 2.注意输入的类型(你的number为int类型,输入时为%d)3.类型为%s的时候,后面的stu[0].name前就不需要加上取地址符&了 输入顺序改为上述之后,输入时依次为...

C语言找出最高分成绩
++i){ if (maxsc < student[i].score){ maxsc = student[i].score; index = i; } } printf ("最高分是:%.1f\\n", maxsc); printf ("最高分学生的学号:%s\\n", student[index].no); printf ("最高分学生的姓名:%s\\n", student[index].name);...

c语言输入3名学生4门功课,求每名学生中最高成绩
if(max<score) { max=score;9 maxIndex=j; } } stu[i][j]=maxIndex; } for(i=0;i<3;i++) printf("学生%d的最高成绩是学科%d:%d分\\n",i+1,stu[i][4]

c语言编程:输入三个学生的成绩,输出总分及平均值
float sum, avg;printf("请输入3个学生的成绩");scanf("%d%d%d", &x, &y, &z); \/\/要先接收才能运算,先运算结果当然不对 sum = x + y + z;avg = sum \/ 3;printf("3个学生的总成绩及平均分为");printf("sum=%.2f,avg=%.2f\\n", sum, avg);return 0;...

c语言,高手指点一下,想输出最高分的名字和成绩
printf("请输入第%d个学生的基本信息:\\n",i+1);printf("学号:");scanf("%d",&stu[i].number);printf("姓名");scanf("%s",&stu[i].name);printf("三门科成绩(eg:100 90 80):");for( j=0; j<3; j++ )scanf("%f",&stu[i].score[j]);} p=stu;p=max(p);--p;printf(...

...姓名和两门成绩。最后输出其中平均分最高的学生
你的程序有两个问题:一个是学号的储存,一个是学生总分的储存,学号只是一个号码,并不能以数组的形式储存,而你的程序中用来储存学号的是int name[10],这是不正确的。另一个,你虽然在结构中定义了sum来储存总分,但并没有在主函数的语句中给stu[i].sum进行任何形式的赋值,且计算sum总分的for...

c语言,输入3个同学的姓名 学号 和3门课的成绩 ,然后打印出平均值和总分...
double score3;double sum;double ave;};void input(struct student *pa,int n){ struct student *pb;printf("请依次输入%d名学生的学号、姓名、科目1、科目2和科目3的成绩:\\n", n);for(pb=pa;pb<pa+n;pb++)\/\/错误:原来是pb<pb+n,这明显是恒成立的。scanf("%d%s%lf%lf%lf",&pb-...

C语言编写一程序,输入3个学生的成绩,计算并输出总分与平均分。在线等...
include <stdio.h>#include <stdlib.h>int main(){ float as,sd,df; scanf("%g%g%g",&as,&sd,&df); double sum=0.; double anverage; sum=as+sd+df; anverage=sum\/3.; printf("%.*lf\\n",2,sum); printf("%.*lf",2,anverage); return 0;} ...

C语言 \/\/练习 求出三名学生 三门功课成绩 并排序 通过堆空间来实现...
int showArry(int **p,int clo,int row);void px(int **p,int clo,int row,int x,int flag);\/\/按学科x排序(0~clo-1),x=clo按三科总分排序,flag=1升序排序,flag=0降序排序 int main(){ int i,x=-1,flag=-1;int **p=(int **)malloc(sizeof(int *)*3);if(!p)return 1;...

输入三个学生的成绩,求这三个学生的总成绩和平均成绩。用c语言程序
include <stdio.h> void main(){ int a,b,c,sum;float average;printf(“please input students’ score:”);scanf(“%d,%d,%d”,&a,&b,&c);sum=a+b+c;average=sum\/3.0;printf(“sum=%d,average=%f\\n”,sum,average);}

相似回答