講習No.9

Similar documents
講習No.8

講習No.10

講習No.12

プログラミング実習I

Microsoft PowerPoint - 5Chap15.ppt

講習No.1

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

PowerPoint プレゼンテーション

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

kiso2-09.key

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

Prog1_10th

Microsoft Word - 3new.doc

プログラミング基礎

02: 変数と標準入出力

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

02: 変数と標準入出力

ポインタ変数

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

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

プログラミング基礎

PowerPoint Presentation

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

PowerPoint プレゼンテーション

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

Microsoft Word - no11.docx

Java講座

PowerPoint プレゼンテーション

スライド 1

Microsoft Word - no103.docx

02: 変数と標準入出力

Microsoft PowerPoint - 11.pptx

PowerPoint Presentation

文字列 2 前回の授業ではコンピュータ内部での文字の取り扱い 文字型の変数 文字型変数への代入方法などを学習した 今回は 前回に引き続き 文字処理を学習する 内容は 標準入出力 ( キーボード ディスプレイ ) での文字処理 文字のファイル処理 文字を取り扱うライブラリ関数である 標準入出力 Lin

ポインタ変数

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

02: 変数と標準入出力

gengo1-11

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

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

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

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

演習課題No12

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

Microsoft PowerPoint - lec10.ppt

ポインタ変数

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

Microsoft PowerPoint - C4(反復for).ppt

memo

Microsoft PowerPoint - prog04.ppt

今までの復習 プログラムで最低限必要なもの 入力 ( キーボードから ファイルから ) 出力 ( 画面へ ファイルへ ) 条件分岐 : 条件の成立 不成立により 異なる動作をする 繰り返し : 一定の回数の繰返し 条件成立の間の繰返し 関数の定義 関数の呼び出し C ではそれ以外に ポインタ データ

PowerPoint Presentation

< F2D837C E95CF CF68A4A94C5816A2E6A>

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

C 言語講座 Vol 年 5 月 29 日 CISC

プログラミング実習I

PowerPoint プレゼンテーション

ポインタ変数

02: 変数と標準入出力

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

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

Prog1_6th

gengo1-2

gengo1-12

Taro-ファイル処理(公開版).jtd

gengo1-12

PowerPoint プレゼンテーション

