コンピュータープログラミング(C言語)(4) 1.キーボード入力(復習) 2.条件分岐(if文)

Slides:



Advertisements
Similar presentations
プログラミング論 第八回数字の計算,整数の入出力. 本日の内容 前回の課題(続き) 前回の課題(続き) 数字の計算をする 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメン ト演算子.
Advertisements

コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
情報処理演習 (秋学期・樋口担当) 2回目 10/1 日本工業大学 コンピュータリテラシーII.
7/10 if 文課題 力作が多くて感心! 演習1:キーボードから2つの整数を入力し、小さい方の数字を 表示せよ。
第6回条件による分岐.
プログラミング演習(1組) 第7回
コンピュータープログラミング(C言語)(3) 1.関数と分割コンパイル (復習) 2.キーボード入力
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
初年次セミナー 第4回 整数と実数の取り扱い.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
コンピュータープログラミング (C言語)(6) 1.条件分岐2(switch文、復習) 2.繰り返し処理(for文、while文)
第7回 条件による繰り返し.
情報基礎及び演習 プログラミング基礎① 電気・佐藤亮一.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
プログラミング演習 バージョン1 担当教員:綴木 馴.
プログラムの制御構造 選択・繰り返し.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
繰り返し計算 while文, for文.
関数の定義.
第10回関数 Ⅱ (ローカル変数とスコープ).
基本骨格 #include #include : int main(void) { 変数の宣言 実行すること return 0; } #include int main(void) { int i; printf(”Hello world!\n”);
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング演習I 2003年5月7日(第4回) 木村巌.
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
知能情報工学演習I 第9回( C言語第3回) 課題の回答
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
04: 式・条件分岐 (if) C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
コンピュータープログラミング (C言語)(5) 1.条件分岐1(if文、復習) 2.条件分岐2(switch,case文)
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
整数データと浮動小数データ.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
プログラミング演習I 2003年4月30日(第3回) 木村巌.
地域情報学 C言語プログラミング 第2回 変数・配列、型変換、入力 2017年10月20日
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
プログラミング基礎a 第4回 C言語によるプログラミング入門 条件判断と反復
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
C言語講座 制御(選択) 2006年 計算技術研究会.
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
ループだよ!難しいよ! 第5章 while(ループ);.
標準入出力、変数、演算子、エスケープシーケンス
知能情報工学演習I 第8回(後半第2回) 課題の回答
cp-3. 計算 (C プログラミング演習,Visual Studio 2019 対応)
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
モバイルプログラミング第2回 C言語の基礎 (1).
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
プログラミング1 プログラミング演習I 第2回.
コンピュータープログラミング (C言語)(10) 1.ファイル入出力
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
知能情報工学演習I 第11回(後半第5回) 課題の回答
知能情報工学演習I 第9回(後半第3回) 課題の回答
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
C言語講座 四則演算  if ,  switch 制御文.
計算技術研究会 C言語講座 第二回 制御構文 if , switch.
知能情報工学演習I 第10回( C言語第4回) 課題の回答
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
ファーストイヤー・セミナーⅡ 第10回 if文による選択処理(2).
Presentation transcript:

コンピュータープログラミング(C言語)(4) 1.キーボード入力(復習) 2.条件分岐(if文) コンピュータ基礎実験 第6回 コンピュータープログラミング(C言語)(4) 1.キーボード入力(復習) 2.条件分岐(if文)

「キーボード入力」、「算術関数」 の復習 コンピューターは、「キーボード」や「マウス」、「タブレット」などからデータを入力することが可能 C言語では、「データの入力」も、「関数」(入出力関数)を利用して実現可能:「scanf()」 三角関数や指数関数など、数学で使う関数(算術関数)の使用 「#include <math.h>」をソースに書く 算術関数ライブラリをリンク「-lm」(Eclipseが行う)

キーボード入力関数「scanf()」 変数型宣言 int a; のあとに scanf(”%d”, &a); とすると,キーボードから入力した整数の値が aに入力される. 注)「a」に「&」を付けるのをわすれるな!

