Microsoft Word - no103.docx

Similar documents
Microsoft Word - no202.docx

Microsoft Word - no15.docx

ポインタ変数

Microsoft Word - no11.docx

PowerPoint プレゼンテーション

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

Microsoft Word - no12.doc

ポインタ変数

ポインタ変数

プログラミング実習I

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

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

Microsoft Word - no204.docx

講習No.8

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

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

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

ファイル入出力

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

PowerPoint プレゼンテーション

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

Microsoft Word - 3new.doc

Microsoft Word - no13.docx

ファイル入出力

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

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

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

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

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

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

情報処理演習 B8クラス

Microsoft PowerPoint - lec10.ppt

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

gengo1-2

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

02: 変数と標準入出力

プログラミング基礎

Microsoft PowerPoint - 5Chap15.ppt

gengo1-8

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

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

PowerPoint プレゼンテーション

ポインタ変数

< F2D837C E95CF CF68A4A94C5816A2E6A>

練習&演習問題

Microsoft PowerPoint - prog03.ppt

02: 変数と標準入出力

ポインタ変数

Microsoft PowerPoint - kougi6.ppt

講習No.9

スライド 1

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

02: 変数と標準入出力

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

Microsoft PowerPoint - prog04.ppt

Microsoft Word - no02.doc

PowerPoint Presentation

基礎プログラミング2015

データ構造

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

物質工学科 田中晋

Microsoft Word - no205.docx

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

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

kiso2-09.key

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

プログラミング基礎

PowerPoint Presentation

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

02: 変数と標準入出力

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

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

Java講座

第1回 プログラミング演習3 センサーアプリケーション

Microsoft Word - COMP-MATH-2017-FULLTEXT.doc

02: 変数と標準入出力

演算増幅器

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

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

