C语言程序设计6

问题6_1

        函数 f u n fun fun 的功能是:把形参 a a a 所指数组中最小值放在元素 a [ 0 ] a[0] a[0] 中,接着把 a a a 所指数组中最大值放在元素 a [ 1 ] a[1] a[1] 中;再把 a a a 所指数组中次小值放在元素 a [ 2 ] a[2] a[2] 中,把 a a a 所指数组中次大值放在元素 a [ 3 ] a[3] a[3] ,以此类推。
        例如,若形参 a a a 所指数组中的数据最初排列为 : 9 , 1 , 4 , 2 , 3 , 6 , 5 , 8 , 7 :9, 1, 4, 2, 3, 6, 5, 8, 7 9,1,4,2,3,6,5,8,7 ,则按规则移动后,数据排列为 : 1 , 9 , 2 , 8 , 3 , 7 , 4 , 6 , 5 :1, 9, 2, 8, 3, 7, 4, 6, 5 1,9,2,8,3,7,4,6,5 。形参 n n n 中存放 a a a 所指数组中数据的个数。
        规定 f u n fun fun 函数中的 m a x max max 存放当前所找的最大值, p x px px 存放当前所找最大值的下标。
        **思路:**求最大值和最小值,一般都是先假设一个元素最大或最小,然后通过 i f if if 条件语句将该元素和其它元素进行比较操作来完成。

代码6_1

#include<stdio.h>

#define N 9

void fun(int a[], int n){
	int i, j, max, min, px, pn, t;
	for(i=0; i<n-1; i+=2){
		max = min = a[i];
		px = pn = i;
		for(j=i+1; j<n; j++){
			if(max<a[j]){
				max = a[j];
				px = j;
			}
			if(min>a[j]){
				min = a[j];
				pn = j;
			}
		}
		if(pn!=i){
			t = a[i];
			a[i] = min;
			a[pn] = t;
			if(px==i)
				px = pn;
		}
		if(px!=i+1){
			t = a[i+1];
			a[i+1] = max;
			a[px] = t;
		}
	}
}

void main(void){
	int b[N] = {9, 1, 4, 2, 3, 6, 5, 8, 7}, i;
	printf("\n The orignal data:\n");
	for(i=0; i<N; i++){
		printf("%4d", b[i]);
	}
	printf("\n");
	fun(b, N);
	printf("\n The data after moving:\n");
	for(i=0; i<N; i++){
		printf("%4d", b[i]);
	}
	printf("\n");
}

结果6_1

运行结果

问题6_2

        函数 f u n fun fun的功能是:用递归算法计算斐波那契数列中第 n n n 项的值。 从第 1 1 1 项起,斐波那契数列为 : 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , ⋅ ⋅ ⋅ :1, 1, 2, 3, 5, 8, 13, 21, ··· 1,1,2,3,5,8,13,21,⋅⋅⋅
        例如,若给 n = 5 n=5 n=5,则该项的斐波那契数值为 13 13 13

代码6_2

#include<stdio.h>

long fun(int g){
	switch(g){
		case 0: return 0;
		case 1: 
		case 2: return 1;
	}
	return (fun(g-1) + fun(g-2));
}

void main(){
	long fib;
	int n;
	printf("Input n:");
	scanf("%d", &n);
	printf("n = %d\n", n);
	fib = fun(n);
	printf("fib = %d\n\n", fib);
}

结果6_2

运行结果

问题6_3

         某学生的记录由学号、 8 8 8 门成绩和平均分组成,学号和 8 8 8 门成绩已在主函数中给出,清编写函数 f u n fun fun ,其功能是:求出该学生的平均分,并放入记录的 a v e ave ave 成员中。
        例如,学生的成绩是 : 85.5 , 76 , 69.5 , 85 , 91 , 72 , 64.5 , 87.5 :85.5, 76, 69.5,85, 91, 72, 64.5, 87.5 85.57669.585917264.587.5,则他的平均分应该为 78.875 78.875 78.875

代码6_3

#include<stdio.h>

#define N 8

typedef struct{
	char num[10];
	double s[N];
	double ave;
}STREC;

void fun(STREC* a){
	int i;
	a->ave = 0.0;
	for(i=0; i<N; i++){
		a->ave = a->ave + a->s[i];
	}
	a->ave = a->ave/N;
}

void main(void){
	STREC s = {"GA005 ", 85.5, 76, 69.5, 85, 91, 72, 64.5, 87.5};
	int i;
	fun(&s);
	printf("The %s's student data:\n", s.num);
	for(i=0; i<N; i++){
		printf("%4.lf\n", s.s[i]);
	}	
	printf("\nave = %7.3f\n", s.ave);
}

         : : 定义了一个指针类型的形参 S T R E C ∗ a STREC *a STRECa ,此时,引用成员的方式可以使用指向运算符,即 a − > a v e a->ave a>ave a − > s [ i ] a->s[i] a>s[i], 也可以使用 ( ∗ a ) . a v e (*a).ave (a).ave ( ∗ a ) . s [ i ] (*a).s[i] (a).s[i]

结果6_3

运行结果

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值