次ページに関数の解答例 課題12-1 (問題と解答) 複素数xとして, 実部を入力してください.10 虚部を入力してください.20

Slides:



Advertisements
Similar presentations
第 2 章 数値の入力と変数 scanf と変数をやります 第 2 章 数値の入力と変数 1. 以下のプログラムを実行してみよう  C 言語では文の最後に「 ; 」(セミコロン)が付きます 第 2 章 数値の入力と変数 2 #include int main() { int x; x = 3; printf("x.
Advertisements

構造体変数 1234 x xyz A 普通の変数 ( ここでは座標値 ) 構造体変数 ( ここでは点を表す ) xyz B 14 y 5 z 点 A の x 座標 プログラム中では A.x 点 B の y 座標 プログラム中では B.y 例えば 「 3 次元空間で2点 A と B の 間に線分を引き・・・」
前回の関数のまとめ (1) プログラムは main() 関数の先頭から実行される 関数は main() 関数または他の関数から呼び出されて実行される. 関数を呼び出す側の実引数の値が関数内の仮引数 ( 変数 ) に コピーされる 関数内で求めた値は return 文によって関数値として呼び出し側に戻され.
配列の宣言 配列要素の初期値 配列の上限 メモリ領域 多次元配列 配列の応用
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
A B x y z 復習 構造体変数 普通の変数 x y z 構造体変数 x y z 箱のイメージ 引き出しのイメージ
ループで実行する文が一つならこれでもOK
プログラミング入門2 第4回 配列 for文 変数宣言 初期化
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
第2章 数値の入力と変数 scanfと変数をやります.
第12回新しい型と構造体.
第13回構造体.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
課題解説: 関数の引数にポインタを使って2数を入れ替える
解答 1 複素数を構造体として定義し、二つの複素数の積(結果は複素数)を返す 関数 を定義せよ。
第12回構造体.
解析的には解が得られない 方程式を数値的に求める。 例:3次方程式
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
構造体.
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
Stack & Queue & List 3.
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
第7回 条件による繰り返し.
C言語講座 第3回 ポインタ、配列.
プログラミング演習 バージョン1 担当教員:綴木 馴.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
関数と配列とポインタ 1次元配列 2次元配列 配列を使って結果を返す 演習問題
関数の定義.
第11回 宿題 出題日:12月21日 締切日:1月7日(木).
知能情報工学演習I 第9回( C言語第3回) 課題の回答
高度プログラミング演習 (03).
知能情報工学演習I 第12回(後半第6回) 課題の回答
今までの練習問題の復習.
第13章 文字の取り扱い方 13.1 文字と文字型変数 13.2 文字列 13.3 文字型配列への文字列の代入
第13章 文字の取り扱い方 13.1 文字と文字型関数 13.2 文字列 13.3 文字型配列への文字列の代入
同じ構造をした「引き出し」変数を構造体変数と呼ぶ
第7回 条件による繰り返し.
第7回 プログラミングⅡ 第7回
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
第11回 プログラミングⅡ 第11回
コンピュータープログラミング (C言語)(5) 1.条件分岐1(if文、復習) 2.条件分岐2(switch,case文)
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
プログラムの制御構造 配列・繰り返し.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
情報理論2 第3回 小林 学 湘南工科大学 2011年10月25日 〒 神奈川県藤沢市辻堂西海岸1-1-25
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
配列変数とポインタ 静的確保と動的確保 ポインタ配列 2次元配列 時間計測 第1回レポートの課題
復習 前回の関数のまとめ(1) プログラムはmain()関数の先頭から実行される
プログラミング序論演習.
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
第13章 文字の取り扱い方 13.1 文字と文字型変数 13.2 文字列 13.3 文字型配列への文字列の代入
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
プログラミング入門2 第5回 配列 for文 変数宣言 初期化
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
モバイルプログラミング第2回 C言語の基礎 (1).
プログラミング序論演習.
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第9回(後半第3回) 課題の回答
C言語講座 四則演算  if ,  switch 制御文.
岩村雅一 知能情報工学演習I 第13回(後半第7回) 岩村雅一
プログラミング演習I 補講用課題
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
Presentation transcript:

次ページに関数の解答例 課題12-1 (問題と解答) 複素数xとして, 実部を入力してください.10 虚部を入力してください.20 課題12-1 (問題と解答) #include <stdio.h> struct complex { float r; // 実部(英語でreal) float i; // 虚部(英語でimaginary) }; complex InputComp(void) complex c; printf("実部を入力してください."); scanf("%f", &c.r); printf("虚部を入力してください."); scanf("%f", &c.i); return(c); } float SqrComp(complex c) return (c.r*c.r + c.i*c.i); main() { complex x, y, z; printf("複素数xとして,\n"); x = InputComp(); printf("複素数yとして,\n"); y = InputComp(); printf("xの絶対値の2乗は%f\n", SqrComp(x)); printf("yの絶対値の2乗は%f\n", SqrComp(y)); printf("x + y = "); z = Add(x, y); // 長く書くとこんなかんじ PrintComp(z); printf("x - y = "); PrintComp(Subtract(x, y));// 短く書くとこんなかんじ printf("x * y = "); PrintComp(Multiply(x, y)); printf("x / y = "); PrintComp(Divide(x, y)); } 複素数xとして, 実部を入力してください.10 虚部を入力してください.20 複素数yとして, 実部を入力してください.-3.5 虚部を入力してください.10.1 xの絶対値の2乗は500.000000 yの絶対値の2乗は114.260008 x + y = 6.500000 + 30.100000 i x - y = 13.500000 + 9.900000 i x * y = -237.000008 + 31.000004 i x / y = 1.461579 - 1.496587 i 次ページに関数の解答例

