10 KiB
title | author | date | url | wordtwit_post_info | categories | |||
---|---|---|---|---|---|---|---|---|
『新版 C言語によるアルゴリズムとデータ構造』 | kazu634 | 2008-05-04 | /2008/05/04/_975/ |
|
|
『新版 C言語によるアルゴリズムとデータ構造』を購入した。とりあえず少しずつやって、研修に備える。研修で残業なんかしたくない。さっさと帰るぞー。
- 作者: 柴田望洋,辻亮介
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2005/08/27
- メディア: 大型本
- 購入: 4人 クリック: 14回
- この商品を含むブログ (23件) を見る
演習1-4
整数a, bを含め、その間の全整数の和を求めて返す以下の関数を作成せよ。
int sumof(int a, int b);なお、aとbの大小関係なく和を求めること。*1
私の回答:
#include <stdio.h> int main(void); int sumof(int a, int b); int sumof(int a, int b) { int sum = ; int i; if (a <= b) { for (i = a;i <= b;i++) { sum+= i; } } else { for (i = b;i <= a;i++) { sum+= i; } } return(sum); } int main(void) { printf ("%d\n", sumof(10, 1)); return(); }
演習問題1-5
正の整数値を読み込んで、その値の桁数を表示するプログラムを作成せよ。たとえば、135を読み込んだら『その数は3桁です。』と表示し、1314を読み込んだら『その数は4桁です。』と表示すること。
こいつ、自分は力業でしか解決できなかった。つまり、
- 10 より小さい場合
- 100 より小さい場合
- 1000 より小さい場合
みたいな感じでやっていく方法しか思いつかなかった。でも、回答のやり方はもっと素敵だった。10で割って、商が0になるまでカウンタをインクリメントすればいい訳か。なるへそー。以下、自分なりにその発想を書いてみた。
#include <stdio.h> int main(void); int main(void) { /* i: 桁数カウント用, n: 整数を格納 tmp: 作業用 */ int i, n, tmp; puts("正の整数を入力してね"); /* 正の整数を入力してもらう */ do { printf ("正の整数: "); scanf("%d", &n); } while (n <= ); tmp = n; i = ; /* 10で割った商が0より大きければ桁+1するよ */ while (tmp > ) { tmp = tmp / 10; i++; } printf ("%d は %d 桁です。\n", n, i); return(); }
これの
tmp = tmp / 10;
は
tmp /= 10
でも大丈夫らしい。ちなみにputsは自動的に改行コードを挿入して文字列*2を表示してくれる命令。printfはフォーマットを指定して表示させる命令という違いがあるらしい。scanfは
The scanf() family of functions scans input according to a format, as described below. This format may contain conversion specifiers; the results from such conversions, if any, are stored through the pointer arguments. The scanf() function reads input from the standard input stream stdin
というそうで、とりあえず変数のアドレスを渡すのが仕様らしい。scanfは
scanf(入力をどのように解釈するか, 格納する変数のアドレス);
というように使うらしい。