• 締切済み

C言語の課題(関数)での質問です。急いでます。

C言語の課題(関数)での質問です。急いでます。 C言語の関数のプログラミングついて、ご教授お願いします。 下記のプログラムを関数を用いて実行したいのですが、どのようにすれば良いでしょうか? 回答(できたら簡単な解説)の明記をお願いします。 問題1:入力したプログラムから以下のように出力するプログラムを作成する。 (実行結果例) 文字列を入力: 今日は、晴れです。 今日は、晴れです。 日 す は で 、 れ 晴 晴 れ 、 で は す 日 。すでれ晴、は日今 問題2:ファイル入力した漢字データ(全角)を読み込み、行数を数えながら逆から表示するプログラム。 (実行結果例) (例として次のような C:\test2.txtを入力する) 今日は、晴れです。昨日は、雨で した。明日は、曇でしょう。明後 日は、快晴でしょうか。 ←の文章を以下のようなプログラムにする。 ファイル名を入力してください:C:\test2.txt 1:で雨、は日昨。すでれ晴、は日今 2:後明。うょしで曇、は日明。した 3:。かうょしで晴快、は日 問題3:ファイルのデータ(英文)を読み込み、一行毎の文字数(スペースも含む)とワード数を数えるプログラム。 (実行結果例) (例として次のような C:\test3.txtを入力する) And friends just can't be found Like a bridge over troubled water I will lay me down ←の文章を以下のようなプログラムにする。 ファイル名を入力してください:C:\test3.txt 1:And friends just can't be found ⇒31文字、6ワード 2:Like a bridge over troubled water ⇒33文字、6ワード 3:I will lay me down ⇒18文字、5ワード 問題4:1月1日が金曜日の平年(たとえば2010年)について、月日の入力データから、曜日を求めるプログラム。 (実行結果例) 月を入力してください:9 日を入力してください:15 9月15日は、水曜日です。 以上4問です。どうか回答よろしくお願い致します

みんなの回答

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.12

もう見ていないかもしれませんが | 半角スペースを直してもエラーなのですが・・・ | | 6行目にsyntax error | 8行目にunrecognized character | | と表示されます。 本当にそうか? 直してあるなら unrecognized character なんてのは出ないはずですよ。 全角スペースとかも削除してますか? プログラムを作る際、 コンパイルエラーを自力で解決できるぐらいには なっていないと、後々苦しいですよ。

回答No.11

>&nbsp;はぶっ飛ばしちゃうかも・・・ ANo.2 がダメダメなので、私にやらせてください。 他の問題も、暇があればがんばってやるかも、期待しないでください。 /* gcc --input-charset=cp932 --exec-charset=cp932 -mno-cygwin */ /* 入力文字列は全角文字のみに限る。 */ #include <stdio.h> #include <wchar.h> #include <locale.h> int main(void) { int i, j, len; wchar_t buff[200]; setlocale(LC_CTYPE, ""); wprintf(L"文字列を入力: "); _getws(buff); len = (int)wcslen(buff); _putws(L""); for(i=0; i<len; i++) putwchar(buff[i]); _putws(L""); for(i=1; i<len-1; i++) { putwchar(buff[i]); for(j=0; j<len-2; j++) wprintf(L" "); putwchar(buff[len-1-i]); wprintf(L"\n");} for(i=len-1; i>=0; i--) putwchar(buff[i]); return 0; }

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.10

まあ、そのまま提出することはできないと思いますよ。 エラーを自分で解決することもできないみたいですし。 それぞれのプログラムは、ざっと確認していますが、それぞれトラップをしかけています。理解していなければ、まんまとはまるでしょうね。

  • katouka09
  • ベストアンサー率50% (130/256)
回答No.9

学校の課題を丸投げして、教えてもらった回答を提出しては、授業の内容を理解していないと判断されますよ。 自分でプログラムを作成して、初めて授業の内容が理解できます。 疑問点があるなら、出題者(先生)に質問するのが筋でしょう。 出題者がここの掲示板を見ていて、同じ回答が提出されたら、あなたに及第点をつけると思いますか? 授業を真面目に受けていれば、作成できる内容と思えます。 自分で作成したソースを提示してください。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.8

#7です。 原文を出力するのを忘れていました。 それぐらいは自分でやってください。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.7

