C言語で以下のプログラムを作らなくてはなりません。
どなたかご教授くださるようお願いいたします。

1 入力された値を階乗するプログラム
<表示>
  値を入力してください。

  答え:XXXXX

2 パスワード作成ツール
<使用方法>
  ./mypasswd [user ID][パスワード文字数]

<機能>
  下記の条件にあった任意の文字列を標準出力に返す。
条件1 引数[user ID]は必須
条件2 指定できる出力文字列は6,7,8文字のいずれかとする(省略可、デフォルト8文字)
条件3 出力もじる津を構成する文字列範囲はa~z、A~Z、0~9とする。
条件4 ユーザーアカウントに含まれる文字列を含まない。
条件5 英大文字を最低1文字含む。
条件6 英小文字を最低1文字含む。
条件7 数字を1文字含む。

<設計>
  下記の関数を組み合わせる。
関数1 引数チェック関数(条件1、2)
関数2 ヘルプを表示する関数(条件1、2、の説明文を表示する)
関数3 時刻を種にした乱数を用いて、任意の1文字を返す関数
関数4 ある1文字が使用可能文字列に含まれるものかどうかを判断する関数(条件3)
関数5 ある1文字が、userIDに含まれるものかどうかを判断する関数(条件4)
関数6 関数3~5を利用して、パスワ-ドに使用することが出来る文字列を返す関数
関数7 関数6を利用し、条件5~7が考慮された文字列を返す関数

3 入力された計算式を計算するプログラムを作成

<機能>
  +-*/(括弧は使用しない)の組合せで小数も扱う。
  敷の最大長は100文字までとする。

<表示>
  計算式を入力してください。

  答え:XXXXXXXXXX

このQ&Aに関連する最新のQ&A

A 回答 (9件)

・・・では、続きいきます。



>関数3 時刻を種にした乱数を用いて、任意の1文字を返す関数
関数:char GetRandomChar(void)
仕様:略(上の文で十分)
実装:以下のURLの「プログラム例」を参考にしてください。rand()の戻り値はintなので%256を忘れないように。
http://www.microsoft.com/japan/developer/library …

>関数4 ある1文字が使用可能文字列に含まれるものかどうかを判断する関数(条件3)
関数、仕様、実装:略。isalnum()を使用する。

>関数5 ある1文字が、userIDに含まれるものかどうかを判断する関数(条件4)
条件4では文字列となっていますが?とりあえず、userIDとパスワードの間に共通する文字がない、という条件と解釈します。
関数、仕様、実装:略。strchr()の結果がNULLか否かで文字の重複を確認する。

>関数6 関数3~5を利用して、パスワ-ドに使用することが出来る文字列を返す関数
関数:void GetPassword(int nLength, char* pszUseID, char* pszPassword)
仕様:(未検査の)パスワードを作成し、pszPasswordに格納する
実装:(1)whileによるループ(継続条件はループカウント<nLength)。その中で関数3による文字の取得→関数4および5によるチェック(失格したならcontinue)→文字をpszPassword[(ループカウント)]に書き込む→ループカウント+1、を行う。
(2)出来上がったpszPasswordの最後に'\0'を付加して関数終了。

>関数7 関数6を利用し、条件5~7が考慮された文字列を返す関数
関数:void GetPasswordChecked(int nLength, char* pszUseID, char* pszPassword)
仕様:検査済みパスワードをpszPasswordに取得する
実装:(1)数字の存在フラグ、小文字の存在フラグ、大文字の存在フラグを用意する。
(2)無限ループの中で各文字種の存在フラグをオフ→関数6→isdigit(),islouwer(),isupper()による文字のチェックをpszPasswordに対して実行(条件に一致したら対応する文字種の存在フラグをセット)→すべての文字種の存在フラグがオンならbreakを繰り返す。

・・・とこんなところでしょうか。
    • good
    • 0
この回答へのお礼

ご丁寧に分かりやすくご回答いただき、ありがとうございます。関数は大変参考になります。私はどの関数を使おうかと、いろいろな関数の仕様を調べながら、ノートに書いておいたのですが、hiromura様の関数の方が、とってもすっきりしていてすばらしいですね。私のほうは1つの条件をクリアする為に何個かの関数を組み合わせてしまったりして、あとで自分で読み直してみても、とてもややこしいく、読みづらいのです。プロの方が書くプログラムほど参考になるものはありませんね。ご回答いただいた関数を自分でもよく調べてみます。とても難しいですね。でも経験者の方にアドバイスしていただいたり、自分で調べたりして、問題が解決できれば最高にうれしいことですね。私も早く、このようなすばらしいプログラムが書けるようにがんばります。これからも何かありましたら、ご指導ください。よろしくお願い致します。

