プログラミング及び実習 - ryukoku universityqma/education/cpro/... · •...

51
1 プログラミング及び実習

Upload: others

Post on 23-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

1

プログラミング及び実習

馬 青

Page 2: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

2

授業の実施及び評価方法

• 毎週火1は1-107にて、講義形式で行う。適宜に演習を行う。

• 毎週火2は1-609(計算機実習室)にて、実習形式で行う。

• 講義資料(実習課題含む)は約1週間前にWebにアップロードする。また、当日の1講時にプリント配布する。

• 実習課題の提出は、各自が課題を完成した時点で教員またはTAを呼んで確認してもらう方法を取る。提出期限はその都度知らせる。

• 最終評価は、毎回の実習課題の完成状況(+出席状況)及び期末筆記試験を総合して行う。

本来ならば

Page 3: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

今当分の間は

• オンライン授業を実施

• ツールとしてはMicrosoft Teamsを用いる

3

Page 4: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

オンライン授業について

• 「一般」チャネルに通知を毎回掲示するので、この通知をクリックすることで授業に参加することができる

• たとえば第一回はここをクリックすればよい

• 聴講時は自分のPCのマイクを必ずミュートにしてください

4

Page 5: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

オンライン実習について

• 課題番号でチャンネルを作ってあるので、質問したい/チェックを受けたい場合、該当するチャンネルに行って、会話投稿をしてください

– 質問がある場合、「質問」の2文字を投稿してください

– 課題完成後のチェックを受けたい、「チェック」という文字列を投稿してください

– TAさんは学生A君に対応する場合、A君の投稿への返信に「はい」で返し、A君との個人チャットでやり取り(文字かビデオいずれ可)してください

– TAさんがA君への対応終了後、A君のさきほどの投稿への返信として「完了」を返してください 5

Page 6: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

TAさんへ• 4/7(火)11:00から「TA」プライベートチャンネルにてオンライン会議を開く

• プライベートチャンネルは会議予約できなくて事前通知は掲示しないので、時間になれば参加してください

• それ以降は毎回、11:00から5分程度オンラ

イン会議を開く、その時間になれば会議を開始するので、参加してください

• オンライン出勤簿を今開発中6

Page 7: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

• プログラミング実習は

– さしあたりは、Webでプログラミングのできるpaizaを使う

– 2週間程度後は、WSLを使う前提で実施する

7

オンライン実習のための各自の準備について

Page 8: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

paizaについて

ウエブブラザーから

paizaプログラミング

で検索

または以下を直接入力

https://paiza.io/ja

8

Page 9: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

9

Page 10: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

登録方法

• サインアップで登録

– メールにアカウント確認が送信されるので、確認してアカウントを有効にする

• ログインでログインする

• 登録のメリット:ファイル保存などができる

10

Page 11: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

11ここをクリック

プログラムの作成

Page 12: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

プログラムの作成

12

プログラム名

言語選択

実行や保存

実行結果

Page 13: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

保存など

• タイトル(=プログラム名)をつけて、保存しておくと、「一覧」で参照できる

• 一覧からタイトルをクリックすると、コードの画面が表示され、編集&実行ができる(次のページを参照)

13

Page 14: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

プログラムの一覧

14

ここをクリック

Page 15: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

WSLについて(1/2)• WSLはWindows上のUbuntu(Linux)• Googleで「WSL インストール」を検索し、指示通りにインストールする。2020/4/3現在、教員は以下のHPを(内容が適切であることを)確認済み

– https://qiita.com/Aruneko/items/c79810b0b015bebf30bb– マイクロソフトストアからUbuntuを選ぶとき、Ubuntu

18.04 LSTを選ぶこと

– Ubuntuをインストール後、Ubuntuの端末を開いた後の初期設定は以下くらいで結構

• sudo apt update• sudo apt upgrade

– 次に、端末上でgccを実行してみて、メッセージに従って、gccをインストールする 15

Page 16: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

WSLについて(2/2)• Googleで「windows 10 VS code インストール」を検索し、指示通りにWindows上に(Ubuntu上ではなく!)インストールする。2020/4/3現在、教員は以下のHPを(内容が適切であることを)確認済み

– https://qiita.com/Shinakaya/items/c43fb6c1e638d51bf1c8– インストール後、PCを再起動

– 再起動後、Ubuntu端末でcodeが使えるようになる。• たとえばcode test.cでtest.cを作成・編集することができる

• 作成後、Ubuntu端末でcc test.cでプログラムをコンパイルし、./a.outでプログラムを実行できる