C言語講座 ~ファイル入出力編~

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(

第2回講義:まとめ

Microsoft PowerPoint - kougi2.ppt

Microsoft PowerPoint - 11.pptx

cp-7. 配列

PowerPoint プレゼンテーション

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

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

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

講習No.1

Microsoft Word - no14.docx

PowerPoint プレゼンテーション

Prog1_6th

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

Microsoft Word - no206.docx

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

講習No.12

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

PowerPoint プレゼンテーション

Transcription:

次は 数える例です ex19.c /* Zeller の公式によって 1 日の曜日の分布を求めるプログラム */ int year, month, c, y, m, wnumber, count[7] = {0, i; for(year = 2001; year <= 2100; year++) { for(month = 1; month <= 12; month++) { y = year; m = month; if(m < 3) { /* 1, 2 月のときの処理 */ m += 12; y--; /* 西暦を分ける */ c = y / 100; /* 西暦の上 2 桁 */ y = y % 100; /* 西暦の下 2 桁 */ /* Zeller の公式 */ wnumber = (26 * (m + 1) / 10 + y + y / 4 + c / 4-2 * c % 7) % 7; count[wnumber]++; for(i = 0; i < 7; i++) { printf("%d : %d 回 n", i, count[i]); return(0); 参考 Zeller の公式日付から曜日を求める公式として Zeller の公式といわれる公式があります 西暦の上 2 桁を c, 下 2 桁を y, 月を m, 日を d としたとき 次の値を 7 で割った余りが曜日を表します (0= 土曜 1= 日曜... 6= 金曜 ) d + 26 (m +1) 10 + y + y 4 + c 4 2 c ただし 1 月 2 月は前年の 13 月 14 月として計算しなければいけません ( 例えば 2007 年の 1 月は 2006 年の 13 月とする ) また 割り算は 整数の商 を意味とします ここでは使いやすいように 1 日の曜日番号を求めるのを次のように変えておきます これで曜日番号が 0= 日曜 1= 月曜... 6= 土曜となります (26 * (m + 1) / 10 + y + y / 4 + c / 4-2 * c % 7) % 7 3.2 文字文字を表す型として char 型があります 文字を表すためには 'c' のように '( シングルコーテ 16

ーション ) で囲んで表します ところで char 型は以前に述べたように8ビットの整数も表します 正確にいえば コンピュータの内部では文字は番号をつけて表されています その番号を保存するために8ビットの整数が使われているのです つまり 正確には char 型とは8ビットの整数を表し それを文字コードと考えて文字を意味することにするわけです そのコード表は下のようになります 10 進数 0 16 32 48 64 80 96 112 16 進数 00 10 20 30 40 50 60 70 0 0 NULL スペース 0 @ P ` p 1 1! 1 A Q a q 2 2 " 2 B R b r 3 3 # 3 C S c s 4 4 $ 4 D T d t 5 5 % 5 E U e u 6 6 & 6 F V f v 7 7 ' 7 G W g w 8 8 制御コード ( 8 H X h x 9 9 ) 9 I Y i y 10 A * : J Z j z 11 B + ; K [ k { 12 C, < L l 13 D - = M ] m 14 E. > N ^ n ~ 15 F /? O _ o 8ビットといいましたが上のように英数字は7ビット分しかありません 残りの部分を使って日本語のかなや漢字を表しているのです たとえば漢字は2バイトを使って表されるため ( 例 : 情 =8FEE, 報 =95F1(16 進数 ) ただし これは Shift-JIS といって Windows で採用されている漢字コードで 他のシステムでは別の漢字コードが使われていることもあります ) そのため文字として扱うことはできません 17

ex20.c /* 文字コードを表示してみよう */ int main(void) { char input; /* 変数 input を char 型として宣言 */ printf(" 文字を入れてください : "); scanf("%c", &input); /* %c = 文字を表す書式文字列 */ printf(" 文字 :%c 整数 :%3d 16 進数 :%02X n", input, input, input); /* input を %c( 文字 ) %3d( 整数 ) %02X(16 進数 ) の 3 つの形で表示する */ if ((input >= 'A') && (input <= 'Z')) { printf(" 大文字です n"); else if ((input >= 97) && (input <= 0x7a)) { printf(" 小文字です n"); else { printf(" 数字か記号です n"); ここのように文字 'A' と比較しようと数値 97 と比較しようと 0x7a(0x で始まるのは16 進数と見なされます ) と比較しようと変わらないということです もちろん あくまでも 数値 ですから演算もできます 演算の例をやってみます ex21.c /* 文字コードで演算してみよう */ int main(void) { char input, output; printf(" 文字を入れてください : "); scanf("%c", &input); output = input - 1; printf("%c の前の文字は %c です n", input, output); if ((input >= 'A') && (input <= 'Z')) { printf("%c はアルファベットの %d 番目の文字です n", input, input - 'A' + 1); output = input - 'A' + 'a'; printf(" 小文字に直すと %c となります n", output); 18

練習問題 3.2 文字を入力してもらい アルファベットならば 次の文字を表示するプログラムを作成しなさい ただし この問題では大文字小文字がつながっていると考えて Z の次の文字は a z の次の文字は A として扱うことにします また アルファベット以外の文字は そのままの変換しないでそのままで表示すること ex22.c /* 次の文字 ( 円環の順 ) */ int main(void) { char input, next; printf(" 文字を入れてください : "); scanf("%c", &input); printf("%c の後の文字は %c です n", input, next); return(0); 19

3.3 文字と配列 もちろん 文字型 (char 型 ) の配列も考えことができます まず簡単な例です 点数を S~D の評価 に変換するプログラムの例を挙げます ex23.c /* 点数から評価に変換 */ #define MAXNUM 10 /* MAXNUM 人分の点数と評価の配列を宣言 */ int num[maxnum]; char grade[maxnum]; int i, sum = 0; double mean; /* 点数の入力 */ printf(" 点数を入力してください n"); for(i = 0; i < MAXNUM; i++) { printf("%d 人目 : ", i + 1); scanf("%d", &num[i]); sum += num[i]; if(num[i] >= 90) { grade[i] = 'S'; else if(num[i] >= 60) { grade[i] = 'A' + 8 - num[i] /10; else { grade[i] = 'D'; mean = (double)sum / MAXNUM; printf(" 平均点 =%.2f n", mean); for(i = 0; i < MAXNUM; i++) { printf("%2d 人目 %3d 点 (%c) ", i + 1, num[i], grade[i]); if(num[i] >= mean) { printf(" 平均以上 n"); else { printf(" 平均未満 n"); return(0); ここでは A, B, C は計算で作成しています 20

3.4 文字列文字列は文字がいくつか集まったものを意味します ですから char 型を並べないと文字列を扱うことはできません そのため 文字列を格納するためには文字型 char 型を複数並べる必要があります 複数個同じものを並べたのが配列でしたから 文字列を表すためには char 型の配列を使わなければならないことになります 配列になる関係上 文字のように単純に比較することはできません 文字列を使うときには "( ダブルコーテーション ) で囲むことになります "abc" は3 文字の文字列 "a" は1 文字の文字列, "" は何もない文字列 ( 空文字列 ) ということになります このように文字列は何文字の長さかわかりません そこで 文字列には終わりを表す記号をつけて表します つまり メモリに格納されるときには次のようになります "abc" 'a'=97=0x61 'b'=98=0x62 'c'=99=0x62 ' 0'=0=0x00 文字列では ' 0' を最後につけて文字列の終わりを意味させているのです したがって 文字列を格納するためには長さ+1つ以上の長さの配列が必要になるわけです ex24.c /* 文字列の簡単な例 */ char input[11]; /* 10 文字までの文字列が格納できるように */ int i; printf(" 文字列を入れてください :"); scanf("%10s", input); /* ここは &input としないことに注意 */ /* 最大 10 文字まで読み込む */ for(i = 0; input[i]!= ' 0'; i++) { printf("%c (%02X) n", input[i], input[i]); /* input[i] を %c( 文字 ) %02X(16 進数 ) の 2 つの形で表示する */ ここで使った for 文ですが 読み込んだ文字列を前から順に1 文字ずつ調べて終わりの記号 ' 0' が出てくるまで繰り返すことを意味しています なお ここでは scanf 関数を使っていましたが scanf 関数で文字列を入力する場合 空白があるとそれ以降は入力されません そこで 空白を含む文を扱うときには fgets 関数を使います scanf("%80s", strings); の部分を fgets(string, 80, stdin); とすればいいのです ただし この場合は 最後の改行 (0x0c, 0x0a =2 文字分 ) も文字列の一部とみなされます このことに気をつけましょう ではもう少し複雑なものを作成してみましょう 21

ex25.c /* 文字列の長さを調べる */ char string[81]; /* 80 文字までの文字列が格納できるように */ /* 最後に NULL = ' 0' がくるので文字数 + 1 の大きさの配列を用意すること */ int i, len = 0; /* 長さを保存する変数 */ printf(" 文字列を入力してください n ); scanf("%80s", string); /* 最大 80 文字まで読み込む */ printf("%s n", string); for(i = 0; string[i]!= ' 0'; i++) { len++; printf("%d 文字の文字列です n", len); 練習問題 3.3 文字列を入力してもらい その文字列に含まれている アルファベット小文字 アルファベット大文字 数字のそれぞれの個数を表示するプログラムを作成しなさい ex26.c /* 小文字 大文字 数字のそれぞれの個数を表示する */ char string[81]; int ; printf(" 文字列を入力してください n"); scanf("%80s", string); /* 最大 80 文字まで読み込む */ printf(" 小文字は %d 個 大文字は %d 個 数字は %d 個 n", ); 22