プロが教える店舗&オフィスのセキュリティ対策術

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

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

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

という問題が出ました。

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

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

A 回答 (14件中1~10件)

以下のようにしてください。


--------------------------------------------
#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)
で動作確認済みです。
    • good
    • 1
この回答へのお礼

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

お礼日時:2012/05/05 14:04

【参考】


#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;
}
    • good
    • 0

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



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

#10氏


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

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

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

#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;
}
    • good
    • 0

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

>int main(void);



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

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

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

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


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

補足日時:2012/05/04 20:06
    • good
    • 0

>#4さん


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

そうならないように、

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

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

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