gpt4 book ai didi

C从两个数组中获取中间索引,变量初始化和三元运算符

转载 作者:行者123 更新时间:2023-12-04 03:27:55 24 4
gpt4 key购买 nike

我在女巫中遇到了这个 C 问题,我尝试从两个数组中获取中间索引而且我不想手动分配中间索引变量。我想写一个算法,如果数组有偶数个元素或没有,自动选择中间索引

#include <stdio.h>

int middle(int array1[], int array2[], int array_s1, int array_s2)
{
int middle_index1, middle_index2;

array_s1 % 2 == 0 ? middle_index1 = array_s1 / 2 : (array_s1 / 2) - 1;
array_s2 % 2 == 0 ? middle_index2 = array_s2 / 2 : (array_s2 / 2) - 1;


printf("Elements in the original arrays:\n");

for (int i = 0 ; i < array_s1 ; i ++)
{
printf("%i, ", array1[i]);
}

printf("\n");

for (int i = 0 ; i < array_s2 ; i ++)
{
printf("%i, ", array2[i]);
}

printf("\nMiddle indexes = %i , %i", middle_index1, middle_index2);

int new_array[] = {array1[middle_index1], array2[middle_index2]};
int array_s3 = sizeof(new_array) / sizeof(new_array[0]);

printf("\nElements in the new array:\n");

for (int i = 0 ; i < array_s3 ; i++)
{
printf("%i, ", new_array[i]);
}
}

int main(void)
{

int array1[] = {10, 20, -30, -40, 30};
int array2[] = {120, 20 , 30, 40, 30};
int array_s1 = sizeof(array1) / sizeof(array1[0]);
int array_s2 = sizeof(array2) / sizeof(array2[0]);

middle(array1, array2, array_s1, array_s2);
}

但是这两行被评估为0

    array_s1 % 2 == 0 ?  middle_index1 = array_s1 / 2 : (array_s1 / 2) - 1;
array_s2 % 2 == 0 ? middle_index2 = array_s2 / 2 : (array_s2 / 2) - 1;

为什么我做错了?可以在变量初始化中使用三元运算符吗?

代码输出:

Elements in the original arrays:
10, 20, -30, -40, 30,
120, 20, 30, 40, 30,
Middle indexes = 0 , 0
Elements in the new array:
10, 120,

最佳答案

这些带有条件运算符的语句

array_s1 % 2 == 0 ?  middle_index1 = array_s1 / 2 : (array_s1 / 2) - 1;
array_s2 % 2 == 0 ? middle_index2 = array_s2 / 2 : (array_s2 / 2) - 1;

可以等价地重写为

( array_s1 % 2 == 0 ) ? ( middle_index1 = array_s1 / 2 ) : ( (array_s1 / 2) - 1 );
( array_s2 % 2 == 0 ) ? ( middle_index2 = array_s2 / 2 ) : ( (array_s2 / 2) - 1 );

因此,如果表达式 ( array_s1 % 2 == 0 )( array_s2 % 2 == 0 ) 的计算结果为逻辑 false,则语句无效.您需要的是以下内容

middle_index1 = array_s1 % 2 == 0 ?  array_s1 / 2 : (array_s1 / 2) - 1;
middle_index2 = array_s2 % 2 == 0 ? array_s2 / 2 : (array_s2 / 2) - 1;

注意只写逻辑更清晰

middle_index1 = array_s1 / 2;
middle_index2 = array_s2 / 2;

也就是说,当数组中的元素个数为奇数时,减 1 没有多大意义。

例如,如果一个数组只包含 2 个元素,那么中间索引将等于 1。另一方面,如果一个数组包含 3 个元素,那么中间索引将再次等于 1 而不是你的情况下的 0 .

关于C从两个数组中获取中间索引,变量初始化和三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67279862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com