📄 subject_40902.htm
字号:
<p>
序号:40902 发表者:阳光游子 发表日期:2003-05-22 13:23:29
<br>主题:一个结构体的初级问题~
<br>内容:前一段刚学了结构体,近来做一个题,学的不精,好些问题,望前辈们指点指点~<BR>要求:有4名学生,每个学生数据包括姓名、学号、成绩,要求输入后找出成绩最高的学生的姓名和成绩……<BR>struct stu<BR>{<BR> char name[20];<BR> long num;<BR> float score;<BR>}<BR>float max4(float x,float y,float z,float d)<BR>{<BR> float max=x;<BR> if(d>z)<BR> if(d>y)<BR> if(d>x)<BR> max=d;<BR> else if(z>y)<BR> if(z>x)<BR> max=z;<BR> else if(y>x)<BR> max=y;<BR> reture(max);<BR>}<BR>main()<BR>{<BR> struct stu student[4],*p;<BR> int i;<BR> char numstr[20];<BR> float max4(float x,float y,float z,float d)<BR> for(i=0,p=student;p<student+4;p++,i++)<BR> {<BR> printf("\nplease enter all data of student[%d]:\n",i);l<BR> gets(student[i].name);<BR> gets(numstr); p->num=atol(numstr);<BR> gets(numstr); p->score=atof(numstr);<BR> <BR> }<BR> printf("这里该怎么弄?")<BR> <BR>}<BR>我写的和这个差不多,不过原来没用指针,输出是用puts分别输出名字,学号和成绩的,可是只能输出分数,名字和学号是乱码,改用指针后,就只能输出成绩了……我知道上面的程序错误的地方很多,而且好象调用也不对,请大虾根据我的成绩指出我的不足吧,谢谢!!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:晓哥 回复日期:2003-05-22 16:22:31
<br>内容:<BR>atof(numstr) 的返回值是double所以p->score可能出问题<BR>另外main函数最好有个返回值.把您的几个if合并一下让程序长漂亮些 <BR>我觉得atof没sscanf好用.<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:砖头 回复日期:2003-05-23 16:12:56
<br>内容:朋友,你出的问题就是出在你返回是只返回了,成绩而没有返回学生的其他信息.所以你输出是肯定只能输出成绩而不能输出其他了.<BR><BR><BR>#include<iostream.h><BR>#include<stdlib.h><BR>struct student{<BR> char *name;<BR> long int num;<BR> float score;<BR>};<BR>student a[4];<BR>void main()<BR>{<BR> int i;<BR> for(i=0;i<4;i++)//这里输入学生的数据<BR> {<BR> cout<<"请输入学生的名字,学号,成绩"<<endl;<BR> cin>>a[i].name>>a[i].num>>a[i].score;<BR> }<BR> float max=a[0].score;<BR> for(i=1;i<4;i++)//比较出哪个学生的成绩最高;<BR> {<BR> if(max<a[i].score)<BR> max=a[i].score;<BR> else<BR> continue;<BR> }<BR> for(i=1;i<4;i++)//搜索并输入成绩最高的学生的信息<BR> {<BR> if(a[i].score==max)<BR> cout<<"成绩最高的学生的姓名是:"<<a[i].name<<" "<BR> <<"学号是:"<<a[i].num<<"成绩是:"<<a[i].score<<endl;<BR> else <BR> continue;<BR> }<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:伊洛沙鼠 回复日期:2003-05-23 21:09:03
<br>内容:for(i=1;i<4;i++)//搜索并输入成绩最高的学生的信息<BR> {<BR> if(a[i].score==max)<BR> cout<<"成绩最高的学生的姓名是:"<<a[i].name<<" "<BR> <<"学号是:"<<a[i].num<<"成绩是:"<<a[i].score<<endl;<BR> else <BR> continue;<BR> }<BR>这是楼上的最后一个for<BR>我觉得可以这样写:<BR>cout<<"成绩最高的学生的姓名是:"<<a[i].name<<" "<BR> <<"学号是:"<<a[i].num<BR> <<"成绩是:"<<a[i].score<<endl;<BR>而不用写for循环了,因为在上面的一个循环已经找到这个学生的位置i了。<BR>不知道我说的对吗?请指教。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:砖头 回复日期:2003-05-29 11:14:03
<br>内容:伊洛沙鼠,朋友,你说最后一个for循环可以不要,我认为不对,因为在a[i]中,不比较到最后一个是不知道谁的成绩最好的.而这样就改变了i的数值,所以最后一个for是不可以少的!<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:伊洛沙鼠 回复日期:2003-06-06 21:05:28
<br>内容:哈哈,对了,我没想到这个问题,最后的 i 值是 4,已经越界了,不好意思,我也是刚学不久的……不过我又改动了一下,可以将最后一个 for 省略掉,而且调试是对的。我们可以记录 有 max 值的学生的位置。如下:<BR> int j;<BR> for(i=1;i<4; i++)<BR> {<BR> if(max < a[i].score){<BR> max = a[i].score;<BR> j=i;<BR> }<BR> }<BR> cout << "成绩最高的学生的姓名是:" << a[j].name << " "<BR> << "学号是:" << a[j].num<BR> << "成绩是:" << a[j].score << endl;<BR>我想这样总可以节省一点时间了,不知错否?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:砖头 回复日期:2003-06-12 10:30:42
<br>内容:呵呵,有道理!<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -