C<6.1>函数习题(函数内测整形数组大小,递归

 

目录

 1,数组比较

2,勒让德多项式

3,查询数组(sizeof问题


 1,数组比较

1. 编写函数实现比较两个长度为 n(
n 可变)的数组大小。比较逻
辑如下:
假设 a 和 b 为 n 个元素的整型数组,比较两个数组对应元素的
大小,用变量 m 和 n 记录 a[i]>b[i]和 a[i]<b[i]的个数。如果 m>n,
则数组 a>b;如果 m<n,则数组 a<b;如果 m==n,则数组 a==b。

 

#include<stdio.h>
int main()
{
	int value;
	int compare(int* arraya, int* arrayb, int n);
	int array1[10] = { 1,2,3,4,5,6,7,8,9,0 };
	int array2[10] = { 1,1,2,3,5,8,3,1,4,5 };
	value = compare(array1, array2, 10);
	if (value == 0)
		printf("两者一样大");
	else
		(value == 1) ? printf("前者大") : printf("后者大");
	return 0;
}
int compare(int* arraya, int* arrayb, int n)
{
	int x=0, y=0;//m:数组a大的次数;n数组b大的次数;
	for (int i = 0; i < n; i++)
	{
		if ((*(arraya + i)) > (*(arrayb + i)))
			x++;
		if ((*(arraya + i)) < (*(arrayb + i)))
			y++;
	}
	if (x < y) { return -1; }
	if (x > y) { return 1; }
	if (x == y) { return 0; }
}

2,勒让德多项式

 

编写函数实现计算 x 的 n 阶勒让德多项式的值。x 的 n 阶勒让
德多项式的递归公式如下:

 

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	double lrd(double x, int n);
	int n;
	double x;
	scanf("%lf", &x);
	scanf("%d", &n);
	printf("\n答案是%lf",lrd(x, n));
	return 0;
}
double lrd(double x, int n)
{
	double y,z;
	if (n == 0) { return 1; }
	if (n == 1) { return x; }
	if (n != 0 && n != 1)
	{
		y = lrd(x,n - 1);
		z = lrd(x, n - 2);
		return ((2 * n - 1) * x * y - (2 * n - 1) * x * z) / n;
	}
}

3,查询数组

3.编写函数,实现从数组中查找出具有给定值 x 的元素,若查找成
功则返回该元素的下标位置,否则查找失败返回-1。
比如:一个数组有 10 个元素,分别为:42, 55, 73, 28, 48, 66, 30, 65,
94, 72。若 x 为 28,则返回 3,若 x 为 100,则返回-1
#define _CRT_SECURE_NO_WARNINGS
#define ARR_LENGTH(arr)    sizeof(arr)/sizeof(arr[0])  
#include<stdio.h>

void main()
{
	int retrieve(int* array, int x, int length);
	
	int sample[] = { 42, 55, 73, 28, 48, 66, 30, 65, 94, 72 };//数组
	int x,len1;

	len1=ARR_LENGTH(sample);
	scanf("%d", &x);
	printf("%d", retrieve(sample, x,len1));
}
int retrieve(int* array,int x, int length)
{
	//length = (sizeof(array) / sizeof(array[0]));注意不能用这个
	for (int i = 0; i < length; i++)
	{
		if (x == *(array + i))
		{
			return i;
		}
	}
	return -1;
}

 注意:当数组以指针传递的时候,其本身会变成(32位计算机:4个字节;64位计算机:8个字节)

所以常用的sizeof测数组大小函数内不再适用

ps:这里我只好用了宏定义,当然直接数组大小直接传进来也可以

网上看到大佬通过这个方法传递数组,请大家参考观摩

template <size_t N>
long calc(long (&array)[N]) // 利用模板传递参数 array是数组的引用
{
    long res = 0L;
    
    for (size_t i = 0;i < N;i ++) {
        res += array[i];
    }
    
    return res;
}

int main()
{
    long longarr[] = {1, 23, 4, 45, 46, 57,};
    
    long sum = calc(longarr);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值