C言語なら俺に聞け( ..
[2ch|▼Menu]
385:デフォルトの名無しさん
08/06/18 20:45:16
ここはC言語を学ぼうとしている人のためのスレです
情報処理の単位が欲しいだけの人はお帰りください

386:デフォルトの名無しさん
08/06/18 20:46:55
>>382
答えてあげてくださいな



387:デフォルトの名無しさん
08/06/18 20:48:35
ばればれの自演は逆効果w

388:デフォルトの名無しさん
08/06/18 20:49:45
文字列の入力を促し、入力。
その文字列の先頭の文字と同じ文字が文字列の中にいくつふくまれるかを求めるプログラム。
先頭の文字も数のうちに入れる。
(ポインタを用いる)

389:デフォルトの名無しさん
08/06/18 20:54:20
大学で資格の関係でどうしてもC言語をやらなければなりません
どうしてもわからない問題があるのでどなたか教えてください

問題1
三角形の底辺の幅、あるいは段数(どちらか一つ)を入力すると、逆三角形を表示する。例えば、底辺5あるいは段数3を入力すると
*****
***
*
となる。

2
下記のように横と縦の累計を計算して表示する。
配列は使わないこと。

3
10個以下の任意のn個(データ数は入力)のデータを入力し、逆順に出力する。
実行結果は奇数と偶数個の例を示すこと。

4
下記のように横と縦の累計を計算して表示する。
ただし、1次元配列を使うこと。

どの問題でもかまいません
本当に困っているので教えてください




390:デフォルトの名無しさん
08/06/18 20:55:57
>>382

#include <stdio.h>
int main(void)
{
  /* 入力された文字列を収めるためのcharの配列を宣言 */
  /* その他の必要な変数を宣言 */

  fputs("please input a string : ", stdout);

  /* fgets()を使ってcharの配列に入力された文字列を格納 */

  /* 文字の数を数えるint変数を0に初期化する */

  /* charへのポインタにcharの配列の先頭の文字を指させ、
    chraへのポインタが指している先の文字が'\0'でない間、
    charへのポインタを1ずつ文字列の先へずらしながら、
    以下の処理を繰り返す */;
    /* もしchraへのポインタが指している先の文字が
       charの配列の先頭の文字と等しければ */
      /* 文字の数を数えるint変数を1増やす */

  /* printf()を使って文字の数を数えたint変数の値を表示する */

  return 0;
}

391:デフォルトの名無しさん
08/06/18 20:55:59
C言語始めて2ヶ月でこんなもんだいだされました。
文字列の入力を促し、入力。
その文字列の先頭の文字と同じ文字が文字列の中にいくつふくまれるかを求めるプログラム。
先頭の文字も数のうちに入れる。
(ポインタを用いる)



392:デフォルトの名無しさん
08/06/18 20:58:04
>>1を読んでください
それでわからないようならあなたの日本語力と知性は壊滅的なのでおとなしく退学することを勧めます

393:デフォルトの名無しさん
08/06/18 20:58:10
>>389
自分でできないなら資格はありません

394:デフォルトの名無しさん
08/06/18 20:58:13
ああそうですか。
マルチ視ね

395:デフォルトの名無しさん
08/06/18 21:06:28
>>382
#include<stdio.h>
#include <stdlib.h>
int main()
{
 int *c, count = 1, i;
 c = (char *)malloc(1);
 puts("入力どうぞ");
 if ((i = getchar()) == EOF) {
  printf("ちゃんと入力しろ\n");
  exit(1);
 }
 while ((*c = getchar()) != EOF) {
  if (i == *c) count++;
 }
 printf("%d\n", count);
 return 0;
}
できました

396:デフォルトの名無しさん
08/06/18 21:08:14
これはひどい(笑

397:デフォルトの名無しさん
08/06/18 21:10:26
>>382
#include<stdio.h>
#include <stdlib.h>
int main(void)
{
int *c, count = 1, i;
c = (int *)malloc(1);
puts("入力どうぞ");
if ((i = getchar()) == EOF) {
printf("ちゃんと入力しろ\n");
exit(1);
}
while ((*c = getchar()) != EOF) {
if (i == *c) count++;
}
printf("%d こです\n", count);
return 0;
}
すいませんこっちでした

398:デフォルトの名無しさん
08/06/18 21:11:32
どっちも微妙にまちがってんじゃねえか

399:デフォルトの名無しさん
08/06/18 21:14:07
だめだこりゃ

400:デフォルトの名無しさん
08/06/18 21:28:26
故意だろ

401:デフォルトの名無しさん
08/06/18 21:33:36
>>382
有限長の文字列を総当りで生成して、それをコンパイルしていくプログラムを作れば
そのうち自分が作りたかったプログラムが自動生成されるんじゃね?

402:デフォルトの名無しさん
08/06/18 21:35:19
>>401
すっげぇ頭いいなおまえw

403:デフォルトの名無しさん
08/06/18 21:36:59
そして自分が作りたかったプログラムかどうかを
判定するプログラムが要るという話になるんですね分かります

404:デフォルトの名無しさん
08/06/18 21:44:13
故意はかんべん

405:デフォルトの名無しさん
08/06/18 21:44:54
なんだこのviper的なノリはwww

406:デフォルトの名無しさん
08/06/18 22:28:54
>>389
どうしても分からないなら資格取れるわけないじゃん
なんかおかしくね?

407:デフォルトの名無しさん
08/06/18 22:30:56
またこの流れかよw
>>60へどうぞww

408:デフォルトの名無しさん
08/06/18 22:31:54
恋はかんべん

409:デフォルトの名無しさん
08/06/18 23:28:46

関数を呼び出す時って他の文字に置き換えてから使えたほうがいいんですか?

例えばadd関数を呼び出してif文に入れるときの場合
x=add(n);
if(x==1)
みたいな感じか
if(add(n)==1)
どちらがいいんでしょうか?
下のほうでやっていたら友達にそのやり方は見にくくてありえないしプロがそんなことやったら確実に怒られるといわれたんですがどうなんでしょうか?

410:デフォルトの名無しさん
08/06/18 23:31:17
場面にもよるが、ステップによるデバッグがしづらいかもしれない。>後者

411:デフォルトの名無しさん
08/06/18 23:31:44
いや好きにすればいいと思うよ
ただ、関数の結果を他にも使う予定があるなら上の方が良いんじゃない?

412:デフォルトの名無しさん
08/06/18 23:36:20
できる限り前者でやったほうがいいんですか?
習ってる途中で後者の方がわかりやすいと思ったのですがプログラムできる友達に言われたので…


413:デフォルトの名無しさん
08/06/18 23:39:07
>>409
その関数が非常に高コストで、その判定部がループの中にあるなら
よくないなあとは思うけど、そうでないなら別に気にしない。

その友達がプロで怒られた経験があるのであれば、もう少し細かい
理由を教えてもらえばいいんでない?

414:デフォルトの名無しさん
08/06/18 23:40:21
ほかにも使うというのは
x=add(n);
if(x==1)
if(x==2)
みたいな感じですか?
あとプログラマーみたいな人たちの間ではどちらが主流なんでしょうか?


415:デフォルトの名無しさん
08/06/18 23:40:54
ちなみに、プロになれば周りのコードにあわせるということのほうが大事。
優劣をつけられない記法の差において、俺はこうすべき!って一人で
走ってるなら怒る。

416:デフォルトの名無しさん
08/06/18 23:40:58
>>409
その友達がどの程度のプロなのかはこの際置いておくとして、どちらがいいとか悪いとか言うことはない。
明確なことは、前者は変数を一つ使用し、後者は使用しないということである。
add() の返す値をただ一回しか評価しないのなら、後者のように書いて何の問題もない。
値を何度も評価するのなら、前者のように一時変数に格納する必要があるか、なくても効率がいいかもしれない。
後は単なる好みの問題である。

417:デフォルトの名無しさん
08/06/18 23:41:32
文脈によるがこの場合はどちらでもいい。
ところでこのお題はホントはこうじゃなかった?
x = add(n) ; if (x == 1) 

if ((x = add(n)) == 1) 
の比較。

418:デフォルトの名無しさん
08/06/18 23:42:40
>>413
友達はプロではありません 
普通に大学生なので…
多分趣味でやってる程度だと思います。
どこで習ったかはわかりませんが

419:デフォルトの名無しさん
08/06/18 23:43:35
値を使い回したい場合に変数に入れるのは当然として、
そうでない場合はメリットとデメリットがあるので好きにすればいいと思うよ。

○ メリット
・ 関数呼び出しが長い場合、読みやすくなる
・ デバッグ時に戻り値が何だったか分かりやすい

○ デメリット
・ その場でしか使わないような無駄な変数が広いスコープ上に現れてしまう場合もある

420:デフォルトの名無しさん
08/06/18 23:44:20
慣用句的なもの
 if ((fp = fopen(〜)) == NULL)
Is系のメソッドに代表される真偽返却メソッド
 if (isalnum(〜))

これ以外は大抵分けて書くようにしてるね。
多少冗長に思えても、他の人が読みやすいか、また、
誤解を与えにくい書き方になっているか、それを重視してる。

421:デフォルトの名無しさん
08/06/18 23:55:16
誤解を与えにくいように、というのはあまりメジャーではない二項演算子を
使う時などに、冗長ではあるが、括弧をつけて明示するようなことね。

ちゃんと知ってればその括弧が無くても正しく動作する事は理解できるが、
うろ覚えの人でも勘違いを起こさない。

もしかしたら研修明けの新人がメンテするかもしれないし。


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5388日前に更新/94 KB
担当:undef