質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

1080閲覧

エラーが出ました。教えていただけると幸いです

02line6

総合スコア2

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/11/11 05:15

c言語で

  1. 任意の2つ以上の文字列を入力し,それらの文字列に

同一の文字が含まれる場合はそれら同一の文字をすべ
て出力し,同一の文字がなければ0を出力するプログ
ラムを作成せよ
2. 2次元座標上に定義される任意の座標を3つ以上入力し,
各座標と原点(0, 0)とを結ぶ直線の長さおよび直線が
なす角を算出せよ.また長さおよび角度それぞれにつ
いて最大値と,それがどの座標かも出力せよ
を作成するプログラムで、
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void sample4_1()
{
char stir1[200],stir2[200],a[200];
int j,t,i,l;
printf("任意の2つ以上の文字列を入力してください");
scanf("%s",stir1);
scanf("%s",stir2);

i=0; t=0; l=0; while(stir1[i]){ j=0; while(stir2[j]){ if(stir1[i]==stir2[j]){ a[t]=stir1[i]; l++; } j++; } t++; i++; }

if(l=0)
printf("0");
else
{
printf("重複した文字列は%sです。",a);

}
}

double dist (double b,double c)
{
return sqrt((bb)+(cc)) ;
}

void sample4_2()
{
double b,c,d,e,f,g,h,m,n,max1,max2;
printf("任意の座標を3つ入力してください。");
printf("座標1のX座標;"); scanf("%lf",&b);
printf("座標2のY座標;"); scanf("%lf",&c);
printf("座標2のX座標;"); scanf("%lf",&d);
printf("座標2のY座標;"); scanf("%lf",&e);
printf("座標3のX座標;"); scanf("%lf",&f);
printf("座標3のY座標;"); scanf("%lf",&g);
printf("座標1から原点の長さは%fです",dist(b,c));
printf("座標2から原点の長さは%fです",dist(d,e));
printf("座標3から原点の長さは%fです",dist(f,g));

max1=dist(b,c);

if(max1<dist(d,e))
max1=dist(d,e);
else if(max1<dist(f,g))
max1=dist(f,g);
printf("長さの最大値は%fです。",max1);

h=c/dist(b,c);
m=e/dist(d,e);
n=g/dist(f,g);

printf("座標1となす角度は%fです",asin(h));
printf("座標2となす角度は%fです",asin(m));
printf("座標3となす角度は%fです",asin(n));
max2=asin(h);

if(max2<asin(m))
max2=asin(m);
else if(max2<asin(n))
max2=asin(n);
printf("角度の最大値は%fです。",max2);

}

int main(void)
{
int num;
do{
printf("課題番号を入力してください。"); scanf("%d", &num);
printf("\n");
switch(num) {
case 1:
sample4_1(); break;
case 2:
sample4_2(); break;

default: printf("1か2を入力してください"); break; } printf("\n"); } while(num >=1 && num <= 3); system("pause"); return 0;

}
を書いたのですが、
エラーが次のようにでてしまい、意味がわかりません
/tmp/ccqJnlAv.o: In function dist': task5.c:(.text+0x198): undefined reference to sqrt'
/tmp/ccqJnlAv.o: In function sample4_2': task5.c:(.text+0x4d1): undefined reference to asin'
task5.c:(.text+0x4f4): undefined reference to asin' task5.c:(.text+0x517): undefined reference to asin'
task5.c:(.text+0x53a): undefined reference to asin' task5.c:(.text+0x555): undefined reference to asin'
/tmp/ccqJnlAv.o:task5.c:(.text+0x56e): more undefined references to asin' follow collect2: error: ld returned 1 exit status task5.c:(.text+0x4f4): undefined reference to asin'
task5.c:(.text+0x517): undefined reference to asin' task5.c:(.text+0x53a): undefined reference to asin'
task5.c:(.text+0x555): undefined reference to asin' /tmp/ccMSKqH0.o:task5.c:(.text+0x56e): more undefined references to asin' follow
collect2: error: ld returned 1 exit status
どこを直せばいいのか教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1T2R3M4

2021/11/11 05:21

C言語ならばincludeの前に#をつけてください。
02line6

2021/11/11 05:37

すみません#はつけてありました。
jbpb0

2021/11/11 06:14

c言語のコードの一番最初の行のすぐ上に ```c だけの行を追加してください また、c言語のコードの一番最後の行のすぐ下に ``` だけの行を追加してください または、 https://teratail.storage.googleapis.com/uploads/contributed_images/e378967f71829feb9e6187e5be60349f.gif を見て、そのようにしてみてください 現状、コードがとても読み辛いです 質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、コードの実行による現象確認もやりやすくなるので、回答されやすくなります > #はつけてありました。 上記のようにしたら、「#」が消えなくて見えます
jbpb0

2021/11/11 06:19 編集

