プログラミング実習II (2025) 課題
[T7] 第6章 配列(2)
(T7_1) 配列の要素数と実際のデータの個数が一致しない場合,あるいは配列の要素数が明示されていない場合を考える.
#include <stdio.h>
int main( void )
{
int a[ 50 ] = { 75, 44, 98, 76, 42, 87, 64, 88, 78, 55, 91, 69, 47, 84, 75, 63, 81, 29, 42, 53, -1, };
int b[ ] = { 75, 44, 98, 76, 42, 87, 64, 88, 78, 55, 91, 69, 47, 84, 75, 63, 81, 29, 42, 53, };
return 0;
}
|
(T7_2) 配列を引数として,関数を呼び出すことができる.以下のプログラムを作成せよ.
下のプログラムは,6 種類の硬貨(1円, 5円, 10円, 50円, 100円, 500円)についてそれぞれの枚数に対して,金額の合計を表示するプログラムである.以下に沿うように完成せよ.
#include <stdio.h>
#define N 6
/* プロトタイプ宣言,配列の引数の書き方に注意 */
void array_print( int a[], int b[] );
int array_sum( int a[], int b[] );
int main ( void )
{
int value[ N ] = { 1, 5, 10, 50, 100, 500 };
int num[ N ] = { 3, 2, 0, 5, 3, 1 };
int sum;
printf(" 硬貨の額面,枚数\n ");
array_print( value, num );
sum = array_sum( value, num );
printf(" 硬貨の合計金額は %d 円です\n ", sum);
return 0;
}
void array_print( int a[], int b[] ) /* 表示を行う関数の本体 */
{
/* 金額と枚数を順に出力する */
}
int array_sum( int a[], int b[] ) /* 合計を求める関数の本体 */
{
/* 合計金額を求めて戻り値とする */
}
|
(T7_3) 教科書 6.5節を読んだ上で,以下のプログラムの出力を予想してレポートに記せ.次に,プログラムを入力,コンパイル・実行して結果を確認せよ.予想が間違った場合はその理由をレポートにて報告すること.
#include <stdio.h>
#define M 3
int main ( void )
{
int a[ M ][ M ];
int sum;
a[0][0] = 2; a[0][1] = 0; a[0][2] = -1;
a[1][0] = -1; a[1][1] = 2; a[1][2] = 3;
a[2][0] = 5; a[2][1] = 4; a[2][2] = 3;
sum = 0;
for( int i = 0; i < M; i++ ){
sum += a[ 1 ][ i ];
}
printf("%d \n", sum );
sum = 0;
for( int i = 0; i < M; i++ ){
sum += a[ i ][ 2 ];
}
printf("%d \n", sum );
sum = 0;
for( int i = 0; i < M; i++ ){
for( int j = 0; j < M; j++ ){
sum += a[ i ][ j ];
}
}
printf("%d \n", sum );
sum = 0;
for( int i = 0; i < M; i++ ){
for( int j = 0; j < M; j++ ){
if( (i+j)%2 == 0 )
sum += a[ i ][ j ];
}
}
printf("%d \n", sum );
return 0;
}
|
(T7_4) 行列の和を求めるプログラムを作成する.
3.5 9.0 -1.0
5.0 -1.5 5.0
10.0 12.0 5.0
#include <stdio.h>
#define M 3
void print_array( double a[M][M] ){
// 配列 a を表示.printf の書式は "% 2.1f" など(% の後ろにスペース).
}
int main ( void )
{
double a[ M ][ M ], b[ M ][ M ], c[ M ][ M ];
a[0][0] = 2.5; a[0][1] = 0.0; a[0][2] = -1.0;
a[1][0] = -1.0; a[1][1] = 1.5; a[1][2] = 0.0;
a[2][0] = 5.0; a[2][1] = 4.0; a[2][2] = 3.0;
b[0][0] = -2.0; b[0][1] = 4.5; b[0][2] = 1.0;
b[1][0] = 4.0; b[1][1] = -3.0; b[1][2] = 2.5;
b[2][0] = -2.5; b[2][1] = 0.0; b[2][2] = -2.0;
// ここで行列の和を求める
print_array( c );
return 0;
} |
(T7_5) 正方行列 A に対して,その転置,トレース,フロベニウスノルムを求める関数を作成して,プログラムを完成せよ.
3 -2 5 1
-4 1 0 2
1 -6 4 3
7 0 -3 -2
表示例:
3 -4 1 7
-2 1 -6 0
5 0 4 -3
1 2 3 -2
trace = 6, Frobenius norm = 13.564660
#include <stdio.h>
#include <math.h>
#define M 4
void transpose( int a[M][M] ){
int b[M][M];
// A の転置を求めて表示する.printf の書式は %2d
// この関数で配列 a の要素を変更しないこと.
// 変更した場合は,main 関数で参照する配列 a も値が変わってしまう.
}
int comp_trace( int a[M][M] ){
}
double comp_fnorm( int a[M][M] ){
}
int main ( void )
{
transpose( a );
printf("trace = %d, Frobenius norm = %f \n", , );
return 0;
} |