お礼日時:2002/01/17 12:27

>ちなみにこのようなプログラムはhitomura様のようなプロ(?)の方からみると、いかほどのレベルなのでしょうか?


>入門レベル、初心者レベル、中級者レベル、上級者レベルのどのあたりのレベルでしょうか?
>また、hitomura様はこのようなプログラムを大体どのくらいの時間で、ソースを書くことが出来ますでしょうか?
回答を名指しで指定されるのはありがたいのですが、私だけに尋ねるよりも、ほかの方々の意見もきいたほうがいいのではないでしょうか。

当初の質問とは関係のないことでもありますので、回答はいたしません。
新たに質問を作成されたなら、私見を述べさせていただきます。

ただし、「プログラムを作る」といっても、どの時点から開始するかということによって話が変わってきます。
「パスワード作成ツールを作る」と決めた時か、機能が決定した時か、関数の設計が確定した時かをはっきりしてください。
    • good
    • 0

ちょっと補足です。



>ご回答いただいた関数を自分でもよく調べてみます。(No.6のお礼より)
勘違いされるといけないので一言。関数4と関数5以外は自分で作成します。実装に書いたロジックで関数を記述していくわけです。

>関数5と条件4はユーザーIDに含まれている文字を含まないということです。(No.6のお礼より)
つまり、自分の書いた方法で合っていたわけですが、ひとつ質問です。
「"0123456789"というユーザーIDの人のパスワードはどうします?」
条件4によって数字はパスワードに使えなくなりますが、条件7によってパスワードには数字が最低1文字含まれなくてはなりません。

それと、乱数によって出力された文字が使用可能文字か&userIDに含まれていないか調べるよりも、最初からそういう条件で文字を乱数出力するほうがいいような気がします。

こちらは、グローバル領域に0-9,a-z,A-Zを並べた文字配列(文字列ではありません)を作成し、userIDに使用されている文字を配列の中から消去、その文字配列に残った文字の中からランダムに文字を選ぶ、という仕様にすればうまくいくと思います。
    • good
    • 0
この回答へのお礼

hiromura様、ご丁寧に補足してくださり、ありがとうございます。

>「"0123456789"というユーザーIDの人のパスワードはどうします?」
条件4によって数字はパスワードに使えなくなりますが、条件7によってパスワードには数字が最低1文字含まれなくてはなりません。

   そうですね。ではユーザーIDの文字だけを含めてはいけないということで
   数字は含めてもいいということでは難しいでしょうか?

>それと、乱数によって出力された文字が使用可能文字か&userIDに含まれていないか調べるよりも、最初からそういう条件で文字を乱数出力するほうがいいような気がします。

>こちらは、グローバル領域に0-9,a-z,A-Zを並べた文字配列(文字列ではありません)を作成し、userIDに使用されている文字を配列の中から消去、その文字配列に残った文字の中からランダムに文字を選ぶ、という仕様にすればうまくいくと思います。

   なるほど~。この方がずっとすっきりしてわかりやすいですね。とても合理   的だと思います。もう一度プログラム全体の設計を再検討してみます。
   ご指摘&アドバイスを頂き本当にありがとうございます。

ちなみにこのようなプログラムはhitomura様のようなプロ(?)の方からみると、いかほどのレベルなのでしょうか?入門レベル、初心者レベル、中級者レベル、上級者レベルのどのあたりのレベルでしょうか?また、hitomura様はこのようなプログラムを大体どのくらいの時間で、ソースを書くことが出来ますでしょうか?
お時間があるときにでも、御返事いただければ、大変嬉しく思います。

お礼日時:2002/01/18 00:07

…っと、ひとつだけ書き忘れていたことがあります。



それは、「プログラミングは、自分でプログラムを書いて上達する」ということです。

ヒント(と呼ぶには少々多すぎた気もしますが)は出しましたので、あとは頑張ってください。
    • good
    • 0
この回答へのお礼

