• ベストアンサー

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