演習課題No12

Similar documents
C 言語第 7 回 掛け算 (multiply number) ìz1 = x1 + iy1 í îz = x + iy 割り算 (devide number) ( )( ) ( ) Þ z z = x + iy x + iy = x x - y y + i y x + x y

Microsoft PowerPoint - 12.ppt [互換モード]

講習No.12

DVIOUT

Microsoft PowerPoint - 13.ppt [互換モード]

演算増幅器

kiso2-09.key

Microsoft PowerPoint - 12.ppt [互換モード]

Microsoft Word - no13.docx

プログラミング基礎

Microsoft PowerPoint - lec10.ppt

Microsoft Word - no15.docx

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

Microsoft PowerPoint - 13th.ppt [互換モード]

Microsoft Word - Cプログラミング演習(1)_2012

Microsoft PowerPoint - program.ppt [互換モード]

Prog1_6th

memo

Microsoft PowerPoint - handout07.ppt [互換モード]

DVIOUT

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

プログラミング基礎

プログラミング基礎

Microsoft Word - no202.docx

講習No.9

memo

memo

講習No.12

Prog1_15th

Microsoft Word - 3new.doc

Taro-ポインタ変数Ⅰ(公開版).j

講習No.10

PowerPoint プレゼンテーション

PowerPoint Presentation

プログラミング基礎

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

Microsoft Word - no11.docx

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

C言語によるアルゴリズムとデータ構造

Taro-リストⅠ(公開版).jtd

