• 締切済み

C++のプログラム

leaz024の回答

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.4

出題者の観点から、重要と思われる点については●をつけてあります。 ■1,2について  合計はsum、階乗はfacなどとして、計算途中の値を覚えておく変数を用意する必要があります。全ての計算を終えた時、この変数が答えになります。  1~nの範囲で計算を行うので、カウント用変数 i の値が1~nになるようforループを作り、ループ内で「sum += i;」「fac *= i;」のようにします。 ●このとき重要なのは sum、facの初期値で、ループに入る前に正しく設定しなければなりません。nを4くらいに仮定して、机上でループを展開してみれば分かるハズです。 ■3について  平均は「合計÷個数」なので、合計に関しては1を参考にしましょう。n=10としてループし、中で値を入力→sumへの足しこみを行います。 ●気を付けなければならないのは「÷個数」の計算式の書き方です。  10で割った結果が必ず整数になる保証は無いので、結果は小数として処理しなければなりません。つまり、平均用の変数は「double ave;」のように宣言します。  更に、整数÷整数の結果は整数となってしまうため、単純に「ave = sum / 10;」としても、aveには正しい結果は入りません。小数の結果を得るためには、「ave = sum / 10.0」として整数÷小数とするか、「ave = (double)sum / 10;」のようにsumを小数型へキャストするようにしましょう。もちろん両者を同時に行っても構いません。  結果の表示も、%fで小数表示するようにしましょう。 ■4について  必要なのはrとhだけですから、それぞれを%fでdouble型(またはfloat型)変数に入力させ、計算します。 ●おそらく求められているのは、処理の関数化でしょうね。   double calc_volume_cone(double r, double h); のようなプロトタイプで処理するようにすると良いでしょう。 ■5について  文字列を逆さまにする関数はないので、入力された文字列の終端を調べ、1文字ずつ処理を行います。  ただ、とにかく逆さに表示すればよいのか、文字列を格納した文字配列の中身自体を反転するのか分かりません。naturalさんは表示のみ、brogieさんは別配列への格納を解説されているので、文字配列内部の反転について書きます。   char *strrev(char *str) {     int n1, n2;     char ch;     n1 = 0;     n2 = strlen(str) - 1;     while (n1 < n2) {       ch=str[n1]; str[n1]=str[n2]; str[n2]=ch;       n1++; n2--;     }     return str;   }  引数として渡された文字列strの、n1番目とn2番目を交換していくことで反転を行います。よってn1の初期値は0、n2の初期値は文字列終端に合わせます。(strlenで求めた「文字数」は1から数えたものであり、0から数える配列添字に直すため1を引いています。)  n1は0から後ろに、n2は終端から前に調べていくため、ループの条件を「n1 < n2」とし、文字の交換後、「n1++;(後ろへ)」「n2--;(前へ)」を行います。  戻値で文字列strの先頭アドレスをそのまま返しているのは、「puts(strrev(s));」のような使い方ができるようにするためで、文字列処理では一般的な方法です。 ■6について  ikuchanさんの回答でOKです。  欲を言えば、if文の条件を直接「n % 2 == 0」とせず、マクロで   #define iseven(n) ((n) % 2 == 0) のように定義し、   if (iseven(n)) { のようにすると良いでしょう。まぁ関数にしても良いですが。

ikuchan
質問者

お礼

用語についても分からないのでとっても難しいです。まだはじめたばかりだし苦手なので、この文を読んでも分かっていないのですが、とりあえずがんばってみます。ありがとうございます。