このアドバイスを肝に銘じます。
自分で考えて、悩みに悩みぬいた上で経験あるかたにご質問しなければなりませんね。今度ご質問するときは自分でここまで書いてみた!!けれどもここがわからないというふうにソースをきちんと書いてご質問させていただきます。
本当にありがとうございました。

お礼日時:2002/01/17 13:15

> パスワード作成ツール


分からないのは何処でしょうか?
関数6ですか?全てですか?
問題を絞り込んで書かれた方がよいと思います。

後、関数5の仕様と、条件4が異なっていますが、どちらが正しいのでしょうか?>1文字と文字列
この部分が解けているのなら良いのですが

関数3ならrandとsrandとtimeを調べてみてください。
他は漠然としすぎていて、答えに困ります。

>入力された計算式を計算するプログラムを作成
演算子順位文法で検索してみてください。
小数無しのは昔書いたことがあるので、参考になるかも知れません
http://www.susono.com/~sohei/work/cpp/chap01.html
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。お礼が遅くなりまして申し訳ありません。
関数5と条件4はユーザーIDに含まれている文字を含まないということです。私自身がこのプログラムを作成するまで、実力が追いついていなくて、それぞれの条件を満たす関数はどれか考えながら、関数の使い方を勉強している段階です。
条件が多いので、それぞれの関数をどう組み合わせていけばいいのか、どのように設計していけばいいのか、混乱してしまっております。
計算式を計算するプログラムはリンク先を参考にさせていただきます。
現段階の私の力では難しいかもしれませんが、これを乗り越えなくてはいけませんね。これからも何かありましたら、よろしくお願い致します。

お礼日時:2002/01/17 12:14

>質問させていただいた2のパスワードを作成する


>プログラムは難しいでしょうか?
ではやってみましょうか(…ってissy-toさんではないのに。なんてでしゃばりなんだ>私)。
でも、これだけ仕様が確定しているなら簡単なので、ポイントだけ書くことにします。

>関数1 引数チェック関数(条件1、2)
関数:int CheckArgments(int nArgv, char** pszArgv)
仕様:main()の引数をそのまま受けとり、引数が条件1、2を満たしているなら1、いずれかが満たされていなければ0を返す。
実装:(1)nArgvの値をチェック
(2)pszArgv[2]の文字列長およびatoi()の結果をチェック

>関数2 ヘルプを表示する関数(条件1、2、の説明文を表示する)
関数:void ShowUsage(void)
仕様:プログラムの使用法を表示する。
実装:printf()文を並べるだけなので省略。
付記:プログラム名の表示を行うならば、ソースにその名称を書くよりも、argv[0]の文字列を使用したほうが良い。その場合は当関数の引数はchar* pszProgramNameとなる。

…すいません、ちょっと都合によりいったん書き込みを終了します。
    • good
    • 0

実行結果の5!の入力数値が0になっているのは気にしないで下さい。


0!のコピペですので。
    • good
    • 0

即席ですので参考程度に見てください。

(補足)
    • good
    • 0

こんなプログラムはどうでしょうか?



#include <stdio.h>
#include <stdlib.h>

int Factorial(x);

int main()
{
long i;
printf("******************************\n");
printf("* 階乗を計算するプログラム *\n");
printf("******************************\n\n");
printf("数値を入力してください--->");
scanf("%ld",&i);

printf("\n%ld!=%ld\n",i, Factorial(i));

exit(0);
}

int Factorial(x)
{
if(x == 0) return(1);
else return( Factorial(x-1)*x);
}

実行結果
******************************
* 階乗を計算するプログラム *
******************************

数値を入力してください--->0

0!=1

******************************
* 階乗を計算するプログラム *
******************************

数値を入力してください--->0

5!=120
    • good
    • 0
この回答へのお礼

さっそくのご回答ありがとうございました。
試してみます。Factorial関数大変参考になりました。
ちなみに、質問させていただいた2のパスワードを作成する
プログラムは難しいでしょうか?

お礼日時:2002/01/16 16:47

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QWindows7 パスワードリセット

今まで使っていた管理者アカウントのPWを忘れて
guestアカウントしかない状態です

なんとかパスワードを解除しようと

[Offline NT Password & Registry Editor]

このソフトを試したのですが

ERROR : Failed to copy registry file sam

とでてstep3に進むことができません。

どうすれば進むことができるでしょうか・・・


