• ベストアンサー

C言語について

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

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

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

printf関数とscanf関数の使い方、forループの使い方と基本的な動作、配列についての基礎知識はあるものとして回答します。 ■1  sum.c #include <stdio.h> void main(void) {   int n;   int sum = 0;    /* 計算用。最終的に答えが入る */   int i;   printf("n=");   scanf("%d", &n);  /* scanfでは&を忘れずに! */   for (i = 1; i <= n; i++)     sum = sum + i;  /* sumとiの和を、sumの新しい値とする */               /* このためsumの初期値は0にしておいた */   printf("%d\n", sum); } ■2  fac.c #include <stdio.h> void main(void) {   int n;   int fac = 1;    /* 計算用。最終的に答えが入る */   int i;   printf("n=");   scanf("%d", &n);   for (i = 1; i <= n; i++)     fac = fac + i;  /* facとiの積を、facの新しい値とする */               /* このためfacの初期値は1にしておいた */   printf("%d\n", fac); } ■3  ave.c #include <stdio.h> void main(void) {   double n;       /* 実数を扱う場合、double型とする */   double sum = 0.0;   /* 合計計算用 */   double ave;      /* 平均用 */   int i;   for (i = 1; i <= 10; i++) {     printf("%d番目=", i);     scanf("%lf", &n);  /* double型は、%lfで入力する */     sum += n;      /* sum = sum + n; の省略形 */   }   ave = sum / 10;   printf("%f\n", ave);  /* double型は、%fで表示する */ } ■4  cone.c #include <stdio.h> void main(void) {   double r, h;        /* 半径、高さ */   double v;          /* 体積 */   double pi = 3.141592;    /* π */   /* 時には1行に複数の文を並べた方が、(ソースが)見やすくなることもある */   printf("底面(円)の半径="); scanf("%lf", &r);   printf("円錐の高さ=");    scanf("%lf", &h);   v = pi * r * r * h / 3;   printf("円錐の体積は%fです\n", v); } ■5  strrev.c #include <stdio.h> #include <string.h> void main(void) {   char str[256];     /* 文字列保存用 */   char ch;        /* 文字列反転用 */   int n1, n2;       /* 文字列反転用 */   puts("文字列を入力してください");  /* putsだと、\nなしでも改行される */   gets(str);       /* scanfではスペースが入力できないので、getsを使う */   /* <基本アルゴリズム> */   /* 配列strの中を、先頭から後ろへ、終端から前へ、同時に1文字ずつ見て交換していく。 */   /* どこを見ているのかを覚えておくために、先頭から用にn1、終端から用にn2を用意する。 */   /* 先頭は常に0番だが終端は入力内容により変わるため、strlen関数(文字列の文字数を返す)で求める。 */   /* ただし文字数は 1,2,3 … と数えるのに対し、配列アクセスは 0,1,2 … であるため、1を引いて調整する。 */   n1 = 0;   n2 = strlen(str) - 1;   /* 見ていくポイントがすれ違って行き過ぎないように、whileの条件を作る */   while (n1 < n2) {     /* n1番目の値と、n2番目の値を、chを経由して交換する */     ch=str[n1]; str[n1]=str[n2]; str[n2]=ch;     /* 後ろにずらす時は++、前にずらす時は--する */     n1++; n2--;   }   puts(str); }

ikuchan
質問者

お礼

本当にありがとうございます。leaz024さんに感謝です。助かりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • honiyon
  • ベストアンサー率37% (331/872)
回答No.4