関連するQ&A

  • C言語について

    以前も同じことを質問したのですが、分からなかったので、また質問します。本を読んでも分かりませんのでプログラム全てを教えて下さい。2日も考えています。他人からすれば何で説明を読んでも分からないのか?と思われると思いますが、本当に全く分からないし見当もつきません。よろしくお願いします。 1.キーボードから整数nを入力して、1+2+…+nを求めるプログラムを作れ。 2.キーボードから整数nを入力して、1*2*…*nを求めるプログラムを作れ。 3.キーボードから10個の実数を入力し、それらの平均を求めるプログラムを作れ。 4.円錐の体積を求めるプログラムを作れ。 注:円錐体積V=π*r*r*h/3 5.キーボードから文字列を入力し、それを逆さまにするプログラムを作れ。例えば、"dog"を逆さまにすると"god"になる。 以上の5問です。できるだけ簡単で理解しやすいものでお願いします。

  • C言語!プログラム書いたのですがエラーです!

    課題内容 キーボードから数字を入力してその値までの合計を表示する。 さらに入力した値が偶数なら0から入力した値までのすべての偶数の和を 入力した値が奇数なら1から入力した値までのすべての奇数の和を表示するプログラム。 #include<stdio.h> int main(void) { int i, n, sum; sum=0; scanf("%d",&n); printf("入力値:%d\n", n); if(n%2 = 0) { for(i=0;i<=n;i+=2) { sum=sum+i; } printf("合計値:%d\n",sum); } else { for(i=1;i<=n;i+=2) { sum=sum+i; } printf("合計値:%d\n",sum); } return(0); } これでコンパイルすると10行目に左辺値が必要とでます。 どうすればよいでしょうか? 教えてください。よろしくお願いします。

  • C言語のプログラムを修正してほしいのですが

    #include <stdio.h> int main(void) { int i, sum; sum = 0; for (i=1; i<=100; i++){ sum = sum + i; } printf("sum=%d\n", sum); sum = 0; i= 1; while (i <= 100) { sum = sum + i; ++i; } printf("sum=%d\n", sum); sum = 0; i = 1; do { sum = sum +i; ++i; } while (i <=100); printf("sum=%d\n", sum); return 0; } 上記のプログラムに修正を加えて、実行結果が 1+3+5+…+n の nを入力してください → 99をキーボードから入力(例) sum=2500 sum=2500 となるようにしたいです。 nはキーボードから奇数を入力します。 奇数値 nをキーボードから入力して、1からnまでの奇数の総和を 計算するプログラムです。 超暇なときにでも回答お願いします。

  • C言語の、階乗を使うプログラムの問題を教えて下さい

    C言語の、このプログラムを作るのが分かる方、教えて下さい。階乗を使う問題です。 「キーボードで整数aを入力するとn!>aとなるときの最小のnを出力するプログラムを作りなさい」という問題です。 分からず苦戦しています。 nをキーボードで入力してn!を求めるには #include<stdio.h> int main(void) { int kekka,n,i; printf("n=? \n"); scanf("%d",&n); kekka=1; for(i=1;i<=n;i++) { kekka=kekka*i; } printf("%d!は%dです。\n",n,kekka); return 0; } とすればいいのは自分で作れたのですが、問題にあるn!>aのプログラムが分からず困っています。 分かる方、お願いいたします

  • エラーが出ます。

    「キーボードから受け取った整数が偶数か奇数かを表示するプログラムを、switch 文を使って作成する」 という問題で、プログラムを作ってみたのですが、エラーが出ます。 caseの後の%2==0 %2!=0の部分が間違っていると思うのですが、これは何と書けばいいでしょうか?偶数と、奇数の場合の条件の書き方はどうやるのでしょう? 回答お願いします。 #include<stdio.h> int main(void) { int a; scanf("%d",&a); switch(a) { case %2==0 : printf("%dは偶数です\n",a); break; case %2 != 0 printf("%dは奇数です\n",a); break; } }

  • 間違いを指摘して頂けませんか?(切実)

    私は大学で春からプログラミングの基礎を学び始めたプログラミング初心者です。 今、if関数のネストについて習っていて、if関数のネストを利用したプログラム作成の課題が出て、一応書いてはみたのですがどうしても上手くいきません。下に課題の内容と私の書いたプログラムを書いておきますので、間違っている箇所を指摘、修正して貰えませんか?宜しくお願い致します。 【課題】 次の項目に従ってプログラムを作成せよ。 (1)整数型の変数noを宣言 (2)「整数を入力してください。」と表示して改行 (3)キーボードから入力された値を変数noに代入 (4)入力された値が ・偶数で4で割り切れる数なら「整数○は偶数で4で割り切れます。」 ・偶数で4で割り切れない数なら「整数○は偶数だけど4で割り切れません。」 ・奇数で3で割り切れる数なら「整数○は奇数で3で割り切れます。」 ・奇数で3で割り切れない数なら「整数○は奇数だけど3で割り切れません。」 の○の位置にnoの値を当てはめて表示した後、改行 #include <stdio.h> main(void) { int no; printf("整数を入力してください。\n"); scanf("%d",&no); if(no/2==0,no%4==0){ printf("整数%dは偶数で4で割り切れます。\n",no); }else{ if(no/2==0,no%4!==0){ printf("整数%dは偶数だけど4で割り切れません。\n",no); }else{ if(no/2!=0,no%3==0){ printf("整数%dは奇数で3で割り切れます。\n",no); }else{ printf("整数%dは奇数だけど3で割り切れません。\n",no); } } } } ※なお、上のプログラムは全て左詰めになってしまっていますが、質問する上で表示出来なかっただけですので…実際にはちゃんと然るべき箇所にTabキーによる余白は入れてあります。

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

    #include <stdio.h> int main(void) {   int hoge,piyo;   printf("数値を入力せよ。:");   scanf("%d",&hoge);   piyo = hoge % 2;   if (piyo == 0) {     printf("%dは、偶数。\n",hoge);   } else {     printf("%dは、奇数。\n",hoge);   };   return 0; } という、プログラムが、実行できません。 といって、エラーメッセージがでてくれないので、困っています。 ひょっとして、非常に初歩的なミスという気もするのですが。 これはよかった!という、C言語に関する書籍、また、コンピュータのシステムに関する書籍がありましたら、合わせてご教授ください。

  • C言語について  

    次のような問題が解けません。あと少しなのでよろしくお願いします。 4回目と5回目がうまく表示されません。 キーボードから値を入力し、1から入力された値までの奇数の和を求めて出力するプログラムを作成しなさい。ただし、for文を使うこと。 また、0 や負数が入力された場合は合計値を0と表示すること。 実行例 入力値:9 合計値:25 #include<stdio.h> int main(void) { int n,ne,kisuu; printf("\n入力値:"); scanf ("%d",&ne); n=1; kisuu=0; for(n=1;n<=ne;n=n+2){ kisuu=kisuu+n; printf("\n1から %dまでの奇数の和:%d\n",ne,kisuu); } }

  • C言語のプログラムについてですが、

    #include <stdio.h> int main(void) { double r; printf("半径を入力してください:"); scanf("%lf", &r); printf("円周=%f\n", 2.0 * r * 3.14159); printf("円面積=%f\n", r * r * 3.14159); return 0; } 上のC言語のプログラムを参考にして 正三角形一辺を double値でキーボード入力し、次のように高さと 面積を計算するプログラムを教えてください。 よろしくお願いしますl_ω_l 3の平方根は1.73205とします。 [実行結果] ======= 一辺の値を入力してください: 20 高さ=17.320500 面積=173.205000

  • C言語 繰り返しの問題

    C言語の初心者です。 キーボードから値を入力して、1から入力された値までの奇数の和を求めて出力するプログラムを作成します。以下のように組んでみましたが、全然うまくいきません。誰か教えていただけませんか? #include<stdio.h> int main(void) { int i,n,sum; sum=0; printf("入力値:",n); scanf("%d",&n); if(n<=0) { printf("\n合計値:0\n"); } else { printf("入力値:\n",n); for(i= 1; i<= n; i=i+2) { if(n%2=1) { sum=sum+i; } } } printf("\n合計値\n",sum); }