目录
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); }