在C中定义数组类型问题

时间:2016-03-17 20:05:50

标签: c arrays physics

我试图在C(大学物理问题)中对电线上的简单电压分布进行建模。我在使用数组设置边界条件时遇到问题,我需要将线的边缘(想象一下2d网格的边界)设置为0.我还需要设置两个正方形(网格内的线芯)分别为10和-10。

我遇到的编程问题是我收到错误:从类型double[30][15]分配到类型int时出现不兼容的类型,我将数组(2d网格)设置为一个30 * 15的双倍,所以我不确定为什么会这样做?

这是我定义数组和计数器:

int i,j,h;
double Vnew[30][15],Vold[30][15];

这就是我试图设置边界条件的方法(只是我得到这个错误的位置)

if ((i == 0 || 30) && j==j){Vnew=0;}
if ((j == 0 || 15) && i==i){Vnew=0;}
if ((6<=i<=9) && (6<=j<=9)){Vnew=-10;}
if ((21<=i<=24) && (6<=j<=9)){Vnew=10;}

3 个答案:

答案 0 :(得分:2)

  

if((i == 0 || 30)&amp;&amp; j == j){Vnew = 0;}

首先:|| 30没有做你认为它做的事情(它做的是30总是评估为真,因为它不是零), 它可能应该是i == 0 || i == 30

还有:

Vnew=0; 

你不能像这样为数组赋值。您需要使用索引(例如Vnew[i][j]=..)。请查阅有关如何在C中使用数组的基础知识。

(6<=i<=9)

也不好,需要使用6<=i && i<=9

答案 1 :(得分:1)

您需要指定

Vnew[i][j] = ...

Vold[i][j] = ...

答案 2 :(得分:0)

使用struct数组可能有助于简化表示法。例如......

typedef struct {
    double new;
    double old;
}V;

V v[30][15];

int main(void)
{
    int i, j;
    for(i=0;i<30;i++)
    {
        for(j=0;j<15;j++)
        {
            if(((i==0)||(i==29)) && ((j==0)||(j==14)))
            {
                v[i][j].new=0;
            }
            ...// and so on.

另请注意,逻辑运算符&amp;&amp; amp;和||使用。 此外,数组索引从0开始,以数组大小结束 - 1.
例如:给定

int array[4][3];

在嵌套for循环中,使用int i,j,索引将分别从0到3和0到2循环遍历数组。 (在您的代码示例中,您将显示索引大小为30和15的数据。)