谁能帮我讲解一下这道c语言题目

学生的记录由学号和成绩组成,N名学生的数据已存入结构体s中,请编写函数fun,它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没有找到指定学号,在结构... 学生的记录由学号和成绩组成,N名学生的数据已存入结构体s中,请编写函数fun,它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没有找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回(用于字符串比较的函数是strcmp).
#include <stdio.h>
#include <string.h>
#define N 16

typedef struct
{
char num[10];
int s;
} STREC;
STREC fun ( STREC *a, char *b )
{
int i;
STREC h;
for (i=0 ; i<N ; i++)
if ( strcmp(a[i].num, b)==0)
{
h =a[i] ;
break;
}
else
{
strcpy(h.num,"");
h.s=-1;
}
return h;

}
main ()
{
STREC s[N]= {{"GA005",85}, {"GA003",76}, {"GA002",69}, {"GA004",85},
{"GA001",91}, {"GA007",72}, {"GA008",64}, {"GA006",87},
{"GA015",85}, {"GA013",91}, {"GA012",64}, {"GA014",91},
{"GA011",77}, {"GA017",64}, {"GA018",64}, {"GA016",72}};
STREC h;
char m[10],sa[200];
int i; FILE *out,*in;
printf ( "The original data :\n" );
for (i=0; i<N; i++)
{
if ( i%4==0 ) printf ("\n");
printf ("%s %3d", s[i]. num, s[i]. s);
}
printf ("\n\nEnter the number : ");
gets ( m );
h=fun ( s, m );
printf ( " The data : " );
printf ( "\n%s %4d\n", h . num, h . s );
printf ( "\n" );
out=fopen ("out.dat", "w");
in=fopen("in.dat","r");
fscanf(in,"%s",sa);
h=fun ( s, "GA013" );
fprintf (out, "%s %4d\n", h . num, h . s);
fclose (out );
fclose(in);
}

就从STREC fun ( STREC *a, char *b )到 return h;这一大段解释
展开
 我来答
百度网友bd4cf2a31
2011-08-24 · TA获得超过332个赞
知道小有建树答主
回答量:333
采纳率:100%
帮助的人:342万
展开全部
我们一句一句来:
STREC fun ( STREC *a, char *b ) 它的返回值是STREC类型的结构体,此函数它有两个参数:一个是STREC类型的指针和一个是char类型的指针
STREC h; 定义了一STREC类型结构体变量
for (i=0 ; i<N ; i++) N表示要查找比较的结构体个数
if ( strcmp(a[i].num, b)==0) a[i].num,表示a[i]这个结构体的num项,整句的意思就是,当a[i]结构体对应的num项与字符串指针b指向的字符串相等时,将结构体a【i】赋给结构体变量h;此时退出循环,换回结构体h。
当没有找到与b指向的字符串相等的a[i].num时,将h.num项置空,h.s置-1,退出循环,返回结构体变量h;
686nvns001
2011-08-25 · TA获得超过248个赞
知道答主
回答量:516
采纳率:0%
帮助的人:299万
展开全部
这个程序是对输入字符串的字母统计作用,首先你得明白:
1、switch中,符合哪个case条件,则直接跳过前面的case直接执行符合的case。
2、当case后没break时,其下面的语句将一一好无条件的执行。
现在来分析字母:
A:跳到case ‘A’;然后一次执行后面语句。V0=1(default),V1=1(case ‘U’),V2=1(default);
D:跳到default,则,V0=2,V1=1,V2=2
同理你可以一一处理后面的字母了。
最后应该是:V0=13,V1=4,V2=12(因为是do语句,对《CR》判断时先进行了加1计算,所以结果V0不是12而是13,V2不是11而是12,V1不是3而是4.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
q857968555
2011-08-24 · 超过16用户采纳过TA的回答
知道答主
回答量:137
采纳率:0%
帮助的人:67.4万
展开全部
char fun ( int *a, char *b )
{
int i;
char h;
for (i=0 ; i<N ; i++)
if ( strcmp(a[i].num, b)==0)
{
h =a[i] ;
break;
}
else
{
strcpy(h.num,"");
h.s=-1;
}
return h;
fun函数的功能就是这样:
if ( strcmp(a[i].num, b)==0)
{
h =a[i] ;
break;
}
这句话就是如果找到学生学号,就把学生信息赋值给字符串里

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式