- ベストアンサー
入力した数値を0~3乗するプログラム (C言語)
この前学校の授業でやり方がわからなかったことがあるので質問させていただきます。 scanfを使って入力した整数を0~3乗したものを出力するプログラムをかけ ちなみに7を入力すれば、 7^0=1,7^1=7,7^2=49,7^343 と出力されるようにしなさい という問題が出ました。 これは掛け算を使って作るのでしょうか? このプログラムの作り方と解答例をご教授願います。
- みんなの回答 (14)
- 専門家の回答
質問者が選んだベストアンサー
以下のようにしてください。 -------------------------------------------- #include <stdio.h> int main(void) { int result = 1; int x; int i; printf("x="); scanf("%d",&x); printf("x=%d\n",x); for(i = 0; i < 4;i++) { printf("%d^%d=%d\n",x,i,result); result = result * x; } return (0); } ----------------------------------------- 7を入力したときの実行結果 x=7 x=7 7^0=1 7^1=7 7^2=49 7^3=343 -------------------------------------- CentOS release 5.6 (Final) gcc バージョン 4.1.2 20080704 (Red Hat 4.1.2-50) で動作確認済みです。
その他の回答 (13)
- asuncion
- ベストアンサー率33% (2127/6289)
【参考】 #include <stdio.h> int main(void) { int p, n, i; printf("n="), scanf("%d", &n); for (p = 1, i = 0; i < 4; i++) { printf("%s%d^%d=%d", (i == 0) ? "" : ",", n, i, p); p *= n; } putchar('\n'); return 0; }
- asuncion
- ベストアンサー率33% (2127/6289)
>あなたのは「自分が一番正しい」というのをアピールしているようにしか感じられませんよ。 そんなことは決してございません。 ご理解いただければ幸いです。
- lolinadeko
- ベストアンサー率20% (1/5)
#10氏 なんかまるで私が質問者のようですね。 forの文法は言われるまでもなく存じ上げておりますし、whileを使うのは私の「個人的な好み」です。しかし、for(int i, i < n, i++)の形式の方が入門者にはわかりやすい、といわれればそうおもいますが。 mainの引数省くのでしたら、私ならvoidすら書きませんね。 doubleを使用したのは、質問をよく読んでなかったからですね。失礼しました。 質問者への解説ならまだいいのですが、他の回答に突っかかる前に相手の気持ちを考えたらどうですか?あなたのは「自分が一番正しい」というのをアピールしているようにしか感じられませんよ。
- asuncion
- ベストアンサー率33% (2127/6289)
>int main(int c, char **v){ 今回の場合、実行時の引数は特に必要なさそうです。 voidで問題ないかと。 どうせ書くなら、よくある一般的な名前(argcとかargvとか)に する方がよいのではないか、と個人的には思います。 >; double val, base; 質問者さんは >scanfを使って入力した整数 整数、と明記されています。 double型にする必然性は特にないように思います。オーバースペックかもしれません。 >; counter = 0; >; while(counter < 4){ >; ; printf("%lf\n", val); >; ; val *= base; >; ; counter ++; >; } 個人的な好みとしては、for文で書きたいところです。 A; while (B) { /* 何かの実行文 */ C; } の形のループは、途中にcontinue;を含まなければ、 for (A; B; C) { /* 何かの実行文 */ } と等価であることはご存じであると思います。
- lolinadeko
- ベストアンサー率20% (1/5)
#1です。 今更ですが#1の「7の乗算」は、「入力値の乗算」に訂正をお願いします。 #4氏 既に#5氏が突っ込まれてますが、私は 表示→乗算 の順で書き込んだはずです。あなたの仰る問題は生じないと思いますが? まぁ私でしたらこうしますね。 #include <stdio.h> int main(int c, char **v){ ; double val, base; ; unsigned counter; ; scanf("%lf", &base); ; val = 1; ; counter = 0; ; while(counter < 4){ ; ; printf("%lf\n", val); ; ; val *= base; ; ; counter ++; ; } ; return 0; }
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
int result = 1; for ( 4回くりかえす ) resultを出力 result = result * 入力値 } を実装すると for(result = 1; result <5;result++) { printf("%d\n",result); product = result * x; printf("result * x =%d\n",product); } になる? ぜんっぜん違うやん。 # なぜにresultをループ変数にしちゃったの? # うまくいくわけないやん。
- asuncion
- ベストアンサー率33% (2127/6289)
>int main(void); 最後のセミコロンは、本当に必要なんでしょうか。 productという変数は、本当に必要なんでしょうか。 epistemeさんが書かれた回答をそのままコード化するだけだと思います。
- asuncion
- ベストアンサー率33% (2127/6289)
C言語の文の終わりには、何か記号が付きませんか? そのコードで、本当にループを4回まわりますか? productっていう変数は、定義しただけで使っていませんね。何のための変数ですか?
補足
回答ありがとうございます。 指摘していただいた部分を修正してみましたが、また失敗してしまいました。 #include <stdio.h> int main(void); { int result = 1; int x; int product; printf("x="); scanf("%d",&x); printf("x=%d\n",x); for(result = 1; result <5;result++) { printf("%d\n",result); product = result * x; printf("result * x =%d\n",product); } return (0); } まだどこか違うのでしょうか? 探してみたのですがよくわかりません。 お時間のあるときでいいのでまたご教授お願いします。
- asuncion
- ベストアンサー率33% (2127/6289)
>#4さん >4回まわしたら、4乗までいっちゃうが…。 そうならないように、 >for ( 4回くりかえす ) > resultを出力 > result = result * 入力値 「先に」resultを出力していますよね。 4乗は、計算しますが、ループを抜ける条件に合致するので「出力しません」。
- edomin7777
- ベストアンサー率40% (711/1750)
#2です。 #1さん、#3さん じゃあ、「0乗」は固定にする? 4回まわしたら、4乗までいっちゃうが…。
補足
回答ありがとうございます。 まだpowは習っていないので、ループでやるやり方を教えてくださったら幸いです。 よろしくお願いします。
- 1
- 2
お礼
回答ありがとうございます。 現在自分の知っている簡単な言語のみでプログラムを組んでいただけたので、 今回ベストアンサーにさせていただきました。 ありがとうございました。 また、他にも回答してくださった皆様もありがとうございました。