• ベストアンサー

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

この前学校の授業でやり方がわからなかったことがあるので質問させていただきます。 scanfを使って入力した整数を0~3乗したものを出力するプログラムをかけ ちなみに7を入力すれば、 7^0=1,7^1=7,7^2=49,7^343 と出力されるようにしなさい という問題が出ました。 これは掛け算を使って作るのでしょうか? このプログラムの作り方と解答例をご教授願います。

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

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.13

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

butamushi
質問者

お礼

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

その他の回答 (13)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.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; }

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.12

>あなたのは「自分が一番正しい」というのをアピールしているようにしか感じられませんよ。 そんなことは決してございません。 ご理解いただければ幸いです。

回答No.11

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

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.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) { /* 何かの実行文 */ } と等価であることはご存じであると思います。

回答No.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; }

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

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.7

>int main(void); 最後のセミコロンは、本当に必要なんでしょうか。 productという変数は、本当に必要なんでしょうか。 epistemeさんが書かれた回答をそのままコード化するだけだと思います。

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.6

C言語の文の終わりには、何か記号が付きませんか? そのコードで、本当にループを4回まわりますか? productっていう変数は、定義しただけで使っていませんね。何のための変数ですか?

butamushi
質問者

補足

回答ありがとうございます。 指摘していただいた部分を修正してみましたが、また失敗してしまいました。 #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% (2126/6288)
回答No.5

>#4さん >4回まわしたら、4乗までいっちゃうが…。 そうならないように、 >for ( 4回くりかえす ) > resultを出力 > result = result * 入力値 「先に」resultを出力していますよね。 4乗は、計算しますが、ループを抜ける条件に合致するので「出力しません」。

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.4

#2です。 #1さん、#3さん じゃあ、「0乗」は固定にする? 4回まわしたら、4乗までいっちゃうが…。

butamushi
質問者

補足

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