OSは何ですか? コンパイラは何を使ってますか? どうやってコンパイルしてるか、手順を具体的に教えてください
BeatStar

2021/11/11 08:37

コンパイラは何を使っていますか? 今回はコードの問題ではなく、コンパイル方法とかが原因かも。
fana

2021/11/12 02:44

> 直線がなす角 って何だろう? っていうのを確認取った方が良さそうな気がします. 定義次第で正しい答えが変わりますよねこれ.
guest

回答3

0

gcc -lmとするほか、

sample4_1()の修正点

・if(l=0)をif(l==0)に変更

・t++;をl++;の直下に持ってくる

sample4_2()の修正点

・1つ目の座標2のY座標を座標”1”のY座標に変更

・最大値を求めるところで、else ifは使わずに
if(max1<dist(d,e)) {
max1=dist(d,e) }
if(max1<dist(fig)) {
max1=dist(f,g) }
に変更(max2も同様)

のような変更点がありそうです。

投稿2021/11/12 04:15

編集2021/11/12 05:55
tamedy

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2021/11/12 05:41

> gcc -lmとしてもまだこのコードには問題があります。 という書き出しだと,まるで 【この回答通りに修正すれば問題が無くなる】 みたいに読めてしまう気がします. ぱっと見で見つけたダメそうな点を挙げたという趣旨なのであれば,そういう趣旨だということを明示した方が良いんじゃないかな,とか. (末尾の「でどうでしょうか?」で暗黙的に示しているとも見えるけれども)
tamedy

2021/11/12 05:59 編集

ご指摘通り訂正いたしました。
fana

2021/11/12 05:57

> printf("重複した文字列は%sです。",a); 文字列として出力するなら a には終端文字を適切に入れないとまずいような?(動作環境次第では0埋めになってたりするのかな?) (しかし動かしてみて最初に思うのは「とりあえず改行入れてくれ」だったり)
tamedy

2021/11/12 06:09 編集

実はあと、強制終了しないといつまでも問題が続くという問題があります。 未解決です。
fana

2021/11/12 06:07

別に我々が問題点を全て列挙なり解決なりしなきゃならないわけじゃないので,謝る必要もないのでは. 単に,「とりあえずここがダメそうだよ(全部じゃないよ)」という趣旨だという事が明確になってれば良いのでは,というだけですので.
tamedy

2021/11/12 06:10

>fanaさん なるほど。どうもありがとうございます。
fana

2021/11/12 06:21 編集

そもそも我々には,どこまでやったら完成状態なのか?がわからないですしね. 1個目の問題について言えば,2つの文字列が "aa" と "aabaaa" だったら妥当な出力は 'a' 1個なんじゃないの? と読める気もするし, 2個目の問題について言えば,座標(0,0)の角度ってなんですか? とか それが無いとしても角度ってのが -Π~Π なのか 0~360 なのかによって結果が違うんじゃないの? とか(現コードだとまた違う感じだし).
guest

0

linuxの前提での回答です。
コンパイル時

gcc ソースファイル名
としているかと思いますが、

gcc -lm ソースファイル名
としてください。

投稿2021/11/12 02:05

tatsu99

総合スコア5470

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuma-s

2021/11/12 02:22

「gcc ソースファイル名 -lm」ではないのですか?
nob.

2021/11/12 02:34

手元にある gcc version 9.3.0では gcc [-c|-S|-E] [-std=standard] [-g] [-pg] [-Olevel] [-Wwarn...] [-Wpedantic] [-Idir...] [-Ldir...] [-Dmacro[=defn]...] [-Umacro] [-foption...] [-mmachine-option...] [-o outfile] [@file] infile... となっていて、ソースは最後ですね。どっちでもいいのでは?
tatsu99

2021/11/12 03:11

nob.さんと同様にgcc (GCC) 4.8.5 ですが gcc --version gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28) gcc --help 使用法: gcc [options] file... となるので、オプションのあとにファイル名となっています。 実際にコンパイルしたところ、どちらでもOKでした。
kazuma-s

2021/11/12 05:13 編集

-lm をソースの前に置いてもいいコンパイラでは -lm を付けなくてもいいのではありませんか?
tatsu99

2021/11/12 05:56 編集

当方の環境での確認結果です。 centos gcc バージョン 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ① gcc ソースファイル名   ・・・・エラー ② gcc -lm ソースファイル名  ・・・・正常終了 ③ gcc ソースファイル名 -lm ・・・・正常終了
guest

0

ベストアンサー

undefined reference to なんたら

ってのは、「なんたら」が存在しない、というエラーです
ライブラリのリンクを忘れてませんか

投稿2021/11/11 05:22

y_waiwai

総合スコア87800

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

02line6

2021/11/11 05:39

ライブラリのリンクを忘れていませんかとはどういうことですか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問