%=====================================================================
% 秋田高専 5E 計算機応用 テキスト
%テーマ 散布路留プログラム
%    本テキストの内容
%        ・
%        ・
%        ・
%        ・
%
% last updated 2005.4.13
%    created by  Masashi Yamamoto
%     e-mail yamamoto@akita-nct.jp
%=====================================================================
\documentclass[10pt,a4paper]{jarticle}
\usepackage{graphicx,amsmath,amssymb,ascmac,theorem,float}
\usepackage{listings}
\oddsidemargin 0mm  %左の余白 25.4mm-0mm奇数ページ
\evensidemargin 0mm %左の余白 25.4mm-0mm偶数ページ
\textwidth 160mm
\newcommand{\command}[1]{「\texttt{#1}」}
\newcommand{\tw}[1]{\texttt{#1}}
\newcommand{\vm}[1]{\boldsymbol{#1}}
%
\renewcommand{\lstlistingname}{プログラム}
\lstset{language=C,%
        basicstyle=\footnotesize,%
        commentstyle=\textit,%
        classoffset=1,%
        keywordstyle=\bfseries,%
	frame=tRBl,framesep=5pt,%
	showstringspaces=false,%
        numbers=left,stepnumber=1,numberstyle=\footnotesize%
	}%
%
\begin{document}
\title{C言語の学習\\定数・変数とデータ型・配列と文字列}
\author{山本昌志\thanks{独立行政法人　秋田工業高等専門学校　電気工学科}}
\date{2004年4月28日}
\maketitle
%
%=====================================================================
\section{本日の学習内容}
%=====================================================================
C言語の基本的な部分を学習する。内容は、教科書の2〜4章である。各章の内容と理解す
べきことは、以下の通りである。
%
\begin{list}{}{\leftmargin=5zw \rightmargin=2zw \labelsep=1zw
 \labelwidth=5zw \itemindent=0pt}
 \item[\textbf{2章}]\textbf{定数}
		      \begin{itemize}
		       \item 整数と実数の定数の書き方が分かる。
		       \item エスケープシーケンスについては、水平タブと改行の使い方が
			     分かること。
		      \end{itemize}
 \item[\textbf{3章}]\textbf{変数とデータ型}
		      \begin{itemize}
		       \item 変数宣言の意味が分かる。
		       \item 文字型\tw{char}と整数型\tw{int}、倍精度実数型
			     \tw{double}型が使える。
		      \end{itemize}
 \item[\textbf{4章}]\textbf{配列と文字列}
		      \begin{itemize}
		       \item 配列がどのようなものか理解できる。
		       \item 整数型や実数型の配列が使える。
		      \end{itemize}
\end{list}
%
%
%=====================================================================
\section{定数(教科書の2章)}
%=====================================================================
教科書のp.20を見ると分かるようにいろいろな定数がある。しかし、この講義は主に数値計算
について学習するので、使う定数は決まっている。もっとも多く使われるのが、整数を表
す整数定数と実数を表す浮動小数点定数である。文字定数や文字列リテラルは使用頻度が
少ない。その他のものはほとんど使われない。
%
%---------------------------------------------------------------------
\subsection{整数型と実数型}
%---------------------------------------------------------------------
整数型と実数型の定数を変数に代入して、画面へ出力するソースをプログラム
\ref{prog:const}に示す。各行の内容は以下の通りである。
%
\begin{description}
 \item[1, 2, 11, 12行] とりあえずおまじないと思って欲しい。
 \item[3行] 整数型の変数\tw{seisu}を宣言。詳細は\ref{sec:variable}節で述べる。
 \item[4行] 倍精度実数型の変数\tw{jisu}を宣言。詳細は\ref{sec:variable}節で述べる。
 \item[6,7行] 変数に定数を代入。コンピューター言語で値を代入する場合、左辺の変数
	    に右辺の計算結果を代入することになる。必ず、左辺は変数で、右辺は数値と
	    なる。
 \item[9行] ダブルクォーテーション\footnote{記
	    号 "%"
	    をダブルクォーテーションと言う。}で囲まれた部分中の\tw{\%d}の部
	    分に変数 \tw{seisu} の値を10進数(decimal)で、\tw{\%e}の部分に変数
	    \tw{seisu}をeタイプで置き換えディスプレイに表示する。この\tw{\%d}や
	    \tw{\%e}を変換仕様という(教科書p.322)。{\tt $\backslash$n}は改行である。
 \end{description}
%
\begin{lstlisting}[caption=定数の学習プログラム,label=prog:const]
#include <stdio.h>
int main(){
  int seisu;
  double jisu;
  
  seisu = 65;
  jisu = -69.53e-7;
  
  printf("seisu = %d    jisu = %e\n", seisu, jisu);
  
  return 0;
}
\end{lstlisting}\vspace{5mm}

プログラム\ref{prog:const}を直して、以下の練習問題を実行させよ。
\begin{quote}
 \begin{itemize}
  \item[\textbf{[練習1]}]変数\tw{seisu}に $-1234$ を\tw{jisu}に$-6.987 \times
			 10^{-68}$を代入するプログラムを作成せよ。
  \item[\textbf{[練習2]}]変数\tw{seisu}に $-6.987 \times 10^{-68}$ を\tw{jisu}に
			 $-1234$を代入するプログラムを作成せよ。そして、実行結果
			 の内容を考察せよ。
  \item[\textbf{[練習3]}]変数\tw{seisu}に $-10/3$ を\tw{jisu}に
			 $-10/3$を代入するプログラムを作成せよ。そして、実行結果
			 の内容を考察せよ。
 \end{itemize}
\end{quote}
%
%---------------------------------------------------------------------
\subsection{エスケープシーケンス}
%---------------------------------------------------------------------
教科書の表2-4(p.28)のものをエスケープシーケンスと言う。これは2つあるいはそれ以上
の文字列で表す特殊文字である。それらの機能は表に書いてあるとおりであるが、数値計
算で重要なものは、{\tt $\backslash$n}と{\tt$\backslash$t}である。とりあえず、こ
の2つの動作を理解せよ。

プログラム\ref{prog:const}の9行目の\tw{printf}関数のダブルクォーテーション内を直
す以下の練習問題を実行させよ。
%
\begin{quote}
 \begin{itemize}
  \item[\textbf{[練習1]}]{\tt $\backslash$n}と適当に挿入して、その動作を確認せよ。
			 挿入は、1個のみならず、2〜3個それを挿入した場合も確認せ
			 よ。
  \item[\textbf{[練習2]}]{\tt $\backslash$t}と適当に挿入して、その動作を確認せよ。
			 挿入は、1個のみならず、2〜3個それを挿入した場合も確認せ
			 よ。
 \end{itemize}
\end{quote}
%
%
%=====================================================================
\section{変数とデータ型(教科書の3章)}\label{sec:variable}
%=====================================================================
C言語の変数は、数学で使われる変数とよく似ており、そこに数値を代入することができ
る。実際には、コンピューターのメモリーの一部の記憶場所を示しており、そこに数値を
記憶するようになっている。イメージは、図\ref{fig:image_variable}に示しているとお
りで、変数とは数値を入れる箱のようなものである。整数型と倍精度実数型の変数は、数
学の変数と全く同じである。
%
\begin{figure}[hbpt]
 \begin{center}
  \includegraphics[keepaspectratio, scale=0.8]
  {figure/image_variable.eps}
  \caption{変数のイメージ。変数とはデータを入れる箱のようなもの。}
  \label{fig:image_variable}
 \end{center}
\end{figure}
%

図の左端に書かれている\tw{char}と\tw{int}、\tw{double}はその変数の型を示してお
り、それぞれ文字型、整数型、倍精度実数型を表す。これは変数に代入できる値の種類が
決まっていると考える。文字型の変数(\tw{c, h, moji})には1文字が、整数型の変数
(\tw{i, j, seisu})には整数が、倍精度実数型の変数(\tw{x, y, jisu})には実数を入れ
ることができる。このように変数には、型と変数名があることを理解して欲しい。プログ
ラム中では、この変数に入れられた値を操作するのである。

型と変数名の指定は、プログラム中の中括弧{ }で囲まれた部分の最初に
%
\begin{quote}
 \setlength{\baselineskip}{12pt}
 \begin{verbatim}
	char c, h, moji;
	int i, j, seisu;
	double x, y, jisu;
 \end{verbatim}
\end{quote}
%
のように書く。これを変数の宣言と言う。

諸君は方程式を使って問題を解く場合、変数というものを使っている。数学の変数とC言
語の使用方法での決定的な違いは、変数の型の宣言が必要なことである。プログラムの動
作にはこの変数宣言は無駄のように思える。これが必要なのは、コンピューターの都合で
ある。たいていのプログラミング言語では、これを宣言することにより、メモリーを確保
する。必要なメモリー量はプログラマーが決めなくてはならない。コンピューターは、こ
のプログラムがどの程度のメモリーが必要か全く分からないからである。

図\ref{fig:image_variable}を見て分かるように、箱の大きさが型によって異なる。これ
は、一つのデータを表現するために必要な情報量が異なるためである。情報量の単位は、
ビット(bit)が使われる。2 進数の1桁を1ビットと言う。8ビットで1バイトとなり、それ
がコンピューターで使われる基本単位となる。

同じ\tw{int}型でもいろいろあり、表現できる範囲が異なっている\footnote{一つの文字
のみ代入可能なものは文字型の変数である。コンピューター内部では文字は整数として扱
うので、文字型変数に整数が代入できるのである。}。これは一つの変数の情報量の差か
ら生まれる。C言語で使われる型によって表現できる範囲は、教科書の表3-1(p.34)に示さ
れている。全てのC言語は同一になっておらず、諸君が使っているシステムではこの表の
ようになっている。いろいろな型があるが、ほとんどの場合、\tw{char}、\tw{int}、
\tw{double}で十分である。諸君が作るプログラムでは、これらで十分、間に合うが、問
題が生じたときのみ他の型を使えば良い。

文字型の変数に代入できるのは、諸君の教科書の表紙の裏の黄色のページの文字コード表
に書かれているもののみである。漢字や平仮名を代入したい場合は、文字型の配列を使う
ことになる。興味のある者は自分で調べよ。

文字型と整数型、実数型の変数を宣言、それに値をに代入、そして画面へ出力するソース
をプログラム\ref{prog:variable}に示す。各行の内容は以下の通りである。
%
\begin{description}
 \item[3行] 文字型の変数を宣言。
 \item[4行] 整数型の変数を宣言。
 \item[5行] 倍精度実数型の変数を宣言。
 \item[6-7行] シングルクォーテーション\footnote{記
	    号 \tw{'} をシングルクォーテーションと言う。}で囲まれた文字が代入さ
	    れる。
 \item[16行] 文字変数を出力するための変換仕様は、\tw{\%c}を使う(教科書p.322)。
 \end{description}
%
\begin{lstlisting}[caption=変数の学習プログラム,label=prog:variable]
#include <stdio.h>
int main(){
  char c, h;
  int i, j;
  double x, y;
  
  c = 'a';
  h = 'A';

  i = 123;
  j = -987654321;
  
  x = -1.23456;
  y = 9.87654321e-12;

  printf("c = %c \t h = %c\n", c, h);
  printf("i = %d \t j = %d\n", i, j);
  printf("x = %e \t y = %e\n", x, y);
  
  return 0;
}
\end{lstlisting}\vspace{5mm}
%
%
\begin{quote}
 \begin{itemize}
  \item[\textbf{[練習1]}]プログラム\ref{prog:variable}を、以下のように変
			 数を使うように変更せよ。もちろん、変数の代入された結果
			 も表示させること。
			 \begin{itemize}
			  \item 文字型の変数、\tw{hoge}と\tw{hogehoge}を宣言し、
				それぞれに\tw{A}と\tw{k}を代入する。
			  \item 整数型の変数、\tw{fuga}と\tw{fugafuga}を宣言し、
				それぞれに-123と321を代入する。
			  \item 倍精度実数型の変数、\tw{foo}と\tw{bar}を宣言し、
				それぞれに$-0.1987$と$-96.85\times 10^{-28}$を
				代入する。
			 \end{itemize}

 \end{itemize}
\end{quote}
%
%=====================================================================
\section{配列と文字列(教科書の4章)}\label{sec:array_strings}
%=====================================================================
%---------------------------------------------------------------------
\subsection{配列とは}
%---------------------------------------------------------------------
\ref{sec:variable}節で示した変数\footnote{これを単純型のデータ構造と言う}の場合、
一度に確保できるメモリーの領域は1個なので、大量のデータを扱うのは不向きである。
変数だけを使って、100万個のデータを扱うことは不可能である。100万個の変数名
を用意するのはナンセンス。そこで、順序づけられた同じ型のデータが複数ある場合、配
列というデータ構造が考えられた。

これは、同じ型のデータを任意の個数宣言し、配列名と自然数
\footnote{ここでは、0も自然数に含める。}でアクセスすることができるようにしたもの
である。配列を使うためには、
%
\begin{quote}
 \setlength{\baselineskip}{12pt}
 \begin{verbatim}
	int i[10], j[100][100];
 \end{verbatim}
\end{quote}
%
のように宣言をする。こうすると、
%
\begin{itemize}
 \item 配列名\tw{i}の整数型のデータ領域が10個用意される。用意されるデータ領域
       は、\tw{i[0]}〜\tw{i[9]}である。
 \item 配列名\tw{j}の整数型のデータ領域が10000個用意される。用意されるデータ領域
       は、\tw{j[0][0]}〜\tw{j[99][99]}である。。
\end{itemize}
%
となる。図\ref{fig:image_array}のように、メモリー領域が確保される。このデータ構
造では、配列名と添え字(インデックス)、たとえば\tw{i[3]}や\tw{j[25][49]}を指定す
ることで、その領域から値を入出力できる。
%
\begin{quote}
 \setlength{\baselineskip}{12pt}
 \begin{verbatim}
	i[3]=5;         /* 配列 i[3] に 5 を代入　*/
	c=j[25][49];    /* 配列 j[25][49] の値を変数 c へ代入 */
 \end{verbatim}
\end{quote}
%
%
\begin{figure}[H]
 \begin{center}
  \includegraphics[keepaspectratio, scale=0.8]
  {figure/image_array.eps}
  \caption{配列のイメージ。データを入れる箱がいっぱいある。ただし箱の大きさは全
  て同じ。}
  \label{fig:image_array}
 \end{center}
\end{figure}
%

添え字が1つのものを一次元配列と言い、それ以上のものを多次元配列と言う。C言語では
多次元配列を使う場合、
%
\begin{quote}
 \setlength{\baselineskip}{12pt}
 \begin{verbatim}	
	int hoge_1[100], hoge_2[100][100], hoge_3[100][100][100];
	double huga[10], huge[10][10], hugo[10][10][10];
 \end{verbatim}
\end{quote}
%
のように宣言を行う。これらも、配列名と複数の添え字で、そこにあるデータにアクセス
する事ができる。3次元以上ももちろん可能である。
%
%---------------------------------------------------------------------
\subsection{数列、ベクトル、行列を配列で表現}
%---------------------------------------------------------------------
一次元の配列は数学の数列とベクトルと、二次元の配列は行列とよく似ている。実際、数値計算で
数列やベクトル、行列に関わる数値演算を行うときには、配列が使われる。これ
らの数学の表現も、やはり順序づけられた数の集まりにすぎないので、配列と同じである。
一方、スカラー量の場合には、通常の変数として扱えばよい。

数列やベクトル、行列の成分を表す場合、下添え字がつく。その添え字と同じように、配
列の添え字を使う。実に簡単である。ただし、数学の場合、添え字が 1 から始まること
が多いが、C言語の場合、それは 0 から始まるので注意が必要である。配列の宣言の時、
添え字部分に書かれるのは要素数であるので、ベクトルや行列の要素数に 1 を加えた数
で領域を確保しなくてはならない。必要数より大きめに確保するのが普通である。
%
\begin{table}[H]
 \begin{center}
  \begin{tabular}{cc}
   %---- 数列・ベクトル --------------------
   \begin{minipage}[t]{0.45\hsize}
    \caption{数列やベクトルを配列で表現}
    \label{table:list_vector}
    \begin{center}
     \begin{tabular}{ll} \hline
      \multicolumn{1}{c}{数学} & \multicolumn{1}{c}{C言語} \\
      \hline\hline
      $a_1$      & \tw{a[1]} \\
      $a_2$      & \tw{a[2]} \\
      $a_3$      & \tw{a[3]} \\
      $\vdots$   & $\vdots$ \\
      $a_i$      & \tw{a[i]} \\
      $a_{i+1}$  & \tw{a[i+1]} \\
      $\vdots$   & $\vdots$ \\
      $a_{2i+1}$ & \tw{a[2*i+1]} \\
      $\vdots$   & $\vdots$ \\
      \hline
     \end{tabular}
    \end{center}
   \end{minipage}
   %---- 行列 --------------------
   \begin{minipage}[t]{0.45\hsize}
    \caption{行列を配列で表現}
    \label{table:matrix}
    \begin{center}
     \begin{tabular}{ll} \hline
      \multicolumn{1}{c}{数学} & \multicolumn{1}{c}{C言語} \\
      \hline\hline
      $a_{1\,1}$       & \tw{a[1][1]} \\
      $a_{1\,2}$       & \tw{a[1][2]} \\
      $a_{1\,3}$       & \tw{a[1][3]} \\
      $\vdots$         & $\vdots$ \\
      $a_{3\,3}$       & \tw{a[3][3]} \\
      $a_{3\,4}$       & \tw{a[3][4]} \\
      $\vdots$         & $\vdots$ \\
      $a_{i\,j}$       & \tw{a[i][j]} \\
      $\vdots$         & $\vdots$ \\
      $a_{i+1\,j+1}$   & \tw{a[i+1][j+1]} \\
      $\vdots$         & $\vdots$ \\
      $a_{2i+1\,3j+2}$ & \tw{a[2*i+1][3*j+2]} \\
      $\vdots$         & $\vdots$ \\
      \hline
     \end{tabular}
    \end{center}
   \end{minipage}
  \end{tabular}
 \end{center}
\end{table} 
%
%-------------------
\subsubsection{乗算}
%-------------------
配列を使って行列とベクトルのかけ算を行うソースをプログラム
\ref{prog:mat_times_vector}にしめす。この例は要素数が少ない場合であるが、多くな
ると、後で学習する繰り返し処理が必要となる。言うまでもないと思うが、行列とベクト
ルのかけ算
%
\begin{equation}
 \begin{aligned}
  \begin{bmatrix}
   a_{11} & a_{12} & a_{13} & \ldots & a_{1n} \\
   a_{21} & a_{22} & a_{23} & \ldots & a_{2n} \\
   a_{31} & a_{32} & a_{33} & \ldots & a_{3n} \\
   \vdots & \vdots & \vdots & \ddots & \vdots \\
   a_{n1} & a_{n2} & a_{n3} & \ldots & a_{nn} 
  \end{bmatrix}
  \begin{bmatrix}
   b_{1} \\
   b_{2} \\
   b_{3} \\
   \vdots \\
   b_{n}
  \end{bmatrix}
  =
  \begin{bmatrix}
   c_{1} \\
   c_{2} \\
   c_{3} \\
   \vdots \\
   c_{n}
  \end{bmatrix}
 \end{aligned}
\end{equation}
%
の演算は、
%
\begin{align}
 c_i=\sum_{\ell=1}^n a_{i\ell}b_{\ell}
\end{align}
%
である。

$n=2$の場合の計算を行うプログラム
\ref{prog:mat_times_vector}の各行の内容は以下の通りである。
%
\begin{description}
 \item[3行] 実数型の配列を宣言。
 \item[5-11行] 配列(行列とベクトル)の要素に値を代入。
 \item[13-14行] 行列とベクトルの乗算。
 \end{description}
%
\begin{lstlisting}[caption=行列とベクトルのかけ算,label=prog:mat_times_vector]
#include <stdio.h>
int main(){
  double a[3][3],b[3],c[3];
  
  a[1][1] = 1.5;                     /* 行列にデータを代入 */
  a[1][2] = 2.6;
  a[2][1] = -6.3;
  a[2][2] = -0.58;

  b[1] = 28.5;                       /* ベクトルにデータを代入 */
  b[2] = -19.1;
  
  c[1] = a[1][1]*b[1]+a[1][2]*b[2];  /* 行列とベクトルの乗算 */
  c[2] = a[2][1]*b[1]+a[2][2]*b[2];

  printf("c[1] = %e\n", c[1]);       /* 結果表示 */
  printf("c[2] = %e\n", c[2]);
  
  return 0;
}
\end{lstlisting}\vspace{5mm}
%
%
\begin{quote}
 \begin{itemize}
  \item[\textbf{[練習1]}]プログラム\ref{prog:mat_times_vector}を参考にして、
			 $\vm{Mx}$を計算するプログラムを作成せよ。
%
\begin{equation*}
 \begin{aligned}
  & \vm{M}=
  \begin{bmatrix}
   1 & 2 & 3 \\
   4 & 5 & 6 \\
   7 & 8 & 9 \\
  \end{bmatrix}&
    & \vm{x}=
  \begin{bmatrix}
   1 \\
   2 \\
   3
  \end{bmatrix}
 \end{aligned}
\end{equation*}
%
 \end{itemize}
\end{quote}
%
%-----------------------------
\subsubsection{フィボナッチ数列}
%-----------------------------
次のサンプルプログラムは、フィボナッチ(Fibonatti)数列の問題である。
\begin{itembox}[l]{フィボナッチのウサギ}
 成熟した1つがいのウサギは、1ヶ月後に1つがいのウサギを生むとする。そして、生まれ
 たウサギは1ヶ月かけて成熟して次の月から毎月1つがいのウサギを生む。全てのウサギ
 はこの規則に従うとし、死ぬことは無いとする。1つがいのウサギは、1年後には何つが
 いになるか。2、3年後はどうなっているだろうか?。計算してみると分かるが、恐ろしい
 ことになっている。
\end{itembox}

この数列は単純で、
\begin{equation}
 \left\{
  \begin{aligned}
   &F_0=1 \\
   &F_1=2 \\
   &F_{k}=F_{k-1}+F_{k-2}
  \end{aligned}
\right.
\end{equation}
となっている。この単純な数列が、自然界のいろいろな場所でお目にかかれるらしい。か
なり不思議なことのようなので、興味のあるものは調べてみると良い。

フィボナッチ数列$F_k$を計算するソースをプログラム\ref{prog:fibonatti}にしめす。
各行の内容は以下の通りである。
%
\begin{description}
 \item[9-11行] \tw{for}文(教科書p.142)は繰り返しに使われる。ここでは、変数
	    \tw{tuki} の値を2〜36まで、一つずつ増加させている。中括弧\tw{\{ \}}
	    内の文を1 回実行させるたびに、変数\tw{tuki}の値を増やしている。
 \end{description}
%
%
\begin{lstlisting}[caption=フィボナッチ数列,label=prog:fibonatti]
#include <stdio.h>
int main(){
  int usagi[100];
  int tuki;
  
  usagi[0]=1;
  usagi[1]=2;

  for(tuki=2; tuki<37; tuki++){
    usagi[tuki] = usagi[tuki-1] + usagi[tuki-2];
  }

  printf("after 1 year  : %d\n", usagi[12]);
  printf("after 2 years : %d\n", usagi[24]);
  printf("after 3 years : %d\n", usagi[36]);
  
  return 0;
}
\end{lstlisting}\vspace{5mm}
%
%
\begin{quote}
 \begin{itemize}
  \item[\textbf{[練習1]}]消費者金融の利子を見ると恐ろしいものがある。CMなどをみ
			 ると年間20\%前後である。100万円借りた場合、次の単利と複
			 利の場合の10年後の利息を計算せよ。
			 \begin{itemize}
			  \item 単利の場合、元金の100万円のみに利子が付く。
			  \item 複利の場合、元金と利息にも利子が付く。
			 \end{itemize}
\item[\textbf{[練習2]}]時間が余った者のみ、チャレンジせよ。この問題は参考文献~
			 \cite{線形代数とその応用}から引用した。
			 \begin{quote}
			  Bernadelliはある種類のカブトムシについて考察した。その
			  カブトムシは、3年間で成長し、3年目につぎの世代を生んで
			  死亡する。3年間のうち第一年目で確率 1/2 で生き残り、さ
			  らに第2年目で 1/3 が生き残り、第3年目でそれぞれの雌が6
			  匹の雌を生む。これに対応する行列は、
			  \begin{equation*}
			    \begin{bmatrix}
			     b_{k\,1} \\
			     b_{k\,2} \\
			     b_{k\,3}
			    \end{bmatrix}=
			    \begin{bmatrix}
			     0 & 0 & 6 \\
			     \frac{1}{2} & 0 & 0\\
			     0 & \frac{1}{3} & 0
			    \end{bmatrix}
			    \begin{bmatrix}
			     b_{k-1\,1} \\
			     b_{k-1\,2} \\
			     b_{k-1\,3}
			    \end{bmatrix}
			  \end{equation*}
			  とかける。ここで、$b_{k\,1}$は$k$年のときの1年目のカブ
			  トムシの数である。

			  1年目、2年目、3年目の虫がそれぞれ3000匹いた
			  としたときその年以後6年間の虫の分布を求めよ。
			 \end{quote}
 \end{itemize}
\end{quote}
%
%---------------------------------------------------------------------
\subsection{文字列}
%---------------------------------------------------------------------
これは、数値計算ではあまり使わないので、興味のあるものは教科書を読んでおくように。
%======= 参考文献 ====================================================
\bibliographystyle{junsrt}
\bibliography{reference} 
%=====================================================================
\end{document}
