高度プログラミング演習 (09)
演習問題 格子の中で、点から点へは 任意の(x0,y0)から任意の(x1,y1)までの経路が何通りあるか計算するプログラムを作成せよ。 上または右にしか進めないとする。 任意の(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; } if( x0 + 1 <= x1) cnt = cnt + cango(x0 +1,y0,x1,y1); if( y0 + 1 <= y1) cnt = cnt +cango(x0,y0 +1,x1,y1); return cnt; main() { int x0,y0,x1,y1; printf("始点を指定して下さい。(x, y): "); scanf("%d %d",&x0,&y0); printf("終点を指定して下さい。(x, y): "); scanf("%d %d",&x1,&y1); printf("%d\n",cango(x0,y0,x1,y1)); }
文字列の入力・出力 char ch[16]; scanf(“%s”,ch); printf(“%s\n”, ch); 文字列操作には文字配列が格納されているメモリ領域を指す文字ポインタが用いられる。
文字列の入力 scanf() だとスペースを含む文字列の 入力が困難。 gets(char *line)は入力された
文字列を扱う関数 strlen(char *s); strcmp(char *s1, char *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 に scanf を用いて文字列を読み込ませたり、 name に strcpy を用いて文字列をコピーしたりできない。 name システム 領域
文字配列を指すポインタ char buf[128]; char *name; name = buf; scanf(“%s”,name); 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