変数のデータ型,printf()関数

C言語で扱うデ−タと変数

データ型

整数

short型

long型

実数

浮動小数点 例:3.14159×10^10

文字

'a' 一重引用符(シングルクォ−テ−ション)で囲む.通常,1バイト(半角)英数字のみが文字として許される. つまり,'愛'などというようにに漢字など2バイト文字は「単独文字」として使えない.

変数

変数とは上記のデ−タを一時的に格納しておくための容器と考えること.

整数が入る変数:int型(或いは,short型,long型)

実数が入る変数:float型(単精度浮動小数点),double型(倍精度浮動小数点,有効数字の桁数が2倍)

文字が入る変数:char

変数を使う前には,必ず予め使うことを関数の先頭箇所にて宣言しておく.

いろいろなデータ型の変数宣言の例

int input; 
int input,output; 

float input_number; // 単精度浮動小数点
double output_number; // 倍精度浮動小数点

char x = 'b';

ターミナルのフォントサイズ調整について

C言語プログラミングではターミナル上でのコマンド操作が多いのですが,最近のMacBookは液晶画面が高精細化していて,標準状態では文字表示がやや小さくて見辛く感じる人がいるようです.

既にこれまで講義中に何度か言及しているのですが,ターミナルの文字表示を大きくしたい場合,最も手っ取り早いのは「表示」メニューから「大きく」項目を選択すると少しだけフォントサイズが大きくなります.選択を繰り返す度にフォントは大きくなっていきますので,見やすいサイズになるまで繰り返し選択して調整してください.

また,ターミナルを開いたときに常に大きくなるように調整したい場合は,「環境設定」メニューから表示される「設定」ウィンドウで調整すれば可能ですが,この説明だけで「分からない」人は下手に設定変更せずに上記の方法でサイズ調整するだけに留める事を強く勧めます.下手に間違った設定変更を加えると正常な画面表示が得られなくなったりする危険性があります.

Emacsが生成するファイルについて

Emacsでファイル編集作業を行っている最中,パソコンの異常動作や操作ミスによるファイル喪失に備えてEmacsは二つのファイルを自動的に生成するようになっている.課題提出の際は,それらの自動生成されるファイルを間違って提出しないように注意しよう.

作業途中の一時ファイル

Emacsはパソコンのハングアップなど不測の事故に備えて,キーボード入力回数が一定回数を超える度に現在編集中の内容をファイルに一時的に保存するようになっている.その際に使われる一時ファイルのファイル名は #sample.c# といったように,作業開始時に指示したファイル名の前後に#記号を付けたものとする約束になっている.この一時ファイルは C-x C-s 操作にてファイル保存が正しく行われた時点で自動的に削除される.

保存操作後のバックアップファイル

以前に作成して保存しておいたファイルを再度Emacsで開いて編集を加えた後,ファイル保存操作 (C-x C-s)を行った場合,編集を加える前の状態のファイルは自動的に少し名前を変えて残されるようになっている.これを「バックアップファイル」と呼ぶ.その名前は元のファイル名に ˜ (チルダ)記号を付けたものとなる.すなわち,例えば, sample.c というソースプログラムが元々存在しており,それをEmacsで開いて編集して,保存操作を行うと

という二つのファイルが残される事になる.

課題提出などの際には,提出すべきファイルを見間違えないようにしよう.

数値の計算と演算子

簡単な演算子

C言語ではデータに対する演算の仕方を指定するために + - * / %といった演算子を用いる.各演算子の演算順序を決める優先度は概ね数学に出てくる演算と同様の考え方で良いが,厳密には教科書pp.28の表に従う.

printf()関数の書式文字

前回にコンパイルエラーを修正する練習として,/usr/local/cse/class/oomoto/program/c_source/ex2_1.cの間違いを修正したソースプログラム keisan.c を作成し,コンパイル・実行して動作確認することを行った.

ソースプログラム作成練習

  1. そのソースプログラムファイルを複製した上で,その複製したソースプログラムのprintf関数中の書式文字列を書き換えて,「12 + 3の計算結果は15です.」という形の日本語メッセージが画面表示されるようなソースプログラム tashizan.c を作成し,その動作を確認せよ.
  2. 上記1のソースプログラムをさらに複製して,11/4 と 11%4 (11を4で割った剰余)を計算してそれぞれ表示するように修正したプログラム jouyo.c を作成せよ.(注意: printf関数でメッセージ表示として % 記号を使いたい場合, 書式文字列中には %% というように%記号を2つ並べて書く必要があります.)
  3. さらに,上記2のソースプログラムを元にして,変数宣言をint型からfloat型に変更し,実数値の割り算 11.0 / 4.0 を計算して表示するプログラム division.c を作成せよ.このとき,printf関数の書式文字列の %d としているままだと数値が正しく表示されないことを確認しなさい. (注意: C言語ソースプログラム中で実数型の定数を書く場合には,明示的に小数点表記する必要がある.)
  4. 上記3で作成したプログラムの書式文字を%dから%fへ変更して実行してみて,表示結果が正常になることを確認せよ.

