开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第16天,点击查看活动详情
计算机二级C语言程序设计题
题目:
学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:函数返回指定学号的学生数据,若没有找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回(用于字符串比较的函数是strcmp)。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 16
typedef struct
{
char num[10];
int s;
} STREC;
STREC fun(STREC *a, char *b)
{
?
}
main()
{
STREC s[N]={{"GA001",95},{"GA002",70},{"GA003",85},{"GA004",80},
{"GA005",95},{"GA006",75},{"GA007",60},{"GA008",85},
{"GA009",85},{"GA010",90},{"GA011",65},{"GA012",90},
{"GA013",75},{"GA014",60},{"GA015",65}, {"GA016",95}};
STREC str;
char m[10];
int i;
FILE *wf;
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);
str=fun(s,m);
printf("The data: ");
printf("\n%s %4d\n", str.num, str.s);
printf("\n");
wf=fopen("out.dat","w");
str=fun(s,"GA016");
fprintf(wf,"%s %4d\n", str.num, str.s);
fclose(wf);
system("pause");
}
解题思路:
首先定义一个 STREC结构的变量,学号赋值为空,成绩为-1。再循环所有学生的学号,将每一个学生的学号与给定的学生学号相比较。若有相同的,则把其数据返回给主函数;如果没有,则返回学号为空,成绩为-1的默认值给主函数。
参考答案:
typedef struct
{
char num[10];
int s;
} STREC;
STREC fun(STREC *a, char *b)
{
int i;
STREC str={"\0", -1};
for(i=0; i<N; i++)
{
if(strcmp(a[i].num,b)==0)
{
str=a[i];
break;
}
}
return str;
}
结果如下:
补充:
数组: 创建数组时数组空间为整体开辟整体释放,在内存中是连续存放,在定义时就已经确定数组大小(下标不可为0),且不可被整体赋值。在数组的创建过程中,如果进行了初始化则可不指定数组的大小,多维数组按照一维数组进行理解。 数组传参发生降维,降维成指向其(数组)内部元素类型的指针。 数组名一般情况下都指的是首元素的地址,但如果sizeof()单独出现以及&后跟数组名时表示的是整个数组