パワーポイントの資料

プログラミング言語Ⅰ演習
第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/