• ベストアンサー

柴田望洋さんの著書の新版明解C言語入門編の演習4-13

encyの回答

  • ency
  • ベストアンサー率39% (93/238)
回答No.4

ANo1さんの回答も、ANo3さんの回答もどちらでもできますね。 どちらも、ANo2さんのおっしゃっている法則から導き出された答えのひとつです。 あと、↓こんな方法↓もあるでしょうか。 /*-------------------------------------- n は入力した整数とする。 --------------------------------------*/ int n; int i, j; /* 途中省略 */ for( i=1, j=1; i<=n; i++, j++ ) { if ( j >= 10 ) { j -= 10; } print( "%d", j ); } …あまり、素直なやり方じゃないですね。 わかりやすいのは、ANo1さんのやり方でしょう。 シンプルなのは、ANo3さんのやり方でしょう。 # C言語の入門書で勉強中の質問者さんに、C++ のコードを書いて「答え」といっている # ANo3 さんの意図はちょっとわかりかねますけど。。。

関連するQ&A

  • C言語の課題

    1、整数型の変数を2個だけ使い、キーボードから5個の整数を読み込み負の整数のみの和を表示プログラムを作れ 2、1、の問題について使える変数を3個に増やしたうえでwhile文を使ったプログラムを作れ 3、1、の問題について使える変数を3個に増やしたうえfor文を使ったプログラムを作れ 1を作ろうとするとかなり長くなってしまうのです… ヒントでもいいので教えてください。

  • C言語についてなんですが

    プログラムの作成で分からないところがあります。 「二つの整数値を読み込み、小さいほうの数以上で大きい数以下の 整数を全て加えた値を表示するプログラムをdo文を使って 作成せよ。」 下の図のようにしたいです。 2つの整数を入力せよ。 整数A:37 整数B:28 28以上37以下の全整数の和は325です。 よろしくお願いします。

  • 柴田望洋氏著「新版 明解C++ 入門編」をテキストにして、BCBでコン

    柴田望洋氏著「新版 明解C++ 入門編」をテキストにして、BCBでコンソールアプリを作成しながら勉強しています。 「List8C-1」での質問ですが、テキストでは、下記に示す「プログラム」を実行して入力すると、下記「実行結果一例」が得られるとなっていますが、実際は「実際の表示結果」の様に、arg[0]のみ表示されます。 これはどんな理由によるものでしょうか?ご教授願います。 //プログラム #include <iostream> using namespace std; int main(int argc,char** argv){ for(int i=0;i<argc;i++) cout << "argv[" << i << "]=" << argv[i] << "\n"; getchar(); } //実行結果一例 「argtest1 Sort BinTree」でエンターすると argv[0]=argtest1 argv[1]=Sort argv[2]=BinTree //実際の表示結果 arg[0]=パス\実行ファイル名

  • C言語初心者です。

    C言語初めて壁にぶち当たりました。下の問題がとけません。よろしくお願いします。 標準入力から整数値を4個,int型の配列へ読み込んで,これかの値を大きい順に配列上で並び替え,出力するプログラムを作成してください。ただし,for文の2重ループを必ず使用してください。

  • C言語 ループの問題

    キーボードから入力される整数を読み込み、その中で10以上の数の個数を数えてその都度出力し、0が入力されたら止まるようなプログラムをwhile文を使って作成するとき、if文をどのようにつかうかがわかりません。

  • 明解C言語 入門編 P219 について

    以下のプログラムの理解について、質問です。 入力した文字列に、0 ~ 9 の数字がそれぞれ何度含まれていたかをカウントするプログラムです。 (明解C言語 入門編 P219) ========== プログラム ========== #include <stdio.h> void str_dcount(const char str[], int cnt[]) { unsigned i = 0; while(str[i]) { // str に '\0' が現れるまで繰り返し if(str[i] >= '0' && str[i] <= '9') cnt[str[i] - '0']++; // !!!! ココです !!!! i++; } } int main(void) { int i; int dcnt[10] = {0}; char str[100]; printf("文字列を入力してください : " ); scanf("%s", str); // 文字列を str へ str_dcount(str, dcnt); // 引数  str = 入力した文字列, dcnt = すべて '0' puts("数字文字の出現回数 "); for(i = 0; i < 10; i++) printf("'%d' : %d\n", i, dcnt[i]); return 0; } ========= 実行結果 ========= 文字列を入力してください : 3.14159 数字文字の出現回数 '0' : 0 '1' : 2 '2' : 0 '3' : 1 '4' : 1 '5' : 1 '6' : 0 '7' : 0 '8' : 0 '9' : 1 ========== 質問内容 ========== 関数 str_dcount 内の 『 cnt[str[i] - '0']++; 』 がどのような処理を行っているのか、理解ができません。 以下のように考えたのですが、それでは上手く動かないとの結論に至りました。 たとえば、i = 0 で、str[100] = 3.14159 であるとき、 /* ループ1回目 */ cnt[0] = str[0] - 0; /* 3 - 0 で cnt[0] には 3 が入る。 */ cnt[0++]; /* ループ2回目 */ cnt[1] = str[1] - 1; /* "." - 1 となる。 数字ではないので減算できずエラーになるのでは? */ cnt[1++]; /* ループ3回目 */ cnt[2] = str[2] - 2; /* 1 - 2 なので、なぜか負の数になってしまう。。 */ cnt[2++]; 配列の添え字が、配列になっている cnt[str[i]] までは理解できますが、 以下の2点が解っていないために理解ができていないようです。 1) cnt[str[i] - '0']++ ; の - '0' が何を行っているのか 配列には数字が入っており、そこから文字 '0' を減算しているのでしょうか? 数字から文字を減算できるのでしょうか? 2)  ++  はどの値を増加させているのでしょうか? 宜しくお願いします。

  • C言語について。

    今、C言語に関する問題をやっているんですが、いまいちわかりません。 その問題というのは↓ ≪問題5 (繰り返し) 例題をもとに、次のような九九の表を出力するプログラムを作成しなさい。  1 2 3 4  5  6  7  8  9  2 4 6 8 10 12 14 16 18  ~(略)                                               ≫ という問題です。それで、その例題というのは↓ ≪例題4 (for文、do while文)  次のプログラムは、入力された整数を一辺とする正方形を出力するプログラムである。動作確認をしなさい。  4       (←入力)  ****  (←出力)  ****  ****  **** /* 正方形 */ #include <stdio.h> void main() {     int hen, i, j;     do{        printf("数字(2~9)を入力してください : ");        scanf("%d", &hen);        if( hen < 2 || hen > 9 )           printf("入力エラーです!\n");     }while( hen < 2 || hen > 9);     for( i = 1 ; i <= hen ; i++)     {         for( j = 1 ; j <= hen ; j++)           printf("*");         putchar('\n');    } }  ≫ ≪例題5 (for文、do while文) 次のプログラムは、入力された整数を一辺とする二等辺三角形を出力するプログラムである。動作確認しなさい。  4      (←入力)  *     (←出力)  **  ***  **** /* 二等辺三角形 */ #include <stdio.h> void main() {     int hen, i, j;     do{        printf("数字(2~9)を入力してください : ");        scanf("%d", &hen);        if( hen < 2 || hen > 9 )           printf("入力エラーです!\n");     }while( hen < 2 || hen > 9 );     for( i = 1 ; i <= hen ; i++ )     {            for( j = 1 ; j <= i ; j++ )              printf("*");          putchar('\n');     } }  ≫ 以上の二つが例題です。 わかりづらかったらすみませんm(_ _)m わかる方(問題5を)教えてくださるとありがたいです。

  • C言語のプログラムについて

    大学のテストの確認をしているのですが、この問題の回答がどうしても分かりません。どなたか教えてください。 9桁以内の整数を入力し、int型の変数に格納し表示するプログラムを作成しなさい。 ただし、先頭は、数字か「+」か「-」とし、それ以外はすべて数字とする。この条件に合わないものおよび10桁以上のものは、「入力エラー」として表示後、再入力を行うこと。 例えば「-123456」や「45678989」は、整数としてint型の変数に格納し、「abcd」や「123-234」は、「入力エラー 」を表示し、再入力を行う。 ---------------------------------------------------------------- また、自動判定の都合上、表示は以下の表示例に準拠すること。 【 23-234 *12345 -123456 を入力した例】 入力エラー 入力エラー 整数は、-123456 です。 お願いします

  • c言語でのプログラミング

    キーボードから複数個の正整数値を読み込み,合計値と平均値(小数第1位まで)を表示するプログラムを作りなさい。 ただし入力数値の個数はプログラミング時には決定していない。 負整数が入力されたら入力値はもうなくなったと判断することとし,負の数は計算には使用しないこととする。またデータは少なくとも1つは入力されるものとする。(p02ex15.c) 検証は1から10までの数字すべてを与え,合計値55,平均値5.5が表示されることを確かめること。 (「1,2,3,4,5,6,7,8,9,10,-1」(-1はデータ終わりの合図)を入力して確かめなさい。) また,1から5までの数字すべてを与え,合計値15,平均値3が表示されることを確かめること。 (「1,2,3,4,5,-1」(-1はデータ終わりの合図)を入力して確かめなさい。) このプログラムのソースコードを教えて下さい。 解説もよろしくお願いします。

  • C言語(行列)

    次の問題がどうしても出来ません。出来れば教えて欲しいです。。。 1~25の整数を下図のように並べて表示するプログラムを作成しなさい(scanfを使わずにfor,ifで自動的に表示する) 1 2 4 7 11 3 5 8 12 16 6 9 13 17 20 10 14 18 21 23 15 19 22 24 25