16

Page 17: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

17

プログラム作成の基本手順

1.例えばtest.cという名前のソースプログラムをエディターcodeを用いて作成

#include <stdio.h>/* 標準入出力関係のヘッダーファイル、必ず付けて下さい */

#include <math.h>// 数学関数のヘッダーファイル

Page 18: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

18

int main(void){

double x=2.0, y1, y2;y1=sqrt(x); // 最後は必ず;をつける

y2=y1+x*y1+2; // 演算子の優先度に注意

printf(“x=%f, y1=%f, y2=%f¥n”, x, y1, y2);printf(“x=%6.2f, y1=%6.2f, y2=%6.2f¥n”,x,y1,y2);printf(“x=%.2f, y1=%.2f, y2=%.2f¥n”, x, y1, y2);// Linuxでは¥記号ではなく、バックスラッシュ記号 を使う。

return 0;}

Page 19: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

19

2.コンパイル

cc test.c –lm a.outという実行ファイル

が得られる

cc test.c –o test –lm testという実行

ファイルが得られる。

注:math.hというヘッダーファイルを使っている場合– lmを付け加える必要がある。

Page 20: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

20

3.実行

./a.out か ./test x=2.000000, y1=1.414214, y2=7.242640x=__2.00, y1=__1.41, y2=__7.24x=2.00, y1=1.41, y2=7.24

注意:値1234.5678を%3.1で出力した場合、1234.6が出力される。

Page 21: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

21

Cプログラムの枠組み

インクルード文の記述 …... #include <ヘッダファイル>

その他の宣言 …… 構造体の宣言など

広域(グローバル)変数の宣言 …. 必要に応じて設ける

その他の関数の定義 …. 必要に応じて設ける

main関数の定義 …. 必ず必要

Cプログラムの形式

Page 22: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

22

C言語の構成要素(1/2)

• 予約語: double, if, forなど用途が予め定められているもの

• 識別子: 変数、関数などにつける名前

使用できる文字:

(大小)英文字、数字、アンダースコア_最初の文字は数字であってはならない

識別される文字数: 最初から8文字目まで

予約語は使ってはいけない。

Page 23: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

23

• コメント:/*と */で囲まれる部分(または//で開始の一行)は、コメントとして認識されコンパイルの対象とならない

• 空白文字:スペース、タブ、改行などは、空白文字と呼ばれ、識別子、予約語を分離

する区切り記号となる

• 区切り記号: ; {} ()など構造を明確にする目的に使われる

• 定数:次に述べる

• 演算子:算術演算子(+,-,*, /, %, ++, --)、論理演算子(後述)

C言語の構成要素(2/2)

Page 24: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

24

定数とは

定数とは、プログラムの中に直接値を書き

込み、プログラム実行中にその値が書き換わることのない数値である。例えば上記プログラムに出現している“2.0”である

Page 25: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

25

定数の種類種別 例 備考

整数 10進 14 %dで入出力

16進 0x14 %dで10進数に換算して出力。%xで16進数で入出力

8進 014 %oで8進数で入出力

浮動小数点数 314.1 or 3.141e+2

%lf(double型の場合)か%fで入力,%f(%.3fなど), %e, %g(短いほう)で出力

文字 ‘A’ ‘A’ シングルクオーテーションで囲む

‘¥n’, ‘¥t’, ‘¥b’, ‘¥r’

¥n: 改行 ¥t: タブ分スキップ

¥b: 1文字分戻る ¥r: 同じ行の先頭に戻る

文字列 “strings” ダブルクオーテーションで囲む

Page 26: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

26

演習1-1

• 16進数efと8進数27があるとして、これらの10進数を手計算で求めるとともにこれらの和を10進数で出力するプログラムを作成しなさい

Page 27: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

27

演習1-1-oth

• 16進数2acと8進数735があるとして、これらの10進数を手計算で求めるとともにこれらの和を10進数で出力するプログラムを作成しなさい

Page 28: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

28

変数とは

定数に対し、プログラム上可変なものを変数という。上記プログラムの中のx, yなどは変数である。

変数を使うとき、その属性をあらかじめ宣言しておかなければならない。

属性は以下の三つからなら

表現できる数の大きさ(データ型)

プログラム上のどの場所で使えるか(有効範囲)…. 後述

変数のメモリ上の位置(記憶クラス)

…. とりあえず意識しなくてよいので、省略

Page 29: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

29

データ型

種別 符号の有無

ビット長 宣言方法

数値の範囲

整数 あり 8(1バイト) char -(27)~(27-1)

あり 32(4バイト) int -(231)~(231-1)

浮動小数点数

あり 32(4バイト) float 0.0及び絶対値が

10-38~1038の範囲

(10進数最大7桁の精度)

あり 64(8バイト) double 0.0及び絶対値が

10-308~10308の範囲

(10進数最大16桁の精度)

Page 30: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

30

データ型の変換(1/4)異なるデータ型同士の演算は、自動的に優先順位の高

いデータ型に合せて変換し計算を行う

優先順位は以下の通りである(右側の方が優先順位が高い)

char < int < float < double

ただし、

• 代入演算の場合、計算結果が左辺のデータ型に強制的に変換される(次のスライドのケース②)

• 右側がすべて整数型での計算の場合、浮動小数点数の結果が整数に切り捨てられる(次のスライドのケース③)

Page 31: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

31

例えば

① double x;x=4/3.0; x=1.3333… ○

しかし

② int a;a=4.0*0.3; a=1 ×

③ double x;x=3/2; x=1.0 ×

データ型の変換(2/4)

Page 32: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

32

データ型の変換(3/4)解決法:

(1)同じデータ型に統一する

ケース②については

double a; /* int 宣言をやめ、doubleに*/

a=4.0*0.3; a=1.2 ○

ケース③については

double x;x=3.0/2; x=1.5 ○

しかし、定数でなく変数であれば(例えば、int n=3で宣言していれば)、n.0というような方法は使えない!!!

Page 33: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

33

(2)型を明示したり強制的に変換する(キャスト)

ケース③については、

int n=3;double x;x=(double)n/2;で解決できる

データ型の変換(4/4)

Page 34: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

34

演習1-2int n=5, y; double x=8.0, z;で宣言した場合、Cで書かれた以下の算術式の値を求めなさい。

1) y=n/4*4;2) z=n/4.0*4;3) z=(double)n/4*4;4) z=n*x/2;5) z=n/2*x;

