【发布时间】:2020-10-20 05:29:15
【问题描述】:
这是一个函数,用于将两个相同大小的整数数组的元素相加并返回指向第三个数组的指针。
这是必需的/
int *addTwoArrays(int *a1, int *b1, int size);
函数应遵循以下规则:
- 如果任何元素的总和为负,则将其设为零。
- 如果a1和b1指向同一个数组,则返回NULL
- 如果任何输入数组为 NULL,则返回 NULL。
我需要使用以下数组调用此函数并打印总和(在下面的情况 i、ii 的单独行中打印总和数组元素)。
案例一。
int a1[] = {1, -15, 2, 14, 3, -13, 0};
int b1[] = {0, 16, 2, -15, -3, 10, 0};
案例二。
int a2[] = {100, 101, 200, -3011};
int b2[] = {1000, 1010, -300, 10000};
我也不能使用任何外部库(除了默认的 stdio.h)
#include<stdio.h>
int sum[];
int * addTwoArrays(int * a1, int * b1, int size) {
if (a1 == b1) {
return NULL;
}
if ((a1 == NULL) || (b1 == NULL)) {
return NULL;
}
for (int i = 0; i < size; i++) {
sum[i] = 0;
}
for (int i = 0; i < size; i++) {
sum[i] = a1[i] + b1[i];
}
printf("Sum is: ");
for (int i = 0; i < size; i++) {
if (sum[i] < 0) {
sum[i] = 0;
}
printf("\t%d\t", sum[i]);
}
}
int main() {
int i;
//for the execution of case1
int a1[] = {1, -15, 2, 14, 3, -13, 0};
int b1[] = {0, 16, 2, -15, -3, 10, 0};
int size = 7;
printf("\ncase 1:\n");
addTwoArrays(a1, b1, size);
//for the execution of case2
int a2[] = {100, 101, 200, -3011};
int b2[] = {1000, 1010, -300, 10000};
size = 4;
printf("\n\ncase 2:\n");
addTwoArrays(a2, b2, size);
}
我确信有更好的方法(更紧凑的方法),但我是 c 新手,我需要尽可能地压缩它。
【问题讨论】:
-
你在这里看什么简化?对我来说看起来不错,但是,您可以通过遵循最佳实践来使代码紧凑。
-
int sum[];这显然不会编译,而且你不能定义一个未知大小的全局数组。函数addTwoArrays需要为结果动态分配数组并返回指向它的指针。 -
不能使用
stdlib.h? -
this & that
== NULL的错误处理可以通过文档留给调用者。打印(任何形式的 I/O)应该由调用者完成。