问题11_1
函数
f
u
n
fun
fun 的功能是:把形参
a
a
a 所指数组中的前半部分元素中的值与后半部分元素中的值对换。形参
n
n
n 中存放数组中数据的个数,若
n
n
n 为奇数,则中间的元素不动。
例如,若形参
a
a
a 所指数组中的数据最初排列为
:
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8.
,
9
:1, 2, 3, 4, 5, 6, 7, 8., 9
:1,2,3,4,5,6,7,8.,9 ,则按规则移动后,数据排列为
:
6
,
7
,
8
,
9
,
5
,
1
,
2
,
3
,
4
:6, 7, 8, 9, 5, 1, 2, 3, 4
:6,7,8,9,5,1,2,3,4 。形参
n
n
n 中存放
a
a
a 所指数组中数据的个数。
规定
f
u
n
fun
fun 函数中的
m
a
x
max
max 存放当前所找的最大值,
p
x
px
px 存放当前所找最大值的下标。
代码11_1
#include<stdio.h>
#define N 9
void fun(int a[], int n){
int i, t, p;
p = (n%2==0) ? n/2 : n/2+1;
for(i=0; i<n/2; i++){
t = a[i];
a[i] = a[p+i]; // 鎴?*(a+p+i)
a[p+i] = t;
}
}
void main(void){
int b[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9}, i;
printf("\nThe origninal data:\n");
for(i=0; i<N; i++)
printf("%4d", b[i]);
printf("\n");
fun(b, N);
printf("\nThe data after moving:\n");
for(i=0; i<N; i++)
printf("%4d", b[i]);
printf("\n");
}
结果11_1
问题11_2
函数
f
u
n
fun
fun的功能是:把主函数中输入的
3
3
3 个数,最大的数放在
a
a
a 中,中间的数放在
b
b
b 中,最小的数放在
c
c
c 中。
例如,若输入数为
:
55
12
34
:55\ 12\ 34
:55 12 34,则输出结果应当是
a
=
55.0
,
b
=
34.0
,
c
=
12.0
a=55.0, \ b=34.0, \ c=12.0
a=55.0, b=34.0, c=12.0 。
代码11_2
#include<stdio.h>
void fun(float *a, float *b, float *c){
float k;
if(*a<*b){
k = *a;
*a = *b;
*b = k;
}
if(*a<*c){
k = *c;
*c = *a;
*a = k;
}
if(*b<*c){
k = *b;
*b = *c;
*c = k;
}
}
void main(void){
float a, b, c;
printf("Input a b c:");
scanf("%f %f %f", &a, &b, &c);
printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n", a, b, c);
fun(&a, &b, &c);
printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n", a, b, c);
}
结果11_2
问题11_3
学生的记录由学号、成绩组成, N N N 名学生的数据已放入主函数中的结构体数组 s s s 中,请编写函数 f u n fun fun ,其功能是:把分数最高的学生数据放在 b b b 所指的数组中。注意:分数最高的学生可能不止一个,函数返回分数最高的学生人数。
代码11_3
#include<stdio.h>
#define N 16
typedef struct{
char num[10];
int s;
}STREC;
int fun(STREC *a, STREC *b){
int i, j=0, max = a[0].s;
for(i=0; i<N; i++){
if(max<a[i].s)
max = a[i].s;
}
for(i=0; i<N; i++){
if(max==a[i].s)
b[j++] = a[i];
}
return j;
}
void main(void){
STREC s[N] = {{"GA005", 85}, {"GA003, 76"}, {"GA002", 69},
{"GA004", 85}, {"GA001", 91}, {"GA007", 72}, {"GA008", 64},
{"GA006", 87}, {"GA015", 85}, {"GA014", 91}, {"GA011", 66},
{"GA017", 64}, {"GA018", 64}, {"GA016", 72}};
STREC h[N];
int i, n;
n = fun(s, h);
printf("The %d highest score:\n", n);
for(i=0; i<n; i++)
printf("%s %4d\n", h[i].num, h[i].s);
printf("\n");
}