C语言程序设计11

问题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

Result_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

Result_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");
}

结果11_3

Result_11_3

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值