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

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q劣等比較の訳し方

中学の英語では優等比較と同等比較はかなり詳しく習いますが、劣等比較は高校でサラッと習うだけですね。そこで質問ですが、英語では劣等比較はあまり好まれないんでしょうか? それとも、訳しにくいから殊更日本の英語では嫌われているんでしょうか?例えば 次の文はどう訳したらいいでしょうか?

My father is less old than my mother.

そして、この文は次の文とどういうニュアンスの差があるでしょうか?

My father is younger than my mother.

Aベストアンサー

劣等比較は受身形と同じで、基本的に使われる場面と言うか、言い方がかなり限られています。

第一の要素は、younger と1語で表現できるのだからその方がいいと言うことでしょう。

第2には、劣等比較は、思考が面倒と言うことがあると思います。old と言うとき、どんどん年をとると言う方向にイメージは広がるわけで、年が若くなると言う情景はイメージしにくいものです。形容詞には一種の方向性があって、その方向性に逆こうした思考を求められるのは面倒と言うことがあるのではないでしょうか。

第3に、ご質問者の方自身が、受身は被害的な感覚を伴うと書かれていたと思いますが、劣等比較は、それと同じように、たとえば馬鹿にしたような感覚を与えるのではないでしょうか。

My father is less old than my mother.
これは、less young に比べると、多少は使われる場面があるような気がします。年をとっていると言うとき、もっと若いといいなと思うことは良くあるので、その意味でless old が使われることはあるかもしれません。しかし、普通は、やはり、young で表現するでしょう。

普通に使われるのは、

It is less expensive than this one. のような場合です。
高い、高価である という感覚とそれがもっと安くならないかと言う感覚は常に誰にでも普通はあるものでしょうから、less expensive と言う表現は普通に使われるものになるわけです。cheap としてしまうと、反対に、安物と言う感覚が出てしまい、less expensive の意味合いとは違ったものになってしまいます。

形容詞には反対の意味を持つものが多いので、less を使うよりは反対の意味を表す形容詞をそのまま使うのが普通であり、それでは意味を表せない場合にless を使うと言うことでしょうね。

劣等比較は受身形と同じで、基本的に使われる場面と言うか、言い方がかなり限られています。

第一の要素は、younger と1語で表現できるのだからその方がいいと言うことでしょう。

第2には、劣等比較は、思考が面倒と言うことがあると思います。old と言うとき、どんどん年をとると言う方向にイメージは広がるわけで、年が若くなると言う情景はイメージしにくいものです。形容詞には一種の方向性があって、その方向性に逆こうした思考を求められるのは面倒と言うことがあるのではないでしょうか。

第3...続きを読む

QC言語についてです 整数nを入力すると、1+2+3...+nの 合計値を出力するプログラムを作りたい

C言語についてです
整数nを入力すると、1+2+3...+nの
合計値を出力するプログラムを作りたいの
ですが
これではなぜできないのでしょうか?

Aベストアンサー

初心者がよくやる間違いです。
気をつけましょう。


教科書等には
 for(〜) { 処理 }  で「処理」を繰り返す
等と書いてありますが、処理が1命令だけの場合
 for(〜) 命令 ;
と書くこともできます。この場合、forの条件に従って「命令」を繰り返すことになります。
この命令には「何もしない」命令、つまり、「空白」も該当します。
つまり
 for(〜);
で、「何もしない」を繰り返すfor文となります。

また、 {} は、 forとか if とかの後でなくても利用できます。
そのときには{文1;文2;...} といいた複数の文を、一つの文として扱う、という意味になります。
これは、 { } をはずしたのと同等です。 (forとかifとかの後等の特定の条件でなければ)

つまり
for(〜) { 処理 }
のつもりで
for(〜) ; { 処理 }
と書いてしまうと

for(〜) ; で「何もしない命令」を繰り返し実行
↓その後
{処理}を (1回だけ)実行

となります。



※ なお、上記は理解しやすいように、ちょっと不正確な部分があります。

初心者がよくやる間違いです。
気をつけましょう。


教科書等には
 for(〜) { 処理 }  で「処理」を繰り返す
等と書いてありますが、処理が1命令だけの場合
 for(〜) 命令 ;
と書くこともできます。この場合、forの条件に従って「命令」を繰り返すことになります。
この命令には「何もしない」命令、つまり、「空白」も該当します。
つまり
 for(〜);
で、「何もしない」を繰り返すfor文となります。

また、 {} は、 forとか if とかの後でなくても利用できます。
そのときには{文1;文2;...} といいた複数...続きを読む

Q比較の文の訳し方が解らなくて困っています

She has a great deal of vitality and is doing as well as could be expected, all things considered.
長文の一部で、医者が病気の妻の容態について旦那に説明しているところからの一文です。

(1)後半部分のas以下が受身になっているのですが、どう訳すのがよいのでしょうか

