1. 関数 scanf() 関数 printf() は変数の値を画面に表示しますが それに対し関数 scanf() はキーボードで入力した値を変数に代入します この関数を活用することで対話式 ( ユーザーの操作に応じて処理を行う ) プログラムを作ることができるようになります 整数の和

Similar documents
1. 入力した文字列を得る 1.1. 関数 scanf() を使う まずは関数 scanf() を使ったプログラムを作ってみましょう 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: #include<stdio.h> #define SIZE 128 main(

1. if~ 1.1. 確認を促す まずは簡単な分岐プログラムを作ってみましょう 以下はそのフローチャートです 開始 charc よろしいですか? (y/n) 変数 c の値が 'y' と等しいかどうか c c='y' Yes よろしいですね No 終了 1: 2: 3: 4: 5: 6: 7: 8

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

Microsoft Word - Cプログラミング演習(1)_2012

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

ゲームエンジンの構成要素

プログラミング実習I

1. ファイルにアクセスするには ファイルにアクセスするには 1. ファイルを開く 2. アクセスする 3. ファイルを閉じるという手順を踏まなければなりません 1.1. ファイルを読み込む まずはファイルの内容を画面に表示させるプログラムを作りましょう 開始 FILE *fp char fname

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

計算機プログラミング

kiso2-09.key

スライド 1

PowerPoint Presentation

演算増幅器

Microsoft Word - Cプログラミング演習(3)

講習No.9

プログラミング基礎

ガイダンス

Microsoft Word - no02.doc

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

Taro-ポインタ変数Ⅰ(公開版).j

Microsoft PowerPoint - 3.ppt [互換モード]

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

kiso2-03.key

Microsoft Word - no103.docx

Microsoft PowerPoint - class04.ppt

プログラミング実習I

C 言語第 3 回 2 a と b? 関係演算子 a と b の関係 関係演算子 等しい a==b 等しくない a!=b より大きい a>b 以上 a>=b より小さい a<b 以下 a<=b 状態 真偽 値 条件が満たされた場合 TRUE( 真 ) 1(0 以外 ) 条件が満たされなかった場合 F

第2回講義:まとめ

Microsoft Word - no11.docx

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

プログラミング基礎

PowerPoint Presentation

cp-7. 配列

Report#2.docx

Microsoft Word - 3new.doc

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

解答編 第 9 章文字データの取り扱い 演習問題 9.1 文法事項 1 ) コンピュータにおける 文字データの取り扱いについて説明しなさい コンピュータでは 文字に整数の番号を割り当てて ( コード化して ) 文字コードとして扱います 実際に用いられる文字コードとして ASCII コード EUC コ

Microsoft PowerPoint - 11.ppt [互換モード]

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft PowerPoint - 4.ppt [互換モード]

物質工学科 田中晋

gengo1-2

Report#2.docx

ポインタ変数

Microsoft PowerPoint - 4.pptx

プログラミングI 第2回 数理物理,総合理学等向け

Prog1_2nd

Microsoft PowerPoint - C1(演算と変数).ppt

Microsoft PowerPoint - program.ppt [互換モード]

<4D F736F F D20438CBE8CEA8D758DC03389F0939A82C282AB2E646F63>

Microsoft PowerPoint - lec4.ppt

Microsoft PowerPoint - kougi2.ppt

JavaプログラミングⅠ

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

PowerPoint プレゼンテーション

解答編 第 7 章実数型の計算と標準数学関数 演習問題 7.1 文法事項 1 ) 暗黙の型変換とは何か答えなさい 代入演算子 (=) や算術演算子 (+,-,*,/,%) では 2 つの演算項のデータ型が揃っている事が必要です 2 つの演算項のデータ型が異なる場合 可能ならば 演算項のデータ型を変換

Microsoft PowerPoint - 3.pptx

8 / 0 1 i++ i 1 i-- i C !!! C 2

Microsoft Word - VBA基礎(2).docx

