为什么这段代码无法正常运行
```c
#include <stdio.h>
#include<math.h>
int square(int x1,int x2,int x3,int y1,int y2,int y3)
{
int L1, L2, L3,res;
L1 = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
L2 = sqrt((x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3));
L3 = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
if (L1 + L2 > L3&& L1 - L2 < L3)
{
if (L1 == L2 || L1 == L3 || L2 == L3)
res++;}
return res;
}
int main(){
int n =0,res=0,j,i,k;
scanf("%d",&n);
if(n<3){
printf("error");
}
int x[n],y[n];
for(int i = 0;i<n;i++){
scanf("%d %d",x[i],y[i]);
}
for(int i = 0;i<n;i++){
j=i;
while(j!=n){
k=j;
while(k!=n){
res = res+square(x[i],y[i],x[j],y[j],x[k],y[k]);
k++;
}
j++;
}
}
printf("%d",res);
}
```
您好,以下是修正后的代码,您试试:
#include <stdio.h>
#include <math.h>
int square(int x1, int x2, int x3, int y1, int y2, int y3) {
int L1, L2, L3, res = 0;
L1 = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
L2 = sqrt((x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3));
L3 = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
if (L1 + L2 > L3 && L1 + L3 > L2 && L2 + L3 > L1) {
if (L1 == L2 || L1 == L3 || L2 == L3)
res++;
}
return res;
}
int main() {
int n = 0, res = 0;
scanf("%d", &n);
if (n < 3) {
printf("error");
return 0; // 如果n小于3,直接退出程序
}
int x[n], y[n];
for (int i = 0; i < n; i++) {
scanf("%d %d", &x[i], &y[i]);
}
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
for (int k = j + 1; k < n; k++) {
res += square(x[i], y[i], x[j], y[j], x[k], y[k]);
}
}
}
printf("%d", res);
return 0;
}
以下是修改内容的简要说明:
square
函数中初始化变量 res
为0。square
函数中增加了额外的检查,以确保三条线段能够构成一个三角形。return 0;
语句,以在 n
小于3时退出程序。scanf
函数中,在 x[i]
和 y[i]
前添加了 &
符号,以正确读取值到数组中。while
循环改为了 for
循环,以提高可读性和正确性。#include <stdio.h>
#include <math.h>
int square(int x1, int x2, int x3, int y1, int y2, int y3) {
int L1, L2, L3, res;
L1 = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
L2 = sqrt((x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3));
L3 = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
if (L1 + L2 > L3 && L1 - L2 < L3) {
if (L1 == L2 || L1 == L3 || L2 == L3) {
res = 1;
} else {
res = 0;
}
} else {
res = 0;
}
return res;
}
int main() {
int n, res = 0, j, i, k;
scanf("%d", &n);
if (n < 3) {
printf("error");
return 0;
}
int x[n], y[n];
for (int i = 0; i < n; i++) {
scanf("%d %d", &x[i], &y[i]);
}
for (int i = 0; i < n; i++) {
j = i;
while (j != n) {
k = j;
while (k != n) {
res = res + square(x[i], y[i], x[j], y[j], x[k], y[k]);
k++;
}
j++;
}
}
printf("%d", res);
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:1、《郝斌C语言自学教程》
https://www.bilibili.com/video/BV1os411h77o?from=search&seid=15026475169248378667
2、《程序设计入门——C语言》(浙大翁恺)
该代码没有明显的语法错误,但它的逻辑存在问题。当输入的三个数字中,第一个数字并不是最大的时候,输出的结果会与预期不符。
解决办法是将 max
的初始值设为输入的第一个数字 a
之后再进行比较。修改后的代码如下:
#include <stdio.h>
int main() {
int a, b, c;
printf("请输入三个数字:");
scanf("%d %d %d", &a, &b, &c);
int max = a;
if (b > max) {
max = b;
}
if (c > max) {
max = c;
}
printf("最大的数字是:%d", max);
return 0;
}
示例代码已经给出,直接复制到编译器中即可运行。