課題12-1 (続き) void PrintComp(complex c) { printf("%f", c.r); 課題12-1 (続き) void PrintComp(complex c) { printf("%f", c.r); if (c.i > 0) printf(" + %f i\n", c.i); } else if (c.i < 0) printf(" - %f i\n", -c.i); complex Add(complex a, complex b) { complex c; c.r = a.r + b.r; c.i = a.i + b.i; return c; } complex Subtract(complex a, complex b) c.r = a.r - b.r; c.i = a.i - b.i; complex Multiply(complex a, complex b) c.r = a.r * b.r - a.i * b.i; c.i = a.r * b.i + a.i * b.r; complex Divide(complex a, complex b) double b2 = SqrComp(b); c.r = (a.r * b.r + a.i * b.i)/b2; c.i = -(a.r * b.i - a.i * b.r)/b2; 虚部が正値の場合は,     6.500000 + 30.100000 i          虚部が負値の場合は,     6.500000 - 30.100000 i          のようにcomplex型構造体変数cの内容を表示する. ヒント: 複素数x = a + bi, y = c + diとすると,|x|2=a2+b2であり,またx+y = (a+c) + (b+d)iであり,その他の演算も通常の複素数の演算にしたがって処理されなければならない. なお,商は複雑で,x/y = (ac+bd)/|y|2 - (ad-bc)/|y|2 i となる.

課題12-2 (課題の関数のみ記載) complex AverageComp(complex c[], int n) { 課題12-2 (課題の関数のみ記載) complex AverageComp(complex c[], int n) { // 各自でプログラム int i; complex sum, result; sum.r = 0; sum.i = 0; for (i = 0; i < n; i++) sum = Add(sum, c[i]); } result.r = sum.r/n; result.i = sum.i/n; return result; double AverageSqrComp(complex c[], int n) double ss = 0; ss = ss + SqrComp(c[i]); return ss/n;

課題12-3 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> //一人分のデータを表す構造体 struct PersonData { int ID; //学籍番号 char name[11]; //名前(10文字まで) int point[4]; //4回分の得点 }; //一人分のデータを入力する関数.構造体変数を返却する PersonData InputData(void) PersonData ps; int i; printf("番号(4桁まで)?: "); scanf("%d", &ps.ID); if (ps.ID == 0) //もし番号0だったら入力終了 return ps; } printf("名前(10文字まで)?: "); scanf("%s", ps.name); for (i = 0; i < 4; i++) printf("第%d回の得点(10点満点)?: ", i + 1); scanf("%d", &ps.point[i]); //構造体変数aの内容を表示する void PrintPerson(PersonData a) { int i; printf("%4d %-10s :", a.ID, a.name); for (i = 0; i < 4; i++) printf("%3d", a.point[i]); } //構造体変数bの得点データの平均値を返却する float Average(PersonData b) float sum = 0; sum = sum + b.point[i]; return sum/4;

課題12-3 (続き) 20名までのデータを入力してください.番号0の入力で終了します 番号(4桁まで)?: 135 課題12-3 (続き) int main(void) { PersonData data[20]; //最大20名を処理する int n, i; printf("20名までのデータを入力してください.番号0の入力で終了します\n"); for (n = 0; n < 20; n++) //最大20名分まで入力 data[n] = InputData(); if (data[n].ID == 0) //番号が0だったら入力終了 break; } printf("\n"); printf("番号 名前 得点 平均点\n"); printf("-------------------------------------\n"); for (i = 0; i < n; i++) //入力された人数は変数nに残っている PrintPerson(data[i]); //一人分のデータを表示 printf(" : %4.1f\n", Average(data[i])); //平均点を表示 20名までのデータを入力してください.番号0の入力で終了します 番号(4桁まで)?: 135 名前(10文字まで)?: Tokugawa 第1回の得点(10点満点)?: 2 第2回の得点(10点満点)?: 3 第3回の得点(10点満点)?: 9 第4回の得点(10点満点)?: 10 番号(4桁まで)?: 288 名前(10文字まで)?: Oda 第1回の得点(10点満点)?: 10 第2回の得点(10点満点)?: 9 第3回の得点(10点満点)?: 8 第4回の得点(10点満点)?: 0 番号(4桁まで)?: 512 名前(10文字まで)?: Toyotomi 第2回の得点(10点満点)?: 10 第3回の得点(10点満点)?: 10 第4回の得点(10点満点)?: 5 番号(4桁まで)?: 0 番号 名前 得点 平均点 ------------------------------------- 135 Tokugawa : 2 3 9 10 : 6.0 288 Oda : 10 9 8 0 : 6.8 512 Toyotomi : 2 10 10 5 : 6.8 続行するには何かキーを押してください . . .