応用Cプログラミング演習 ( 第 3
回 )
西
結果の画面
1 回目a の値は? 1
b の値は? 2
a^3 - b^3=-7 2 回目a の値は?
2
b の値は? 3
a^3 - b^3=-19 3 回目a の値は?
3b の値は? 4
a^3 - b^3=-37
Report1 0733051 松井秀喜
はプログ ラムが表示
はユーザ が入力
まず,枠組みを考えよう
#include<stdio.h> void sqrsum(void){
型宣言 (a,b,c を int で )
「 a の値は?」を表示
キーボードから整数値 a を取り込む
「 b の値は?」を表示
キーボードから整数値 b を取り込む a3-b3 を計算する ( 結果を c に代入 ) a3-b3 を表示する (c を表示 )
return; }
void main(){ 型宣言3 回繰り返す {
「 1 回目」 ~「 3 回目」を表示 sqrsum();
}
番号と氏名を表示
scanf(“%d”,&i); // 注意,採点の都合上必要
}
#include<stdio.h> void sqrsum(void){
型宣言 (a,b,c を int で )
「 a の値は?」を表示
キーボードから整数値 a を取り込む
「 b の値は?」を表示
キーボードから整数値 b を取り込む a3-b3 を計算する ( 結果を c に代入 ) a3-b3 を表示する (c を表示 )
return; }
void main(){
型宣言3 回繰り返す {
「 1 回目」 ~「 3 回目」を表示 sqrsum();
}
番号と氏名を表示
scanf(“%d”,&i); // 注意,採点の都合上必要
}
メイン 関数
キーボードから変数 n に,整数値を読
み込むには?
int n;
scanf(“%d”,&n);
のようにすればよい. 思い出したかな?
int n;
scanf(“%d”,&n);
のようにすればよい. 思い出したかな?
注意
なお,採点の都合上, main プログラ
ムの最後に,次の 1 文をいれること.
scanf("%d",&i);
今週のテーマ ~ 構造体
構造体とは?
複数のデータをまとめて一つの変数で取り扱う手法
一見複雑そうだが, すごく 便利
今まで習った変数今まで習った変数
構造体
構造体例えば,
int i;
char c;
double d;
という 3 つのメンバーからなる構造体を作
れる.
構造体には「タグ」と呼ばれる名札をつけて
他の構造体と区別する
◎
タグ名構造体を宣言する
int や char などはシステムが予め用意
した型だから型の意味や内容がどういう
ものかは記述する必要は無かった
構造体は自分で定義するので,型の意味
や内容を事前に以下の書式で宣言してお
く必要がある
構造体宣言の方法
struct タグ名 {
メンバー変数の宣言 ;
メンバー変数の宣言 ;
メンバー変数の宣言 ;
・・・・・
};
( 注意 ) これは構造体の中身の宣言であり,今までの
型宣言にあたるような実際の変数名を割り当てる処
理が別に必要
構造体宣言の具体例
struct ADRS{
char name[32]; /* 名前 (32 文字以内 )*/ char tel[11]; /* 電話番号 (11 桁以内 )*/ char address[256]; /* 住所 (256 文字以内 )*/ int age; /* 年齢 ( 整数 )*/
};
( 注意 ) ADRS は構造体のタグ名であり,変数名ではな
い.実際にプログラムで使うには,ある変数を
ADRS 型で宣言して使うことになる
具体的には次のようにします.
struct ADRS{
char name[32]; char tel[11];
char address[256]; int age;
};
void main(){
struct ADRS myaddress; 処理
... }
myaddress を構造体 ADRS として宣言し下の処理を行う
構造体の宣言と変数の宣言を同時に行えま
す
struct ADRS{
char name[32];
char tel[11];
char address[256];
int age;
} myaddress;
とすればよい.
構造体のメンバーにアクセスする方
法
#include<stdio.h>
#include<string.h> struct ADRS{
char name[32]; char tel[20];
char address[256]; int age;
} myaddress; void main(){
strcpy(myaddress.name,"NISHI");
strcpy(myaddress.tel,"096-×××2733");
strcpy(myaddress.address," 熊本市池田 1-1"); myaddress.age = 30;
printf(" 名前: %s \n 電話番号: %s \n 住所: %s \n 年 齢: %d\n", myaddress.name, myaddress.tel,
myaddress.address, myaddress.age); }
strcpy は文字列を
指定した変数に代入
するライブラリー関
数
構造体の変数に,アクセスするに
は...
構造体宣言された変数名.メンバー変数名
ドット「.」を間に入 れる
ドット「.」を間に入 れる
構造体のメリット
一見複雑そうですが...
個別の管理によるプログラムミスを防げる
大量のデータへのアクセス ( 読み書き ) が直感
的にわかりやすい
住所録などを想像すると,人の管理さえちゃんとや
れば,個別の住所 ,電話番号 ,メールアドレスなど
の管理がしやすい.
構造体はデータベースを扱うソフトには必ず
用いられる
構造体の練習問題
名前 (アルファベット 32 文字以内 )とメールアドレス (ア ルファベット 256 文字以内 )からなる構造体 MAILAD を宣言し,
キーボードから,名前とメールアドレスを入力すると, それを表示するプログラムを作れ.
表示形式は
名前: matsusimananako
アドレス: [email protected]
のようにせよ
実行結果の例
名前をどうぞ
matsusimananako
メールアドレスをどうぞ
[email protected]
名前: matsusimananako
アドレス: [email protected]
フローチャートはこうなります
include 文
main()
構造体の宣言と構造体変数を割り当て
「名前をどうぞ」の表示と入力
「アドレスをどうぞ」の表示と入力 入力内容の表示
ヒント:プログラムの構造はこうなり
#include<stdio.h> ます .
#include<string.h>
[◆ここで構造体の内容の宣言と実体の変数の宣言]
void main(){
printf(" 名前をどうぞ \n");
scanf("%s",myaddress.name);
printf(" メールアドレスをどうぞ \n");
scanf("%s",myaddress.adrs);
printf("\n\n 名前: %s\n アドレス: %s\n",
myaddress.name, myaddress.adrs);
}
#include<stdio.h>
#include<string.h>
[◆ここで構造体の内容の宣言と実体の変数の宣言]
void main(){
printf(" 名前をどうぞ \n");
scanf("%s",myaddress.name);
printf(" メールアドレスをどうぞ \n");
scanf("%s",myaddress.adrs);
printf("\n\n 名前: %s\n アドレス: %s\n",
myaddress.name, myaddress.adrs);
}
解答例
#include<stdio.h> struct ADRS_DATA{
char name[32]; char adrs[256]; };
void main(){
struct ADRS_DATA myaddress; printf(" 名前をどうぞ \n");
scanf("%s",myaddress.name);
printf(" メールアドレスをどうぞ \n"); scanf("%s",myaddress.adrs);
printf("\n\n 名前: %s\n アドレス: %s\n", myaddress.name, myaddress.adrs);
}
今日の練習問題
名前 ( アルファベット 32 文字以内 ) と,
メールアドレス ( アルファベット 256 文字以内 ) と, 電話番号 ( 数字 12 文字以内 ) と,
年齢 ( 整数 )
からなる構造体 ADBASE を宣言し,
キーボードから,名前,メールアドレス,電話番号,年齢を入力すると, それを表示するプログラムを作れ.
表示形式は
名前: matsusimananako
アドレス: [email protected] 電話番号: 09012349876
年齢: 45 のようにせよ