未提出が35名いる。
一旦文字列の最後まで走査してから、後戻りする方針の時、
char *mystrrchr(const char *str, int c) { for ( ; *str; str++) { /* いったん最後まで走査する */ } for (str--; *str; str--) { if (*str==c) { return (char *) str; } } return NULL; }では、文字列の先頭には'\0'が入っていないので、うまく終了しない。
char *mystrrchr(const char *str, int c) { for ( ; *str; str++) { /* いったん最後まで走査する */ } for ( ; str>0; str--) { if (*str==c) { return (char *) str; } } return NULL: }でも str>0はほとんど常に成り立つのでうまく終了しない。 文字列の最初を別の変数に記録しておく必要がある。
char *mystrrchr(const char *str, int c) { const char *p = str; /* 文字列の先頭を記録する */ for ( ; *str; str++) { /* いったん最後まで走査する */ } for ( ; p<=str; str--) { if (*str==c) { return (char *) str; } } return NULL; }いずれにせよ、この方針は文字列を前向きと後向きの2回走査する必要があるので、 効率が良くない。
以後再提出する人は、前向き一度の走査で済む解答を考えること。
未提出者が45名いる。
OKは10名。
argv[0]は“プログラムを起動したコマンド名” なので合計を求める時にargv[0]を足してはいけない。
合計を求めるための変数sumは0に初期化しなければならない。
自動記憶域を持つ変数は初期化子が与えられていない場合、その初期値は不定値となる。 (教科書 p.142)0になっていたとしてもそれは偶然であり、いつもそうなるとは期待できない。
提出者は3名だけだった。
未提出が 15名いる(考察も未提出・提出遅れは減点する。)
冬休みにしっかり復習できただろうか?