问题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
问题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
问题1_3
学生记录由学号和成绩组成, N N N 名学生的数据已放入主函数中的结构体数组 s s s 中,请编写函数 f u n fun fun的功能是:按分数降序排列学生的记录,高分在前,低分在后。
代码1_3
结果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");
}