よろしくお願いします。

Aベストアンサー

linuxコマンド chntpw 使用の下記サイトを試してみてください。
Windows/System32/config フォルダの場所を正しく指定すればリセットできます。

chntpw
http://ftlabo.sakura.ne.jp/win/chntpw/chntpw.html

Q<>で囲まれた文字列を文字列のなかから取り出す方法

現在、C++を使って、文字列の中から<>で囲まれた部分を抜き出して表示する、というプログラムを書きたいんですが、どうもうまくいきません。例として、

int main(void)
{
char html[] = "<abdc><kihddds><mokus>";
char *p;
int c;
c = '<';
p = strchr(html, c);
printf("%cは文字列の%d番目にあります。\n", c, p-html+1);
}

のような感じで最初の<と最初の>の場所を探すのはできるのですが、2個目以降を同じようにさがすことができません・・・。

上記の例でいうと、実行結果として
abdc
kihddds
mokus
とでるようなものをつくりたいのです。
良い方法がありましたら、どうぞご教授おねがいしますm(__)m

Aベストアンサー

こんな感じかな、と。(確認はしていません)


char *pstart;
char *pend;

pstart=strchr(html,'<');
if(pstart!=0)
pend=strchr(pstart+1,'>');
while(pstart!=0 && pend!=0){
printf(省略);
pstart=strchr(pend+1,'<');
if(pstart!=0)
pend=strchr(pstart+1,'>');
}

Q忘れたwindows 7 パスワードを解除したい

何度も試しても、windows 7にログインできません。パスワードをどうしても思い出せません。困ります。忘れたwindows 7 パスワードを解除して、入力しないで起動するようにしたいのですが、どうすればいいのかがぜんぜん分かりません。誰か教えてくれませんか。よろしくお願いいたします。

Aベストアンサー

windows 7のコントロールパネルのユーザーアカウントから直接にwindows 7 パスワードのログオンを閉じることが出来ます。しかし、現在利用されているパスワードが分からない場合、設定できません。まず、忘れたwindows 7 パスワードを解除しなければなりません。
システムのリカバリーは一つの対策です。もし、システムをリカバリーすれば、解除できますが、一般的には薦められていません。Cに保存されているすべてのデータは削除されます。せめて、バックアップした後、以上の操作を行ってください。しかし、ログインできない場合、バックアップも実行できません。
今、ますます多くの方はパスワードリセットツールで解除操作を実行します。また、PCの修理店に問い合わせて、業者に依頼する方も多いようです。

参考URL:http://jp.magic-rescue-cd.com/windows7-password.html

Q文字列中に含まれる文字の個数をカウントするプログラムについて…

文字列、1文字が与えられたとき、これをポインタで入力し文字列中に含まれる文字の個数を計算するプログラムを作成せよ。

と、いう課題がだされたんですけど、ユーザが任意の文字列と1文字を入力できるようにすることができません…。
多分main関数の部分をちょっといじくればよいと思うのですが…。
どなたかアドバイスをお願いします。
#include <stdio.h>

int count(const char *str, const char ch)
{
int cnt=0;
while (*str!='\0')
{
if (*str==ch)
cnt++;
str++;
}
return cnt;
}

int main()
{
const char *str="hello,world!";
const ch='o';

int cnt;

cnt=count(str, ch);

printf("%s中に%cは%d個です\n", str, ch, cnt);


return 0;
}

文字列、1文字が与えられたとき、これをポインタで入力し文字列中に含まれる文字の個数を計算するプログラムを作成せよ。

と、いう課題がだされたんですけど、ユーザが任意の文字列と1文字を入力できるようにすることができません…。
多分main関数の部分をちょっといじくればよいと思うのですが…。
どなたかアドバイスをお願いします。
#include <stdio.h>

