blog/content/post/2008/05/04/2008-05-04-00000906.md

10 KiB
Raw Blame History

title author date wordtwit_post_info categories
『新版 C言語によるアルゴリズムとデータ構造』 kazu634 2008-05-04
O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:3977;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}
C
Programming

 『新版 C言語によるアルゴリズムとデータ構造』を購入した。とりあえず少しずつやって、研修に備える。研修で残業なんかしたくない。さっさと帰るぞー。

新版 C言語によるアルゴリズムとデータ構造

新版 C言語によるアルゴリズムとデータ構造

演習1-4

整数a, bを含め、その間の全整数の和を求めて返す以下の関数を作成せよ。

int sumof(int a, int b);

なお、aとbの大小関係なく和を求めること。*1

Amazon CAPTCHA

私の回答:

#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桁です。』と表示すること。

Amazon CAPTCHA

こいつ、自分は力業でしか解決できなかった。つまり、

  1. 10 より小さい場合
  2. 100 より小さい場合
  3. 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(入力をどのように解釈するか, 格納する変数のアドレス);

というように使うらしい。

*1a = 3, b = 5でも、a = 5, b= 3でも結果は変わらないようにする

*2man putsしたら、stringsと強調してあった