プログラミング実習II (2026) 課題

[E11] 第9章 構造体とユーザ定義型

(E11_1)

構造体を用いた複素数の演算プログラムを作成せよ。

i を虚数単位として,x = 1.5 + 2.1 i と y = 0.3 - 2.5 i の加算と乗算の結果はそれぞれ
#include <stdio.h>

void c_print( complex_t a ){

	if( a.im >= 0.0 )
		printf(" %f + %f i \n", a.re, a.im);
	else
		printf(" %f - %f i \n", a.re, -a.im);

}

complex_t c_add( complex_t a, complex_t b ){

}

complex_t c_mul( complex_t a, complex_t b ){

}

int main ( void )
{
	complex_t x, y;

	return 0;
}
(E11_2)

[リスト 9.5] を参考に,構造体の配列を用いて最も近い席の組を探すプログラムを作成せよ。

(E11_3)

次の手順に沿ってテストの点数から判定を行うプログラムを完成せよ.

  1. main( )外部にて,typedef により,次のメンバを持つ student_t 型の構造体を宣言せよ.
    int no (学生番号),int en(英語の点数),int ma(数学の点数),int sc(理科の点数),int total(3教科の合計)
  2. さらに,main( )内部でstudent_t 型の構造体の配列 s[N] を定義し,以下の通り初期化する.
  3. 配列 s の各要素( s[i] )に対して,当該生徒の 3 教科の合計点を計算してメンバ total に代入せよ.さらに,得点表を表示せよ.
  4. 3 教科の合計点について,N 人の平均点を求めて表示せよ.
  5. 3 教科の合計点が最大である学生の情報(学生番号,各科目の点数,3教科の合計点数)を表示せよ.
    まず,最大値を与える配列の添字を求めればよい.
1005 86 75 66 227
1012 65 91 70 226
1043 45 75 92 212
1173 97 75 76 248
1224 77 77 42 196
1397 27 62 54 143
1500 58 85 77 220
1734 80 52 66 198
1888 98 93 85 276
1920 60 60 70 190

average: 213.600000

max: 1888 98 93 85 276

(プログラム)

#include <stdio.h>

#define N 10

int main(void)
{

	student_t s[ N ] = {
		{ 1005, 86, 75, 66, 0 },
		{ 1012, 65, 91, 70, 0 },
		{ 1043, 45, 75, 92, 0 },
		{ 1173, 97, 75, 76, 0 },
		{ 1224, 77, 77, 42, 0 },
		{ 1397, 27, 62, 54, 0 },
		{ 1500, 58, 85, 77, 0 },
		{ 1734, 80, 52, 66, 0 },
		{ 1888, 98, 93, 85, 0 },
		{ 1920, 60, 60, 70, 0 },
	};



	for( int i = 0; i < N; i++ ){
		printf("%d %d %d %d %d\n", s[ i ].no, s[ i ].en, s[ i ].ma, s[ i ].sc, s[ i ].total );
	}
	printf("\n");


	printf("ave: %f \n\n",  );


	printf("max: %d %d %d %d %d\n", s[ ].no, s[ ].en, s[ ].ma, s[ ].sc, s[ ].total   );

	return 0;
}
(E11_4)

C言語によるプログラミング 9.4.2 項,キックオフC言語 10.4.1 項を読み,構造体へのポインタと矢印演算子
-> について学習せよ.

次に,キックオフC言語 10章 ソースコード 10.4 を入力し,ソースコード 10.3 との相違を理解せよ.さらに,矢印演算子のかわりに (*p).x, (*p).y のように変更しても正しく動作することを確認せよ.

(E11_5)

「キックオフ C言語」第10章の練習問題2(【構造体ポインタの関数渡し】171ページの…)を解答せよ.作成した関数を利用し,動作が確認できるような C 言語のプログラムを作成して提出すること.

距離については,キックオフC言語 3章 練習問題に記述がある.

(E11_6)

「キックオフ C言語」第10章の練習問題3(【メンバ変数の追加】171ページの…)を解答せよ.作成した関数を利用し,動作が確認できるような C 言語のプログラムを作成して提出すること.

(E11_7*)

リーグ戦の成績を管理する構造体配列のプログラムを作成し,チーム名のアルファベット順に並べた表と,勝率の順に並べた表をそれぞれ表示せよ.

構造体のメンバは順に,チーム名,勝利数,敗戦数,引き分け数,勝率(=勝利数/(勝利数+敗戦数)),順位である.これらのデータをすべて含んだ表を表示すること.

#include <stdio.h>
#define N 12

int main( void ){

	league_t team[ N ] = {
		{ "A",  9,  7, 2, 0.0, -1 },
		{ "B",  8,  9, 1, 0.0, -1 },
		{ "C",  5, 12, 1, 0.0, -1 },
		{ "D",  6, 12, 0, 0.0, -1 },
		{ "E",  7, 11, 0, 0.0, -1 },
		{ "F",  7, 10, 1, 0.0, -1 },
		{ "G",  9,  9, 0, 0.0, -1 },
		{ "H", 10,  7, 1, 0.0, -1 },
		{ "I",  9,  8, 1, 0.0, -1 },
		{ "J", 10,  8, 0, 0.0, -1 },
		{ "K", 12,  5, 1, 0.0, -1 },
		{ "L", 12,  6, 0, 0.0, -1 },
	};

	return 0;

}
(E11_A*)

「キックオフ C言語」の 12.1節 練習問題「 10 章」(struct tm get_current_time( void ) )を解答せよ.作成した関数を利用し,動作が確認できるような C 言語のプログラムを作成して提出すること.