看我这两个程序有什么不同 c语言

来源:百度知道 编辑:UC知道 时间:2024/06/04 12:54:01
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,data[110][2]={0};
while(scanf("%d",&n)&&n!=0)
{
double sum=0;
for(i=0;i<n;i++)
scanf("%d %d",&data[i][0],&data[i][1]);
for(i=0;i<n-1;i++)
sum+=data[i][0]*data[i+1][1]-data[i+1][0]*data[i][1];
sum+=data[i-1][0]*data[0][1]-data[i-1][0]*data[0][0];
printf("%.1f\n",abs(sum)/2.0);
}
return 0;
}
**************************
#include<stdio.h>
int main()
{
int x[101],y[101],i;
double sum;
int n;
while (scanf("%d",&n) && n!=0)
{
for (i=0; i<n; i++)
{
scanf("%d %d",&x[i],&y[i]);
}
x[n] = x[0];
y[n] = y[0];
sum = 0;
for (i=0;i<n;i++)

如果你说的是正确的,第二个程序正确。

照着第二个来看第一个的话,第二个for循环结束后,就是sum的第二个复合赋值语句改为

sum += data[i][0]*data[0][1]-data[i][1]*data[0][0];

同时,两个程序的输出语句,前一个做了求绝对值,而后面的并没有,因此这个差别也应该考虑统一。

这个不能说那个对错,因为你没有将问题讲清楚。

按照你所说的,只是第一个有一点逻辑上的错误,改正后的程序如下:

#include<stdio.h>
#include<math.h>
int main()
{
int n,i,data[110][2]={0};
while(scanf("%d",&n)&&n!=0)
{
printf(" n = %d\n",n);
double sum=0;
for(i=0;i<n;i++)
scanf("%d %d",&data[i][0],&data[i][1]);
for(i=0;i<n-1;i++)
{
sum+=data[i][0]*data[i+1][1]-data[i+1][0]*data[i][1];
sum+=data[i-1][0]*data[0][1]-data[i-1][0]*data[0][0];
}//for 循环需要添加括号
//printf("%.1f\n",abs(sum)/2.0);
printf("%.1f\n",sum/2.0);
}
return 0;
}

因为变量的定义声明 要在函数的开头
不能在中间