int count(const char *str, const char ch)
{
int cnt=0;
while (*str!='\0')
{
if (*str==ch)
...続きを読む

Aベストアンサー

scanf"%s", str)は、バッファオーバーフローの危険と改行文字の食べ残し問題がありますね。
-- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< --
int main()
{
char ch;
char str[BUFSIZ];
int cnt;

printf("文字列を入力して下さい > ");
fgets(str,BUFSIZ,stdin);

printf("カウントする文字を入力してください > ");
ch = getchar();

cnt=count(str, ch);
printf("%s中に%cは%d個です\n", str, ch, cnt);

return 0;
}

Qwindows7パスワード解除

何度も試しても、だめです。このwindows7パスワードを忘れてしまうはずがないのに、どうしても思い出せないのです。皆さんもこんな状況に遭遇したことがありますか。どうすればよいのでしょうか。システムを再インストールした後、このwindows7パスワード解除できると聞きますが、そうしたら、すべてのアプリケーションも再インストールする必要があるでしょう。面倒だと思います。ほかのもっと簡単なパスワード解除対策はありませんか。どなたか教えてくれませんか。よろしくお願いします。

Aベストアンサー

後ろの疑問符で表示されるヒントを見て、試したことがありますか?
確かに、システムの再インストールを実行したら、ほぼすべてのインストールされていたアプリも再インストールする必要があります。また、再インストールしたら、Cをフォーマットする必要もありますよ。中に保存されているデータも消えてしまいます。この対処法はベストチョイスではないと思います。
もし、修理店も依頼したくない場合、自分でwindows7パスワード解除に対応するツールを使って見てもよろしいです。会社の同僚もこんな問題に遭遇したことがあります。ツールで問題を解決したようです。使用したツールはMagic PassNowというものです。公式サイトから、チュートリアルもあります。このパスワード解除機能は無料で利用できるようです。よろしければ、試してみてください。下記のページは関連サイトです。参考してみてください。

参考URL:http://jp.magic-rescue-cd.com/recover-windows7-password.html

Qgetche() → getc() = segmentation fault

WindowsのVC++からUNIXのgccに移行している最中です。
VC++では下記のようにgetche()を使っていたんですが

printf("Enter more data (Y/N) => ");
ch = toupper(getche());

index++;
if(ch != 'Y')
repeat = FALSE;

UNIXではconio.hとgetche()がないとのことで
cursh.hとgetc()を使うことにしました。

printf("Enter more data (Y/N) => ");
ch = toupper(getc(stdin));
putchar(ch);

index++;
if(ch != 'Y')
repeat = FALSE;
}
if((file_ptr = fopen("C:FLIGHTS.DTA","w")) == NULL)
{
printf("Can't open filights file.");
exit(0);
}
fwrite(flights_array, sizeof(flights_array), index, file_ptr);
fclose(file_ptr);
最初の入力は良いのですが'y'と打ってからの入力が
一つ飛ばされてしまいます。
(まるでscanfでfflush(stdin)を付け忘れたかのように)

Flight ID => NW123
Preminum Capacity => 12
Available Preminum Seats => 12
Economy Capacity => 120
Available Economy Seats => 120
Enter more data (Y/N) => y
Y
Flight ID => Preminum Capacity => 6 //←Flight IDの入力が飛ばされてます…
Available Preminum Seats => 6
Economy Capacity => 45
Available Economy Seats => 45
Enter more data (Y/N) => n
Segmentation fault

そして挙句の果てにSegmentation faultが出て止まってしまいます。
VC++ → gccの移行は初めてなのでどうしていいのか分かりません。
どなたか良い解決方法をご存知の方、助けてください。お願いします。

WindowsのVC++からUNIXのgccに移行している最中です。
VC++では下記のようにgetche()を使っていたんですが

printf("Enter more data (Y/N) => ");
ch = toupper(getche());

index++;
if(ch != 'Y')
repeat = FALSE;

UNIXではconio.hとgetche()がないとのことで
cursh.hとgetc()を使うことにしました。

printf("Enter more data (Y/N) => ");
ch = toupper(getc(stdin));
putchar(ch);

index++;
if(ch != 'Y')
repeat = FALSE;
}
if((file_ptr = fopen("C:FLIGHTS.DTA","w")) == NULL)
...続きを読む

Aベストアンサー

stdinのバッファリングはsetbuf()で無効化できます。
問題はそっちよりもコンソールプログラム(ターミナルなど)のバッファリングですね。
sttyコマンドでターミナルをrawモードにしてください。

Qパスワードの入力なしにWindows 7を起動する

Windows 7の起動中にユーザー名が表示されその下の窓にパスワードを入力するように求められます。
毎回のことで面倒くさいのでこのパスワードを入力しないで起動するようにしたいのですが、どうしたらいいのでしょうか。

Aベストアンサー

こちらを参考に・・

http://www.pasoble.jp/windows/7/08828.html

