#include<stdio.h> int main() { int n,t; double ans,w[100],v[100],p[100]; while(scanf("%d %d",&n,&t)!=EOF) { for(int i = 0;i<n;i++) { scanf("%lf %lf",&w[i],&v[i]); p[i] = v[i]/w[i]; } ans = 0.0; double t1,t2; for(int i = 0;i<n-1;i++) for(int j = 0;j<n-i-1;j++) if(p[j]<p[j+1]) { t1 = p[j]; p[j] = p[j+1]; p[j+1] = t1; t2 = w[i]; w[i] = w[i+1]; w[i+1] = t2; } if(t<=0) printf("0.00\n"); else { int q = 0; for(int i = 0;i<n;i++) { for(int j = 1;j<=w[i];j++) { ans = ans+p[i]; t--; if(t==0) { q = 1; break; } } if(q) break; } printf("%.2lf\n",ans); } } return 0; }为什么这段代码用c89标准编译错误
时间: 2024-01-27 11:04:15 浏览: 85
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这段代码在C89标准下编译错误的原因是因为在C89标准中,变量的定义必须在函数开头部分进行,即在第一个语句之前。但是这段代码在while循环中,先定义了一个变量n和t,然后在循环中定义了一些变量。在C89标准下,这些变量应该在函数开头部分定义。
另外,C89标准中的循环语句中,变量的定义只能在循环开头部分进行,不能在循环体中定义变量。因此,这段代码中的两个for循环中定义的变量i和j也会导致编译错误。
为了解决这个问题,可以将变量的定义移到函数开头部分,并将循环中的变量定义放在循环外部。修改后的代码如下:
```c
#include <stdio.h>
int main() {
int n, t;
double ans, w[100], v[100], p[100], t1, t2;
int i, j, q;
while(scanf("%d %d", &n, &t) != EOF) {
for(i = 0; i < n; i++) {
scanf("%lf %lf", &w[i], &v[i]);
p[i] = v[i] / w[i];
}
ans = 0.0;
for(i = 0; i < n-1; i++)
for(j = 0; j < n-i-1; j++)
if(p[j] < p[j+1]) {
t1 = p[j];
p[j] = p[j+1];
p[j+1] = t1;
t2 = w[j];
w[j] = w[j+1];
w[j+1] = t2;
}
if(t <= 0)
printf("0.00\n");
else {
q = 0;
for(i = 0; i < n; i++) {
for(j = 1; j <= w[i]; j++) {
ans = ans + p[i];
t--;
if(t == 0) {
q = 1;
break;
}
}
if(q)
break;
}
printf("%.2lf\n", ans);
}
}
return 0;
}
```
这样修改之后,就可以在C89标准下编译通过了。
阅读全文