C语言编程题,三个学生,两门课程,要求输入他们的学号,姓名和两门成绩。最后输出其中平均分最高的学生

输出此学生的姓名,学号,和总分。下面是我做的程序,编译连接都么有错误,但是执行结果不对,求高人指点
struct student
{
int num[10];
char name[10];
float sco[2];
float aver;
float sum;
};
main()
{
struct student stu[3];
int i,j;
float max,sum,aver;
for(i=0;i<3;i++)
{
scanf("%d%s",&stu[i].num,stu[i].name);
sum=0;
for(j=0;j<2;j++)
scanf("%f",&stu[i].sco[j]);
sum=sum+stu[i].sco[j];
stu[i].aver=sum/2;
}
max=stu[0].aver;
for(i=0;i<3;i++)
if(stu[i].aver>max) max=stu[i].aver;
printf("%d%s",stu[i].num,stu[i].name);
printf("%f",stu[i].sum);
}

你的程序有两个问题:
一个是学号的储存,一个是学生总分的储存,学号只是一个号码,并不能以数组的形式储存,而你的程序中用来储存学号的是int name[10],这是不正确的。
另一个,你虽然在结构中定义了sum来储存总分,但并没有在主函数的语句中给stu[i].sum进行任何形式的赋值,且计算sum总分的for循环少了括号。当for循环执行的语句超过或等于两句时,需要用括号括起来。
修改后如下:
struct student
{
int num; //将num[10]改成num来储存学号,因为学号一般只是一个数字
char name[10];
float sco[2];
float aver;
float sum;
};
main()
{
struct student stu[3];
int i,j;
float max,sum,aver;
for(i=0;i<3;i++)
{
scanf("%d%s",&stu[i].num,stu[i].name);
sum=0;
for(j=0;j<2;j++)
{ //此处增加了花括号
scanf("%f",&stu[i].sco[j]);
sum=sum+stu[i].sco[j];
}
stu[i].sum=sum; //此处将总分存入了结构中存总分的变量中
stu[i].aver=sum/2;
}
max=stu[0].aver;
for(i=0;i<3;i++)
if(stu[i].aver>max) max=stu[i].aver;
printf("%d%s",stu[i].num,stu[i].name);
printf("%f",stu[i].sum);
}追问

不好意思啊,请问执行的时候,如果输入三位同学学号为201111、201122、201133,姓名为wang、li、zhang,成绩为22 33、11 22、33 44,应该怎么输入啊?我修改之后,执行还是乱码,可能是我输入不对吧?

追答

