0

这实际上是两个程序,但我们需要将其组合在一个程序中,并包含所有 4 个功能。第一个函数必须从两个数组中获取值并将它们相加并存储在另一个数组中。第二个函数必须找到新数组中的最大元素。第三个函数必须找到新数组中的最小元素。最后,第四个函数必须显示上述三个函数的所有值,即第三个数组的元素,它是两个数组的和,然后是和数组的最大元素和和数组的最小值。数据项必须是外部存储类。Borland C 上没有编译错误,但这里的值为空。

它需要外部存储类的概念、带有数组和函数的指针。

#include<stdio.h>
#include<conio.h>

int a[10], b[10], *c[10], i, *min, *max;

void main()
{

    //Function Prototypes
    void getvalue(void);
    void findmax(void);
    void findmin(void);
    void display(void);

    getvalue();
    findmax();
    findmin();
    display();

    getch();

}

void getvalue()
{
    printf("\n Enter 10 values for Array A: ");
    for(i=0;i<10;i++)
    {
        scanf("%d",a[i]);
    }

    printf("\n Enter 10 values for Array B: ");
    for(i=0;i<10;i++)
    {
        scanf("%d",b[i]);
    }

    for (i = 0; i < 10; i++)
    {
        c[i]=a[i]+b[i];
    }

}

void findmax()
{
    for (i = 0; i < 10; i++)
    {
        if(*(c+0)<=*(c+i))
        {
            *(c+0) = *(c+i);
        }
    }

    max = *(c+0);

}

void findmin()
{
    for(i=0;i<10;i++)
    {
        if(*(c+0)>=*(c+i))
        {
               *(c+0) = *(c+i);
        }
    }

    min = *(c+0);

}

void display()
{
    for (i = 0; i < 10; i++)
    {
        printf("\n\n The value of %d element of C = %d ",i,*(c+i) );
    }

    printf("\n\n The max value in C is %d",max);

    printf("\n\n The min value in C is %d",min);
}
4

4 回答 4

1
int a[10], b[10], *c[10], i, *min, *max;
                      ^        ^     ^
                      |        |     |

这意味着您的新数组是一个整数类型的指针数组,并且您将 min 和 max 变量作为指针。没有必要这样做。让它变得简单。

int c[10],max,min;

下一个,

 scanf("%d",a[i]);
             ^
             |

a[i] 表示索引 i 处数组的值,但 scanf 在其输入参数中获取地址。所以 ypu 必须这样做。

scanf("%d",&a[i]);

在 b[i] 的情况下也是如此。

于 2013-10-09T23:24:31.763 回答
1

好吧,你正在用 find min 和 find max 修改你的数组,这是你不应该做的。

并且 min 和 max 存储不正确,因为它们是指针。最后不要取消引用它们。而是在循环中的 if 语句中更新它们,并与它们进行比较。

如果您要对数组使用指针,请真正使用指针。

尝试查看一个遍历 10 个 int 的数组的循环,例如: int * walker, *max;

for (max = a + 9, walker = max - 1; walker >= a; walker--)
{
     if (*max < *walker){
         max = walker;
     }
}

那么 max 将是一个指向最高元素的指针。

于 2013-10-09T22:57:51.167 回答
0

这里有几个问题:

  1. 你 int *c[10] - 意味着与 int **c 具有相同的意义,从中删除 *,*min,*max 相同
  2. 最小/最大函数:*(c+0) = *(c+i); - 您正在覆盖 c[0] 中的值,将其更改为最大值,例如:

    最大值 = c; 对于 (i=1;i < 10;i++) if ( (c+i) > max) max = *(c+i);

  3. 没有扩展存储,我想您需要将 a、b、c 数组的声明移动到单独的文件中,在主文件中只需通知这些变量存储在另一个带有 extern 修饰符的文件中

于 2013-10-09T22:59:47.777 回答
0
#include <stdio.h>
#include <math.h>
{
int R1=100;                     
int add(int R1, int R2,int RL)
int product (int I,int RL)                      
int main(void);

double R2, RL, V, I             
int W, Rtot
do while (R1>R2&&R2<RL{
        for(R2=0,R2<=10000,R2++)    
    { 
        printf ("Resistance for R2=%5.3f\n",R2);
}
    for(RL=100,RL<=15000,RL++)
    {   
        printf ("Resistance for loads resistance=%5.3f\n",RL);
    }
    for(V=1,V<=15,V+=.1)                    
{
    printf ("Input voltage is %3.1f",V);    
}
}
    Rtot=R1+R2+RL                           
        printf ("The total resistance is     %d+%f+%f=%d\n",R1,R2,RL,Rtot);
return (0);
}
于 2015-05-19T02:15:06.900 回答