目录
3,查询数组(sizeof问题
1. 编写函数实现比较两个长度为 n(n 可变)的数组大小。比较逻辑如下:假设 a 和 b 为 n 个元素的整型数组,比较两个数组对应元素的大小,用变量 m 和 n 记录 a[i]>b[i]和 a[i]n,则数组 a>b;如果 m
- #include
- 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; }
- }
编写函数实现计算 x 的 n 阶勒让德多项式的值。x 的 n 阶勒让德多项式的递归公式如下:
- #define _CRT_SECURE_NO_WARNINGS
- #include
- 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.编写函数,实现从数组中查找出具有给定值 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
-
- 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);
- }