関連するQ&A

  • C言語プログラム

    2つの整数を入力させ、それらが等しい場合hitoshii、異なる場合にはhitoshikunaiと出力するプログラムを作りたいのですが、うまくいきません。間違っているところを教えてください。 #include<stdio.h> #include<conio.h> void main() { printf("整数を入力してください:"); int number1; scanf("%d",number1); printf("整数を入力してください:"); int number2; scanf("%d",number2); if(number1==number2) { printf("hitoshii"); } else { printf("hitoshikunai"); } getch(); }

  • C言語の勉強しています。教えてください

    私は現在大学生でC言語が面白そうなので独学しているのですが、分からない点があり、参考書に解答も付属していないのでどなたか教えていただけると非常に助かります。 (参考書名:新版 明解C言語 入門編 著者:柴田望洋) p65の演習4-3 問題:2つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作成せよ。 (例)このように表示させたい 2つの整数を入力して下さい。 整数1:37(←例です。ここの数はscanfを利用して手動で打ち込みます) 整数2:28 28以上37以下の全整数の和は325です。 これまでに学習した事を利用して解きたいのでまず、自分でプログラムを書いてみますので訂正していただければ非常に助かります。 どうかお願いします

  • C言語でscanfを用いた入力

    C言語でscanfの動作を確かめる為に、次のプログラムを作成して実行してみました。 #include <stdio.h> int main(void){ int i; printf("Input1:"); scanf("%d",&i); printf("Input2:"); scanf("%d",&i); printf("Output:%d",i); return 0; } このプログラムは1回目と2回目に数値を入力すると正常に出力します。 例 1回目の入力に10、2回目の入力に20を入力した時の出力結果 Input1:10 Input2:20 Output:20 今度は1回目で数値、2回目で文字を入力してみました。 そしたら2回目の入力が無視されました。 例 1回目の入力に10、2回目の入力にAを入力した時の出力結果 Input1:10 Input2:A Output:10 今度は1回目で文字を入力してみました。 そしたら2回目の入力は要求せず、いきなりよく分からない数値が出力されました。 例 1回目でAを入力した時の出力結果 Input1:A Input2:Output:-858993460 どうして文字を入力したら正常に出力しなくなるのでしょうか?

  • C言語のプログラミング (基礎)教えてください。

    以下のような問題があります。 プログラムを作ってみたのですが、 コンパイルすると無限ループになったり、 正しく結果が出ません。 どのように直せば良いか教えていただけると助かります。 よろしくお願いします。 整数が入力される度に今までの合計を出力するプログラムを作成しなさい。なお、0 が入力されたら終了するものとする。 ただし、繰り返しの命令は while 文を使用し、条件は常に真 ( 1 ) とし、break 文を使うこと。 ▼実行例 整数:1     合計:1 整数:2     合計:3 整数:3     合計:6 整数:0 ******************************** #include<stdio.h> int main(void) { int n,sum; sum=0; while(1){ printf("¥n整数:"); scanf ("%d", &n); sum=sum+n; printf("¥n    合計:%d", sum); scanf ("%d", &sum);          if(n==0){ break;   } } }

  • C++のプログラム

    C言語の問題を授業で出されたのですがさっぱり分かりません。教えて下さい。 1.キーボードから整数nを入力して、1+2+…+nを求めるプログラムを作れ。 2.キーボードから整数nを入力して、1*2*…*nを求めるプログラムを作れ。 3.キーボードから10個の実数を入力し、それらの平均を求めるプログラムを作   れ。 4.円錐の体積を求めるプログラムを作れ。 注:円錐体積V=π*r*r*h/3 5.キーボードから文字列を入力し、それを逆さまにするプログラムを作れ。例えば、”dog”を逆さまにすると”god”になる。 6.キーボードから一つの整数を入力し、それは奇数か偶数かを判断するプログラムを作れ。 ちなみに6番は /* iftst.c */ #include <stdio.h> void main(void) { int n; printf("n="); scanf("%d",&n); if(n%2 == 0){ printf("偶数です\n"); } else{ printf("奇数です\n"); } } で合っているのでしょうか?

  • ★C言語の問題です★

    C言語のプログラムの問題なんですが、どなたか以下の問題の1問でも解ける方がいればご回答おねがいします! または、アドバイスだけでもいいのでよろしくお願いします。 【問題】 1 西暦1868年から2007年までの年号を入力して和暦に変更して出力するプログ  ラムを作成するプログラム。  例 入力 1868  出力 明治元年       2007     平成19年 2 整数配列が-32768から32767の範囲の数しか扱えないとしたとき、10桁の整数同士  の足し算を行うプログラム。 3 3桁の整数の値を入力していき、-9999が入力されたところで、それまでに入力  された数の個数と合計を整数で、平均を浮動小数点数で出力するプログラム。 4 3つの文字列”Happy”と“New”と“Year”をつないで1つの文字列として出力する  プログラム。 5 学籍番号、氏名、出席からなる10人分のデータがある。出席の悪いものから並び替  えて表示するプログラム。  例  CA180002 山田太郎 70  CA170001 山田次郎 60  データは、適当なものを使います。

  • C言語のプログラム作成について

    ●2つの整数a,bを入力し、aがbより大きいとき、aとbを入れ替える場合、どのようなプログラムを作成すればよいのでしょうか? ●aとbを入れ替えるには、入れ替え作業用の領域tempを使い、次の処理を行う。 a→temp, b→a, temp→b 【プログラム作成例】 a =>10 a=>10 b =>5 b=>20 a=5 b=10 a=10 b=20 上記のような問題の解答は下記のようになるのですが、下記以外の解答方法はありませんでしょうか? C言語に詳しい方、解答の方よろしくお願いします! #include <stdio.h> main() { int a,b,temp; /* データの入力 */ printf("a=>"); scanf("%d",&a); printf("b=>"); scanf("%d",&b); /* a>bのときにデータを入れ替える */ if(a>b){ temp = a; a = b; b = temp; } printf("a=%d b=%d\n",a, b); return (0); }

  • C言語について。初心者です。

    参考書の問題で、「整数値以下である正の偶数を照準に表示するプログラムを作成せよ」 例)整数を入力してください:19   2 4 6 8 10 12 14 16 18 とあり、自分で以下のプログラムを作ってみたのですが「222222・・・・・・・・・・・・・・・・・・」となるだけです。どう変えればちゃんと表示されるようになりますか?ちなみにwhile文を使うのが条件です。 #include<stdio.h> int main(void) {       int na; int nb=0; printf("整数を入力してください。:"); scanf("%d",&na); while(nb<na) printf("%d",nb+2); putchar('\n'); return 0; }

  • c言語のプログラムについて

    今年からC言語を始めた大学1年生です。レポートで四則計算を行うプログラムを6/19までに作らないといけないです。使えるのは今までに習った選択型、反復型、関数scanfです。このプログラムの留意点は次の4つです。 1.使う演算を選択してもらう   例えば   どんな演算をしますか? 1:+,2:-,3:*,4:/ (選択) 2.演算を行う数値を入力してもらう   例えば   a + b の計算をします。aを入力してください。 3.演算結果を表示する   ○+○の答えは ○です 4.計算終了か、それともほかの演算を行うか 決める   0:計算終了 1:他の計算を行う を選択してください  以下のプログラムはこのことを留意してプログラムをつくりました。どこがおかしいのでしょうか。 #include<stdio.h> main() { short a,b,m,n; long c,d,e,f; c = a + b; d = a - b; e = a * b; f = a / b; m = 1; printf("整数を入力してください:"); scanf("%d",&a); printf("どんな演算をしますか?:"); printf("1: +,2: -,3: ×,4: ÷ :"); scanf("%d",&n); while(m=1){ if(n<=4){ while(m=1){ switch (n<=4){ case 1: printf("整数を入力してください:"); scanf("%d",&b); printf("%d + %d = %d \n",a,b,c); break; case 2: printf("整数を入力してください:"); scanf("%d",&b); printf("%d - %d = %d \n",a,b,d); break; case 3: printf("整数を入力してください:"); scanf("%d",&b); printf("%d × %d = %d \n",a,b,e); break; case 4: printf("整数を入力してください:"); scanf("%d",&b); printf("%d ÷ %d = %d \n",a,b,f); break; } } } else { printf("計算できません。"); printf("演算をやり直してください。\n:"); } } printf("計算を終了しますか、それとも他の計算を行いますか?:"); printf("0:計算終了,1:他の計算を行う:"); scanf("%d",&m); printf("計算を終了します。\n"); } 提出期限があるのでなるべく早めのご回答待ってます。生意気言ってすいません。

  • C言語のプログラムについて

    大学のテストの確認をしているのですが、この問題の回答がどうしても分かりません。どなたか教えてください。 9桁以内の整数を入力し、int型の変数に格納し表示するプログラムを作成しなさい。 ただし、先頭は、数字か「+」か「-」とし、それ以外はすべて数字とする。この条件に合わないものおよび10桁以上のものは、「入力エラー」として表示後、再入力を行うこと。 例えば「-123456」や「45678989」は、整数としてint型の変数に格納し、「abcd」や「123-234」は、「入力エラー 」を表示し、再入力を行う。 ---------------------------------------------------------------- また、自動判定の都合上、表示は以下の表示例に準拠すること。 【 23-234 *12345 -123456 を入力した例】 入力エラー 入力エラー 整数は、-123456 です。 お願いします

専門家に質問してみよう