计算机二级C语言程序设计题

243 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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;
}

结果如下:

5.png

补充:

数组: 创建数组时数组空间为整体开辟整体释放,在内存中是连续存放,在定义时就已经确定数组大小(下标不可为0),且不可被整体赋值。在数组的创建过程中,如果进行了初始化则可不指定数组的大小,多维数组按照一维数组进行理解。 数组传参发生降维,降维成指向其(数组)内部元素类型的指针。 数组名一般情况下都指的是首元素的地址,但如果sizeof()单独出现以及&后跟数组名时表示的是整个数组