Page 35: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

35

構造化プログラミングの考え方

• どのようなプログラムも三つの基本制御構造:連続、選択、繰り返しだけで済まそうという考え方

• 連続とは、1つのステップを終えてから次のステップを開始するという、もっとも単純で基本的なものである。例えば:

z=x+y;printf("x=%d, y=%d, z=%d¥n", x, y, z);printf("x=0x%x, y=0%o, z=0x%x¥n", x, y, z);

Page 36: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

36

選択のプログラミングif(条件式1){ if(ten>=90)

実行1 printf(“優¥n”);}else if(条件式2){ else if(ten>=75)

実行2 printf(“良¥n”);}::else{ else

実行n printf(“不合格¥n”);}

Page 37: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

37

条件式

関係演算子、等値演算子、論理演算子からなる。

例えば数学関係のa<x<bは x>a && x<bという条件式で書く。ここで“<”などは関係演算子で、“==”は等値演算子、“&&”はANDという論理演算子である。ここで各種演算子の優先順位が問題になる。

Page 38: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

38

演算子の優先順位

優先度 演算子

高 関係演算子: <, <=, >, >=等値演算子: ==, !=論理演算子: &&

低 論理演算子: ||

自信がないときは括弧を付けよう。

x>a && x<b → (x>a) && (x<b) x>a && x<b || y==c → (x>a && x<b) || y==c

Page 39: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

39

例題(1/2)• 3つの実数a,b,cを入力し、これを三辺とする三角

形ができるときは、以下のヘロンの公式によりその面積を求め、そうでないときはエラー表示するプログラムを作成しなさい。

2cbas ++=

)(*)(*)(* csbsass −−−=面積

Page 40: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

40

例題(2/2)#include <stdio.h>#include <math.h>int main(void){

double a, b, c, s, menseki;printf(“a, b, cを入力:“); scanf(“%lf %lf %lf”, &a, &b, &c);

// double宣言の場合はlf, &(アンパサンド)をつける

if(a+b>c && b+c>a && c+a>b){s=(a+b+c)/2.0;menseki=sqrt(s*(s-a)*(s-b)*(s-c));printf(“面積=%f¥n”, menseki);}

elseprintf(“三角形ではない¥n”);

return 0;}

Page 41: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

41

反復のプログラミング(1/3)for文とwhile文の登場

例題:自然数nを入力し、n個の‘*’を1行に出力するプログラムを作成しなさい。

// for文を使う場合#include <stdio.h>int main(void){

