みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

入力した数値を0~3乗するプログラム (C言語)

この前学校の授業でやり方がわからなかったことがあるので質問させていただきます。

scanfを使って入力した整数を0~3乗したものを出力するプログラムをかけ

ちなみに7を入力すれば、
7^0=1,7^1=7,7^2=49,7^343
と出力されるようにしなさい

という問題が出ました。

これは掛け算を使って作るのでしょうか?

このプログラムの作り方と解答例をご教授願います。

投稿日時 - 2012-05-04 14:12:44

QNo.7456990

すぐに回答ほしいです

質問者が選んだベストアンサー

以下のようにしてください。
--------------------------------------------
#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)
で動作確認済みです。

投稿日時 - 2012-05-05 10:34:04

お礼

回答ありがとうございます。
現在自分の知っている簡単な言語のみでプログラムを組んでいただけたので、
今回ベストアンサーにさせていただきました。
ありがとうございました。
また、他にも回答してくださった皆様もありがとうございました。

投稿日時 - 2012-05-05 14:04:48

ANo.13

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(14)

ANo.14

【参考】
#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;
}

投稿日時 - 2012-05-05 12:10:48

ANo.12

>あなたのは「自分が一番正しい」というのをアピールしているようにしか感じられませんよ。

そんなことは決してございません。
ご理解いただければ幸いです。

投稿日時 - 2012-05-05 09:29:46

ANo.11

#10氏
なんかまるで私が質問者のようですね。
forの文法は言われるまでもなく存じ上げておりますし、whileを使うのは私の「個人的な好み」です。しかし、for(int i, i < n, i++)の形式の方が入門者にはわかりやすい、といわれればそうおもいますが。
mainの引数省くのでしたら、私ならvoidすら書きませんね。
doubleを使用したのは、質問をよく読んでなかったからですね。失礼しました。
質問者への解説ならまだいいのですが、他の回答に突っかかる前に相手の気持ちを考えたらどうですか?あなたのは「自分が一番正しい」というのをアピールしているようにしか感じられませんよ。

投稿日時 - 2012-05-05 06:25:13

ANo.10

>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) {
/* 何かの実行文 */
}

と等価であることはご存じであると思います。

投稿日時 - 2012-05-05 00:55:49

ANo.9

#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;
}

投稿日時 - 2012-05-05 00:18:58

ANo.8

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をループ変数にしちゃったの?
# うまくいくわけないやん。

投稿日時 - 2012-05-04 22:10:13

ANo.7

>int main(void);

最後のセミコロンは、本当に必要なんでしょうか。

productという変数は、本当に必要なんでしょうか。

epistemeさんが書かれた回答をそのままコード化するだけだと思います。

投稿日時 - 2012-05-04 20:27:43

ANo.6

C言語の文の終わりには、何か記号が付きませんか?

そのコードで、本当にループを4回まわりますか?

productっていう変数は、定義しただけで使っていませんね。何のための変数ですか?

投稿日時 - 2012-05-04 19:33:47

補足

回答ありがとうございます。
指摘していただいた部分を修正してみましたが、また失敗してしまいました。

#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);
}


まだどこか違うのでしょうか?
探してみたのですがよくわかりません。
お時間のあるときでいいのでまたご教授お願いします。

投稿日時 - 2012-05-04 20:06:59

ANo.5

>#4さん
>4回まわしたら、4乗までいっちゃうが…。

そうならないように、

>for ( 4回くりかえす )
> resultを出力
> result = result * 入力値

「先に」resultを出力していますよね。
4乗は、計算しますが、ループを抜ける条件に合致するので「出力しません」。

投稿日時 - 2012-05-04 19:22:21

ANo.4

#2です。

#1さん、#3さん

じゃあ、「0乗」は固定にする?

4回まわしたら、4乗までいっちゃうが…。

投稿日時 - 2012-05-04 18:48:12

補足

回答ありがとうございます。
まだpowは習っていないので、ループでやるやり方を教えてくださったら幸いです。

よろしくお願いします。

投稿日時 - 2012-05-04 19:22:08

ANo.3

> これは掛け算を使って作るのでしょうか?

それがいちばん簡単だし確実でしょうね。

int result = 1;
for ( 4回くりかえす )
 resultを出力
 result = result * 入力値
}

投稿日時 - 2012-05-04 17:43:25

補足

回答ありがとうございます。

ループのやり方がよくわからなかったのでさっき調べて作ってみたのですが、
コンパイルに失敗してしまいました。

プログラミングは初心者なので、めちゃくちゃ間違えているかもしれないのですが、
間違っている場所を指摘していただけないでしょうか?


#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 <4;result++) {
printf("%d\n",result);
result = result * x
}
return (0)
}

お暇なときでいいのでよろしくお願いします。

投稿日時 - 2012-05-04 19:17:55

ANo.2

「pow」は使っても良い?

投稿日時 - 2012-05-04 15:05:47

ANo.1

まるまる教えるのは君のためにならないから、大まかな流れを書きます。
初期値に1を与えて、ループで表示、7の乗算を繰り返せばいいのではないでしょうか。

投稿日時 - 2012-05-04 14:44:20

あなたにオススメの質問