(書式文字の詳細については,教科書pp. 32, pp. 33, pp. 122を参照のこと.)

実数型の計算については教科書第7章に詳細な記載があり,詳しくはそちらで学習することになる.C言語ソースプログラム中で実数型の定数を書く場合にはコンパイラが「整数型ではなく実数型の定数」を意図している事が分かるように,例えば実数値 4 であれば 4.0 という形で明示的に小数点表記を使う必要がある.単に 4 と書くとコンパイラは「整数型の4」と解釈した上で計算をおこなってしまうので,プログラマの意図とは異なった結果が出てしまう事がある.

色々な演算子

以下に挙げられている演算子の詳細は,教科書の第8章を参照すること

練習

以下のソースプログラムを各自の作業ディレクトリにコピーして配置し,コンパイル・実行してみて,演算子++と--の意味を考えてみよ.

#include <stdio.h>
#include <stdlib.h>

main()
{
   int number; 
   
   number = 99; 
   printf("number = %d¥n", number);

   number = number + 1;
   printf("number = %d¥n", number);

   number++;
   printf("number = %d¥n", number);

   number--;
   printf("number = %d¥n", number);

   exit(0);
}

++をインクリメント演算子,--をデクリメント演算子と呼ぶ.

printf関数におけるエスケープ文字

printf関数において,書式文字列にエスケープ文字を含める事で文字表示の仕方をいろいろ変えて制御出来る.(エスケープ文字の詳細は,教科書pp.145を参照)

練習

教科書pp.17の例題1.4を書き換えて,自分の名前を画面に表示するプログラムを作成せよ.(ファイル名はname.c)

練習

例題1.4のprintf関数の部分を以下のように書き換えて,(コンパイルし直した上で)実行してみて,実行結果がどのように変化したか考えてみよ.

#include <stdio.h>
#include <stdlib.h>

main()
{
   printf("Hello World");
   exit(0);
}

例題1.4のprintf関数の部分を以下のように書き換えて実行してみて,実行結果がどのように変化したか考えてみよ.

#include <stdio.h>
#include <stdlib.h>

main()
{
   printf("Hello ¥n");
   printf("World¥n");
   exit(0);
}

例題1.4のprintf関数の部分を以下のように書き換えて実行してみて,実行結果がどのように変化したか考えてみよ.

#include <stdio.h>
#include <stdlib.h>

main() 
{
   printf("Hello ");
   printf("World");
   exit(0);
}

例題1.4のprintf関数の部分を以下のように書き換えて実行してみて,実行結果がどのように変化したか考えてみよ.

#include <stdio.h>
#include <stdlib.h>

main()
{
   printf("Hello ¥nWorld");
   exit(0);
}

練習:例題1.4のprintf関数の部分を以下のように書き換えて実行してみて,実行結果がどのように変化したか考えてみよ.

#include <stdio.h>
#include <stdlib.h>

main() 
{
   printf("Hello ¥tWorld");
   exit(0);
}

練習:例題1.4のprintf関数の部分を以下のように書き換えて実行してみて,実行結果がどのように変化したか考えてみよ.

#include <stdio.h>
#include <stdlib.h>

main()
{
   printf("Hello ¥t¥tW¥n¥torld");
   exit(0);
}

printf関数の書式文字列中の¥nは,画面上の文字出力を改行させる制御文字(エスケープ文字)を表し,¥tはTAB文字,つまり,次の文字出力位置を次のタブストップ位置へ移動させる制御文字を表す(教科書,pp.145参照).

提出課題

その1

上記のソースプログラム作成練習にて,実数値の割り算 11/4 を計算して,適切に画面表示するプログラム division.c を作成している筈である.そのそのソースプログラムをmoodle学習支援システムにて提出しなさい.

課題名: 実数値の除算

締切: 教員の指示による

尚,提出するのは「ソースプログラム」である(コンパイル結果の実行可能形式プログラムではない!).また,ソースプログラムの先頭部分のプログラムヘッダにはコメント文として各自の学生証番号と氏名を記入しておくこと.

その2

以下のような模様を画面出力するプログラムを作成して,そのソ−スプログラム(ファイル名はpattern.c)を提出せよ.*印の間の空白表示にはprintf関数の書式文字列にエスケープ文字 ¥t を利用して各列の先頭(左側)が揃うように試みること.また,プログラムの先頭部分にはコメント文として各自の学生証番号と氏名を記入しておくこと.

課題名: printf関数による模様表示

締切: 教員の指示による

*       *       *       *       *
**      **      **      **      **
***     ***     ***     ***     ***

次回へ向けて

次回の演習に備えて,「新・C言語のススメ」第3章「条件による分岐」,及び,第4章「条件による分岐2」を熟読して予習してくること.この「予習」とは,教科書に掲載の例題プログラムを試しにコンパイルして動作させてみて,その考え方の概略を予め理解しておく事を含みます.

基礎プログラミング演習Iの表紙ページへ戻る