• 締切済み

C言語の問題です。

以下のプログラムはどうなりますか? ----------------------------------------------------------------------------- 整数xを入力すると,A√B の形に変形するプログラムを作成.ただし,xが負の場合 A√B i と虚数を表示すること. また,√1 の場合はルート部は表示せず,また整数部が1の場合も同様に表示しない. -----------------------------------------------------------------------------

みんなの回答

回答No.7

この問題には素数は必要ないでしょう xが正数のときの処理手順です。(int型の値の最大値を2,147,483,648(=2の31乗から1引いた数)としてxもそれ以下ということにします。〉int型で表現できる最大の平方数は46,340の2乗で2,147,365,900です。 作業用の変数kを用意して値を46,340としておきます。 以下の2行を繰り返します。 xがk*kで割り切れたときは繰り返しから抜け出します。(kが0になる前に必ず抜け出します。) 割り切れなかったときはkを1減らします。 繰り返しが終わったときのkを使ってA=k, B=x/(k*k)とします。 int k=46360; for ( ; ; k--) if ( x%(k*k)==0 ) break; A=k; B=x/(k*k); ここで46,360のような環境依存の数値を使わないで、たとえば、あらかじめk*k≦xであるようなkを探しておいてそこから始めるほうが効率がよさそうですが、xが表現できる最大の平方数より大きかったりすると、kを探すときにオーバーフローがおきたりしてその対処はかなり面倒なことになります。

全文を見る
すると、全ての回答が全文表示されます。
  • tetometo
  • ベストアンサー率50% (4/8)
回答No.6

面白そうな問題ですね。数学音痴な僕が挑戦してみますw √25が5だから、Bの部分は素数が来るんですね.それで、素数で割れば、Aが求まるんでしたっけ。でも、素数って、スーパーコンピュータで解析中じゃなかったでしたっけ。違いましたっけ。素数を最初にどこまでか決めなかったら、無理じゃないですかね。 int mPrime[10] = {2, 3, 5, 7, 11}; int getA(int x, int b) { int i、res; if (b == 0) b = 2; for (i = 1; i < PRIME_MAX; i++) { if (mPrime[i] * mPrime[i] < x && b != i) res = mPrime[i]; return res; } int getB(int x, int a) { int i = 1; int n = a * a; int res; while (1) { res = n * i; i++; if (res >= x) a = getA(x); } } void show(int a, int b) { printf("%d√%d\n", a, b); } いやー、難しいっすね。降参。

全文を見る
すると、全ての回答が全文表示されます。
  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.5

まず素因数分解をC言語で実現しましょう。

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

> 整数xを入力すると,A√B の形に変形する x を A√B の形にするのなら A = x B = 1

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

「きちんと」ってのは, 「その通りにやれば誰でもできる」ことを意味します (コンピュータはせいぜい「言われたこと」しかしない). その方法で √171 をどう処理するのですか?

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

多分だけど, 「プログラムを作る」ところまでいってないんじゃないの? この問題を, (プログラムじゃなくって) 自分の頭で処理するとしたらどのようにするか, きちんと言葉で書けますか?

y_m_k_z_5
質問者

補足

xをおく→xに値をいれる→{xが正の場合の変形}{xが負の場合の変形(虚数がつく)}{xが累乗の場合の変形(√表示しない)}{xが累乗ではない場合の変形(整数部を表示しない)}→値を返す 習いたてでろくに知ろうともせずに質問をしていた節があります。まだ時間はあるのでしっかり勉強してきます。

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

自分で考えようという気はないのですか?

y_m_k_z_5
質問者

補足

入力、if文で場合分け、までは習ったのでわかったのですが、それ以外がわかりません。教えていただけたら嬉しいです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C言語プログラミングで困っています。助けて下さい。

    C言語プログラミングで困っています。助けて下さい。 課題1-1: 実数 a と実数 b を入力すると、一次方程式ax + b = 0 の解を求めるプログラムを作る 課題1-2: 1-1 で作成したプログラムについて、さらにa として1が入力されたとき、方程式の表示       部分が1x + 3 = 0ではなくx + 3 = 0となるようにせよ 課題1-3: 1-2 で作成したプログラムについて、さらにb として0 や負の数が入力されたとき、方程式     の表示部分が2x = 0 や2x – 3 = 0となるようにせよ 課題1-4: 1-3 で作ったプログラムについて、さらにa の値として0が入力された場合、「解けません」     と表示するようにせよ 課題1-5: 係数 a, b, c を入力すると、 2次方程式ax2 + bx + c =0の解を表示するプログラムを作     れ ※ 1-2 ~ 1-4 のような機能を盛り込む ※ a が0の場合には、先に作った1次方程式のプログラムが動く という問題です。最終的にこれらを一つのプログラムにしてください。判別式や解の公式、ルート√などを使ってよろしくお願いします。C言語でお願いします

  • C言語の問題です

    整数xを入力し、xが正か負かゼロかを判定し、表示するプログラムを作成する問題です。 【ヒント】x > 0 が成立するときは正。 x < 0 が成立するときは負。正でも負でもないときはゼロ。 整数x => 2    整数x => -2    整数x => 0 2 は正です -2は負です 0はゼロです 上記の解答は下記の通りなのですが、下記以外の解答方法を教えてはいただけないでしょうか? プログラミングに詳しい方よろしくお願いいたします。 #include <stdio.h> main() { int x; printf("整数x=> "); scanf("%d",&x); if (x > 0) { printf ("%d は正です\n",x); } else if (x < 0) { printf ("%d は負です\n",x); } else { printf ("%d はゼロです\n",x); } return (0); }

  • C言語の数学関数の質問

    y=√xを計算する。任意のxを入力し、yを出力するプログラムを作成しなさい。ただし、x<0のとき、Yは虚数になるので次のように虚数らしく表示させること。 例) xを入力 :4 y=2.000000 yを入力 :-2 y=1.414214i この問題がわかりません。どのようなプログラムを作成すればよいですか?

  • 棒グラフ C言語

    C言語)実行結果のような非負の整数を読み込んで棒グラフを表示させるプログラム[読み込んだ整数が-1である場合は整数の入力を表示して棒グラフの表示を行う。グラフは★一つで10、☆一つで1を表すこととする。配列を使う。数字を表示する際は3桁分のスペースを使う]はどう作成すればいいのでしょうか? 実行結果 非負の整数を入力してください。(-1が入力されれば即終了) 1:100 2:55 3:77 4:13 5:4 6:-1 1:100 ★★★★★★★★★★ 2: 55 ★★★★★☆☆☆☆☆ 3: 77 ★★★★★★★☆☆☆☆☆☆☆ 4: 13 ★☆☆☆ 5: 4 ☆☆☆☆

  • C言語についてなんですが

    プログラムの作成で分からないところがあります。 「二つの整数値を読み込み、小さいほうの数以上で大きい数以下の 整数を全て加えた値を表示するプログラムをdo文を使って 作成せよ。」 下の図のようにしたいです。 2つの整数を入力せよ。 整数A:37 整数B:28 28以上37以下の全整数の和は325です。 よろしくお願いします。

  • C言語の問題で困っています。

    C言語の問題で困っています。 誰か教えてください。 下の問題ですが、intがiだけでプログラムするにはどうしたら良いでしょうか? (a)から(d)に入るプログラムをすいませんが教えてください。 お願いします。 【問題】 1以上10以下の整数を昇順に区切って表示するプログラムです。 実行例 1 2 3 4 5 #include <stdio.h> int main (void) { int i; (A) while ((b)){ (c); (d); } printf("¥n"); return(0); }

  • C言語-繰り返し処理

    キーボードから入力される1以上の整数に対して、次のような処理 をするプログラムを作りたいのです。 入力される整数が5であった場合、 正の整数:5 1***** 2 **** 3 *** 4 ** 5 * (0、または負の数であればエラー、終了するようにする) for文等の繰り返しを使って色々書いてみたのですが、 12345***** などとなってしまいます。 どのように書けばいいのか教えてくださるとありがたいです。

  • C言語で連立1次方程式

    C++で連立1次方程式を解くプログラミングを作りたいのですが何回やっても出来なかったので質問します。 N=3; n=N; 0<=i<=N-1, 0<=j<=N-1, A(3×3行列)= 1 -8 -6 8 7 8 -2 -2 7 a[0][0]*X+a[1][0]*Y=(-1)*a[2][0]; (1X+8Y=-(-2)) a[0][1]*X+a[1][1]*Y=(-1)*a[2][1]; (-8X+7Y=-(-2)) (行をi、列をj、a[0][0]=a[i][j]) (XとYや関数名は適当に決めてもらって構いません) X、Yを求める。 XとYが求まったら1行目をX倍した数と2行目をY倍した数と3行目を足した数を、3行目に入れる。(計算は列ごとにやる(3回計算)) 3行目の成分は分数で表示させる。(整数の形にできるのなら整数の形にしたい) 表示させる関数は↓のように作りました(型はintでなくてもいいです) void matrix_print(int n, int a[N][N]){ int i, j; for(i=0; i<n; i++){ for(j=0; j<n; j++) printf("%5d \n",a[i][j]); } printf("\n"); return; } 私はX、Yで分数が出てきたところでうまく分数表示が出来ずに(整数で表せるなら整数で表したい)そこで詰まってしまいます。 何方かわかる方はプログラムを作ってください。お願いします。

  • C言語プログラムの課題

    大学で以下のような課題が出ました。でも全然わかりません。わかる方がいらっしゃったら、是非教えてほしいです★ 1整数値123を変数iに代入して、iの値を表示するプログラムを作成せよ。 2実数値3.14159を変数xに代入して、xの値を表示するプログラムを作成せよ。 3文字型せーた'A'を変数chに代入して、chの値を表示するプログラムを作成せよ。ただし、chの値を表示する際には、%d,%x,%cの書式を用いること。 4キーボードから入力された2つの整数値i,jの値を画面に表示するプログラムを作成せよ。 5キーボードから2つの整数値を、変数in1とin2に入力して、以下の計算をした結果を画面に表示するプログラムを作成せよ。 in1+in2= in1-in2= in1*in2= in1/in2= in1%in2=

  • C言語について  

    わからないのでよろしくお願いします。何回やってもうまく表示できません。 整数を入力し、入力された整数の数だけ「*」を横一列に表示し、最後に改行するプログラムを while 文を使って作りなさい。 但し、0または負の値が入力された場合は、「*」は表示せず、改行のみを表示すること。 ▼10が入力された場合の実行例 ********** #include<stdio.h> int main(void) { int n, kai; scanf("%d",&n); printf("\n nyuryoku=%d",n); while(0<kai){ kai=kai--; printf("*"); } kai=n; printf("\n"); }