因为改正后储存学号是用int型的num来存,而你输入的已经大于int所能存储的最大范围32767
所以只需要将struct中的int num改成char num【20】即可,同时将相应的输入输出格式改变即可,改正后代码如下:
struct student
{
char num[20]; //将num[10]改成num[20]来储存学号,因为学号一般不超过19位
char name[10];
float sco[2];
float aver;
float sum;
};
main()
{
struct student stu[3];
int i,j;
float max,sum,aver;
for(i=0;imax) max=stu[i].aver;
printf("%s%s",stu[i].num,stu[i].name); 将%d改为%s,因为已经由字符型数组来储存学号了。

printf("%f",stu[i].sum);
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-01-12
#include<iostream>
using namespace std;

struct Student
{
int numb;//学号
char name[20];//姓名
double score[2];//两科成绩
};

int main()
{
Student *p=NULL;
p=new Student[3];//分配空间
cout<<"输入3个学生的信息\n";
cout<<"输入顺序依次为:学号 姓名 科目一成绩 科目二成绩\n";
for(int i=0;i<3;i++)
{
cin>>p[i].numb>>p[i].name>>p[i].score[0]>>p[i].score[1];
}
for(int x=0;x<3;x++)//按平均分冒泡排序
{
for(int y=x+1;y<3;y++)
{
if((p[x].score[0]+p[x].score[1])/2
<(p[y].score[0]+p[y].score[1])/2)
swap(p[x],p[y]);
}
}
cout<<"姓名"<<p[0].name<<"学号"<<p[0].numb<<"总分"<<p[0].score[0]+p[0].score[1]<<endl;
delete []p;//释放空间
p=NULL;
return 0;
}
第2个回答  2012-01-12
结构体的学号定义错误需要用char或者不要数组直接int
for(j=0;j<2;j++)
{ scanf("%f",&stu[i].sco[j]);
sum=sum+stu[i].sco[j];
}是一个整体后面再加stu[i].sum = sum;追问

不好意思啊,请问执行的时候,如果输入三位同学学号为201111、201122、201133,姓名为wang、li、zhang,成绩为22 33、11 22、33 44,应该怎么输入啊?我修改之后,执行还是乱码,可能是我输入不对吧?

第3个回答  2012-01-12
struct student
{
int num[10];
char name[10];
float sco[2];
float aver;
float sum;
};
结构体错了,定义学号不需要数组,直接int num;
第4个回答  2012-01-12
/*
* =====================================================================================
*
* Filename: 1.c
*
* Description:
*
* Version: 1.0
* Created: 01/12/2012 04:41:47 PM
* Revision: none
* Compiler: gcc
*
* Author: zjhxmjl (), zjhxmjl@gmail.com
* MY_SITE: http://www.92linux.tk
*
* =====================================================================================
*/
#include <stdio.h>
struct student
{
int num[10];
char name[10];
float sco[2];
float aver;
float sum;
};
int main()
{
struct student stu[3];
int i,j;
float max,sum;//,aver; /* 错误3,aver未使用 */
for(i=0;i<3;i++)
{
scanf("%d%s",stu[i].num,stu[i].name); /* 错误1 */
sum=0;
for(j=0;j<2;j++)
scanf("%f",&stu[i].sco[j]);
sum=sum+stu[i].sco[j];
stu[i].aver=sum/2;
}
max=stu[0].aver;
for(i=0;i<3;i++)
if(stu[i].aver>max) max=stu[i].aver;
printf("%d%s",*stu[i].num,stu[i].name); /* 错误2 */
printf("%f",stu[i].sum);
return 0;
}

...姓名和两门成绩。最后输出其中平均分最高的学生
int num; \/\/将num[10]改成num来储存学号,因为学号一般只是一个数字 char name[10];float sco[2];float aver;float sum;};main(){ struct student stu[3];int i,j;float max,sum,aver;for(i=0;i<3;i++){ scanf("%d%s",&stu[i].num,stu[i].name);sum=0;for(j=0;j<2;...

求C语言编程实现由键盘输入3个学生的信息(包括学号、姓名、成绩)程序运 ...
Input(s);for(i=0;i<3;++i)a[i]=&s[i];Sort(a);for(i=0;i<3;++i)printf("%d %s %.2f\\n",a[i]->num,a[i]->name,a[i]->score);return 0;}

在c语言中用调用函数求三个同学三科的总成绩,怎么编程
\/\/int num=0; \/*求总分*\/ float Sums(struct Student stu) { return stu.Mark1+stu.Mark2+stu.Mark3; } \/*输入学生信息*\/ int Student_Input(){ int num=0; while(1){ \/\/printf("请输入学号:"); students[num].ID=num+1; \/\/可以自行将学号改为手...

c语言,输入3个同学的姓名 学号 和3门课的成绩 ,然后打印出平均值和总分...
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->num,pb->name,&pb->score1,&pb->score2,&pb->score3);} void output(struct...

编写C语言程序,按提示输入学号,3门功课名称。输出学号,3门功课成绩...
int main(){ char str[20];\/\/学号 char a[20],b[20],c[20];\/\/功课名称 int x,y,z;\/\/功课分数 printf("请输入你的学号:\\n");while(scanf("%s",str)!=EOF)\/\/输入学号 { getchar();scanf("%s%d%s%d%s%d",a,&x,b,&y,c,&z);\/\/分别输入三门课的名称和分数 printf("学号...

编写一个c语言程序,实现录入学生学号和姓名信息的功能
include<stdio.h> include<stdlib.h> intmain(void){ chars[10];\/\/姓名 intnum;\/\/学号 printf("请输入姓名:\\n");gets(s);printf("请输学号:\\n");scanf("%d",&num);printf("姓名是:%s\\n学号是:%d\\n",s,num);system("pause");return0;} ...

用C语言输出学生信息,输出学生本人的学号、姓名、年龄、班级等信息...
char name[8];int clas[3];int old[3];} stu[5];void main(){int i;for(i=0;i<5;i++){ printf("\\n please input No. %d score:\\n",i);printf("stuNo:");scanf("%s",stu[i].num);printf("name:");scanf("%s",stu[i].name);printf("class:");scanf("%s",stu[i]...

C语言 要求通过键盘输入三个学生信息(包括姓名、学号、班级),并输出这...
_class[20];};int main(){ struct st s[11];\/\/定义结构体数组;for(int i=0;i<3;i++)scanf("%s%d%s",s[i].name,&s[i].id,s[i]._class);\/\/输入 for(int i=0;i<3;i++)printf("姓名:%s 学号:%d 班级:%s\\n",s[i].name,s[i].id,s[i]._class);\/\/输出 } ...

c语言:结构体:有3个学生,每个学生的数据包括学号、姓名、3门课的成
};int main(){ struct student stu[3];int i,max;printf("请输入三位学生的学号、姓名、3门课的成绩(以空格分开输入):\\n");for(i=0;i<3;i++){ printf("请输入第%d个学生的信息:",i+1);scanf("%s%s%f%f%f",stu[i].number,stu[i].name,&stu[i].score[0],&stu[i].score[...

c语言输入两个学生的姓名、学号、英语、数学、计算机成绩
float score[3][2]={0};printf("请输入第1个学生的姓名: \\n");gets(name[0]);printf("请输入第1个学生的学号: \\n");scanf("%d",&ID[0]);printf("请输入第1个学生的英语成绩: \\n");scanf("%f",&score[0][0]);printf("请输入第1个学生的数学成绩: \\n");scanf("%f",&...

相似回答