本サンプル問題の著作権は日本商工会議所に帰属します また 本サンプル問題の無断転載 無断営利利用を厳禁します 本サンプル問題の内容や解答等に関するお問 い合わせは 受け付けておりませんので ご了承ください 日商プログラミング検定 STANDARD(C 言語 ) サンプル問題 知識科目 第 1 問 (

Microsoft Word - no202.docx

Microsoft PowerPoint - handout07.ppt [互換モード]

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

講習No.8

PowerPoint Presentation

Prog1_6th

演習課題No12

System.out.println("char : " + (int)character.min_value + "~" + (int)character.max_value); System.out.println("float : " + Float.MIN_VALUE + "~" + Flo

C 言語固有の命令で全部で32 個 の関数C 言語第 1 回 C 言語って?( シラバス 1 2 回目 ) 関数型言語 コンピュータに実行してもらう命令はすべて関数の中に記述されている 関数がプロ グラム

Microsoft Word - Cプログラミング演習(12)

Microsoft Word - no13.docx

Microsoft Word - Cプログラミング演習(11)

Microsoft PowerPoint - 説柔5_間勊+C_guide5ï¼›2015ã•’2015æŒ°æŁŽæš’å¯¾å¿œç¢ºèª“æ¸‹ã†¿ã•‚.pptx

2 ASCII コードと文字型変数 2-1 ASCII コード 文字 コードコードコードコードコードコードコードコード文字文字文字文字文字文字文字 10 進 10 進 10 進 10 進 10 進 10 進 10 進 10 進 0 16 SP P 80 ` 96 p 112

スライド 1

JavaプログラミングⅠ

JavaプログラミングⅠ

Microsoft PowerPoint - 12.ppt [互換モード]

Microsoft PowerPoint - prog04.ppt

Microsoft PowerPoint - 2.ppt [互換モード]

Microsoft PowerPoint - 12.ppt [互換モード]

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

PowerPoint プレゼンテーション

講習No.1

memo

Cプログラミング1(再) 第2回

Microsoft PowerPoint - 説明3_if文switch文(C_guide3)【2015新教材対応確認済み】.pptx

Microsoft Word - Training10_プリプロセッサ.docx

memo

講習No.12

Microsoft PowerPoint - lec10.ppt

プログラミング基礎

C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1

ファイル入出力

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

3-4 switch 文 switch 文は 単一の式の値によって実行する内容を決める ( 変える ) 時に用いる 例えば if 文を使って次のようなプログラムを作ったとする /* 3 で割った余りを求める */ #include <stdio.h> main() { int a, b; } pri

Transcription:

入出力処理 三池克明 関数 printf() と新たに学ぶ関数 scanf() を使ってデータの入出力処理を解説します 特に scanf() は対話式プログラム ( ユーザーに操作を促すプログラム ) を作るうえで重要です 目次 1. 関数 scanf()... 1 1.1. 2 整数の和を求める...1 1.2. 入力した文字を得る...3 2. 入出力処理と計算... 4 2.1. 2 整数の商を求める...4 2.2. 円の面積を求める...7 2.3. 三科目 ( 国語 数学 英語 ) の平均点を求める...10 2.4. 消費税込みの価格を計算する...12 2.5. 2 変数の値を入れ替える...14 3. 演習問題... 17

1. 関数 scanf() 関数 printf() は変数の値を画面に表示しますが それに対し関数 scanf() はキーボードで入力した値を変数に代入します この関数を活用することで対話式 ( ユーザーの操作に応じて処理を行う ) プログラムを作ることができるようになります 1.1. 2 整数の和を求める 以下のフローチャートどおりに処理するプログラムを作成します 開始 int a, b a の値は?: a キーボードで入力した値を 変数 a に代入する b の値は?: b キーボードで入力した値を 変数 b に代入する a + b 終了 -1-

1: 2: 3: 4: 5: 6: 7: 9: 11: 12: 14: /* 2 整数の加算 */ #include <stdio.h> main() { } int a, b; printf("a の値は?: "); scanf("%d", &a); printf("b の値は?: "); scanf("%d", &b); 変数名の手前の & に注意 変数名の手前の & に注意 printf("a + b = %d + %d = %d n", a, b, a + b); scanf1.cpp a の値は?: 35 b の値は?: 51 a + b = 35 + 51 = 86 実行時に キーボードで入力 このように実行時に入力した値を使って計算をします なお 今回使用した関数 scanf() の構文は以下のとおりです 構文 : scanf( データを取り出す書式, & 変数名 ) ヘッダファイル : stdio.h データを取り出す書式 は %d などのように関数 printf() と同じものを使用で きます ただし 変数名には手前に & が付くことに注意してください -2-

1.2. 入力した文字を得る 今度は文字を入力するプログラムです 1: 2: 3: 4: 5: 6: 7: 9: 11: 12: /* 文字を入力する */ #include <stdio.h> main() { } char moji; printf(" 何か半角文字を入力してださい : "); scanf("%c", &moji); printf(" あなたが入力した文字は [%c] ですね n", moji); printf(" また [%c] の文字コードは [%d](10 進数 ) です n", moji, moji); scanf2.cpp 何か半角文字を入力してださい : K あなたが入力した文字は [K] ですね また [K] の文字コードは [75](10 進数 ) です プログラム内部でのデータの扱い scanf2.cpp で入力した文字を整数として表示する部分があります このようなことができるのはコンピュータがあらゆるデータを数値として扱っているためです よって 'A'+ 1 といった計算も可能です ( ちなみに 'A' + 1 = 'B' となります ) -3-

2. 入出力処理と計算 ここでは関数 printf() と関数 scanf() を使った計算プログラムを例に挙げ解 説します 2.1. 2 整数の商を求める はじめに割り算のプログラムを作ってみましょう 1: 2: 3: 4: 5: 6: 7: 9: 11: 12: 14: 15: 16: 17: /* 2 整数の除算 */ #include <stdio.h> main() { } int a, b; double c; printf("a の値は?: "); scanf("%d", &a); printf("b の値は?: "); scanf("%d", &b); c = a / b; printf("a b = %d %d = %f n", a, b, c); scanf3.cpp a の値は?: 10 b の値は?: 3 a b = 10 3 = 3.000000 おや? おかしいですね 割り算の結果を代入する変数 c は double 型なので小数も扱えるはずです -4-

では どうしてこのようなことになったのでしょう C 言語では int 型同士の演算結果を int 型にしてしまいます よって c = 10 / 3; c = 3 int 型と int 型の演算結果は int 型になる よって変数 c に代入されるのは int 型の 3 となり 変数 c の値は 3.0 となるわけ です そこでキャスト演算子を使ったのが以下の scanf4.cpp です ソースコードを入力し コンパイル 実行して結果を確かめてみましょう 1: 2: 3: 4: 5: 6: 7: 9: 11: 12: 14: 15: 16: 17: /* 2 整数の除算 - キャスト演算子を使う */ #include <stdio.h> main() { } int a, b; double c; printf("a の値は?: "); scanf("%d", &a); printf("b の値は?: "); scanf("%d", &b); c = (double)a / b; printf("a b = %d %d = %f n", a, b, c); scanf4.cpp -5-

a の値は?: 10 b の値は?: 3 a b = 10 3 = 3.333333 上手くいきましたね それでは重要な部分を説明しましょう 14: 15: c = (double)a / b; ここでキャスト演算子を使って変数 a を double 型にキャスト ( 型変換 ) してい ます キャスト演算の書式は ( 型名 ) 変数名 と理解すればほぼ問題ありません ( 詳しい解説は本書では割愛します ) また double 型と int 型を含む式を演算するとき その結果は double 型になります よって c = (double)10 / 3; キャスト演算される c = 10.0 / 3; double 型になる c = 3.33333333 doule 型と int 型の演算結果は double 型になる となり 変数 c には double 型の 3.3333333 となります -6-

2.2. 円の面積を求める 半径の値を入力させ その円の面積を求めるプログラムを作りましょう そのフローチャートは以下のとおりです 開始 double r, pai, S pai 3.1416 半径 r = r S pai * r * r r S 終了 そしてソースプログラムは以下のとおりです 実行結果を確かめてみましょう 1: 2: 3: 4: 5: 6: 7: /* 円の面積を求める */ #include <stdio.h> main() { double S, r, pai = 3.1416; printf(" 半径 r[cm] = "); en-menseki1.cpp -7-

9: 11: 12: } scanf("%lf", &r); エルエフ %f ではなく % l f にする S = pai * r * r; printf(" 半径 %f[cm] の円の面積 S は %f[cm^2] です n", r, S); 半径 r[cm] = 33.8 半径 33.800000[cm] の円の面積 S は 3589.089504[cm^2] です ここで 9 行目の関数 scanf() をみてみましょう 9: printf(" 半径 r[cm] = "); scanf("%lf", &r); エルエフ %f ではなく % l f にする エルエフ scanf() で double 型の値を入力させるときは "%f" ではなく "% l f " と記述しま しょう 次に en-menseki1.cpp を改良したプログラムです 開始 double r 半径 r = r r 3.1416*r*r 終了 -8-

そしてソースプログラムです en-menseki1.cpp と比べて 宣言する変数が少ない 関数 printf() の中に計算式を記述している ことが分かります 1: 2: 3: 4: 5: 6: 7: 9: 11: 12: /* 円の面積を求める 2 */ #include <stdio.h> main() { } double r; printf(" 半径 r[cm] = "); scanf("%lf", &r); en-menseki2.cpp printf(" 半径 %f[cm] の円の面積 S は %f[cm^2] です n", r, 3.1416 * r * r); 半径 r[cm] = 33.8 半径 33.800000[cm] の円の面積 S は 3589.089504[cm^2] です ソースプログラムの内容は若干異なりますが 実行するうえでは何ら変らないこ とが分かります -9-

2.3. 三科目 ( 国語 数学 英語 ) の平均点を求める 国語 数学 英語の平均点を求めるプログラムを作りましょう 内容がやや難しいので以下の表も作りました フローチャート ソースプログラムと見比べれば理解しやすくなると思います フローチャートでの変数名 ソースプログラムでの変数名 型 国語 kokugo int 数学 sugaku int 英語 eigo int 平均点 average double 開始 国語 数学 英語 平均点 国語 数学 英語 平均点 国語 数学 英語 3 平均点 終了 heikinten1.cpp 1: 2: 3: 4: 5: /* 国語 数学 英語の平均点を求める */ #include <stdio.h> main() { -10-

6: 7: 9: 11: 12: 14: 15: 16: 17: 1 19: } int kokugo, sugaku, eigo; double average; printf(" 国語の点数 = "); scanf("%d", &kokugo); printf(" 数学の点数 = "); scanf("%d", &sugaku); printf(" 英語の点数 = "); scanf("%d", &eigo); average = (kokugo + sugaku + eigo) / 3.0; printf(" 平均点は %f です n", average); 国語の点数 = 80 数学の点数 = 83 英語の点数 = 79 平均点は 80.666667 です きちんと平均点が算出されているのが分かります -11-

2.4. 消費税込みの価格を計算する 消費税込価格の計算をするプログラムを作ってみましょう こちらもやや難しいので表も作りました フローチャートでの変数名 ソースプログラムでの変数名 型 価格 kakaku int 消費税率 syohizei double 税込価格 zeikomi int 開始 価格 税込価格 消費税率 消費税率 0.05 価格 税込価格 価格 (1+ 消費税率 ) 税込価格 終了 -12-

1: 2: 3: 4: 5: 6: 7: 9: 11: 12: 14: 15: 16: 17: /* 消費税込価格を算出する */ #include <stdio.h> main() { } int kakaku, zeikomi; double syohizei; syohizei = 0.05; printf(" 価格を入力してください : "); scanf("%d", &kakaku); zeikomi = kakaku * (1 + syohizei); printf(" 税込価格は %d です n", zeikomi); syohizei.cpp 価格を入力してください : 1200 税込価格は 1260 です 税込価格がきちんと計算されているのが分かります -13-

2.5. 2 変数の値を入れ替える 二つの変数の値を入れ替えるプログラムを作ってみましょう 意外な発見があるはずです 開始 int a b work a b work a a b b work a b 終了 1: 2: 3: 4: 5: 6: 7: 9: 11: 12: /* 2 変数の値を入れ替える */ #include <stdio.h> main() { int a, b, work; printf("a = "); scanf("%d", &a); printf("b = "); scanf("%d", &b); work = a; swap1.cpp -14-

14: 15: 16: 17: 1 19: } a = b; b = work; printf(" 入れ替えた結果 n"); printf("a = %d, b = %d n", a, b); a = 35 b = 12 入れ替えた結果 a = 12, b = 35 変数の入れ替えというと大抵の場合 a = b; b = a; と考えてしまいがちですが これは間違いです なぜ間違いなのかは 順番に処理をたどっていけば分かります 1a と b の状態 35 a 12 b 2a = b; 変数 b の値が変数 a に代入されます 12 a 12 b この時点で元々の変数 a の値 35 が失われたため 入れ替えに失敗しているこ とが分かります -15-

そこで swap1.cpp では 以下のように変数をもう一つ用意して処理をします 14: 15: work = a; a = b; b = work; 1a と b の状態 35 a 12 b?? work 213 行目 work = a; 35 a 12 b 35 work 314 行目 a = b; 12 a 12 b 35 work 415 行目 b = work; 12 a 35 b 35 work このように値の入れ替えができているのがわかります -16-

3. 演習問題 3-1. 直方体の各辺の長さ a[cm] b[cm] c[cm] を入力し その直方体の表面積 S[cm 2 ] と体積 V[cm 3 ] を算出し表示するプログラム ensyu3-1.cpp を作りなさい 直方体の3 辺の長さをa b cを入力してください a[cm] = 3.5 b[cm] = 4 c[cm] = 5.2 表面積 S は 106.000000[cm^2] 体積 V は 72.800000[cm^3] です ヒント : まずは表面積 S と体積 V の式を組み立てましょう 3-2. 一次方程式 Ax B 0 がある A と B を入力させ方程式を表示するプロ グラム ensyu3-2.cpp を作りなさい なお A B は整数とする x の一次方程式 Ax+B=0 の A と B を入力してください ただし A B は共に整数とします A = 12 B = -5 方程式は 12x-5=0 ですね ヒント : printf() 関数で符号付で表示させる方法を学びましたね -17-

3-3. ensyu3-2.cpp を発展させ x の解を算出するプログラム ensyu3-3.cpp を作りなさい x の一次方程式 Ax+B=0 の A と B を入力してください ただし A B は共に整数とします A = -4 B = -7 方程式 -4x-7=0 の解は -1.750000 です ヒント : す A B は整数ですが x は実数です よって解の計算にはキャスト演算子が必要で -18-