QC++での とusingnamespaceの関係等を教えてください。

どうでもいい質問なのですが…

C++で色々とソースを打っていると気づいたのです。
#include <iostream.h>とするとusing namespace std;の一文を書かなくてもコンパイルエラーになりません。
また、逆に#include <iostream>とするとusing namespace std;の一文が必要になります。

だから、h(ヘッダファイル)の.hは必要なのかな?と思い、#include <cstdlib.h>とするとコンパイルエラーになります。

なにか理屈がわかりません。コンパイラはVC++6.0です。よろしくご回答の方お願いいたします。

Aベストアンサー

完全な法則、理屈があるというよりも、歴史的経緯によるものです。

<iostream.h>は、namespace stdがまだ決まってなかった頃の名残、「古いヘッダ」です。
VC6は言語仕様が正式に固まるより古い代物なので、
<iostream.h>という過渡期の遺物がついてます。
この頃は、namespace stdがまだなかったので、
<iostream.h>内の関数はusingしなくても使えます。

但し、今の言語仕様ではnamespace stdが導入されてますので、
あくまで互換性のためのものと思います。
新規に書くなら<iostream>を使うべきです。

一方、<iostream>の方は現行言語仕様通りのヘッダです。
こちらは、namespace std内の定義に正しくなっているため、
namespaceを指定して使う必要があります。

 using namespace std;や、using std::cout;の他、
 std::cout << "foo";などもできますので、
 必ずしもusing directiveやusing declarationが必要とは限りませんが。
 少なくとも、ヘッダなどで *むやみに* usingはnamespaceの意義を損ない好ましくないと思います(使い方次第)。

> h(ヘッダファイル)の.hは必要なのかな?と思い、

ちなみに、C++としては、単にヘッダであり、ファイルとは限りません。

> #include <cstdlib.h>とするとコンパイルエラーになります。

「c…」なヘッダには原則、対応するC言語のヘッダがあります。
「c…」というヘッダは、そのC言語のヘッダのC++版であり、
もし<cstdlib.h>に相当するものがあるとすれば、それは単に<stdlib.h>です。
C言語にはnamespaceがありませんので、<stdlib.hにもnamespace stdはありません。

<iostream>はC言語にはない、C++独自のヘッダであり、
<cstdlib>はC言語の<stdlib.h>のC++版なので、そのような挙動の違いになります。
<cstdio>と<stdio.h>とか、<cstring>と<string.h>とか、
もともと対応するC言語のヘッダがあるものは「c…」という名前になってます。

完全な法則、理屈があるというよりも、歴史的経緯によるものです。

<iostream.h>は、namespace stdがまだ決まってなかった頃の名残、「古いヘッダ」です。
VC6は言語仕様が正式に固まるより古い代物なので、
<iostream.h>という過渡期の遺物がついてます。
この頃は、namespace stdがまだなかったので、
<iostream.h>内の関数はusingしなくても使えます。

但し、今の言語仕様ではnamespace stdが導入されてますので、
あくまで互換性のためのものと思います。
新規に書くなら<iostream>を使うべきです...続きを読む

QWindows 7のパスワードをわすれてしまった!

Windows 7の最初のきめたパスワード(決めたパスワードをメモしてたので。)
で、パスワード変更をしようとしても、パスワードかユーザー名が間違ってるとでます。
ユーザー名はあってるとおもうので、パスワードがちがうとおもわれます。
最初にきめたのがかわることはありますか?
また、こういうときはどうすればいいのですか!?
おしえてください!
おねがいします!

Aベストアンサー

できることならパスワードを設定しないのが一番ですがね。

QC言語のプログラムで#includeを使わず#includeだけで

C言語のプログラムで#include<math.h>を使わず#include<stdio.h>だけで√(sqrt)を表現することは可能でしょうか?

Aベストアンサー

ご自分で sqrt 関数を作れば可能です。
こんな感じでしょうか。

#include <stdio.h>

static double
sqrt (double s)
{
 double x = s / 2.0;
 double last_x = 0.0;

 while (x != last_x)
 {
  last_x = x;
  x = (x + s / x) / 2.0;
 }

 return (x);
}

int
main (int argc, char * argv[])
{
 printf ("sqrt (%f) = %f\n", 3.0, sqrt (3.0));
}


人気Q&Aランキング

おすすめ情報