第3回まずは慣れよう2のスライド 4/25文字化け修正版

プログラミング演習 I
第3回 まずは慣れよう2
テキスト15ページまで
※第1〜2回目のファイルも適宜参照のこと。
http://silqcs.org/~saitoh/prog_I/
ASTEC-XからLinuxサーバにログインできる場合
スタートメニュー ⇨ すべてのプログラム ⇨ ASTEC-X ⇨ ASTEC-X
wlinux0.edu.tut.ac.jp または wlinux1.edu.tut.ac.jp にログイン
ねずみの模様のあるボタンをクリックし、
システム⇨Terminalで端末を起動する。
システムトラブルだった場合
スタートメニュー ⇨ すべてのプログラム ⇨ GNU ⇨ bash
で、Windows上で端末を起動する。
簡単な復習
ソースコード作成から実行ファイル作成までの流れ
エディタ (geditやnotepad)で
ソースコードを作成
#include <stdio.h>
int main(void)
{
printf(“Hello World!\n”);
return 0;
}
ファイル名: 例えば、
test.c で保存
半角バックスラッシュ \
(JISでは半角円記号 ¥)
セミコロン;
コマンドラインからコンパイル
gcc -o test test.c
testという実行ファイルができる
コマンドラインから実行
./test
注意:ピリオドスラッシュを忘れずに
半角二重引用符記号 “
出力結果
Hello World!
今回の内容
1.標準入出力ライブラリの中から、2つの関数
printf
書式を指定してパラメータを出力
scanf
書式を指定してパラメータに入力
の使い方を覚える。
2.変数 (値を変えられるもの、代数のこと)の使い方を覚える。
printf 関数 (教科書 p.4)
printf は、標準入出力ライブラリ (ヘッダファイル stdio.h を
読み込むことで使える)で用意されている関数の一つ。
フォーマット(format)にしたがって文字列を出力(print)する。
printf(“%d”, 15+37);
関数名 引数1
引数2
※関数のパラメータを
引数(argument)と呼ぶ。
引数1
%と続きの文字(ここではd)によってフォーマットを指定。
%d は、十進数(decimal number)で表せ、の意味。
引数2
引数1のフォーマットに則した引数 (ここでは、15+37とい
う整数値)を置く。%dには、整数でないとエラーになる。
豆知識
man 3 printf
コマンドラインで、 と打つとマニュアルが出る。
マニュアルの終了には、Qキーを押す。 教科書p.318-321も参照。
ソースコード (名前は、例えば test_printf_1.c)
/*
整数値15と37の和を表示する。
*/
#include <stdio.h>
printf("15+37"); では、15+37を
文字列として出力してしまう。
int main(void)
{
printf("%d", 15+37);/*15+37を10進数で表示*/
}
return (0);
コンパイル〜実行の例
[foo@wlinux8]$ gcc -o test_printf_1 test_printf_1.c
[foo@wlinux8]$ ./test_printf_1
52
注意:改行 \n が入っていないので改行されない。
出力フォーマットを少し変更してみよう。 %d %.4d
ソースコード (名前は、例えば test_printf_2.c)
/*
整数値15と37の和を表示する。
*/
#include <stdio.h>
4桁未満ならば、0で埋める、
と言う意味。
int main(void)
{
printf("%.4d", 15+37);/*15+37を10進数で表示*/
}
return (0);
他にもいろいろなフォーマットが
ある。教科書p.318-321を参照。
コンパイル〜実行の例
[foo@wlinux8]$ gcc -o test_printf_2 test_printf_2.c
[foo@wlinux8]$ ./test_printf_2
0052
注意:改行 \n が入っていないので改行されない。
もっと親切に表示してみよう。
%dなどの%で始まるフォーマット指定文字列は、複数使える。
それぞれに対応する引数を後ろにカンマ区切りで置く。
/*
整数値15と37の和を親切に表示。
*/
#include <stdio.h>
15, 37, 15+37 それぞれ、左から
順に%d, %d, %dに対応する。
int main(void)
{
printf("%dと%dを足すと%dです。\n", 15, 37, 15+37);
}
return (0);
日本語でないところは、すべて
半角英数字であることに注意。
[foo@wlinux8]$ gcc -o test_printf_3 test_printf_3.c
[foo@wlinux8]$ ./test_printf_3
15と37を足すと52です。
変数
変数 (variable) とは、値が変えられるもので、要するに代数である。
比喩的に言うと箱のようなもの。
変数の宣言の例:
型名 変数名
int
vx;
C言語では、変数はブロック( { と }で囲われた部分)の初めに
まとめて宣言する決まりになっている。
/* 前略 */
{
int vx;/*整数型の変数 vxの宣言*/
/* 後略 */
}
int 型の変数には、整数 (integer) を格納する。
※実数を格納する変数は、double型などで宣言する(教科書p.25)。
宣言しただけでは、値が不定であることに注意。
変数への代入
代入式 = は、右辺の値を左側の変数に代入する。
右辺にある変数は、右辺の中では変化しない。
#include <stdio.h>
int main (void)
{
int vx;
int vy;
vx
vy
vx
vy
=
=
=
=
57;
vx + 10;
vy + 100;
vy + 10;
/*int型の変数vxを宣言 (値は不定)*/
/*int型の変数vyを宣言 (値は不定)*/
/*vxに57を代入 /*vyにvx+10を代入
/*vxにvy+100を代入
/*vyにvy+10を代入
vx:57, vy:不定
vx:57, vy:67
vx:167, vy:67
vx:167, vy:77
*/
*/
*/
*/
printf("vxの値は%dです。\n", vx); /*vxの値を表示*/
printf("vyの値は%dです。\n", vy); /*vyの値を表示*/
return (0);
}
上のプログラムを作成、コンパイル、実行せよ。
実行結果
vxの値は167です。
vyの値は77です。
scanf 関数 (教科書 p.12)
例えば、整数型の変数 var が宣言されているとする。
int var;
ここに、キーボードから打ち込んだ整数を入れるには?
scanf 関数を使用する。
scanf("%d", &var);
フォーマット指定文字列
printf 関数のフォーマット指定
文字列と同じもの。
&変数
&をつけるのは、変数が置いて
あるメモリ上のアドレス、とい
う意味があるが、現時点では深
く考えなくても良い。
(いずれ教科書 10章で学ぶ。)
では、実際に以下のプログラムを書いて、コンパイル、実行しよう。
ファイル名は、適宜。
/*整数値を読み込んで表示するプログラム*/
#include <stdio.h>
int main (void)
{
int x;
printf("整数を入力して下さい:");
scanf("%d", &x);/*整数値を読み込む*/
printf("入力したのは%dですね。\n", x);
return (0);
}
[foo@wlinux8]$ gcc -o test_var_2 test_var_2.c
[foo@wlinux8]$ ./test_var_2
整数を入力して下さい:128
入力したのは128ですね。
scanf 関数は、空白文字 (SPACE, TAB, 改行)区切りの入力
を以下のようにして読み込むことができる。
scanf("%d %d %d", &x, &y, &z);
カンマ区切りにしたい場合は以下のようにする。
scanf("%d, %d, %d", &x, &y, &z);
/* 読み込んだ2つの整数の積を表示 */
#include <stdio.h>
int main (void)
{
int x;
int y;
printf("整数を2つ、スペース(またはタブか改行)区切りで入力してください:");
scanf("%d %d", &x, &y);
printf("%dと%dの積は%dです。\n", x, y, x * y);
return (0);
}
[foo@wlinux8]$ gcc -o test_var_3 test_var_3.c
[foo@wlinux8]$ ./test_var_3
整数を2つ、スペース(またはタブか改行)区切りで入力してください:12 13
12と13の積は156です。
標準出力に表示する関数としては、printf の他にも、puts がある。
puts("文字列");
同じ動作
printf("文字列\n");
ただし、puts は%始まりの書式を受け付けず、単に文字列を
改行付きで表示するだけである。
/*読み込んだ2つの整数の和を求めて表示する*/
#include <stdio.h>
int main (void)
変数はカンマ区切りで複数同時に宣言できる。
{
int x, y, z;/*カンマ区切りで複数同時に宣言できる*/
puts("2つの整数を入力してください:");
printf("整数1: "); scanf("%d", &x);
printf("整数2: "); scanf("%d", &y);
z = x + y;/*xとyの和をzに代入*/
printf("%dと%dの和は%dです。\n", x, y, z);
return (0);
}
セミコロンの後は、改行しなくても
次の文を書き始めることができる。
[foo@wlinux8]$ gcc -o test_var_4 test_var_4.c
[foo@wlinux8]$ ./test_var_4
2つの整数を入力してください:
整数1: 13
整数2: 12
13と12の和は25です。
次回 5月2日までの課題 注意:グループBは、5月2日も授業です。
課題1
課題2
リスト1に示すプログラムは誤りを
含んでいる。例に従って1行目以外
の誤りを修正せよ。誤りは、1行目
の例を含め4つある。
リスト1
#include <stdio.c>
int main(void)
{
int x
scanf("%d", x);
printf("xの値は%dです."\n , x);
return (0);
}
例) 1行目 #include <stdio.h>
下記の例に倣って、プロフィールの読み込みと表示を行う
プログラムを作成せよ。
例)
あなたの年齢を入力してください:○○
あなたの生まれた月を入力してください:□□
あなたの生まれた日を入力してください:△△
プロフィール
年齢:○○
誕生日:□□月△△日
注意:年齢や誕生日は任意のものでよい。
課題3
四角形の横と縦の長さ(単位はcm)を整数値で入力し面積を
求めて出力するプログラムを作成せよ。
提出方法
学籍番号、氏名をまず書いて、そして各課題ごとに、ソースコードと実行した結果を書き込め。 課題ご
とに分かりやすく改行や------などで分けること。プリントアウトして提出せよ。
課題はウェブサイトにも掲載:http://silqcs.org/~saitoh/prog_I/