プロが教えるわが家の防犯対策術!

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

以上の5問です。できるだけ簡単で理解しやすいものでお願いします。

A 回答 (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);
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/10 21:15

こんにちは、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は使っていなかったので間違いだらけかもしれません(^^;
 参考程度にお願いします(..
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/10 21:18

 プログラムを作ってあげるのは簡単ですが、ちょっと意地悪したくなります。



 この時期、学生さんから課題を解いてくれという質問が多いのですが、ただひたすら「分かりません」「全てを教えてください」「できるだけ簡単で理解しやすく」という言い方をする人が多いですね。たとえば英文和訳の問題で、出典も前後の文脈も示さずただ「訳してください」とか。

 答える人だって生身の人間ですから、少しでも良い印象を持たれる質問方法を心がけたほうが得ですよ。

 具体的には「どんな箇所が分からないのか」「自分はどこまで理解しているのか」「これまでに何を試したのか、どんな努力をしたのか」を書けば、皆さん答えやすいでしょう。

 本を読んでも分からないそうですが、最初の1文字から分からないわけではないですよね。では、がんばってください。


……だけではあんまりなので、今回のポイントを挙げましょう。C言語の入門書には載っているはずです。

(1) キーボードから値を入力する方法(ヒント:scanf)
(2) 処理の繰り返し(ヒント:for, while)
(3) 文字列の長さを知る方法、文字列の中から1文字づつ取り出す方法(ヒント:配列, strlen)
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/10 21:25

直答えは何なんでヒントとなるものを。


ちなみにこれは(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/ind …
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/10 21:21

==== 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の答えです。たぶんあってると思います。
わかりにくかったらごめんなさい。
最初は難しいかもしれないけど、慣れだと思います。
頑張ってください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/10 21:20

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