2つ以上の数の場合も同様に int a, b, c, …, ; printf(”2つの整数? ”); scanf(”%d %d”, &a, &b); ・ 実数型なら float x; printf(”x= ”); scanf(”%f”, &x); ☜ 整数型の   変数の場合  文字型変数   ☟  の場合 文字型なら char name[10]; printf(”Name: ”); scanf(”%s”, name); ☜ 実数型の   変数の場合 & は不要

■ 前回発展課題 課題 EX5-5: 三角形の3辺の長さa, b, cを与え,面積を求めるプログラム( EX5-5.c )を示せ.ただし,三角形の面積を与える公式(Heronの公式)は既知とする.   Heronの公式   ここで,平方根の計算は sqrt(…) とすればよい. [ヒント] プログラムの最初に #include <math.h> を加えること 発展課題 EX5-6: 課題 5-5において,平方根の計算を正確に計算するプログラムを示せ.( EX5-6.c ) [ヒント]変数をdouble a,b,c,…  scanf(”%lf,…”,&a, …) 、printf(”%1.15f…”,a)として下さい.

変数の型と表記 型 扱える範囲 printf(scanf)中の表記 文字型 char -127 〜 128 (文字) -127 〜 128 (文字) %c(文字), %d(値) 整数型  int - 2147483648    〜 2147483647 %d 倍長整数型  long - 9223372036854775808 〜 9223372036854775807 %ld 単精度浮動小数点型  float 有効数字6桁の実数 3.4E-38 〜 3.4E+38 %f 倍精度浮動小数点型  double 有効数字15桁の実数 1.7E-308 〜 1.7E+308 %lf (scanf中) 注)printfでは%lfは使わない⇒間違える人が多いので使えるように変更されたhttp://www.kijineko.co.jp/tech/superstitions/printf-format-for-double.html

前回発展課題2 回答例 EX5-6.c EX5-6.c: コンパイル: $ gcc -lm EX5-6.c (Eclipse が自動で行う) #include <stdio.h> #include <math.h> int main(void) { double a,b,c,s; printf(”三角形の3辺を入力: ”); scanf(”%lf %lf %lf”,&a,&b,&c); s=(a+b+c)/2; s=sqrt(s*(s-a)*(s-b)*(s-c)); printf(”面積: %1.15f\n”,s); return 0; } 注目! コンパイル: $ gcc -lm EX5-6.c (Eclipse が自動で行う)

s=sqrt(s*(s-a)*(s-b)*(s-c)) 「x=2*x+1」: 数学では「x=-1」です 「x=1; x=2*x+1;」: C言語では「xには3が記憶されている状態になっている」です 「x=x+1」を、数学とC言語で考えてみよう

条件分岐1(2重分岐:if文) キーボードからの入力や、計算結果に応じて処理内容を変える場合があります テレビゲームでもあります 「スライムが仲間になりたそうにこちらをみている」 「仲間にしますか? はい/いいえ」 C言語では、「2重分岐」と「多重分岐」の2種類が用意されています 2重分岐: 「if文」⇒2股に分かれる 多重分岐:「switch~case文」⇒3股以上に分かれる

判断と分岐 ■ 2重分岐 …条件式により2分岐選択制御 [ if 〜 else]  if 文 if (条件式) 文1; else 条件式   文1;  else   文2; ■ 多重分岐…番号による場合分け  switch文 〜 case 条件式 (1)関係演算  … 2つの値の大小関係の比較 (2) 論理演算    … 条件を満たすか否かを判定 次回

■ 1.関係係演算子 数学記号 C言語 = == > < ≧ >= ≦ <= ≠ != 条件式の書き方 意味 数学記号 C言語 等しい = == より大きい > より小さい < 等しいか, ≧ >= ≦ <= 等しくない ≠ != 条件式の書き方 (Ex.1) a+b = c  a+b == c (Ex.2) a+b ≧c  a+b >= c