(2)比較級の文章を作るとき、
「後半から、前半でも使われている語や比較の軸となった形容詞、副詞を省略する」と習ったのですが、
この文の後半部分のas以下に比較の軸となっている語、wellが省略されていると考えて訳していいのでしょうか?

Aベストアンサー

とにかく,as is expected で「予想通りに」です。
それに could/might がはさまって,「しようと思えば予想できるだろう通りに」

expect は「よいことを期待」「悪いことを覚悟」両方含めた「予想・予期」
今回はいいことなので「期待」でもいいです。

この「予想される」という受身の主語は「ものごと」です。
今回なら「よくなる」ということ。

expect O to 原形
こういう構造で受身と考えると,she が主語と考えられますが,
本来,この as is expected という表現はこの形から来ているのでなく,
expect O だけです。

すべてのことを考慮すると,彼女は予想通りに回復しています。

前にもう1つ as がついて,同等比較の形になっていますが,
実質,「予想通り」とだけ訳せば十分です。
(直訳的には「思われるだろうと同じくらいよくなっている」)

QC言語です 整数nを入力すると1+2+....+nという計算式と 合計値を出力するプログラムを作りた

C言語です
整数nを入力すると1+2+....+nという計算式と
合計値を出力するプログラムを作りたいの
ですが
このようになってしまいます
なぜでしょうか?

Aベストアンサー

printf("+%d=",i); → printf("+%d",i);
printf("%d",sum); → printf("=%d",sum);

でそ?

Qこのlower たまあに長文ででてきてこんがります これは比較級ですか?だからアメリカより〜〜と訳す

このlower
たまあに長文ででてきてこんがります
これは比較級ですか?だからアメリカより〜〜と訳すのですか???

Aベストアンサー

#2 で回答した時はスマホであまり画像が見えず、
「オランダより?」という中途半端な回答をしてしまいました。

画像の上の方にある、OECD 諸国の平均、寄付をする人の率47%よりも、
アメリカの方がわずかに低い
一方(while)
ほぼ42%がボランティアをしている、つまり、OECD の平均24%のほぼ2倍。

とにかく、#2 で申し上げたように、「アメリカの方が低い」となります。

S was lower in the US は、比較級にしないと
S was low in the US です。
この in the US は「米国において低い」となりますので、
「米国において、より低い」のです。
「何かと比べて、何かより」低い。

than ~がなく、直前の than the Netherlands と思ってしまいましたが、
後の double the OECD average というボランティアについての比較から
同じように、寄付についても the OECD 平均との比較です。

Q行列A(l行m列)と行列B(m行n列)の積C(l行n列)を求めるプログラム

ヒントを頂きたいです。
よろしくおねがいします。

Aベストアンサー

行列の積を求めるプログラムは、過去にも、何回かでてきました。
参考URLのものは、固定のサイズですけど、
mallocで動的にサイズを確保するか、
計算可能な最大の大きさをあらかじめ決めておくか
することになると思います。

参考URL:http://okweb.jp/kotaeru.php3?qid=1391489

Q比較「彼女は10年前ほど美しくはない。」を英語に訳してください。お願いします><

比較
「彼女は10年前ほど美しくはない。」

を英語に訳してください。
お願いします><

Aベストアンサー

She is not as beautiful as she was ten years ago.

QC言語です 整数nを入力すると 1 21 321 となるプログラムをくみたいのですが どこをどう直せ

C言語です
整数nを入力すると
1
21
321
となるプログラムをくみたいのですが
どこをどう直せば良いでしょうか?

Aベストアンサー

jの値が1からになってますよね?

Q比較級の訳し方について

受験用の英文法問題集を解いていて疑問に思ったことがあったので質問させていただきます。

直接問題内容ではなく、対訳に、なのですが。

When I get older, I want to be an astronaut.

という問題で、訳が
「大きくなるにつれ、私は宇宙飛行士になりたいと思うようになった。」

となっているのですが、これは「私は大きくなったら宇宙飛行士になりたい」ではないのでしょうか?

Olderを今より歳をとったとき→大きくなったら、という解釈なのですが。

whenではなくasなら「~につれて」となるのも納得いくのですが、when+比較級でこのような日本語訳になるのになんだか違和感を感じたのです。

それとも私が考えるような日本語訳にするためにはolderではなくoldじゃなければダメでしょうか?


分かる方いらっしゃいましたらご回答お願いいたします(>_<)

Aベストアンサー

When I get older, I want to be an astronaut.
という問題で、訳が
「大きくなるにつれ、私は宇宙飛行士になりたいと思うようになった。」となっているのですが、これは「私は大きくなったら宇宙飛行士になりたい」ではないのでしょうか?