こんにちは、honiyonです。 1. :void main(){ : int i; : int key; : int ans = 0; : scanf("%d", &key); : for(i=0;i<key;i++){ : ans += (i+1); : } : printf("Ans.%d", ans); :} 2. :void main(){ : int i; : int key; : int ans = 1; : scanf("%d", &key); : for(i=0;i<key;i++){ : ans *= (i+1); : } : printf("Ans.%d", ans); :} 3. :void main(){ : int total = 0; : int key; : int i; : for (i=0;i<10;i++){ : scanf("%d", &key); : total += key; : } : printf("Ans.%f3.2", key/10); :} 4. :void main(){ : int r; : int h; : scanf("%d", &r); : scanf("%d", &h); : printf("Ans.%f3.2", 3*r*r*h/3); :} 5. :void main(){ : char str[255]; //254文字まで対応 : char ans[255]; //同上 : char *p; : int i; : memset(&str[0], 0, 255); : memset(&str[0], 0, 255); : scanf("%s", &str); : p = &ans[0]; : for (i=strlen(str);i=0;i--){ : &p = str[i]; : } : printf("Ans.%s", ans); :}  暫く Cは使っていなかったので間違いだらけかもしれません(^^;  参考程度にお願いします(..

ikuchan
質問者

お礼

honiyonさんありがとうございます。早速がんばってみます。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
noname#30871
noname#30871
回答No.3

 プログラムを作ってあげるのは簡単ですが、ちょっと意地悪したくなります。  この時期、学生さんから課題を解いてくれという質問が多いのですが、ただひたすら「分かりません」「全てを教えてください」「できるだけ簡単で理解しやすく」という言い方をする人が多いですね。たとえば英文和訳の問題で、出典も前後の文脈も示さずただ「訳してください」とか。  答える人だって生身の人間ですから、少しでも良い印象を持たれる質問方法を心がけたほうが得ですよ。  具体的には「どんな箇所が分からないのか」「自分はどこまで理解しているのか」「これまでに何を試したのか、どんな努力をしたのか」を書けば、皆さん答えやすいでしょう。  本を読んでも分からないそうですが、最初の1文字から分からないわけではないですよね。では、がんばってください。 ……だけではあんまりなので、今回のポイントを挙げましょう。C言語の入門書には載っているはずです。 (1) キーボードから値を入力する方法(ヒント:scanf) (2) 処理の繰り返し(ヒント:for, while) (3) 文字列の長さを知る方法、文字列の中から1文字づつ取り出す方法(ヒント:配列, strlen)

ikuchan
質問者

お礼

#include <stdio.h> void main(void) { で始めるということしか…。scanf for while は見たことはありますが使い方は分かりません。アドバイスありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
noname#628
noname#628
回答No.2

直答えは何なんでヒントとなるものを。 ちなみにこれは(UNIX/C)で実行したときです。 多分WINのC++でも同じ結果は得られると思いま すが未確認で。 ・コマンドラインから因数を求めるのにargvというのが あります。これを利用して、WINから、値を入力します。 ・後キーボードから値を得るための関数にscanfがあります。あんまり推奨じゃないんですがね。 (ex.2つの値をキーボードから入力して足し算を求める) main() { int a,b; scanf ("%d %d" a,b); printf("%d + %d = %d", a, b, a+b); return 0; } まあ、使い方はPRINTFとさほど変わりません。 文字とかはポインタを使ってfgetsつかってやるの が早いかと. (構文) fgets(char *s, int n, FILE *stream); 最初の引数は文字を入れる入れ物で、charのポインタ型、 2番目は入れる文字数、3番目はキーボードがらならSTDIN になります。 多分これだけわかれば簡単にできるんでがんばってくだ さい. 後詳しい情報はしたのURLがわかりやすいですよ.

参考URL:
http://users-web1.iac.ne.jp/~yasutaka/c_lang/index_c.html
ikuchan
質問者

お礼

ありがとうございます。参考になります。

全文を見る
すると、全ての回答が全文表示されます。
noname#794
noname#794
回答No.1

==== 1 ===================== #include <stdio.h> void main(void) { int n; /* 入力値 */ int cnt; /* カウンタ */ int gokei = 0; /* 加算合計 */ printf("n="); scanf("%d",&n); /* 整数値nの入力 */ for( cnt = 1; cnt <= n; cnt++ ){ /* 1~nまで繰り返す */ gokei = gokei + cnt;   /* cntをたす */ } printf("1,nの合計%d\n",gokei); /* 結果出力 */ } ==== 2 ===================== #include <stdio.h> void main(void) { int n; /* 入力値 */ int cnt; /* カウンタ */ int gokei = 0; /* 加算合計 */ printf("n="); scanf("%d",&n); /* 整数値nの入力 */ for( cnt = 1; cnt <= n; cnt++ ){ /* 1~nまで繰り返す */ gokei = gokei * cnt;   /* cntをかけていく */ } printf("1,nの合計%d\n",gokei); /* 結果出力 */ } ==== 3 ===================== #include <stdio.h> void main(void) { int n; /* 入力値 */ int cnt; /* カウンタ */ int gokei = 0; /* 加算合計 */ for( cnt = 1; cnt <= 10; cnt++ ){ /* 1~10まで繰り返す */ printf("n="); scanf("%d",&n); /* 整数値nの入力 */ gokei = gokei + n;   /* nをたす */ } int kekka = goukei/10;    printf("1,nの合計%d\n",kekka); /* 結果出力 */ } ==== 4 ===================== #include <stdio.h> void main(void) { int r,h = 0; /* 入力値 */ int V = 0; /* 結果 */ printf("r="); scanf("%d",&r); /* 整数値nの入力 */ printf("h="); scanf("%d",&h); /* 整数値nの入力 */ V = 3.14*r*r*h/3 printf("1,円錐体積 %d\n",V); /* 結果出力 */ } ============================================================ 1~4の答えです。たぶんあってると思います。 わかりにくかったらごめんなさい。 最初は難しいかもしれないけど、慣れだと思います。 頑張ってください。

ikuchan
質問者

お礼

1~4まででも十分です。ありがとうございます。救われました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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言語で、二つの整数値を読み込んで、前者の値が後者の何%であるかを実数で表示するプログラムを作成しようとして以下のコードを書きました。 #include <stdio.h> int main(void) { int n1, n2 ; puts("二つの整数を入力してください。") ; printf("整数A : \n") ; scanf("%d" , &n1) ; printf("整数B : \n") ; scanf("%d" , &n2) ; printf("Aの値はBの%f%%です。\n" , (double)(n1 / n2) * 100) ; return 0 ; } 上記コードを実行すると、0.000000%のような結果になります。 そこで、最後のキャスト演算子を使用した後の式で(n1 / n2) * 100がまずいのかなと考え、n1 / n2 * 100にしたら上手くいきました。 なぜ、上記コードだと上手くいかないんでしょうか?

  • 至急で、C言語の問題で解答解説お願いします。

    1実数を3つ(a,b,c)を読み込み3辺とする三角形ができるか判定(d(d-a)(d-b)(d-c)>0のとき三角形となる)しできなければ、三角形ではありません!というメッセージを表示し、できる場合は以下のヘロンの公式を用いて三角形の面積を求めるプログラムをC言語で答えてください。d=(a+b+c)/2 s=√{d(d-a)(d-b)(d-c) 2maxの整数値(≧1)をキーボードから入力し、その値に対応した図形を出力するプログラムをC言語で答えてください。 例 max1 max2 max3 * ** *** * ** *** * ** *** ** *** *** 3整数nをキーボード入力しnの値に応じて以下の図形を表示するプログラムをc言語で答えてください。 n=3 n=4 n=5 3 4 5 45 56 67 678 789 890 0123 1234 56789 4整数n(≧0)を入力し歯科の計算を実行するC言語プログラムを答えてください。2つの自然数nとmを読み込みn個の中からm個を取り出すときの組み合わせの数を計算せよ。ただし、n!を計算する関数long fact (int n)を定義し必ずそれを用いること。 5 1つのscanfで2つの10進数を入力し8進数と16進数で表示するプログラムをC言語で答えてください。 6 実数aを入力し少数第1位で四捨五入する関数g(a)をマクロ定義で入力した値の少数第1位を四捨五入して出力するプログラムをC言語で答えてください。 7 4つの実数w,x,y,zを読み込みその最大値を出力するプログラムをC言語で答えてください。ただし、2つの実数の大きいほうを求める関数 double my may (double x,double y)を定義し、その関数を用い、if文を用いないでc言語で答えてください。

  • C言語の宿題ができません。

    演習問題4】 4-1. キーボードから整数値を入力して、奇数か偶数かを表示させる。 (if文で記述する) 4-2. キーボードから2つの整数値を入力して2つの値の大、等、小の関係を表示する。 (if文で記述する) 4-3. 月を入力し、入力した月の日数を表示する。ただし2月は28日とする。 (if文で記述する) 4-4. 月を入力し、入力した月の日数を表示する。ただし2月は28日とする。 (switch文で記述する) 【応用問題4】 r4-1. 問題4-1のプログラムで、さらに値が4の倍数であった場合に4の倍数であること も表示する。 ※ヒント:0は4の倍数ではない r4-2. キーボードから3つの整数値を入力して3つの値の大、中、小の関係を表示 する。 (if文で記述する) r4-3. 月を入力し、入力した月の日数を表示するプログラムで、入力した月が1~12の 範囲を越えていた場合エラーメッセージを表示させる。

  • C言語 10進数→2進数

    キーボードで入力された1以上の正の整数n(1~15)を2進数(4bit)で出力するプログラムを作りたいんですが、 出力例に書かれている内容、 -出力例- 正の整数:12 整数 12 を2進数表記すると下位bitより 0011 となります。 ---- 上記の下位bit、というのはどういう意味でしょうか? また、この下位bitというものをどうやってプログラム上で 表記すればいいのでしょうか? 教えてください。

  • Cプログラム

    c言語で「正整数Nを入力後、N個の実数を入力し、それらの平均値と最大値を表示するプログラム」を教えてください。

  • C言語について

    初項a,公比r,項数nの等比数列で、第n項までの和SnがSmaxを超えない範囲での最大の項数nを求める。 キーボードからa,r,Smaxを入力し等比数列の和SnがSn≦Smaxを満たす最大の項数nとその時のSnを表示するプログラムを作成せよ。 という問題でプログラムを作っているんですが、Snはなんとか求められるのですが項数nが思ったように出力されません。 どのようにすれば求められるのでしょうか? どうかよろしくお願いします。

  • C言語-繰り返し処理

    キーボードから入力される1以上の整数に対して、次のような処理 をするプログラムを作りたいのです。 入力される整数が5であった場合、 正の整数:5 1***** 2 **** 3 *** 4 ** 5 * (0、または負の数であればエラー、終了するようにする) for文等の繰り返しを使って色々書いてみたのですが、 12345***** などとなってしまいます。 どのように書けばいいのか教えてくださるとありがたいです。

  • c言語配列拡張

    c言語配列拡張 20個の要素からなる実数配列 x[ ] から、小さい添え字からn個の要素までの 最大値を取り出すプログラムを作成する。計算する要素の数nはキーボード から入力するか乱数で決定するかは乱数により得る。 a. 乱数が奇数の場合はキーボードから入力する。 b.乱数が偶数の場合この乱数の数を用いる。 誰が知ったら教えてください!

  • C言語で、次のプログラムを作ってみて頂けないでしょうか?

    「キーボードから2以上の整数を入力して、 素数であるかどうか判断をする」 というプログラムをCで作るにはどうしたらいいですか? できたら、見本のプログラムを示して頂けると 一番助かります。 よろしくお願いします。

このQ&Aのポイント
  • DCP-L572Nを使用しているが、長4封筒の横置き横書き印刷ができない
  • PDFの印刷プレビューでは正常に表示されるが、印刷すると用紙サイズ不一致のエラーが出る
  • 問題の解決方法について教えてください
回答を見る

専門家に質問してみよう