int n, i;printf(“自然数=”); scanf(“%d”, &n);for(i=0; i<n; i++)

printf(“*”);printf(“¥n”);return 0;

}

Page 42: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

42

反復のプログラミング(2/3)// while文を使う場合#include <stdio.h>int main(void){

int n, i;printf(“自然数=”); scanf(“%d”, &n);i=0;while(i<n){

printf(“*”);i++;

}printf(“¥n”);return 0;

}

Page 43: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

43

反復のプログラミング(3/3)例題:自然数nを入力し、n個の*をn行に出力するプ

ログラムを作成しなさい。

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

***********

#include <stdio.h>int main(void){

int n, i, j;printf("自然数¥n");scanf("%d", &n);for(i=0; i<n; i++){

for(j=0; j<n; j++)printf("*");

printf("¥n");}return 0;

}

Page 44: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

44

演習1-3

以下の実行結果を示しなさい。

int n, acc;n=acc=0;while(n<9 && acc<=10){

if(n%2==0) {n++; acc+=n/2;}else {n+=3; acc+=n;}printf(“n=%d, acc=%d¥n”, n, acc);

}

Page 45: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

45

第1回実習課題(1/6)

1.int型整数a, bとdouble型浮動小数点数x, yを入力し、以下の式で変数zを求め、その値を出力するプログラム(ex01-basic-cal.c)を作成しなさい。また、a, b, x, yに2, 3, 2.3, 3.5を入力して答えを求めなさい。ただし、値の出力は小数点後は2桁までとする、つまり、値が1.2345なら1.23を出力する。

byaxyxbaz −++

+= 2

Page 46: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

46

第1回実習課題(2/6)

2.以下のようなかけ算の九九表を出力するプログラム(ex01-kuku.c)を作成しなさい。ただし、各列は揃うようにすること。

1 2 3 4 5 6 7 8 92 4 6 8 10 12 14 16 183 6 9 12 15 18 21 24 274 8 12 16 20 24 28 32 365 10 15 20 25 30 35 40 456 12 18 24 30 36 42 48 547 14 21 28 35 42 49 56 638 16 24 32 40 48 56 64 729 18 27 36 45 54 63 72 81

Page 47: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

47

第1回実習課題(3/6)

3.課題2で作成したプログラムを以下を出力するように改善しなさい(ex01-kuku-half.c)。

1 2 3 4 5 6 7 8 92 4 6 8 10 12 14 16 183 9 12 15 18 21 24 274 16 20 24 28 32 365 25 30 35 40 456 36 42 48 547 49 56 638 64 729 81

Page 48: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

48

第1回実習課題(4/6)

4.自然数nを入力すると、以下の級数

の値を計算して出力するプログラム(ex01-series.c)を作成しなさい。

実行例:

./a.outinput n: 100result: 5.187378

1 +12

+ ⋯+1𝑛𝑛

Page 49: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

49

第1回実習課題(5/6)

5.自然数nを入力し、1からnの自然数のうち、奇数の総和と偶数の総和をもとめるプログラム(ex01-sum.c)を作成しなさい。たとえばn=5であれば奇数の総和は1+3+5=9で偶数の総和は2+4=6である。

Page 50: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

50

第1回実習課題(6/6)6.素数とは、1以外の数で1と自分自身しか約数がない(割り

切れない)自然数のことをいう。正の整数値n(n<=500)を入力すると、この整数値以下のすべての素数を求めて出力するプログラム(ex01-prime.c) を作成しなさい。

考え方:

(1)2~nの整数値iについて、2~i-1の整数値jで割って1つ

でも余りが0であればiが素数ではない。逆に余りが0なのが

1つもなければiが素数であり、出力する。

(2)C言語では、i/jの余りはi%jで求めることができる。

(3)フラッグ変数fg (fg=1:素数、fg=0:素数でない)を用いると便利かも。

実行例:

./a.outinput n: 202 3 5 7 11 13 17 19

発展課題

Page 51: プログラミング及び実習 - Ryukoku Universityqma/education/cpro/... · • プログラミング実習は – さしあたりは、Webでプログラミングのできる

51

注意!!

• 実習課題のプログラムは全部cproというディレクトリの下で行ってください。

• プログラムの作成に入る前に、まず以下の操作を行ってください。mkdir cprocd cproこの下でex01-kuku.cなどを作成してください。

• なお、本講義資料は以下のHPから参照できるhttp://www.math.ryukoku.ac.jp/~qma/education/cpro/index.html