PowerPoint プレゼンテーション

課題解説: 関数の引数にポインタを使って2数を入れ替える
/*swap*/
#include <stdio.h>
void swap(int *x, int *y);
main()
{
int m, n;
scanf(“%d %d”,&m, &n);
printf(“yomikomiti= %d, %d\n”,m,n);
swap(&m, &n);
printf(“irekaego %d, %d\n”, m,n);
}
void swap(int *x, int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
構造体 (structure)
関連するデータをひとかたまりで扱う方法
例:
住所録(名前、住所、郵便番号、電話番号など)
複素数(実部、虚部)
円(中心のx, y 座標、半径)
* 配列との違い:
違う「型」の変数もまとめて扱える。
int, char など混じっていてもよい。
「大きさ」はバラバラでよい。
「名前」は10字、住所は50字など
構造体 の使い方 住所録
#include <stdio.h>
構造体タグ名
#include <string.h>
struct address_book
{
メンバ名
char name[20];
char address[100];
int zip_code; 構造体タグ名:
};
変数の型と同じ
main()
構造体
{
変数名
struct address_book mybook;
配列に文字列
strcpy(mybook.name,”umebu”);
を入れる関数。
strcpy(mybook.address,”seaside1005”);
構造体に限ら
mybook.zip_code=7315135;
ず使える。
printf(“name is %s\n”,mybook.name);
}
課題
構造体を使って自分の住所を入力し、表示せよ。
構造体 の使い方 住所録 (100人分)
#include <stdio.h>
#include <string.h>
struct address_book
{
構造体
char name[20];
は、1人
char address[100];
分と同じ
int zip_code;
};
構造体
main()
配列名
{
struct address_book mybook[100];
strcpy(mybook[1].name,”umebu”);
strcpy(mybook[1].address,”seaside1005”);
mybook[1].zip_code=7315135;
printf(“name is%s\n”,mybook[1].name);
構造体の応用: 複素数の和を計算する関数(例題 c26.c 改)
#include <stdio.h>
これは関数のプロ
struct complex
{float re;
トタイプ宣言
float im;};
struct complex add(struct complex c1, struct complex c2);
main( )
{
struct complex z1, z2, z3;
z1.re = 1.0; z1.im = 2.0;
z2.re = 3.0; z2.im = 4.0;
z3 = add(z1, z2);
printf(“z3.re=%f z3.im=%f\n”,z3.re, z3.im);
}
struct complex add(struct complex c1, struct complex c2)
{
struct complex c3;
c3.re = c1.re + c2.re;
c3.im = c1.im + c2.im;
return (c3);
}
課題
教科書 p188 問題 4-45, 4-46 を解け。
構造体の応用: 複素数の差を計算する関数(問題 4-45)
#include <stdio.h>
struct complex
{float re;
float im;};
struct complex dif(struct complex c1, struct complex c2);
main( )
{
struct complex z1, z2, z3;
z1.re = 1.0; z1.im = 2.0;
z2.re = 3.0; z2.im = 4.0;
z3 = dif(z1, z2);
printf(“z3.re=%f z3.im=%f\n”,z3.re, z3.im);
}
struct complex dif(struct complex c1, struct complex c2)
{
struct complex c3;
c3.re = c1.re - c2.re;
c3.im = c1.im - c2.im;
return (c3);
}
構造体の応用: 複素数の積を計算する関数(問題 4-45)
#include <stdio.h>
struct complex
{float re;
float im;};
struct complex mul(struct complex c1, struct complex c2);
main( )
{
struct complex z1, z2, z3;
z1.re = 1.0; z1.im = 2.0;
z2.re = 3.0; z2.im = 4.0;
z3 = mul(z1, z2);
printf(“z3.re=%f z3.im=%f\n”,z3.re, z3.im);
}
struct complex mul(struct complex c1, struct complex c2)
{
struct complex c3;
c3.re = c1.re * c2.re - c1.im * c2.im;
c3.im = c1.im * c2.re + c1.re * c2.im;
return (c3);
}
構造体の応用: 複素数の絶対値を計算する関数(問題 4-46)
#include <stdio.h>
#include <math.h>
struct complex
{float re;
float im;};
float cabs(struct complex c);
main( )
{
struct complex z; float abs;
z.re = 3.0; z.im = 4.0;
abs = cabs(z);
printf(“abs(%f + i %f)=%f\n”,z.re, z.im, abs);
}
float cabs(struct complex c)
{
float a;
a = sqrt(c.re * c.re + c.im * c.im);
return (a);
}
構造体の応用: 共役複素数を計算する関数
#include <stdio.h>
struct complex
{float re;
float im;};
struct complex conj(struct complex c);
main( )
{
struct complex z, zc;
z.re = 1.0; z.im = 2.0;
zc = conj(z);
printf(“conj(%f + %f i)= (%f - %f i) \n”,
z.re, z.im, zc.re, -zc.im);
}
struct complex conj(struct complex c)
{
struct complex cc;
cc.re = c.re;
cc.im = - c.im;
return (cc);
}
構造体の応用: 複素数の商を計算する関数(問題 4-45)
#include <stdio.h>
その1
#include <math.h>
struct complex
{float re;
float im;};
struct complex div(struct complex c1, struct complex c2);
struct complex conj(struct complex c);
struct complex mul(struct complex c1, struct complex c2);
float cabs(struct complex c);
main( )
{
struct complex z1, z2, z3;
z1.re = 1.0; z1.im = 2.0;
z2.re = 3.0; z2.im = 4.0;
z3 = div(z1, z2);
printf(“(%f+i%f)/(%f+i%f)=%f+i%f\n”,
z1.re, z1.im, z2.re, z2.im, z3.re, z3.im);
} /* 次ページに続く */
その2
struct complex div(struct complex c1, struct complex c2)
{
struct complex c3,c4;
float cabs2;
cabs2 = cabs(c2)*cabs(c2);
c3 = mul( c1, conj(c2));
c3.re = c3.re/cabs2;
c3.im = c3.im/cabs2;
}
struct complex mul(struct complex c1, struct complex c2)
{
struct complex c3;
c3.re = c1.re * c2.re - c1.im * c2.im;
c3.im = c1.im * c2.re + c1.re * c2.im;
return (c3);
} /* 次ページに続く */
その3
float cabs(struct complex c)
{
float a;
a = sqrt(c.re * c.re + c.im * c.im);
return (a);
}
struct complex conj(struct complex c)
{
struct complex cc;
cc.re = c.re;
cc.im = - c.im;
return (cc);
}