■ 2.論理演算子 A, B のそれぞれを条件式として 意味 名前 C言語での表現 A && B A || B !A 論理積 AND A && B A, Bのどちらかが成立すれば  真 論理和 OR A || B Aが成立しなければれば 真 否定 NOT !A (Ex.1) “x+y = c” と “z > 0” の両方が成立すれば真      x+y == c && z > 0 (Ex.2) “0 < x < 100 ”   0 < x && x < 100 (Ex.3) “x = y = 1”   x == 1 && y == 1 (注) || よりも && の方が優先順位は高い. 同じ順位の間では左から順   に評価される.また,( ) でくくってあればその中が先に評価される.

例1:2分岐「偶数 or 奇数?」 int a; … if (a%2==0){ printf(”aは偶数”); } else { 条件:2で割り切れる? a%2==0 NO YES もし,else以下の文が省略され どの条件も満たさないと, 何も実行しないで終了する. aは偶数 aは奇数 (注)文が複数行になる場合は { } で囲む.    1行の文の場合は{ }は省略可能.    文のかたまりが見えやすいように,    先頭の文字の頭を下げる(インデント)とよい.

例2:入れ子の2分岐「正 or 負 or 0?」 int a; … if (a>0){ printf(”aは正”); } else{ 条件1:0より大きい? a>0 NO 条件2:0より小さい? a<0 YES NO YES aは正 aは負 aは0 (注)文が複数行になる場合は { } で囲む.    1行の文の場合は{ }は省略可能.    文のかたまりが見えやすいように,    先頭の文字の頭を下げる(インデント)とよい.

例題EX6-1: コンピューターが「2つの実数a,bをいれてください: 」と出力    2数を入力する(スペースを開けて) コンピューター:「和と差を計算(1を入力) 積と商を計算(1以外入力): 」 「1」を入力⇒和と差を出力    「1」以外を入力⇒積と商を出力 第4回:分割コンパイルの練習プロジェクト「EX4-8」と「EX4-9」を組み合わせたプログラムです。 EX4-8.c → EX6-1.c EX4-8-1.c → EX6-1-1.c EX4-9-1.c → EX6-1-2.c のように3つのソースをコピーして、改造しよう。

例題EX6-1 1/2 EX6-1.c EX6-1.c: #include <stdio.h> cが1のときbasiccalc2 それ以外のときbasiccalc1 EX6-1.c: #include <stdio.h> void basiccalc1(float a, float b); void basiccalc2(float a, float b); int main(void) { float a,b; int c; printf(”2つの実数を入れてください: ”); scanf(”%f %f”,&a,&b); printf(”和と差を計算(1を入力) 積と商を計算(1以外入力): ”); scanf(”%d”,&c); if(c==1){ basiccalc2(a,b); } else{ basiccalc1(a,b); return 0; 別ファイルの「basiccalc1」と「basiccalc2」を使う

例題EX6-1 2/2: EX6-1-1.c, EX6-1-2.c EX6-1-1.c: EX6-1-2.c: #include <stdio.h> /* 積と商の計算 */ void basiccalc1(float a, float b) { float c,d; c=a*b; d=a/b; printf(”a=%f b=%f の時、”,a,b); printf(”積%f 商%f\n”,c,d); } #include <stdio.h> /* 和と差の計算 */ void basiccalc2(float a, float b) { float c,d; c=a+b; d=a-b; printf(”a=%f b=%f の時、”,a,b); printf(”和%f 差%f\n”,c,d); }

例題EX6-1分割コンパイルの手順 (Eclipse が自動で行う) 「EX6-1.c」をコンパイル $ gcc -c EX6-1.c ⇒ EX6-1.o 「EX6-1-1.c」をコンパイル $ gcc -c EX6-1-1.c ⇒ EX6-1-1.o 「EX6-1-2.c」をコンパイル $ gcc -c EX6-1-2.c ⇒ EX6-1-2.o 3つのオブジェクトファイルをリンク $ gcc EX6-1.o EX6-1-1.o EX6-1-2.o ⇒ EX6-1.exe

課題EX6-2: 次のプログラムの動作を予測せよ。また、実際にコンパイルして動作を確かめよ。(コピー&ペーストOK) #include <stdio.h> #include <unistd.h> int main(void) { int a; printf("ちゃーちゃ ちゃちゃちゃちゃ ちゃちゃちゃ ちゃちゃちゃ ちゃ\n"); sleep(2); printf("ちゃーちゃ ちゃちゃちゃ ちゃん\n\n"); sleep(3); printf("「王様」ゆうしゃよ りゅうおうを たおすのじゃ\n"); printf("1: たびにでる 2: たびにでない\n"); scanf("%d",&a); if(a==1){ printf("メタルスライムがあらわれた\n"); printf("1: たたかう 2: にげる\n"); scanf("%d",&a); if(a==1){ printf("ちゃららっ\n\n"); sleep(1); printf("ゆうしゃのこうげき\n"); sleep(2); printf("メタルスライムに25のダメージ\n\n"); printf("メタルスライムのこうげき\n"); printf("ゆうしゃに35のダメージ\n\n"); printf("ゆうしゃはしんでしまった\n\n"); } else{ printf("\nメタルスライムのあと なにもであいませんでした\n\n"); printf("\nゆうしゃはへいぼんないっしょうをおえました\n\n"); sleep(2); } else{ printf("「王様」ゆうしゃよ しんでしまうとはなさけない\n"); return 0; 注) sleep(n)は、n秒間なに   もしないで待つ関数   #include <unistd.h>が   必要

課題EX6-3:  「うるう年(閏年)」は,   西暦年数が   “400で割り切れる年,または,    4で割り切れかつ100で割り切れない年” と定義されています.西暦年数を入力し,「****年はうるう年です(ではありません).」というように出力するプログラムを作成せよ.( EX6-3.c )  実行例として(1) 2018年 (2) 2017年 (3) 2000年 (4) 1999年   (5) 1900年 (6)自分が生まれた年  が,うるう年かどうか調べよ. ヒント:「4で割り切れる」⇒「4で割った余りが0」 ||より&& 同じ順位では左から順に評価 If( (A && B) || (C && D))   括弧内は優先 (補足)優先順位

二次方程式 ax2+bx+c=0 の解を具体的に出力するプログラムを 作れ.ただし 解が重解なら  重解 x = … 課題EX6-4:  二次方程式 ax2+bx+c=0 の解を具体的に出力するプログラムを 作れ.ただし  解が重解なら  重解 x = …  解が2つの実解なら  相異なる実数解 x =…, …  解が複素数なら  相異なる複素数解 x = … + … i x = … - … i のように表現せよ.( EX6-4.c) 実行例として (1) a=1, b=1, c=-2, (2) a=1, b=-2, c=1, (3) a=1,b=1, c=1 を試みよ. (注) 平方根の計算が必要になるので  #include<stdio.h> のつぎに  #include<math.h> を書き加えること

ヒント 「x=2.400000+12.30000i」と表示させるには float a=2.4,b=12.3; printf(”x=%f+%fi”,a,b);

課題EX6-5: つぎのようなプログラムを作れ. 1. まず,品物の単価と購入数を入力する. 2. つぎに,消費税(8%)を含めた請求額を表示する.     ただし,端数は切り捨てるものとする. 3. 最後に,客の支払った額を入力して,足りていれば     おつりの額を,足りなければ不足額を出力する. ( EX6-5.c )  実行例として次の3つを含み,5つ程度の例を試みてみよ. (1) 単価1000円,購入数3個,客の支払額5000円 (2) 単価1000円,購入数3個,客の支払額3000円 (3)単価5円,購入数3個,客の支払額100円 ヒント:整数型で計算すれば自動的に端数切捨てになります

発展課題EX6-6: キャラクターベースのロールプレイングゲームを作成せよ( EX6-6.c ) ■ 発展課題 発展課題EX6-6: キャラクターベースのロールプレイングゲームを作成せよ( EX6-6.c )

実習結果のレポート 課題6-4のソースファイル「EX6-4.c」、を添付ファイルにしてメールを送ってください。 宛先: muroo@cc.tuat.ac.jp 件名:コンピューター基礎実験6 本文:感想および一言