C言語講座 配列と文字列 Ver 0.3.

Slides:



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

第 2 章 数値の入力と変数 scanf と変数をやります 第 2 章 数値の入力と変数 1. 以下のプログラムを実行してみよう  C 言語では文の最後に「 ; 」(セミコロン)が付きます 第 2 章 数値の入力と変数 2 #include int main() { int x; x = 3; printf("x.
1 例題 ex3b ( 配列 ) 科学科プログラミング. 2 例題 : ex3b  以下の 3 つについて例題を進める ステップ 1 :配列 ステップ 2 :最小と最大 ステップ 3 :文字型の配列.
オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
C言語基礎 関数・ポインタ.
第2章 数値の入力と変数 scanfと変数をやります.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
基礎プログラミングおよび演習 第9回
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
C言語 第2講 生物機能制御学講座 濱田 農学部7号館209室.
文字配列の課題1 解説 /* a */ #include <stdio.h> main( ) { int i;
第13回 プログラミングⅡ 第13回
12: コマンドライン引数 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
C言語講座 第4回 ポインタ.
12: コマンドライン引数 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
第6章 2重ループ&配列 2重ループと配列をやります.
プログラミング論 II 電卓,逆ポーランド記法電卓
問題 1 キーボードから入力した数の合計を計算するプログラムを 作成せよ。最初に、何個の数を入力するかその数を入力 するようにする。
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
C-language Narc Neac ARithmetic Compiler
第10章 char 文字列; 文字列を入力させるよ!.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング応用 printfと変数.
プログラミング論 II 2008年10月30日 文字列
プログラミング 4 記憶の割り付け.
プログラミング演習I 2003年6月25日(第10回) 木村巌.
第10章 これはかなり大変な事項!! ~ポインタ~
知能情報工学演習I 第9回( C言語第3回) 課題の回答
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
前回の練習問題.
第13章 文字の取り扱い方 13.1 文字と文字型変数 13.2 文字列 13.3 文字型配列への文字列の代入
第13章 文字の取り扱い方 13.1 文字と文字型関数 13.2 文字列 13.3 文字型配列への文字列の代入
第7回 プログラミングⅡ 第7回
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
プログラミング基礎B 文字列の扱い.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
C言語 はじめに 2016年 吉田研究室.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
第1章 いよいよプログラミング!! ~文章の表示 printf~
知能情報工学演習I 第11回( C言語第5回) 課題の回答
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
第13章 文字の取り扱い方 13.1 文字と文字型変数 13.2 文字列 13.3 文字型配列への文字列の代入
プログラミング入門 電卓を作ろう・パートI!!.
プログラミング論 ポインタ
地域情報学 C言語プログラミング 第4回 while文、do~while文、switch文、 2次元配列、ポインタ 2017年11月10日
C言語講座 制御(選択) 2006年 計算技術研究会.
標準入出力、変数、演算子、エスケープシーケンス
プログラミング論 文字列
プログラミング 4 文字列.
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
湘南工科大学 2013年10月22日 情報理論2 湘南工科大学情報工学科 准教授 小林 学.
コンピュータープログラミング (C言語)(10) 1.ファイル入出力
プログラミング入門2 第5回 配列 変数宣言、初期化について
printf・scanf・変数・四則演算
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第11回(後半第5回) 課題の回答
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
12: コマンドライン引数 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

C言語講座 配列と文字列 Ver 0.3

文字を表示しよう。 printf(“%c%c\n”,75,51); まず、思い出してほしいのは「%cが文字をそこにひとつ表示する」ということ。 CはcharacterのCで、変数型でもchar型っていうのがありましたね^^ 上の文を実行すると「K3」と表示されます。これが意味する事は文字がコンピュータの中で数字で表されていると言うことですね。 char ch=‘a’; printf(“%d = %c\n”,ch,ch); まず、シングルクオーテーションで一文字を囲むと、それはその文字を現す「数字」に変わるわけです。つまり、変数chには97が入っています。 だから上の文を実行すると、「97 = a」と表示されるはずです。 この数字のことを「ascii code(アスキーコード)」と呼びます。

理解を深めタイ 入力した文字を数字と文字で表すプログラム 文字を「a」から「z」まで表示するプログラム Main(void) { char ch=0; printf(“>”); scanf(“%c”,&ch); printf(“%c = %d\n”,ch,ch); } 文字を「a」から「z」まで表示するプログラム Main(void) { char ch=0; for(ch=‘a’;ch<=‘z’;ch++){ printf(“%c “,ch); } } ‘a’=97,’b’=98,’c’=99,….という規則性がある。

アスキーコード表 <アドバイス> Aとaは32だけ離れている。もし、小文字から大文字に変換したいのなら、文字コードから32を引けば、実現できそうですね。 注) DEC:10進数 HEX:16進数

追加(アスキーコード) 入力した文字が、大文字だったら、そのまま、小文字だったら大文字に変換するプログラム main(void) { char ch; printf(“please type any key:”); scanf(“%c”,ch); if(‘a’<= ch && ch <=‘z’){ ch = ch + ’A’ – ‘a’; } printf(“Result is %c.\n”,ch); } ch = ch+ ‘A’ –’a’; という行はアスキーコード表を見てもらうとわかるだろうが、大文字に変換する計算である。a(アスキーコード97)をA(アスキーコード65)に変換するには、現在のアスキーコードから32をひく(つまり+(65 – 97))すればよいということ。

