当我从事C编程练习时,发现了一个带有结构数组的问题。 特别是,我将编写一个程序以使用不同的多项式进行运算。所以我声明了一个结构“ Pol”,其中包含变量“ order”和数组“ coefficients”。 然后,我将使用多项式进行soe运算(例如,它们中的两个之和)。 问题在于如何在结构中声明数组“系数”,因为当我想对两个多项式求和时,我想将数组的所有元素都设置为0(以解决关于两个具有不同阶数的多项式之和的问题)。 我知道如何在主函数中声明的数组中设置0(将单个值设置为0,然后将所有其他值自动设置为0)。 但是如何对结构进行相同操作?
在此先感谢所有将帮助我的人。
我在下面公开了代码(未完成):
#include <stdio.h>
#include <math.h>
#define N_MAX 100
typedef struct
{
float coefficients[N_MAX];
int order;
} Pol;
void println(int n);
void readPol(Pol* pol);
int main(int argc, char const *argv[])
{
Pol p1, p2, pS;
readPol(&p1);
return 0;
}
void readPol(Pol* pol)
{
printf("Polynomial order: ");
scanf("%d", &pol->order);
println(1);
for(int i = pol->order; i >= 0; i--)
{
printf("Coefficient of x^[%d]: ", i);
scanf("%f", &pol->coefficients[i]);
}
}
void println(int n)
{
for(; n > 0; n--)
printf("\n");
}
答案 0 :(得分:2)
初始化结构的语法类似于数组的初始化方式。您可以按顺序指定初始化程序,并在所有嵌套的初始化程序周围加上花括号:
Pol p1 = { { 0 }, 0 };
答案 1 :(得分:2)
...想要将数组的所有元素设置为0
要初始化(在声明时分配),请选择各种选择。
Pol pol1 = { .order = 0, .coefficients = { 0 } }; // Declare members in desired order
Pol pol2 = { .coefficients = { 0 }, .order = 0 };
Pol pol3 = { .order = 0, .coefficients = { 0.0f } }; // A float constant for clarity
Pol pol4 = { { 0.0f }, 0 }; // Order matches declaration
Pol pol5 = { 0 }; // All set to 0
请注意,对于部分显式初始化器,其余成员/数组元素将获得0值。 (对于整数类型,为0;对于FP,类型为0.0;对于指针类型,某些 null指针。)
在C语言中,没有部分初始化,全部或全部没有。
要分配,直接的解决方案是使用循环。
pol->order = 0;
for(i = 0; i < N_MAX; i++) {
pol->coefficients[i] = 0.0f;
}
但是为什么呢?所有代码需求都是
pol->order = 0;
pol->coefficients[0] = 0.0f;
拥有.order
成员的目的是将工作扩展到已使用的数组大小,以及在readPol(Pol* pol)
和println(int n)
中完成的工作。不要花时间分配未使用的数组成员。
答案 2 :(得分:-1)
您可以使用memset初始化变量的每个字节。
memset(&p1, 0, sizeof(Pol))