高度プログラミング演習 (09) 演習問題 • 格子の中で、点から点へは – 上または右にしか進めないとする。 • 任意の(x0,y0)から任意の(x1,y1)までの経路が何 通りあるか計算するプログラムを作成せよ。 (x1,y1) (x0,y0) #include<stdio.h> int cango(int x0,int y0,int x1,int y1) { int cnt=0; printf("(%2d %2d) ",x0,y0); if(x0==x1&&y0==y1){ printf("\n"); return 1; } } main() { int x0,y0,x1,y1; if( x0 + 1 <= x1) cnt = cnt + cango(x0 +1,y0,x1,y1); printf("始点を指定して下さい。(x, y): "); scanf("%d %d",&x0,&y0); if( y0 + 1 <= y1) cnt = cnt +cango(x0,y0 +1,x1,y1); printf("終点を指定して下さい。(x, y): "); scanf("%d %d",&x1,&y1); return cnt; printf("%d\n",cango(x0,y0,x1,y1)); } 文字列の入力・出力 char ch[16]; scanf(“%s”,ch); printf(“%s\n”, ch); // ch はポインタ型 文字列操作には文字配列が格納され ているメモリ領域を指す文字ポインタが 用いられる。 文字列の入力 scanf() だとスペースを含む文字列の 入力が困難。 gets(char *line)は入力された 1行すべてを文字配列 line にコピーする 文字列を扱う関数 • strlen(char *s); – 文字列 s の文字数を返す • strcmp(char *s1, char *s2); – 文字列 s1 と s2 を比較する – 等しければ0を返す • strncmp(char *s1, char *s2, int n); • strcpy(char *dst, char *src) – 文字列 src を文字列 dst にコピーする 練習問題 • 適当な文字配列を宣言して – gets関数を用いて文字列の入力 – printf 関数を用いて文字列の出力 – を行うプログラムを作成せよ。 • さらに別の文字配列のプログラムを宣言して – strcpy 関数を用いて入力した文字列をコピーし てその内容を表示するプログラムを作成せよ。 固定的な文字列を指すポインタ char *name=“Kodo Programing”; printf(“%s\n”,name); •name にはメモリ領域は確保され ていないので、 •name[0]を変更したり、 •name に scanf を用いて文字列 を読み込ませたり、 •name に strcpy を用いて文字列 をコピーしたりできない。 name システム 領域 文字配列を指すポインタ char buf[128]; char *name; name = buf; scanf(“%s”,name); •name は領域が確保されている メモリを指しているので •name[0]を変更したり、 •name に scanf を用いて文字列 を読み込ませたり、 •name に strcpy を用いて文字列 をコピーしたりできる。 name buf 例題問題 • 主語、述語、目的語からなる簡単な英文で、主語、 述語、目的語が与えられた文字列から適当に選ば れるプログラムを作成せよ。 – – – – – – – Bob likes desks. Lee has cars. Ken likes cars. Bob sells dogs. Lee has desks. Ken has desks. Ken sells desks. 例題問題 • ある文字列 s0 に文字列 s1 がいくつ含まれ ているか調べるプログラムを作成せよ。 – 例: This is a pen. に is がいくつ含まれている か? 練習問題 • ある文字列 s0 にアルファベットの文字列 s1 がアルファベットの大文字・小文字に関わら ずいくつ含まれているか調べるプログラムを 作成せよ。 – 例: Ken likes cakes. に ke がいくつ含まれて いるか? 演習問題 • 文字列 s0 中に文字列 s1 があれば、それを s2 に置き換えるプログラムを作成せよ。 – s0: Bill likes dogs and Bill has three dogs. – s1: Bill – s2: Ken
© Copyright 2025 ExpyDoc