printf("5つの整数を入力して下さい \n"); /* データ入力 */ for( /*** 02 ***/ ){ printf("%dつ目の入力 :",i+1); scanf("%d", /*** 03 ***/ ); sum=dat[0]; /* 合計値の初期設定 */ n_max= 0

program7app.ppt

Microsoft Word - no202.docx

kiso2-03.key

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

Prog1_15th

Report#2.docx

Microsoft Word - no02.doc

プログラミング基礎

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

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

目次

情報処理演習 B8クラス

<4D F736F F D20438CBE8CEA8D758DC03389F0939A82C282AB2E646F63>

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

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

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

cp-7. 配列

memo

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

Prog1_6th

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

Microsoft PowerPoint - prog03.ppt

Taro-リストⅠ(公開版).jtd

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

gengo1-8

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

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

演算増幅器

第9回 配列(array)型の変数

PowerPoint プレゼンテーション

初歩のC言語ターミナル_2014_May.pages

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

Transcription:

日本語は通常 2 バイトの文字コード.JIS コード, シフト JIS コード, Unicode (UTF-8) 等の様々な文字コードがある. アスキーコード表 (ASCII code) アスキーコード ( 値 ) 漢字変換無しでキーボードから直接入力できる半角文字 32 48 0 64 @ 80 P 96 ` 112 p 33! 49 1 65 A 81 Q 97 a 113 q 34 " 50 2 66 B 82 R 98 b 114 r 35 # 51 3 67 C 83 S 99 c 115 s 36 $ 52 4 68 D 84 T 100 d 116 t 37 % 53 5 69 E 85 U 101 e 117 u 38 & 54 6 70 F 86 V 102 f 118 v 39 ' 55 7 71 G 87 W 103 g 119 w 40 ( 56 8 72 H 88 X 104 h 120 x 41 ) 57 9 73 I 89 Y 105 i 121 y 42 * 58 : 74 J 90 Z 106 j 122 z 43 + 59 ; 75 K 91 [ 107 k 123 44, 60 < 76 L 92 \ 108 l 124 45-61 = 77 M 93 ] 109 m 125 46. 62 > 78 N 94 ^ 110 n 126 ~ 47 / 63? 79 O 95 _ 111 o 127 この授業では1バイトのアスキーコードのみを学習する 復習 この授業では日本語文字のプログラムは扱わない

C 言語における文字の取り扱い (2) 復習 文字の出力 char moji1, moji2, xx; moji1 = 65; moji2 = 'A'; xx = '0'; printf("moji1 は %d,moji2 は %d,xx は %d である. n", moji1, moji2, xx); printf("moji1 は %c,moji2 は %c,xx は %c である. n", moji1, moji2, xx); moji1 は 65,moji2 は 65,xx は 48 である. moji1 は A,moji2 は A,xx は 0 である. 文字の入力 文字を一つ入れてください :1 ASCII コードは 49, 文字は 1 である. 変換文字 %c は文字コードを文字に変換する 変換文字 %cは入力され char aa; printf(" 文字を一つ入れてください :"); た文字の文字コードを scanf("%c", &aa); 変数に代入する printf("asciiコードは %d, 文字は %cである. n", aa, aa);

C 言語における文字列の取り扱い (1) 復習 文字 a A b B z Z 0 1 9 = +? /! など 文字列 文字列は文字の集合 Hello Kandai programming など 理由 : 文字数より要素数の多い配列を用いた時に, 文字列の最後を示すため 原則 :C 言語では文字列を char 型配列で扱う 文字列 Hello を文字配列 s[6] に入れる場合 s[0] s[1] s[2] s[3] s[4] s[5] 'H' 72 'e' 101 'l' 108 'l' 108 'o' 111 0 必ず最後にはコード 0 が入る 文字数プラス 1 の要素数が必要

復習 文字列 ( 文字配列 ) の初期化 s[6]~s[9] は現在使っていないという目印 文字列の設定 必要な文字数より多めに宣言する 最後に 0 を入れる char s[10]; s[0] = 'H'; s[1] = 'e'; s[2] = 'l'; s[3] = 'l'; s[4] = 'o'; s[5] = 0; 配列 s[10] H e l l o 0 % & * # char s[10] = 'H', 'e', 'l', 'l', 'o', 0; 配列初期化の応用 It's New! char s[10] = "Hello"; char s[] = "Hello"; char s[10]; s[10] = "Hello"; s[0] = "Hello"; s[ ] = "Hello"; 配列宣言と同時に文字列を設定する方法 ( 最後の 0 も自動的に入る ) char s[6] = "Hello" と同じ 配列宣言と同時でなくてはダメ! ( 宣言文と代入文に分かれてはダメ )

文字列の出力 文字列の入出力 char aa[] = "KANDAI"; printf(" 私は %s 生です. n", aa); 変換文字は %s 復習 aa[0], aa[1], インデックスを付けると一つ一つの文字を表す aa インデックスを付けないときはかたまりとしての文字列を表す 注意! [ ] を付けない 変換文字は %s 私は KANDAI 生です. 文字列の入力 必要な文字数より多めに宣言 注意! & も [ ] も付けない char aa[100]; printf("99 文字以下で文字列を入力してください :"); scanf("%s", aa); printf(" 文字列は %sである. n", aa); 99 文字以下で文字列を入力してください :Kandai 文字列は Kandai である. 最後の 0 も自動的に入る 文字配列 aa に入力した文字列が代入される

文字列を操作するライブラリ関数の例 ライブラリ関数 int strlen(char s[]) char* _strset(char s[], int c) char* strcpy(char s1[], char s2[]) 意味文字列 sの文字数を返す文字列 sをアスキーコードcの文字で埋める文字列 s2を文字列 s1にコピーする char* はポインタ.2 年生で学習 char* strcat(char s1[], char s2[]) 文字列 s1 の末尾に文字列 s2 を付加する int strcmp(char s1[], char s2[]) 文字列 s1と文字列 s2を比較する. 文字列を == 演算子で比同じ文字列なら0を返す. 辞書の順序で if (s1 == s2) 較することはできない s1がs2より前なら, 正の値を返す. s1がs2より後なら, 負の値を返す. これらの文字列操作用ライブラリ関数を利用するには #include <string.h> が必要. 注 1) 関数の表記は, 現在の学習レベルに合わせて変更してある. 注 2) 関数については第 10 回以降で詳しく学習.

文字列操作ライブラリを用いたソースプログラムの例 #include <stdio.h> #include <string.h> int main(void) 配列 ss3[100] 0 $ x # Y % & * # char ss1[] = "Kandai-sei", ss2[] = "Computer Science"; char ss3[100] = ""; // 初めは空の文字列. 十分な文字数を確保する. 空の文字列として初 期化するこ printf("ss1の文字数は %dですが,ss3の文字数は%dです. n", とは重要! strlen(ss1), strlen(ss3)); strcpy(ss3, ss1); //ss1の内容をss3にコピー printf("ss3の内容は %sになり, 文字数は %dになりました. n", ss3, strlen(ss3)); strcat(ss3, " / "); //ss3の最後に" / " を付加 strcat(ss3, ss2); //ss3の最後にss2を付加 printf(" 今度のss3は %sで, 文字数は %dです. n", ss3, strlen(ss3)); ss1 の文字数は 10 ですが,ss3 の文字数は 0 です. ss3 の内容は Kandai-sei になり, 文字数は 10 になりました. 今度の ss3 は Kandai-sei / Computer Science で, 文字数は 29 です. 続行するには何かキーを押してください... 配列なので, ss3=ss1 という代入はできない

数学では 1 次元から2 次元へ x = 2 1 次元座標 0 1 2 3 2 次元座標 プログラミングでは 1 次元 int d[5] = 5, 3, 8, 12, 6 ; y 5 3 8 12 6 d[0] d[1] d[2] d[3] d[4] char s[7] = "Kandai"; (x, y) = (3, 2) 'K' 'a' 'n' 'd' 'a' 'i' 0 s[0] s[1] s[2] s[3] s[4] s[5] s[6] x x 直線 x 1 つの変数 x で位置が定まる 平面 (x, y) 2 つの変数 x と y で位置が定まる 1 次元配列 配列 d[i], s[i] 1 つのインデックス i でデータが定まる 2 つのインデックスでデータが定まる配列 2 次元配列

2 次元配列 float d[3][4]; 2 次元配列 d[i][j] 2 つのインデックス i と j でデータが指定される 縦が 3 行横が 4 列の float 型の表 4 列 横のインデックスは 3 まで 3 行 i = 0 i = 1 i = 2 j = 0 j = 1 j = 2 j = 3 d[0][0] d[0][1] d[0][2] d[0][3] d[1][0] d[1][1] d[1][2] d[1][3] d[2][0] d[2][1] d[2][2] d[2][3] 縦のインデックスは 2 まで d[0][4], d[1][4],... d[3][0],... d[3][4] 等々は存在しない

1 次元 2 次元配列の初期化 (1) int b[5] = 10, 20, 25, 35, 40; これと同じ意味 b[0] = 10; b[1] = 20; b[2] = 25; b[3] = 35; b[4] = 40; 2 次元 j= 0,1,2, j= 0,1,2, j= 0,1,2, int aa[3][4] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ; これと同じ意味 i = 0 i = 1 i = 2 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 d[0][0] = 1 d[0][1] = 2 d[0][2] = 3 d[0][3] = 4 d[1][0] = 5 d[1][1] = 6 d[1][2] = 7 d[1][3] = 8 d[2][0] = 9 d[2][1] = 10 d[2][2] = 11 d[2][3] = 12

2 次元配列の初期化 (2) int aa[][] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ; int aa[][4] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ; 縦の行数は省略可 横の列数は省略不可 使用予定の最大の列数を指定する int aa[][4] = 1, 2, 3, 4, 5, 6, 9, 10, 11 ; i = 0 j = 0 j = 1 j = 2 j = 3 この部分は 0に初期化 される d[0][0] = 1 d[0][1] = 2 d[0][2] = 3 d[0][3] = 4 i = 1 d[1][0] = 5 d[1][1] = 6 d[1][2] d[1][3] i = 2 d[2][0] = 9 d[2][1] = 10 d[2][2] = 11 d[2][3] 注意 int aa[3][4]; のように初期化しな 初期化は宣言と同時に! い配列の値は未定義 int aa[3][4]; aa[][4] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ;

2 次元配列を用いたソースプログラムの例 (1) #include <stdio.h> main() int aa[][4] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ; int i, j; for (i = 0; i < 3; i++) for (j = 0; j < 4; j++) printf("%d ", aa[i][j]); printf(" n"); 内側ループ j = 0 j = 1 j = 2 j = 3 i = 0 1 2 3 4 5 6 7 8 i = 1 9 10 11 12 i = 2 続行するには何かキーを押してください... 外側ループ 内側ループ 外側ループ d[0][0] = 1 d[1][0] = 5 d[2][0] = 9 d[0][1] = 2 d[1][1] = 6 d[2][1] = 10 d[0][2] = 3 d[1][2] = 7 d[2][2] = 11 d[0][3] = 4 d[1][3] = 8 d[2][3] = 12

改良型 2 次元配列を用いたソースプログラムの例 (2) #include <stdio.h> main() int aa[][4] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ; int i, j; for (i = 0; i < 3; i++) for (j = 0; j < 4; j++) printf("%2d ", aa[i][j]); printf(" n"); 縦にきれいにそろって出力! i = 0 1 2 3 4 5 6 7 8 i = 1 9 10 11 12 i = 2 続行するには何かキーを押してください... 修正点 %d %2d j = 0 j = 1 j = 2 j = 3 d[0][0] = 1 d[1][0] = 5 d[2][0] = 9 d[0][1] = 2 d[1][1] = 6 d[2][1] = 10 d[0][2] = 3 d[1][2] = 7 d[2][2] = 11 d[0][3] = 4 d[1][3] = 8 d[2][3] = 12

xx の値は 5 である xx の値は 5 である xx の値は 005 である yy の値は 3.140000 である yy の値は yy の値は printf() 関数における書式指定 #include <stdio.h> main() int xx = 5; float yy = 3.14; printf("xxの値は %dである n", xx); printf("xxの値は %3dである n", xx); printf("xxの値は %03dである n", xx); printf("yyの値は %fである n", yy); printf("yyの値は %10fである n", yy); printf("yyの値は %10.3fである n", yy); 3.140000 である 3.140 である 3 文字右詰 3 文字右詰で左は 0 で埋める 10 文字右詰 ( 少数以下 6 桁 ) 続行するには何かキーを押してください... // 全体で3 文字の範囲に右詰 // 同上に加えて,0を詰める // 全体で10 文字の範囲に右詰 // 同上に加えて, 小数以下 3 桁 10 文字右詰で少数以下 3 桁 少数以下 3 文字 3.140 全体で 10 文字

2 次元配列を用いたソースプログラムの例 (3) 改良型 : 縦の合計を出力 #include <stdio.h> main() int aa[][4] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ; int i, j, sum = 0; for (i = 0; i < 3; i++) // 配列内容を出力 for (j = 0; j < 4; j++) d[0][0] = 1 printf("%2d ", aa[i][j]); d[1][0] = 5 printf(" n"); printf("============== n"); for (j = 0; j < 4; j++) sum = 0; for (i = 0; i < 3; i++) sum = sum + aa[i][j]; printf("%2d ", sum); printf(" n"); // 縦の合計を出力 合計を求める外側ループ 合計を求める内側ループ d[2][0] = 9 d[0][1] = 2 d[1][1] = 6 d[2][1] = 10 d[0][2] = 3 d[1][2] = 7 d[2][2] = 11 1 2 3 4 5 6 7 8 9 10 11 12 ============== 15 18 21 24 続行するには何かキーを... d[0][3] = 4 d[1][3] = 8 d[2][3] = 12

2 次元配列を用いたソースプログラムの例 (4) データの入力 #include <stdio.h> main() int aa[3][4]; int i, j; for (i = 0; i < 3; i++) for (j = 0; j < 4; j++) printf("aa[%d][%d] はいくら?", i, j); scanf("%d", &aa[i][j]); for (i = 0; i < 3; i++) for (j = 0; j < 4; j++) printf("%3d ", aa[i][j]); printf(" n"); & が必要 d[0][0] = 1 d[1][0] = 5 d[2][0] = 9! 注意! & が不要なのは文字列を %s で入力する場合だけ! d[0][1] = 2 d[1][1] = 6 d[2][1] = 10 d[0][2] = 3 d[1][2] = 7 d[2][2] = 11 d[0][3] = 4 d[1][3] = 8 d[2][3] = 12 aa[0][0] はいくら?1 aa[0][1] はいくら?2 aa[0][2] はいくら?3 aa[0][3] はいくら?4 aa[1][0] はいくら?5 aa[1][1] はいくら?6 aa[1][2] はいくら?7 aa[1][3] はいくら?8 aa[2][0] はいくら?9 aa[2][1] はいくら?10 aa[2][2] はいくら?11 aa[2][3] はいくら?12 1 2 3 4 5 6 7 8 9 10 11 12 続行するには何か...