課題解説: 関数の引数にポインタを使って2数を入れ替える

Slides:



Advertisements
Similar presentations
プログラミング入門2 芝浦工業大学情報工学科青木 義満 第11回構造体. プログラミング入門2 2 構造体 5 人分のサッカー選手データ 全てのデータを関数に渡して,処理する場合 char name[5][256]; int assist[5]; int score[5]; void func( char.
Advertisements

C 言語講座第 5 回 構造体. 構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
C 言語講座 第 7 回 ポインター. メモリとアドレス(ポインターの前 に) コンピュータのメモリには 1 バイトずつ 0 番地、 1 番地、 2 番地・・・というように 住所が割り当てられている この住所をアドレスという。 メモリはデータをしまうもので それを引き出すためには メモリに番号(アドレス)を振っておけばよいな.
次ページに関数の解答例 課題12-1 (問題と解答) 複素数xとして, 実部を入力してください.10 虚部を入力してください.20
A B x y z 復習 構造体変数 普通の変数 x y z 構造体変数 x y z 箱のイメージ 引き出しのイメージ
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
プログラミング入門2 第10回 動的な領域確保 情報工学科 篠埜 功.
第12回新しい型と構造体.
第13回構造体.
解答 1 複素数を構造体として定義し、二つの複素数の積(結果は複素数)を返す 関数 を定義せよ。
第12回構造体.
プログラミング入門2 ポインタについて補足 構造体 第11回 芝浦工業大学情報工学科 青木 義満、篠埜 功
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
16.3 関数と構造体 構造体ポインタ 地底探査ゲーム
文字配列の課題1 解説 /* a */ #include <stdio.h> main( ) { int i;
C言語講座 第4回 ポインタ.
構造体.
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
演習問題の答え #include #include #define NUM 5 typedef struct { // 構造体の定義 float shincho; // 身長 float taiju; // 体重 } shintai; void hyouji(shintai.
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
構造体 プログラミング入門2 芝浦工業大学情報工学科 青木 義満
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
構造体 構造体, 構造体とポインタの組み合わせ,.
プログラミング 3 構造体(1).
第10回 プログラミングⅡ 第10回
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
プログラミング論 関数ポインタ と 応用(qsort)
関数とポインタ 値呼び出しと参照呼び出し swapのいろいろ 関数引数 数値積分
第11回 宿題 出題日:12月21日 締切日:1月7日(木).
精密工学科プログラミング基礎 第10回資料 (12/18実施)
プログラミング 4 記憶の割り付け.
2005年度 データ構造とアルゴリズム 第3回 「C言語の復習:再帰的データ構造」
第10章 これはかなり大変な事項!! ~ポインタ~
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
ネットワークプログラミング 第3回「C言語の基礎~コマンドライン引数・構造体・ポインタ」
プログラミング入門2 第11回 情報工学科 篠埜 功.
第13章 文字の取り扱い方 13.1 文字と文字型変数 13.2 文字列 13.3 文字型配列への文字列の代入
第13章 文字の取り扱い方 13.1 文字と文字型関数 13.2 文字列 13.3 文字型配列への文字列の代入
同じ構造をした「引き出し」変数を構造体変数と呼ぶ
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
高度プログラミング演習 (08).
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
第11回 プログラミングⅡ 第11回
関数への道.
プログラミング基礎B 文字列の扱い.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
精密工学科プログラミング基礎Ⅱ 第5回資料 今回の授業で習得してほしいこと: 構造体 (教科書 91 ページ)
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
第13章 文字の取り扱い方 13.1 文字と文字型変数 13.2 文字列 13.3 文字型配列への文字列の代入
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
ファイルの読み込み, ファイルからのデータの取り出し, ファイルの書き出し
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
高度プログラミング演習 (11).
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
モバイルプログラミング第2回 C言語の基礎 (1).
プログラミング入門2 第5回 配列 変数宣言、初期化について
第2章 数値の入力と変数 scanfと変数をやります.
C言語講座第5回 2017 構造体.
プログラミング 3 ポインタ(1).
高度プログラミング演習 (10).
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

課題解説: 関数の引数にポインタを使って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;

住所録(名前、住所、郵便番号、電話番号など) 複素数(実部、虚部) 円(中心のx, y 座標、半径) 構造体 (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); } 構造体タグ名 メンバ名 構造体タグ名:変数の型と同じ 構造体変数名 配列に文字列を入れる関数。構造体に限らず使える。

課題 構造体を使って自分の住所を入力し、表示せよ。

#include <stdio.h> #include <string.h> struct address_book 構造体 の使い方 住所録 (100人分) 構造体 の使い方 住所録 #include <stdio.h> #include <string.h> struct address_book { char name[20]; 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); 構造体は、1人分と同じ 構造体配列名

構造体の応用: 複素数の和を計算する関数(例題 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> #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); } /* 次ページに続く */ その1

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); } /* 次ページに続く */ その2

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); その3