配列1 配列とは 配列は変数の拡張だと考えるので、とりあえず、変数について心配な人は復習しましょう^^。 配列1 配列とは 配列は変数の拡張だと考えるので、とりあえず、変数について心配な人は復習しましょう^^。 配列とはいってしまえば、変数がずらっと並んだものをさします。とりあえず、図 a[0] a[1] a[2] a[3] a[4] a[5] a[6] …. a[N] というような感じに数字等を入れる箱を連続で(番号をつけて)並んでいるのが、「配列」となります。「そんなにたくさん変数つくったって、しょうがないじゃん」って突っ込まれるかもしれませんが、配列はけっこー便利です。まぁ、ひとつ例を挙げれば、100個の数字を入力して、それをすべて記憶(変数に入れる)するには、どうすればいいか。変数名をa,b,c,dと100個宣言するのは、明らかにおかしいですよね。そこで、配列が登場するわけです。

配列2 配列を使う 宣言 変数型 配列名[配列数]; 内容の参照 初期化 配列2 配列を使う 宣言 変数型 配列名[配列数]; 例) int array[500]; char moji[30]; 注) 実際にa[10]と宣言すると、箱はa[0]からa[9]までの10個の箱が用意されます 内容の参照 例 printf(“%d”,a[2]);   a[0]=a[2];   if(a[10]==0){} 初期化 int array[10]={0,1,2,3,4,5,6,7,8,9}; これで、配列に0,1,2,3・・・・の数字が入るわけです。もし int array[10]={0}; と省略されると、配列が全部0となる。

配列3 配列の利用法 10個の数字を入力して、それをすべて足すプログラム 配列3 配列の利用法 10個の数字を入力して、それをすべて足すプログラム main(void) {   int a[10];         /* これが、配列の宣言  */    int i=0,ans=0;    for(i=0;i<10;i++){       printf(“>”);       a[i]=getchar(); /* 一文字読み込む */    }    for(i=0;i<10;i++){       ans=ans+a[i];    }    printf(“ANS = %d\n”,ans); } どうかな、便利さがわかると思う。繰り返しの中で、配列を次々に読むことが可能なのだ。 getchar()は一文字だけ読み取ることを指す。

配列による文字列の表示 いままでやったなかで文字列を表現するにはこうすればよい。 char str[9]={‘h’,’o’,’s’,’e’,’i’,’u’,’n’,’i’,’v’}; for(i=0;i<9;i++){ printf(“%c”,str[i]); } 入力だったら、 char str[9]; for(i=0;i<9;i++){ scanf(“%c”,str[i]);   /* %cであることに注意。 */ }

もっと便利に・・ 一文字ずつ入力するのでは、プログラムが見にくくてしょうがないでしょう。そこで、C言語ではこのような機能を提供してくれている。 printf(“%s”,str); scanf(“%s”,str); printf(“%s”,str);はstr配列の中の文字を頭から読んで表示してくれます。 例)str[0]=‘N’,str[1]=‘A’,str[2]=‘R’,str[3]=‘C’    なら、NARCと表示される scanf(“%s”,str);は、エンターか、スペースが押されるまでに押された文字、つまり入力文字列を配列の先頭から入れて言ってくれる。 これで、文字列を入力し、それを表示するプログラムがすぐに作れる気がするね。 注)scanf(“ %s ”,ココ);が配列の場合、&はつけないこととする。

Scanf後の配列の中身 scanf(“%s”,str);で「keisanz」と入力すると配列には下のようにデータが入る ‘\0’ a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] 注目してもらいたいのは最後の’\0’で、これはNULL文字といって、「ここで文字列が終わりですよ」という記号なのです。Printf(“%s”,str);の中身は多分 for(i=0;str[i]!=‘\0’;i++){  処理 } となっているはずです。ですから、配列を宣言するとき、ぎりぎりに宣言するのではなく、NULL文字のひとつを考えて宣言するようにしましょう。( N個の文字数を使用したいとき、 char str[N+1];と宣言しよう。)

文字列と御戯れ 入力された文字列の長さを表示するプログラム 入力された文字列の中の「.(ドット)」を改行に変換するプログラム Main(void) { char str[50]; int i=0; scanf(“%s”,str); for(i=0;str[i]!=‘\0’;i++){} /* NULL文字まで、iを加算し続ける それ以外何もしない*/ printf(“STR_LENGTH = %d\n”,i); } 入力された文字列の中の「.(ドット)」を改行に変換するプログラム Main(void) { char str[50]; int i=0; scanf(“%s”,str); for(i=0;str[i]!=‘\0’;i++){ if(str[i]==‘.’){ /* もし、ドットのアスキーコードならば、 */ str[i]=‘\n’; /* 改行コードに変換 */ } }    printf(“%s\n”,str); }

課題 課題 まず、文字列を入力する。もし、それが小文字だったら大文字に、大文字だったら小文字に、アルファベットでなければ「.(ドット)」に変換して表示させるプログラム。 やる気のある人へ 入力した文字列を左右逆さまに「変換」し、printf(“%s”)で表示するプログラムを書け。例)「keisangijyutukenkyukai」→「iakuyknekutuyijgnasiek」 ヒント:配列のi番目とj番目を交換する方法 tmp=a[i]; a[i]=a[j]; a[j]=tmp;

その他の入出力関数 getchar(); putchar(); 文字を一文字だけキーボードから読み取る関数。戻り値はint型が望ましい。 例) int ch; ch=getchar(); putchar(); 文字を一文字だけ表示。 例) putchar(ch); putchar(‘A’);

その他の入出力関数 gets(配列); puts(配列); 一行入力。Scanfだと、スペースなどが入力できないが、gets()は、エンターが押されるまでを、すべて指定の配列に入れてくれる。まさにゲッツ 例)  gets(str); puts(配列); 一行出力。強制的に改行されるため、微妙に使いにくい。僕はprintf()を薦めます 例)  put(str); ここには大まかに書いてしまいましたが、実は奥が深くて、こんな書き方をしたら怒られてしまうかもしまいません(汗)。とりあえず、詳細は参考書に譲ります。