問題3が抜けていました。 #include <stdio.h> #include <wchar.h> #include <stdlib.h> #include <ctype.h> #include <locale.h> void puti(int value, FILE *stream) {   div_t d = div(value, 10);   if (d.quot > 0) puti(d.quot, stream);   fputwc(L"0123456789"[d.rem], stream); } int main(int argc, char *argv[]) {   if (argc == 2)   {     FILE *stream = fopen(argv[1], "r");     int line = 1;     setlocale(LC_CTYPE, "");   next_line:;     int c = getc(stream);     if (c == EOF)       return 0;     ungetc(c, stream);     printf("%d:", line++);     int words = 0, chars = 0;     int letters = 0;     for (;;)     {       c = getc(stream);       switch (c)       {       case '\n':       case EOF:         if (letters > 0) ++words;         fputws(L"\n⇒", stdout);         puti(chars, stdout);         fputws(L"文字、", stdout);         puti(words, stdout);         fputws(L"ワード\n", stdout);         if (c == EOF) return 0;         goto next_line;       case ' ':         ++chars;         if (letters > 0) ++words;         letters = 0;         break;       default:         ++letters;         ++chars;         break;       }     }   } } この問題は、結果の数字を全角で出力しないといけないところがポイントですね。 あと、1行の長さが事前にわからないので、fgets等で一気に読み込めない(こともないけどかえって面倒な)のが、工夫すべきところです。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.6

問題4は、こんなのでどうでしょうか? #include <stdio.h> #include <wchar.h> #include <locale.h> #include <time.h> int main(void) {   struct tm t = { .tm_year = -1900 + 2010 };   char s[3];   setlocale(LC_CTYPE, "");   fputws(L"月を入力してください:", stdout); fflush(stdout);   scanf("%d", &t.tm_mon); --t.tm_mon;   fputws(L"日を入力してください:", stdout); fflush(stdout);   scanf("%d", &t.tm_mday);   mktime(&t);   wprintf(L"%d月%d日は、%lc曜日です。\n", t.tm_mon + 1, t.tm_mday, L"日月火水木金土"[t.tm_wday]); } この辺になると、エラーチェックを省略するのは気持ち悪いのですが、まあいいでしょう。 strftimeを使うと、LC_TIMEを設定しても、期待通りに変換してくれるかどうかわからないところがポイントですね。 何しろ、処理系不明ですから。 厳密にいえば、wchar_tで漢字を表現できるかどうかもわからないのですが、まあいいでしょう。

  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.5

問題1は実際には以下のように表示されるのではないですかね?? 今日は、晴れです。 日       す は       で 、       れ 晴       晴 れ       、 で       は す       日 。すでれ晴、は日今 そして、この「今日は、晴れです。」の部分を入力した文字列で構成して出力しなさい。 ・・・ということではないですかね・・・ >入力したプログラムから以下のように出力するプログラムを作成する。 入力した文字列から以下のように出力するプログラムを作成する。 の間違いでしょうね。 >>学校の課題の答えを全て」を求めているのでしょうか? >はい、そうです。よろしくお願いいたします。 ここは課題やシステムを作ってくれる場所ではありません。 少しもコードを書いたり考えたりはしていないんでしょうか? 少しでも書いたのなら、そのコードを書けばもうちょっとまともな回答が付くでしょう。 余談 私が課題を出した先生なら、#2さんのようなコードを回答してきた生徒はぶっ飛ばしちゃうかも・・・

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

問題2も一応作りました。 #include <stdio.h> #include <wchar.h> #include <locale.h> void f(FILE *stream) {   wint_t wc = fgetwc(stream);   if (wc != L'\n' && wc != WEOF)   {     f(stream);     fputwc(wc, stdout);   } } int main(int argc, char *argv[]) {   char filename[FILENAME_MAX];   setlocale(LC_CTYPE, "");   if (argc == 2)   {     FILE *stream = fopen(argv[1], "r");     for (int i = 1; !feof(stream); i++)     {       wprintf(L"%d:", i);       f(stream);       fputwc(L'\n', stdout);     }   } } ただ、 > 2:後明。うょしで曇、は日明。した の末尾がどうしても「たし」になってしまいます。 ここの仕様がよくわかりませんでした。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

> ただ、実際に(上矢印)の通りに打ってみたらエラーと表示されました(涙) 半角スペースぐらいは直してくださいね。

yamamoto2096
質問者

補足

半角スペースを直してもエラーなのですが・・・ 6行目にsyntax error 8行目にunrecognized character と表示されます。

関連するQ&A