プログラミング言語Ⅰ演習 第3回 主担当: 稲元 勉 (いなもと つとむ) 2014/10/28 (火) 授業の進め方 1. 前回を総括します(第2回目以降) 2. 毎回ディレクトリを作って,演習します 3. その結果などを用紙に記入し,当日,提出します • 用紙は原則,毎回配布します • 出席確認を兼ねているので,未完成でも提出してください 4. 欠席などの場合,授業から6日間以内の提出なら評価に含 めます 連絡先など: • • • 稲元 勉(いなもと つとむ) 居室:5号館10階10-4 / Tel:089-927-8575 メールアドレス:[email protected] 2014/10/28 (火) 資料をおいてあるWebページへのアクセス • 情報工学科のホームページから: http://www.cs.ehime-u.ac.jp • 「プログラミング言語I演習」へのリンクは… • 上掲のホームページへアクセス. • 上部のタブリストのなかの「在学生の方」をクリック. • 「科目情報」のなかに「1年生後期:プログラミング言語I演習」があります. • 直接アクセス: http://koblab.cs.ehime-u.ac.jp/~inamoto/lectures/pro1-ex/cur/ 2014/10/28 (火) 本日の内容 • 前回の(一部)演習の解説 • 今回の内容 • 配列(初期化) • 出力:printf関数 • 入力:scanf関数 • 文字列 2014/10/28 (火) 前回の演習3の解説 #include <stdio.h> int main(void) { int x; double y; x = 1.1; y = 3; #include <stdio.h> 実数: 1.1 小数点以下を切り捨て 整数: 1 printf("%d * %f = %d\n", x, y, (x*y)); return 0; } 表示するのが整数なら 問題ないが… 実数の表示に「%d」を使用 int main(void) { double x; double y; x = 1.1; y = 3; printf("%f * %f = %f\n", x, y, (x*y)); return 0; } 2014/10/28 (火) 前回の演習4の解説 #include <stdio.h> #include <stdio.h> int main(void) { double x_array[10]; 配列の長さは10 x_array[1] = 10; x_array[2] = 20; x_array[3] = 30; x_array[4] = 40; x_array[5] = 50; x_array[6] = 60; x_array[7] = 70; x_array[8] = 80; x_array[9] = 90; x_array[10] = 100; printf("prod = %f\n", …); return 0; } 存在しないところへ の不正なアクセス int main(void) { double x_array[10]; x_array[0] = 10; x_array[1] = 20; x_array[2] = 30; x_array[3] = 40; x_array[4] = 50; x_array[5] = 60; x_array[6] = 70; x_array[7] = 80; x_array[8] = 90; x_array[9] = 100; printf("prod = %f\n", …); return 0; } ※総積が同じになるだけでいいなら, x_array[10] → x_array[0] でもOK 2014/10/28 (火) 前回の発展演習の解説 1. 「double f = 21/2」 「整数/整数」は 整数になる 2. 「double f = 21.0/2」 変数 f の値 は 10.0 に 「実数/整数」は実数になる 「実数/実数」「整数/実数」でも OK 大文字・小文字に注意 $ gcc -Wall ex02-exex2-1.c ex02-exex2-1.c: In function ‘main’: ex02-exex2-1.c:6: 警告: unused variable ‘unused’ 「ex02-exex2-1.c」というプログラムソースの6行目に書かれている, main関数内にある 'unused' という変数が使われていません」 3. $ gcc -O ex02-exex2-1.c 大文字の「オー」 ex02-exex2-1.c:10: 警告: division by zero 最適化すると,ソースの段階で 「1/zero」 → 「1/0」 ソースの段階でゼロ除算を判別できるため,コンパイル時に警告を出せる 2014/10/28 (火) 今回の内容:配列(初期化) • 配列を初期化するプログラムソース断片を書いてみる. 2014/10/28 (火) 今回の内容:printf関数 • 端末などへ文字列を出力するために使用 • 固定文字列だけでなく,一部を変更した文字列を出力できる • 変更される部分は「%」につづく部分 • 「%」自体は「%%」とすることで出力できる • 変数の中身の出力に多用 • ほかにも多くの出力用関数が存在 • fputc, putchar (putc), puts, fprintf 2014/10/28 (火) 今回の内容:scanf関数 • 端末から値を,変数へ取得するために使用 • 取得できる値:整数,実数,文字・文字列,… • 整数や実数は,自動的に,文字列から数値への変換が行われる • 取得先の変数がおかれているメモリのアドレスを与える必要 あり • あとで学ぶ「ポインタ」と関連 • 当面は,変数名の前に「&」をつける,と覚えておく • 例外があるので注意 • ポインタで指定する場合 • 文字列を取得する場合 • ほかにも多くの入力用関数が存在 • fgetc, getchar (getc), gets, fscanf 危険な関数 2014/10/28 (火) 今回の内容:文字列 • 文字を要素とする(char型の)配列 • 文字列の最後には「ゼロ」がつく • 「ゼロ」のついていないchar型配列は,文字列として不完全 • 「ゼロ」である末尾の文字は,「NULL文字」といわれる • NULL文字の, • 文字コードは「0」 • 文字としての表現は「'\0'」 • 配列長は,文字列が含む文字の数 + 1 となる.注意! hello h e l l o \0 文字数 = 5 配列長 = 6 NULL文字 2014/10/28 (火) 演習内容をおいてあるページのURL http://koblab.cs.ehime-u.ac.jp/~inamoto/lectures/pro1-ex/cur/ex03/
© Copyright 2024