プログラミング実習II (2026) 課題
構造体を用いた複素数の演算プログラムを作成せよ。
typedef により,re(実部)と im(虚部)をメンバとする complex_t 型を宣言せよ。void c_print( complex_t a ) ,複素数の加算を行う関数 complex_t c_add( complex_t a, complex_t b ) ,乗算を行う関数 complex_t c_mul( complex_t a, complex_t b ) を作成せよ。main 関数にて,complex_t 型の構造体変数 x, yの実部と虚部に適当な値を代入し,計算結果を関数 c_print() を用いて表示せよ。#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;
}
[リスト 9.5] を参考に,構造体の配列を用いて最も近い席の組を探すプログラムを作成せよ。
main 関数の外側で position_t 型を typedef を用いて宣言せよ。seat を表 6.4 のデータで初期化し,内側ループの初期値を j = i + 1 に修正せよ(C言語によるプログラミング の正誤表参照)。
position_t seat[MAX_SEAT] = {
{ 1, 1.1, 5.2 },
{ 5, 3.4, 1.6 },
{ 8, 4.5, 3.4 },
{ 10, 2.3, 2.6 },
{ 15, 6.4, 5.7 },
{ 16, 7.6, 7.8 },
{ 20, 5.2, 4.4 },
{ 22, 1.7, 3.5 },
{ 25, 3.8, 6.3 },
{ 30, 5.8, 6.3 },
};
次の手順に沿ってテストの点数から判定を行うプログラムを完成せよ.
main( ) の外部にて,typedef により,次のメンバを持つ student_t 型の構造体を宣言せよ.int no (学生番号),int en(英語の点数),int ma(数学の点数),int sc(理科の点数),int total(3教科の合計)
main( ) の内部で,student_t 型の構造体の配列 s[N] を定義し,以下の通り初期化する. s の各要素( s[i] )に対して,当該生徒の 3 教科の合計点を計算してメンバ total に代入せよ.さらに,得点表を表示せよ.
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;
}
C言語によるプログラミング 9.4.2 項,キックオフC言語 10.4.1 項を読み,構造体へのポインタと矢印演算子
-> について学習せよ.
次に,キックオフC言語 10章 ソースコード 10.4 を入力し,ソースコード 10.3 との相違を理解せよ.さらに,矢印演算子のかわりに (*p).x, (*p).y のように変更しても正しく動作することを確認せよ.
「キックオフ C言語」第10章の練習問題2(【構造体ポインタの関数渡し】171ページの…)を解答せよ.作成した関数を利用し,動作が確認できるような C 言語のプログラムを作成して提出すること.
距離については,キックオフC言語 3章 練習問題に記述がある.
「キックオフ C言語」第10章の練習問題3(【メンバ変数の追加】171ページの…)を解答せよ.作成した関数を利用し,動作が確認できるような C 言語のプログラムを作成して提出すること.
リーグ戦の成績を管理する構造体配列のプログラムを作成し,チーム名のアルファベット順に並べた表と,勝率の順に並べた表をそれぞれ表示せよ.
構造体のメンバは順に,チーム名,勝利数,敗戦数,引き分け数,勝率(=勝利数/(勝利数+敗戦数)),順位である.これらのデータをすべて含んだ表を表示すること.
#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;
}
「キックオフ C言語」の 12.1節 練習問題「 10 章」(struct tm get_current_time( void ) )を解答せよ.作成した関数を利用し,動作が確認できるような C 言語のプログラムを作成して提出すること.