--- title: 『新版 C言語によるアルゴリズムとデータ構造』 author: kazu634 date: 2008-05-04 url: /2008/05/04/_975/ wordtwit_post_info: - '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";}}' categories: - C - Programming ---
『新版 C言語によるアルゴリズムとデータ構造』を購入した。とりあえず少しずつやって、研修に備える。研修で残業なんかしたくない。さっさと帰るぞー。
整数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(); }
正の整数値を読み込んで、その値の桁数を表示するプログラムを作成せよ。たとえば、135を読み込んだら『その数は3桁です。』と表示し、1314を読み込んだら『その数は4桁です。』と表示すること。
こいつ、自分は力業でしか解決できなかった。つまり、
みたいな感じでやっていく方法しか思いつかなかった。でも、回答のやり方はもっと素敵だった。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(入力をどのように解釈するか, 格納する変数のアドレス);
というように使うらしい。