C语言程序设计之结构体篇2

问题2_1的

        函数 f u n fun fun 的功能是: 对 N N N 名学生的学习成绩,按从高到低的顺序找出前 m m m m < 10 m<10 m<10)名学生来,并将这些学生的数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数的数值返回。

代码2_1

#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<malloc.h>

#define N 10

typedef struct ss{
	char num[10];
	int s;
}STU;

STU *fun(STU a[], int m){
	STU b[N], *t;
	int i, j, k;
	// 按 STU 的长度分配 m 块连续区域,并把首地址赋予指针变量 t 
	t = calloc(m, sizeof(STU));
	for(i=0; i<N; i++){
		b[i] = a[i];
	}
	for(k=0; k<m; k++){
		for(i=j=0; i<N; i++){
			if(b[i].s>b[j].s)
				j = i;
		}
		t[k] = b[j];
		t[k].s = b[j].s;
		b[j].s = 0;
	}
	return t;
}

outresult(STU a[], FILE *pf){
	int i;
	for(i=0; i<N; i++)
		fprintf(pf, "No = %s Mark = %d\n", a[i].num, a[i].s);
	fprintf(pf, "\n\n");
}

void main(void){
	STU a[N] = {{"A01", 81}, {"A02", 89}, {"A03", 66},
			    {"A04", 87}, {"A05", 77}, {"A06", 90},
				{"A07", 79}, {"A08", 61}, {"A09", 80},
				{"A01", 71}};
	STU *pOrder;
	int i, m;
	system("CLS");
	printf("****** The Result *****\n");
	outresult(a, stdout);
	printf("\nGive the number of the students who have better score:");
	scanf("%d", &m);
	while(m>10){
		printf("\nGive the number of the students who have better score:");
		scanf("%d", &m);
	}
	pOrder = fun(a, m);
	printf("***** The Result *****\n");
	printf("The top:\n");
	for(i=0; i<m; i++){
		printf("%s %d\n", pOrder[i].num, pOrder[i].s);
	}
	free(pOrder);
}

结果2_1

Result_2_1

问题1_2

        学生记录由学号和成绩组成, N N N 名学生的数据已放入主函数中的结构体数组中,请编写函数 f u n fun fun的功能是:把分数最低的学生数据放入 b b b 所指的数组中。注意:分数最低的学生可能不止一个,函数返回分数最低的学生人数。

代码1_2

#include<stdio.h>

#define N 16

typedef struct{
	char num[10];
	int s;
}STREC;

int fun(STREC *a, STREC *b){
	int i, j=0, n=0, min;
	min = a[0].s;
	for(i=0; i<N; i++){
		if(a[i].s<min)
			min = a[i].s;
	}
	for(i=0; i<N; i++){
		if(a[i].s==min){
			*(b+j) = a[i];
			j++;
			n++;
		}
	}
	return n;
}

void main(void){
	STREC s[N] = {{"GA05", 85}, {"GA03", 76}, {"GA02", 69}, 
				  {"GA04", 85}, {"GA01", 91}, {"GA07", 72}, 
				  {"GA08", 64}, {"GA06", 87}, {"GA015", 85}, 
				  {"GA013", 91}, {"GA0", 64}, {"GA014", 91}, 
				  {"GA011", 91}, {"GA017", 64}, {"GA0", 64}, 
				  {"GA016", 72} };
	STREC h[N];
	int i, n;
	n = fun(s, h);
	printf("The %d lowest score:\n", n);
	for(i=0; i<n; i++)
		printf("%s %4d\n", h[i].num, h[i].s);
	printf("\n");
}

结果1_2

Struct_1_2

问题1_3

         学生记录由学号和成绩组成, N N N 名学生的数据已放入主函数中的结构体数组 s s s 中,请编写函数 f u n fun fun的功能是:按分数降序排列学生的记录,高分在前,低分在后。

代码1_3


结果1_3

Result_1_3

问题1_4

         学生记录由学号和成绩组成, N N N 名学生的数据已放入主函数中的结构体数组 s s s 中,请编写函数 f u n fun fun的功能是:把高于等于平均分的学生数据放在 b b b 所指的数组中,高于等于平均分的学生人数通过形参 n n n 返回,平均值通过函数值返回。

代码1_4

#include<stdio.h>

#define N 16

typedef struct{
	char num[10];
	float s;
}STREC;

double fun(STREC *a, STREC *b, int *n){
	int i;
	double av = 0.0;
	*n = 0;
	for(i=0; i<N; i++)
		av += a[i].s;
	av = av/N;
	for(i=0; i<N; i++){
		if(a[i].s>=av){
			b[*n] = a[i];
			*n = *n+1; 
		}
	}
	return av;
}


void main(void){
	STREC s[N] = {{"GA05", 85}, {"GA03", 76}, {"GA02", 69}, 
				  {"GA04", 85}, {"GA01", 91}, {"GA07", 72}, 
				  {"GA08", 64}, {"GA06", 87}, {"GA015", 85}, 
				  {"GA013", 91}, {"GA0", 64}, {"GA014", 91}, 
				  {"GA011", 91}, {"GA017", 64}, {"GA0", 64}, 
				  {"GA016", 72} };
	STREC h[N];
	int i, n;
	double ave;
	ave = fun(s, h, &n);
	printf("The %d studdent data which is higher than %7.3f:\n", n, ave);
	for(i=0; i<n; i++){
		if(i%4==0)
			printf("\n");
		printf("%s %4.1f \n", h[i].num, h[i].s);
	}
	printf("\n");
}

结果1_4

Result_1_4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值