(2) 構造体変数の宣言 文法は次のとおり. struct 構造体タグ名構造体変数名 ; (1) と (2) は同時に行える. struct 構造体タグ名 { データ型変数 1; データ型変数 2;... 構造体変数名 ; 例 : struct STUDENT{ stdata; int id; do

Microsoft PowerPoint - C4(反復for).ppt

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

スライド 1

gengo1-11

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - 11.pptx

Microsoft Word - no02.doc

8 / 0 1 i++ i 1 i-- i C !!! C 2

Microsoft Word - no12.doc

Microsoft PowerPoint - kougi9.ppt

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

[1] #include<stdio.h> main() { printf("hello, world."); return 0; } (G1) int long int float ± ±

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

Taro-再帰関数Ⅱ(公開版).jtd

講習No.8

C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1

フローチャートの書き方

初歩のC言語ターミナル_2014_May.pages

プログラミング実習I

プログラミング基礎

PowerPoint プレゼンテーション

DVIOUT

C 言語第 8 回 複素微分方程式の解法 1 1 複素数の係数を持つ 1 階の微分方程式 複素数を z として 微分方程式は dz dt = である 特に とする f ( z, t) ( ) 実際には が含まれていないので ( ) f ( z, t) = i z Ü t f (

1. 関数 scanf() 関数 printf() は変数の値を画面に表示しますが それに対し関数 scanf() はキーボードで入力した値を変数に代入します この関数を活用することで対話式 ( ユーザーの操作に応じて処理を行う ) プログラムを作ることができるようになります 整数の和

Microsoft PowerPoint - class2-OperatorOverLoad.pptx

Microsoft PowerPoint - 計算機言語 第7回.ppt

Taro-ビット処理(公開版).jtd

C 言語講座 Vol 年 5 月 29 日 CISC

< F2D837C E95CF CF68A4A94C5816A2E6A>

プログラミングI第10回

memo

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

情報処理演習 B8クラス

<4D F736F F D20438CBE8CEA8D758DC03389F0939A82C282AB2E646F63>

Microsoft Word - no206.docx

Taro-再帰関数Ⅲ(公開版).jtd

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

PowerPoint Presentation

kiso2-06.key

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Microsoft Word - Cプログラミング演習(10)

Microsoft Word - no103.docx

Microsoft PowerPoint - prog08.ppt

Microsoft PowerPoint - kougi8.ppt

Microsoft Word - Cプログラミング演習(12)

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdio.h> #define InFile "data.txt" #define OutFile "sorted.txt" #def

gengo1-8

PowerPoint プレゼンテーション

スライド 1

C言語講座 ~ファイル入出力編~

PowerPoint プレゼンテーション

C 言語第 3 回 2 a と b? 関係演算子 a と b の関係 関係演算子 等しい a==b 等しくない a!=b より大きい a>b 以上 a>=b より小さい a<b 以下 a<=b 状態 真偽 値 条件が満たされた場合 TRUE( 真 ) 1(0 以外 ) 条件が満たされなかった場合 F

物質工学科 田中晋

Taro-スタック(公開版).jtd

Transcription:

演習課題 No.12 ( 課題は 3 題ある ) 課題 12-1 時間内提出 従来の C 言語には複素数を直接扱うデータ型はないので (*), 構造体で複素数 ( 英語で complex) を表すことにする. 複素数を表す構造体を以下のように定義する. struct complex float r; // 実部 ( 英語で real) float i; // 虚部 ( 英語で imaginary) ; この complex 構造体を用いて, 二つの複素数の入力を求め, 入力された二つの複素数の絶対値 2 乗, 和, 差, 積, 商を求めるプログラムの実行例を次に示す. 複素数 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 以下の手順で関数を作成し, 問題の最後に記載されている未完成プログラムを完成せよ. (1) 次の関数については, すでに下記のプログラム中に記入されているので, そのまま使ってよい. complex InputComp(void) 複素数を入力する関数. この関数を呼び出すと, ユーザーが実部と虚部の値の入力した complex 型の関数値を返す. float SqrComp(complex c) 複素数の絶対値の 2 乗を計算する関数. この関数は complex 型構造体変数 c の絶対値の 2 乗を関 数値として返す. (*) 注 C 言語の新しい規格には _Complex 型として複素数型が定義されている.

complex Add(complex a, complex b) 複素数 a と b の和を計算して関数値としてその複素数値を返す. (2) 次の関数を各自でプログラムせよ. void PrintComp(complex c) 複素数を表示する関数. この関数を呼び出すと, 虚部が正値の場合は, 6.500000 + 30.100000 i 虚部が負値の場合は, 6.500000-30.100000 i のように complex 型構造体変数 c の内容を表示する. complex Subtract(complex a, complex b) 複素数 a と b の差を計算して関数値としてその複素数値を返す. complex multiply (complex a, complex b) 複素数 a と b の積を計算して関数値としてその複素数値を返す. complex Divide(complex a, complex b) 複素数 a と b の商を計算して関数値としてその複素数値を返す. 以上のとおりに関数を定義し, 必ずそれを利用して, 次の未完成のプログラムを実行例とコメントに従って 完成せよ. #include <stdio.h> struct complex float r; // 実部 ( 英語で real) float i; // 虚部 ( 英語で imaginary) ; complex InputComp(void) complex c; printf(" 実部を入力してください."); printf(" 虚部を入力してください."); return c; scanf("%f", &c.r); scanf("%f", &c.i); float SqrComp(complex c)

return (c.r*c.r + c.i*c.i); complex Add(complex a, complex b) complex c; c.r = a.r + b.r; c.i = a.i + b.i; return c; void PrintComp(complex c) complex Subtract(complex a, complex b) complex Multiply(complex a, complex b) complex Divide(complex a, complex b) int main(void) 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)); // 短く書くとこんなかんじ // これ以下は各自でプログラム ヒント : 複素数 x = a + bi, y = c + di とすると, x 2 =a 2 +b 2 であり, また x+y = (a+c) + (b+d)i であり, その他の 演算も通常の複素数の演算にしたがって処理されなければならない. なお, 商は複雑で,x/y = (ac+bd)/ y 2 - (ad-bc)/ y 2 i となる. 課題 12-2 上の課題で作った複素数の関数を再利用し, 入力された多数の複素数値の平均値と, 絶対値の 2 乗の平均値を表示するプログラムを作成したい. 次の関数はすでに下記のプログラム中に記入されているので, そのまま使ってよい. int InputCompArray(complex c[], int n) 複素数の配列 c[] に n 個までの複素数をユーザーに入力してもらう関数. ただし, 実部虚部とも 0 を入 力された場合は入力を終了する. 入力された複素数の個数を返す. 次の関数は各自でプログラムせよ. complex AverageComp(complex c[], int n) 複素数の配列 c[] の最初の n 個の要素の平均値を返す. なお, 複素数の平均値は複素数である. double AverageSqrComp(complex c[], int n) 複素数の配列 c[] の最初の n 個の要素の絶対値の 2 乗の平均値を返す. 必要な関数を定義し, 必ずそれを利用して, 次の未完成のプログラムを実行例とコメントに従って完成せ よ. #include <stdio.h> struct complex float r; // 実部 ( 英語で real)

; float i; // 虚部 ( 英語で imaginary) complex InputComp(void) complex c; printf(" 実部を入力してください."); printf(" 虚部を入力してください."); return c; scanf("%f", &c.r); scanf("%f", &c.i); float SqrComp(complex c) return (c.r*c.r + c.i*c.i); void PrintComp(complex c) // 前の課題で作成済みの関数を再利用 complex Add(complex a, complex b) complex c; c.r = a.r + b.r; c.i = a.i + b.i; return c; int InputCompArray(complex c[], int n) int i; for (i = 0; i < n; i++) c[i] = InputComp(); if (SqrComp(c[i]) == 0) break; return i; complex AverageComp(complex c[], int n)

double AverageSqrComp(complex c[], int n) int main(void) complex ccc[30]; int a; す.\n"); printf("30 個までの複素数を入力してください. 実部虚部とも 0 を入力すると終了しま a = InputCompArray(ccc, 30); printf(" 平均値 :"); PrintComp(AverageComp(ccc, a)); printf(" 絶対値の 2 乗の平均値 :%f\n", AverageSqrComp(ccc, a)); このプログラムの実行例を次に示す. 30 個までの複素数を入力してください. 実部虚部とも 0 を入力すると終了します. 実部を入力してください.-2 虚部を入力してください.2 実部を入力してください.3 虚部を入力してください.-5 実部を入力してください.1 虚部を入力してください.-10.5 実部を入力してください.0 虚部を入力してください.0 平均値 :0.666667-4.500000 i 絶対値の 2 乗の平均値 :51.083333 続行するには何かキーを押してください...

課題 12-3 構造体を用いて学生の小テストデータを管理するプログラムを作成する. そのために, 下記の構造体定義を用いるものとする. このソース内の PrintPerson() 関数と Average() 関数を作成し, 実行例と同じ結果を得るプログラムを完成せよ. #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]); return ps; // 構造体変数 a の内容を表示する void PrintPerson(PersonData a) // 構造体変数 b の得点データの平均値を計算して返す float Average(PersonData b)

int main(void) PersonData data[20]; int n, i; // 最大 20 名を処理する 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 第 1 回の得点 (10 点満点 )?: 2

第 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 続行するには何かキーを押してください...