→olderというのは、今より年をとったらという意味で、赤ちゃんが5歳になることも、80歳の老人が85歳になることでも使えます。ですから、この人がこどもなら、「私は大きくなったら宇宙飛行士になりたい」でよろしいと思います。それを、「大きくなるにつれて」としていますが、この訳は貴殿の言われるように、よくないと思います。

whenではなくasなら「~につれて」となるのも納得いくのですが、when+比較級でこのような日本語訳になるのになんだか違和感を感じたのです。
→同感です。

それとも私が考えるような日本語訳にするためにはolderではなくoldじゃなければダメでしょうか?
get oldだと、年寄りになることです。老人になることを意味してしまいますので、宇宙飛行士になるのは考えられませんので、oldがダメです。
以下のような訳がいいかもしれません。
If I grow up, I want to be an astronaut.
If I become a man (a woman), I want to be an astronaut.

My dream is to be an astronaut in the future.
程度でも言いたいことは伝わります。

以上、ご参考になればと思います。

When I get older, I want to be an astronaut.
という問題で、訳が
「大きくなるにつれ、私は宇宙飛行士になりたいと思うようになった。」となっているのですが、これは「私は大きくなったら宇宙飛行士になりたい」ではないのでしょうか?

→olderというのは、今より年をとったらという意味で、赤ちゃんが5歳になることも、80歳の老人が85歳になることでも使えます。ですから、この人がこどもなら、「私は大きくなったら宇宙飛行士になりたい」でよろしいと思います。それを、「大きくなるにつれて」として...続きを読む

Qint select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)について

見当違いな質問かもしれませんがお願いします。

複数のソケットを監視する際にselectを使う場合のことですが、
selectの動作と戻り値について疑問があります。

http://www.linux.or.jp/JM/html/LDP_man-pages/man2/select.2.html
ここを参照すると、selectの戻り値は
「更新された 3 つのディスクリプタ集合に含まれているディスクリプタの数 (つまり、 readfds, writefds, exceptfds 中の 1 になっているビットの総数) を返す。」
とあります。
私の中でselectは登録してあるFDのうち、一つでも動きがあれば即座にselectを抜けるもの、という認識です。
この認識だとreadfds,writefdsが引数として与えられているとしても、
どちらかのfd_setのうち、一つでも動きがあればselect文は
抜けてしまうことになります。とすると、戻り値として
「readfds, writefds, exceptfds 中の 1 になっているビットの総数」
は常に1ということになってしまいます。しかし、総数というからには
複数同時に1になることもあるはずです。

私の認識が間違っているとは思うのですが、どう間違っているのかわかりません。
select文の動きについて詳しく教えていただけないでしょうか。
または良いページがあれば教えてください。

見当違いな質問かもしれませんがお願いします。

複数のソケットを監視する際にselectを使う場合のことですが、
selectの動作と戻り値について疑問があります。

http://www.linux.or.jp/JM/html/LDP_man-pages/man2/select.2.html
ここを参照すると、selectの戻り値は
「更新された 3 つのディスクリプタ集合に含まれているディスクリプタの数 (つまり、 readfds, writefds, exceptfds 中の 1 になっているビットの総数) を返す。」
とあります。
私の中でselectは登録してあるFDのうち、一つでも動きが...続きを読む

Aベストアンサー

>私の中でselectは登録してあるFDのうち、一つでも動きがあれば即座にselectを抜けるもの、という認識です。
この認識はあっています。
しかし、selectを呼び出す以前にOKになっているFDがあれば、それらは全てビットがONになります。

話しを簡単にする為に、受信のみのソケットを3つ作成したとします。
これらの3つのソケットに向けて相手が電文を送ったとします。
その状態でまだ、こちらはselectを呼び出さずにいます。しばらくしてから、selectを呼び出すと、selectは即座にリターンし、3つのビットが一度にONになっているはずです。
一方、相手が、一切電文を送ってない状態で、selectを呼び出した場合は、何れかのビットがONになればリターンするので、そのときは、貴方が想像しているように
ビットの総数は1になる可能性が高いです。
従って、相手が電文を送る前にselectを呼び出すか、送った後にselectを呼び出すかは、その時のタイミングにより異なります。従って、ビット数の総和が常に1であるとは、考えない方が無難です。(1つのソケットしか使用しない場合は別ですが・・・)

>私の中でselectは登録してあるFDのうち、一つでも動きがあれば即座にselectを抜けるもの、という認識です。
この認識はあっています。
しかし、selectを呼び出す以前にOKになっているFDがあれば、それらは全てビットがONになります。

話しを簡単にする為に、受信のみのソケットを3つ作成したとします。
これらの3つのソケットに向けて相手が電文を送ったとします。
その状態でまだ、こちらはselectを呼び出さずにいます。しばらくしてから、selectを呼び出すと、selectは即座にリターンし、3つのビ...続きを読む


人気Q&Aランキング

おすすめ情報