140 likes | 205 Views
本日の課題. 住所録プログラムへの関数の適用 ヘッダファイルの利用方法. 住所録プログラムへの関数の適用. address2_2.c を参考にして,入力部と出力部を関数とした address3_1.c を完成させてください。 入力部 int input(struct address * ) 引数 sturct address 型配列の先頭アドレス 返り値 入力されたデータ数(整数) 出力部 void print_list(struct address * , int) 引数 struct address 型配列の先頭アドレス,入力されたデータ数(整数)
E N D
本日の課題 • 住所録プログラムへの関数の適用 • ヘッダファイルの利用方法
住所録プログラムへの関数の適用 • address2_2.cを参考にして,入力部と出力部を関数としたaddress3_1.cを完成させてください。 • 入力部 int input(struct address *) • 引数 sturct address型配列の先頭アドレス • 返り値 入力されたデータ数(整数) • 出力部 void print_list(struct address *, int) • 引数 struct address型配列の先頭アドレス,入力されたデータ数(整数) • 返り値 なし
データ入力部 データ入力部は次の部分になります。この関数化を考えます。 a=my_address_book; i=0; while(1){ printf("\n%d件目\n",i+1); printf("氏名 "); scanf("%s",a->name); printf("郵便番号 "); scanf("%s",a->yubin_bango); printf("住所 "); scanf("%s",a->jyusho); printf("電話番号 "); scanf("%s",a->telno); i++;a++; printf("入力を続けますか? y/n : "); scanf("%s",&cd); if((cd=='n')||(cd=='N')) break; }
データ入力部の関数化 • データ入力部の働きは, my_address_book[10]にデータを入力すること。 • my_address_book[10]は各関数で共通に利用する変数である。 • my_address_book[10]の先頭アドレスを引数とする。 • 入力されたデータの個数を返り値とする。
データ入力部の関数化 データ入力関数の基本構造は次のようになります。 int input(struct address *a) { int i=0; // データを入力。a++; i++; return(i); } ただし,*aは,my_address_book[10]の先頭アドレスを表す ポインタです。
データ出力部 データ出力部は次のようになります。この関数化を 考えます。 a=my_address_book; for(j=0;j<i;j++){ printf("\n%d件目\n",j+1); printf("氏名 %s\n",a->name); printf("郵便番号 %s\n",a->yubin_bango); printf("住所 %s\n",a->jyusho); printf("電話番号 %s\n",a->telno); a++; }
データ出力部の関数化 • データ出力部の働きは, my_address_book[10]の内容を画面に表示すること。 • my_address_book[10]は各関数で共通だが,表示のためにデータの個数が引数として新たに必要となる。 • my_address_book[10]の先頭アドレスとデータの個数を引数とする。
データ出力部の関数化 データ出力関数の基本構造は次のようになります。 void print_list(struct address *a, int num) { // num回繰り返し // データの出力,a++; } ただし,*aは,my_address_book[10]の先頭アドレス,numは データの個数を表す。
関数の利用 宣言したデータ入出力関数をmain関数で利用する場合は 次のように記述します。 void main(void) { struct address my_address_book[100]; int num; num=input(my_address_book); print_list(my_address_book, num); }
ヘッダファイルの活用 • printf()やscanf()も関数ですが,その処理を定義している部分は見あたりません。なぜでしょう? • これら標準入出力に関する関数はstdio.h内に宣言されており,これをincludeすることにより利用可能としています。.hの拡張子を持つファイルをヘッダファイルと言います。 • 住所録プログラムで利用する関数をヘッダファイルとして整理しておけば,これをincludeするだけで関数を利用することが出来ます。
ヘッダファイルの活用 • address3_2.cを開いてみましょう。 • 同じ処理を行うプログラムが,これだけの行に整理されています。 • プログラムないで利用する関数や変数,または変数の型は,ヘッダファイルに整理しておき,それをincludeすることにより利用します。 • address.hを見てみましょう。typedef文の働きを確認しましょう。
ヘッダファイル address.h プログラム内で共通に利用する変数,または変数の型も,ヘッダファイルに 整理しておき,それをincludeすることにより利用することができます。 typedef文の働きを確認しましょう。 typedef struct _address{ char name[20]; char yubin_bango[8]; char jyusho[100]; char telno[13]; } address; int input(address *a) {…} void print_list(address *a, int num) {…}
ヘッダファイルを利用したプログラムの例 ヘッダファイルを利用することにより,プログラムは次のように整理されます。< >と“ ”の違いに注意しましょう。 #include <stdio.h> #include "address.h" void main(void) { address my_address_book[100]; int num; num=input(my_address_book); print_list(my_address_book, num); }
次回の予定 • ファイル処理の考え方と基本プログラムを学習します。