プログラミング演習 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/
© Copyright 2024 ExpyDoc