我正在学习C语言,所以我希望他们纠正我改进

时间:2017-06-22 16:04:06

标签: c

#include <stdio.h>
#include <math.h>

int main ()  {

    float a, b, c, s, ar;
    s=((a+b+c)/2);

    printf("Ingrese los  lado del triangulo");

    scanf("%f%f%f",&a,&b,&c);


    ar=(sqrt(s*(s-a)*(s-b)*(s-c)));

    printf("el perimetro es %f",ar);

    return 0;
}

我不明白为什么在编译时会抛出此错误

  

tmp / ccs6PFsP.o:Enlafunciónmain':
ejercicio 34.c :(。text + 0x87):referencia asqrt'sin definir   collect2:错误:ld返回1退出状态

2 个答案:

答案 0 :(得分:2)

要在C中使用数学库,请将package com.example.android.miwok; import android.app.Activity; import android.content.Context; import android.media.AudioManager; import android.media.Image; import android.media.MediaPlayer; import android.os.Bundle; import android.provider.MediaStore; import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import static android.media.AudioManager.AUDIOFOCUS_GAIN; import static android.media.AudioManager.AUDIOFOCUS_LOSS; import static android.media.AudioManager.AUDIOFOCUS_LOSS_TRANSIENT; import static android.media.AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK; import static android.view.View.GONE; public class WordAdapter extends ArrayAdapter<Word> { private static final String LOG_TAG = WordAdapter.class.getSimpleName(); private int mColorResourceId; private MediaPlayer mMediaPlayer; private final static int MAX_VOLUME = 100; public WordAdapter(Activity context, ArrayList<Word> words, int colorResourceId) { super(context, 0, words); mColorResourceId = colorResourceId; } AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); . . . } 标志传递给编译器:

lm

然后你的程序将编译并链接到数学库。

答案 1 :(得分:1)

正如所指出的,在编译时使用-lm标志,虽然看起来逻辑不正确。

为了使您的程序有效,您应该插入此声明

s=((a+b+c)/2);

scanf声明之后。

在您的代码中,您甚至在从终端读取值之前计算abc的总和。