Download : sample-001.c ( SJIS 版 )
/*
* 2015/10/30 sample-001.c
*/
/*
* 多次元配列
*
* 利用方法
* コンパイル
* cc -I../include -o BASENAME.exe sample-001.c
* 実行
* ./BASENAME.exe
*/
#include <stdio.h>
/*
* main
*
*/
int main( int argc, char *argv[] )
{
int a[3][4]; /* 二次元配列の宣言 3 x 4 個の変数を宣言 */
/* int a00, a01, .., a03, a10, .., a13, .., a23; と同様 */
int i;
int j;
a[0][0] = 0; /* 添字は、二つ必要 ( 二次なので.. ) で、0 から始まる */
a[2][3] = 6; /* 添字の大きさは、配列の大きさ - 1 まで */
/* 0 〜 2 と 0 〜 3 のかけ算表をつくってみる */
for ( i = 0; i < 3; i++ ) {
for ( j = 0; j < 4; j++ ) {
a[i][j] = i * j;
}
}
printf ( "2 * 1 = %d\n", a[2][1] ); /* 2 と表示される筈 */
if ( a[1][2] == a[2][1] ) { /* 1 * 2 = 2 * 1 か ? */
printf ( "1 * 2 = 2 * 1 が成立\n" );
} else {
printf ( "1 * 2 = 2 * 1 が成立しない.. 何か変だ..\n" );
}
/* 0 〜 2 と 0 〜 3 のかけ算表を画面に表示 */
printf ( " * |" );
for ( j = 0; j < 4; j++ ) {
printf ( "%2d", j );
}
printf ( "\n" );
printf ( "---+---------\n" );
for ( i = 0; i < 3; i++ ) {
printf ( " %1d |", i );
for ( j = 0; j < 4; j++ ) {
printf ( "%2d", a[i][j] );
}
printf ( "\n" );
}
return 0;
}
Can not access : program/sample-001.out
Download : sample-002.c ( SJIS 版 )
/*
* 2015/10/30 sample-002.c
*/
/*
* 集合の操作は操作の集合
*
* 利用方法
* コンパイル
* cc -I../include -o BASENAME.exe sample-002.c
* 実行
* ./BASENAME.exe
*/
#include <stdio.h>
/*
* main
*
*/
#define ARRAY_SIZE 5 /* 配列のサイズを 5 とする */
int main( int argc, char *argv[] )
{
int a[ARRAY_SIZE]; /* ARRAY_SIZE の配列の宣言 */
int i;
for ( i = 0; i < ARRAY_SIZE; i++ ) {
a[i] = 2 * i; /* 一桁の偶数の表を作る */
}
/* 偶数を出力 */
for ( i = 0; i < ARRAY_SIZE; i++ ) {
printf ( "%d ", a[i] );
}
printf ( "\n" );
/* 全ての要素に 1 を加えれば奇数の表になる */
for ( i = 0; i < ARRAY_SIZE; i++ ) {
a[i] = a[i] + 1;
}
/* 奇数を出力 */
for ( i = 0; i < ARRAY_SIZE; i++ ) {
printf ( "%d ", a[i] );
}
printf ( "\n" );
return 0;
}
Can not access : program/sample-002.out
Download : sample-003.c ( SJIS 版 )
/*
* 2015/10/30 sample-003.c
*/
/*
* 文字配列と文字列 (1)
*
* 利用方法
* コンパイル
* cc -I../include -o BASENAME.exe sample-003.c
* 実行
* ./BASENAME.exe
*/
#include <stdio.h>
/*
* main
*
*/
#define CSIZE 10
#define EOS '\0'
int main( int argc, char *argv[] )
{
char cary[CSIZE];
cary[0] = 'a';
cary[1] = 'b';
cary[2] = 'c';
cary[3] = EOS;
/*
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
cary|'a'|'b'|'c'|EOS| ? | ? | ? | ? | ? | ? |
*/
printf ( "普通に文字列 \"abc\" を出力してみる : %s\n", "abc" );
/* 文字列を出力する場合の書式は「%s」を利用する */
printf ( "文字列の代りに文字配列を出力してみる : %s\n", cary );
/* 文字列の代りに文字配列名が使える */
return 0;
}
$ ./sample-003.exe 普通に文字列 "abc" を出力してみる : abc 文字列の代りに文字配列を出力してみる : abc $
Download : sample-004.c ( SJIS 版 )
/*
* 2015/10/30 sample-004.c
*/
/*
* 文字配列と文字列 (2)
*
* 利用方法
* コンパイル
* cc -I../include -o BASENAME.exe sample-004.c
* 実行
* ./BASENAME.exe
*/
#include <stdio.h>
/*
* main
*
*/
#define CSIZE 10
#define EOS '\0'
int main( int argc, char *argv[] )
{
char cary[CSIZE] = { 'a', 'b', 'c', 'd', 'e', EOS };
/*
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
cary|'a'|'b'|'c'|'d'|'e'|EOS| ? | ? | ? | ? |
*/
int i;
int l;
/*
* 文字列と文字配列
*/
printf ( "最初の cary = %s\n", cary );
/*
* 文字の変更
*/
cary[2] = 'A'; /* 文字列の途中の文字を差し替える */
/*
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
cary|'a'|'b'|'A'|'d'|'e'|EOS| ? | ? | ? | ? |
*/
printf ( "文字列の途中の文字を変更すると cary = %s\n", cary );
/*
* 文字の尻尾を切断
*/
cary[3] = EOS; /* 文字列の後ろを切断 */
/*
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
cary|'a'|'b'|'A'|EOS|'e'|EOS| ? | ? | ? | ? |
*/
printf ( "文字列を途中で切ると cary = %s\n", cary );
/*
* 文字を尻尾に追加
*/
cary[3] = 'X';
cary[5] = 'Y';
cary[6] = 'Z';
cary[7] = EOS; /* 文字列の最後に EOS を忘れずに !! */
/*
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
cary|'a'|'b'|'A'|'X'|'e'|'Y'|'Z'|EOS| ? | ? |
*/
printf ( "文字列の後ろに文字を追加すると cary = %s\n", cary );
/*
* 文字配列の出力
*/
printf ( "printf を使わず、文字配列を文字列のように出力すると : " );
for ( i = 0; cary[i] != EOS; i++ ) {
putchar ( cary[i] );
}
printf ( "と、なります。\n" );
/* 文字列の長さを求める */
for ( l = 0; cary[l] != EOS; l++ ) {
/* やる事は何もない (l を増やす事が目的) */
}
/* cary の中の文字列の長さは、変数 l に入る */
printf ( "文字列 %d の長さは %d です。\n", cary, l );
/*
* 途中の文字を削除
*/
for ( i = 3; cary[i] != EOS; i++ ) {
cary[i] = cary[i+1];
}
/* 文字列の途中(4 文字目)の文字('X')を削除 */
/*
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
cary|'a'|'b'|'A'|'X'|'e'|'Y'|'Z'|EOS| ? | ? |
| | | / / / /
|'a'|'b'|'A'|'e'|'Y'|'Z'|EOS|EOS| ? | ? |
*/
printf ( "文字列の途中の文字を削除すると cary = %s\n", cary );
return 0;
}
Can not access : program/sample-004.out
Download : sample-005.c ( SJIS 版 )
/*
* 2015/10/30 sample-005.c
*/
/*
* 文字配列と文字列 (2)
*
* 利用方法
* コンパイル
* cc -I../include -o sample-005.exe sample-005.c
* 実行
* ./sample-005.exe
*/
#include <stdio.h>
/*
* main
*
*/
#define CSIZE 10
#define EOS '\0'
int main( int argc, char *argv[] )
{
char cary[CSIZE] = { 'a', 'b', 'c', 'd', 'e', EOS };
/*
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
cary|'a'|'b'|'c'|'d'|'e'|EOS| ? | ? | ? | ? |
*/
int i;
int l;
/*
* 文字列と文字配列
*/
printf ( "最初の cary = %s\n", cary );
/*
* 文字の変更
*/
cary[2] = 'A'; /* 文字列の途中の文字を差し替える */
/*
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
cary|'a'|'b'|'A'|'d'|'e'|EOS| ? | ? | ? | ? |
*/
printf ( "文字列の途中の文字を変更すると cary = %s\n", cary );
/*
* 文字の尻尾を切断
*/
cary[3] = EOS; /* 文字列の後ろを切断 */
/*
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
cary|'a'|'b'|'A'|EOS|'e'|EOS| ? | ? | ? | ? |
*/
printf ( "文字列を途中で切ると cary = %s\n", cary );
/*
* 文字を尻尾に追加
*/
cary[3] = 'X';
cary[5] = 'Y';
cary[6] = 'Z';
cary[7] = EOS; /* 文字列の最後に EOS を忘れずに !! */
/*
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
cary|'a'|'b'|'A'|'X'|'e'|'Y'|'Z'|EOS| ? | ? |
*/
printf ( "文字列の後ろに文字を追加すると cary = %s\n", cary );
/*
* 文字配列の出力
*/
printf ( "printf を使わず、文字配列を文字列のように出力すると : " );
for ( i = 0; cary[i] != EOS; i++ ) {
putchar ( cary[i] );
}
printf ( "と、なります。\n" );
/* 文字列の長さを求める */
for ( l = 0; cary[l] != EOS; l++ ) {
/* やる事は何もない (l を増やす事が目的) */
}
/* cary の中の文字列の長さは、変数 l に入る */
printf ( "文字列 %d の長さは %d です。\n", cary, l );
/*
* 途中の文字を削除
*/
for ( i = 3; cary[i] != EOS; i++ ) {
cary[i] = cary[i+1];
}
/* 文字列の途中(4 文字目)の文字('X')を削除 */
/*
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
cary|'a'|'b'|'A'|'X'|'e'|'Y'|'Z'|EOS| ? | ? |
| | | / / / /
|'a'|'b'|'A'|'e'|'Y'|'Z'|EOS|EOS| ? | ? |
*/
printf ( "文字列の途中の文字を削除すると cary = %s\n", cary );
return 0;
}
Can not access : program/sample-005.out
Download : sample-010.c ( SJIS 版 )
/*
* 2015/10/30 sample-010.c
*/
/*
* 様々な配列の要素の参照方法
*
* 利用方法
* コンパイル
* cc -I../include -o BASENAME.exe sample-010.c
* 実行
* ./BASENAME.exe
*/
#include <stdio.h>
/*
* main
*
*/
int main( int argc, char *argv[] )
{
int a[3][4]; /* 二次元配列の宣言 3 x 4 個の変数を宣言 */
/* int a00, a01, .., a03, a10, .., a13, .., a23; と同様 */
int i;
int j;
a[0][0] = 0; /* 添字は、二つ必要 ( 二次なので.. ) で、0 から始まる */
a[2][3] = 6; /* 添字の大きさは、配列の大きさ - 1 まで */
/* 0 〜 2 と 0 〜 3 のかけ算表をつくってみる */
for ( i = 0; i < 3; i++ ) {
for ( j = 0; j < 4; j++ ) {
a[i][j] = i * j;
}
}
printf ( "2 * 1 = %d\n", a[2][1] ); /* 2 と表示される筈 */
if ( a[1][2] == a[2][1] ) { /* 1 * 2 = 2 * 1 か ? */
printf ( "1 * 2 = 2 * 1 が成立\n" );
} else {
printf ( "1 * 2 = 2 * 1 が成立しない.. 何か変だ..\n" );
}
/* 0 〜 2 と 0 〜 3 のかけ算表を画面に表示 */
printf ( " * |" );
for ( j = 0; j < 4; j++ ) {
printf ( "%2d", j );
}
printf ( "\n" );
printf ( "---+---------\n" );
for ( i = 0; i < 3; i++ ) {
printf ( " %1d |", i );
for ( j = 0; j < 4; j++ ) {
printf ( "%2d", a[i][j] );
}
printf ( "\n" );
}
return 0;
}
Can not access : program/sample-010.out
/*
* 課題 20151023-02
*
* 20151023 20151023-02-QQQQ.c
*
* 二次元行列型の定義と計算
*/
#include <stdio.h>
/*
*
*/
#define DIMENSION 2 /* 二次元 */
/*
* 行列 A は、2 x 2 = 4 の要素をもっている
*
* A = ( 1 2 ) = ( a[0][0] a[0][1] )
* 3 4 a[1][0] a[1][1]
*
*/
typedef struct {
double a[DIMENSION][DIMENSION]; /* 二次元の行列の要素は 2 x 2 */
} Matrix2D; /* Matrix2D 型の宣言 */
/*
* Matrix2D make_Matrix2D ( double a, double b, double c, double d )
* 「行列」を作成する
*
* A = ( a b ) = ( a[0][0], a[0][1] )
* ( c d ) ( a[1][0], a[1][1] )
*/
Matrix2D make_Matrix2D ( double a, double b, double c, double d ) {
Matrix2D newMatrix2D; /* 新しい行列 */
newMatrix2D.a[0][0] = a;
newMatrix2D.a[0][1] = b;
newMatrix2D.a[1][0] = c;
newMatrix2D.a[1][1] = d;
return newMatrix2D;
}
/*
* void print_Matrix2D ( Matrix2D ary );
* 「行列」を表示する (表示の都合上、常に独立した行に出力する)
* Matrix2D ary; 二次元行列
*/
void print_Matrix2D ( Matrix2D ary ) {
int r; /* 行 ( row ) */
int c; /* 列 ( colomun ) */
for ( r = 0; r < DIMENSION; r++ ) {
printf ( "(" );
for ( c = 0; c < DIMENSION; c++ ) {
printf ( " %10.5f", ary.a[r][c] );
/*
* [注意] %10.5f は %f と同じく浮動小数点数を出力するが
* 「全体の桁数は 10 桁、小数点数以下は 5 桁にする」
* という「表示上の指定」も加わっている
* 詳しくは google で「printf 書式」で検索
*/
}
printf ( " )\n" );
}
}
/*
* Matrix2D add_Matrix2D ( Matrix2D a1, Matrix2D a2 );
* 「行列」の和
*
* ( a b ) + ( e f ) = ( a + e b + f )
* ( c d ) ( g h ) ( c + g g + h )
*/
Matrix2D add_Matrix2D ( Matrix2D a1, Matrix2D a2 ) {
Matrix2D result; /* 計算結果 */
int r; /* 行 ( row ) */
int c; /* 列 ( colomun ) */
for ( r = 0; r < DIMENSION; r++ ) {
for ( c = 0; c < DIMENSION; c++ ) {
result.a[r][c] = a1.a[r][c] + a2.a[r][c];
}
}
return result;
}
/*
* Matrix2D sub_Matrix2D ( Matrix2D a1, Matrix2D a2 );
* 「行列」の差
*
* ( a b ) - ( e f ) = ( a - e b - f )
* ( c d ) ( g h ) ( c - g g - h )
*/
Matrix2D sub_Matrix2D ( Matrix2D a1, Matrix2D a2 ) {
Matrix2D result; /* 計算結果 */
int r; /* 行 ( row ) */
int c; /* 列 ( colomun ) */
for ( r = 0; r < DIMENSION; r++ ) {
for ( c = 0; c < DIMENSION; c++ ) {
result.a[r][c] = a1.a[r][c] - a2.a[r][c];
}
}
return result;
}
/*
* Matrix2D mul_Matrix2D ( Matrix2D a1, Matrix2D a2 );
* 「行列」の積
*
* ( a b ) ( e f ) = ( a * e + b * g a * f + b * h )
* ( c d ) ( g h ) ( c * e + d * g c * f + d * h )
*/
Matrix2D mul_Matrix2D ( Matrix2D a1, Matrix2D a2 ) {
Matrix2D result; /* 計算結果 */
int r; /* 行 ( row ) */
int c; /* 列 ( colomun ) */
int i;
for ( r = 0; r < DIMENSION; r++ ) {
for ( c = 0; c < DIMENSION; c++ ) {
double products = 0.0; /* a1 の r 行と a2 の c 列の内積の結果 */
/* a1 の r 行と a2 の c 列の内積を計算する */
for ( i = 0; i < DIMENSION; i++ ) {
products = products + a1.a[r][i] * a2.a[i][c];
}
result.a[r][c] = products;
}
}
return result;
}
/*
* print_result 演算結果を出力する
*/
void print_result ( Matrix2D a1, Matrix2D a2, char *operator, Matrix2D a ) \
{
printf ( "%s の計算\n", operator );
print_Matrix2D ( a1 );
printf ( " と、 \n" );
print_Matrix2D ( a2 );
printf ( " との、%s は \n", operator );
print_Matrix2D ( a );
printf ( " です。\n\n" );
}
/*
* main
*/
int main( int argc, char *argv[] )
{
/*
a1 = ( 1 2 )
( 3 -1 )
a2 = ( -3 1 )
( 1 -2 )
*/
Matrix2D a1 = make_Matrix2D ( 1.0, 2.0, 3.0, -1.0 );
Matrix2D a2 = make_Matrix2D ( -3.0, 1.0, 1.0, -2.0 );
/* 和の出力 */
print_result ( a1, a2, "和", add_Matrix2D ( a1, a2 ) );
/* 差の出力 */
print_result ( a1, a2, "差", sub_Matrix2D ( a1, a2 ) );
/* 積の出力 */
/*
** この部分を完成させなさい
*/
return 0;
}
/*
* 課題 20151023-01
*
* 2015/10/23 20151023-01-QQQQ.c
*
* 浮動小数点数の配列の要素内の数値の総和を求める。
*/
#include <stdio.h>
/*
* 浮動小数点数の配列の要素内の数値の総和を求める。
*
* 利用方法
* コンパイル
* cc -o BASENAME.exe 20151023-01-QQQQ.c
* 実行
* ./BASENAME.exe
*/
#include <stdio.h>
/*
* double dsum ( double ary[], int size )
* 浮動小数点数の配列の要素内の数値の総和を求める関数
* double ary[]; 総和を求める要素を含む配列
* int size; 配列のサイズ
*/
double dsum ( double ary[], int size ) {
double sum = 0.0; /* 総和は最初は 0 */
int i; /* 配列の要素を参照する添字変数 */
for ( i = 0; i < size; i++ ) { /* i = 0 〜 sum - 1 の間.. */
/*
** この部分を完成させなさい
*/
/* 「sum += ary[i]」とも書きける */
}
return sum; /* 結果を返す */
}
/*
* main
*/
#define ARY_SIZE 5
int main( int argc, char *argv[] )
{
double data[ARY_SIZE]; /* 大きさ ARY_SIZE の配列の宣言 */
int i; /* 配列の要素を参照する添字変数 */
double sum; /* 総和の計算結果を保持する */
printf ( "%d 個のデータを入力します。\n", ARY_SIZE );
for ( i = 0; i < ARY_SIZE; i++ ) {
printf ( "%d 番目の数値を入力してください : ", i + 1 );
scanf ( "%lf", &data[i] );
}
sum = dsum ( data, ARY_SIZE );
printf ( "入力されたデータの総和は %f です。\n", sum );
return 0;
}
#include <stdio.h>
#define ARRAY_SIZE 10
int main(void) {
int ary[ARRAY_SIZE]; /* サイズが ARRAY_SIZE は整数型変数の配列 */
/* 整数配列 */
int i; /* 配列は、for 文相性がよく、添字で参照 */
/* ary[i] = i*i となるように初期化 */
for ( i = 0; i < ARRAY_SIZE; i++ ) {
ary[i] = i*i;
}
/* この結果、ary[] は、i=0 〜 9 の時に関数 f(x)=x^2 と同じ振舞をする*/
/* 出力 */
printf ( "添字 値\n" );
for ( i = 0; i < ARRAY_SIZE; i++ ) {
printf ( "%d %d\n", i, ary[i] );
}
return 0;
}
#include <stdio.h>
#define ARRAY_SIZE 10
int main(void) {
int ary[ARRAY_SIZE]; /* サイズが ARRAY_SIZE は整数型変数の配列 */
/* 整数配列 */
int i; /* 配列は、for 文相性がよく、添字で参照 */
/* ary[i] = i*i となるように初期化 */
for ( i = 0; i < ARRAY_SIZE; i++ ) {
ary[i] = i*i;
}
/* この結果、ary[] は、i=0 〜 9 の時に関数 f(x)=x^2 と同じ振舞をする*/
/* 出力 */
printf ( "添字 値\n" );
for ( i = 0; i < ARRAY_SIZE; i++ ) {
printf ( "%d %d\n", i, ary[i] );
}
/* 配列名に * をつけると .. 配列の先頭の要素を「表現」する */
/* 「要素」=「配列は、変数の集まりで、その要素なので、変数 */
/* 実質 *ary は ary[0] と同じ意味 */
printf ( "*ary = %d\n", *ary );
/* cf 文字列に * をつけると、先頭の文字が取り出せた */
printf ( "*\"abc\" = %c, \"abc\"[0] =%c\n", *"abc", "abc"[0] );
/* *ary == *(ary + 0) == ary[0] */
/* *(ary + 1) == ary[1] */
/* *(ary + i) == ary[i] */
printf ( "添字 値[添字] 間接参照\n" );
for ( i = 0; i < ARRAY_SIZE; i++ ) {
printf ( "%d %d %d\n", i, ary[i], *(ary+i) );
}
return 0;
}
#include <stdio.h>
#define ARRAY_SIZE 10
int main(void) {
int ary[ARRAY_SIZE]; /* サイズが ARRAY_SIZE は整数型変数の配列 */
/* 整数配列 */
int i; /* 配列は、for 文相性がよく、添字で参照 */
/* ary[i] = i*i となるように初期化 */
for ( i = 0; i < ARRAY_SIZE; i++ ) {
ary[i] = i*i;
}
/* ary(x) = x^2 */
/* この結果、ary[] は、i=0 〜 9 の時に関数 f(x)=x^2 と同じ振舞をする*/
/* 出力 */
printf ( "添字 値\n" );
for ( i = 0; i < ARRAY_SIZE; i++ ) {
printf ( "%d %d\n", i, ary[i] );
}
/* 配列名に * をつけると .. 配列の先頭の要素を「表現」する */
/* 「要素」=「配列は、変数の集まりで、その要素なので、変数 */
/* 実質 *ary は ary[0] と同じ意味 */
printf ( "*ary = %d\n", *ary );
/* cf 文字列に * をつけると、先頭の文字が取り出せた */
printf ( "*\"abc\" = %c, \"abc\"[0] =%c\n", *"abc", "abc"[0] );
/* *ary == *(ary + 0) == ary[0] */
/* *(ary + 1) == ary[1] */
/* *(ary + i) == ary[i] */
printf ( "添字 値[添字] 間接参照\n" );
for ( i = 0; i < ARRAY_SIZE; i++ ) {
printf ( "%d %d %d\n", i, ary[i], *(ary+i) );
}
/*
*/
ary[5] = 5 * 5 * 5; /* わざと違う値に.. */
printf ( "添字 値[添字] 間接参照\n" );
for ( i = 0; i < ARRAY_SIZE; i++ ) {
printf ( "%d %d %d\n", i, ary[i], *(ary+i) );
}
/*
*/
*(ary+5) = 5 * 5; /* ary[5] = 5 * 5 と同じ (元に戻す) */
printf ( "添字 値[添字] 間接参照\n" );
for ( i = 0; i < ARRAY_SIZE; i++ ) {
printf ( "%d %d %d\n", i, ary[i], *(ary+i) );
}
/*
*/
printf ( "%d\n", 5[ary] );
/* 5[ary] == *(5+ary) = *(ary+5) == ary[5] */
printf ( "%c\n", 2["abcdefg"] );
/*
*/
return 0;
}
#include <stdio.h>
#define ARRAY_SIZE 10
void print_ary(int ary[ARRAY_SIZE]) {
int i; /*添字の変数は main のそれとは無関係なので関数内で宣言*/
/* 出力 */
printf ( "添字 値\n" );
for ( i = 0; i < ARRAY_SIZE; i++ ) {
printf ( "%d %d\n", i, ary[i] );
}
}
int main(void) {
int ary[ARRAY_SIZE]; /* サイズが ARRAY_SIZE は整数型変数の配列 */
/* 整数配列 */
int i; /* 配列は、for 文相性がよく、添字で参照 */
/* ary[i] = i*i となるように初期化 */
for ( i = 0; i < ARRAY_SIZE; i++ ) {
ary[i] = i*i;
}
print_ary ( ary ); /* 引数 ary, ary[] ary[ARRAY_SIZE] */
/*
「配列」を利用する関数を作る場合
仮引数の宣言は、「とりあえず」共有する配列と同じ表現が使える
実引数は、「配列名」を指定する
「配列名」は、* をつけると、「変数」変る「値」
「値」は、関数に渡したり、関数の値にできる
*/
return 0;
}
#include <stdio.h>
#define ARRAY_SIZE_1 10
#define ARRAY_SIZE_2 20
void print_ary(int ary[], int size) {
int i; /*添字の変数は main のそれとは無関係なので関数内で宣言*/
/* 出力 */
printf ( "添字 値\n" );
for ( i = 0; i < size; i++ ) {
printf ( "%d %d\n", i, ary[i] );
}
}
int main(void) {
int ary1[ARRAY_SIZE_1]; /* サイズが ARRAY_SIZE は整数型変数の配列 */
/* 整数配列 */
int ary2[ARRAY_SIZE_2]; /* サイズが ARRAY_SIZE は整数型変数の配列 */
/* 整数配列 */
int i; /* 配列は、for 文相性がよく、添字で参照 */
/* ary[i] = i*i となるように初期化 */
for ( i = 0; i < ARRAY_SIZE_1; i++ ) {
ary1[i] = i*i;
}
for ( i = 0; i < ARRAY_SIZE_2; i++ ) {
ary2[i] = i*i*i;
}
print_ary ( ary1, ARRAY_SIZE_1 ); /* 引数 ary, ary[] ary[ARRAY_SIZE] */
print_ary ( ary2, ARRAY_SIZE_2 );
/*
配列を関数と共有するには、
配列名と、配列のサイズを別に渡す必要がある
*/
print_ary ( ary2, ARRAY_SIZE_1 );
/*
「配列」を利用する関数を作る場合
仮引数の宣言は、「とりあえず」共有する配列と同じ表現が使える
実引数は、「配列名」を指定する
「配列名」は、* をつけると、「変数」に変る「値」
「値」は、関数に渡したり、関数の値にできる
*/
return 0;
}
#include <stdio.h>
typedef struct {
int x;
int y;
int z;
} Pint3D;
void print3D ( Point3D pt ) {
printf ( "(%d, %d, %d)", pt.x, pt.y, pt.z );
}
int main(void)
{
Point3D p1;
p1.x = 1;
p1.y = 2;
p1.z = 3;
print3D ( pt );
}
#include <stdio.h>
/*
10 個の整数値を入力して、その総和を求める
この時、main 関数で、この数値を配列に保存し、
関数をつかって、この数値の総和を求める
*/
#define DATA_SIZE 10
int isum ( int ary[], int size ) {
int i;
int sum = 0; /* 総和の結果を保存 */
for ( i = 0; i < size; i++ ) { /* i++ <-> i = i + 1 */
sum = sum + ary[i]; /* sum += ary[i] */
/* 引数 (ary) 値を利用して、配列の要素の値を参照 */
}
return sum;
}
int main(void) {
int data[DATA_SIZE]; /* 入力するデータ値を保存する配列 */
int i;
/* データの入力 */
for ( i = 0; i < DATA_SIZE; i++ ) {
printf ( "第 %d 番目の数値を入力してください : ", i + 1 );
scanf ( "%d", &data[i] );
}
printf ( "全体の総和は %d です\n", isum ( data, DATA_SIZE ) );
return 0;
}
#include <stdio.h>
/*
10 個の整数値を入力して、その総和を求める
この時、main 関数で、この数値を配列に保存し、
関数をつかって、この数値の総和を求める
*/
#define DATA_SIZE 10
int isum ( int ary[], int size ) {
int i;
int sum = 0; /* 総和の結果を保存 */
for ( i = 0; i < size; i++ ) { /* i++ <-> i = i + 1 */
sum = sum + ary[i]; /* sum += ary[i] */
/* 引数 (ary) 値を利用して、配列の要素の値を参照 */
}
return sum;
}
void input_array ( int ary[], int size ) {
int i;
for ( i = 0; i < size; i++ ) {
printf ( "第 %d 番目の数値を入力してください : ", i + 1 );
scanf ( "%d", &ary[i] );
/* 引数 (ary) 値を利用して、配列の要素そのものを参照 */
}
}
int main(void) {
int data[DATA_SIZE]; /* 入力するデータ値を保存する配列 */
int i;
/* データの入力 */
input_array ( data, DATA_SIZE );
/*
関数の中で、main の変数の内容を書き換える事ができてしまう
*/
printf ( "全体の総和は %d です\n", isum ( data, DATA_SIZE ) );
return 0;
}
#include <stdio.h>
typedef struct {
int x;
int y;
int z;
} Point3D;
void print3D ( Point3D pt ) {
printf ( "(%d, %d, %d)\n", pt.x, pt.y, pt.z );
}
void scan3D ( Point3D pt ) {
scanf ( "%d", &pt.x );
scanf ( "%d", &pt.y );
scanf ( "%d", &pt.z );
printf ( "scan3D\n" );
print3D ( pt );
}
int main(void)
{
Point3D pt;
pt.x = 1;
pt.y = 2;
pt.z = 3;
printf ( "main 1:\n" );
print3D ( pt );
printf ( "main 2:\n" );
scan3D ( pt );
printf ( "main 3:\n" );
print3D ( pt );
return 0;
}
#include <stdio.h>
void set_simple ( int v ) {
printf ( "元の値 : %d\n", v );
v = 1111; /* 値を変更 */
printf ( "変更後 : %d\n", v );
}
void set_one_array ( int v[] ) {
printf ( "元の値 : %d\n", v[0] );
v[0] = 2222; /* 値を変更 */
printf ( "変更後 : %d\n", v[0] );
}
int main(void) {
int i;
int a[1];
i = 1;
printf ( "呼ぶ前 %d\n", i );
set_simple ( i );
printf ( "呼んだ後 %d\n", i );
a[0] = 2;
printf ( "呼ぶ前 %d\n", a[0] );
set_one_array ( a );
printf ( "呼んだ後 %d\n", a[0] );
return 0;
}
#include <stdio.h>
/*
* 一つの配列の内容を、他の配列に複写する
*/
void array_copy ( int dst[], int src[], int size ) {
int i;
for ( i = 0; i < size; i++ ) {
dst[i] = src[i];
}
}
typedef struct {
int arry[10];
} Ary10;
int main(void)
{
Ary10 a;
Ary10 b;
int A[10];
int B[10];
a = b;
for ( i = 0; i < 10; i++ ) {
A[i] = B[i];
}
}
#include <stdio.h>
/*
文字配列と文字列
文字配列=「文字型の『変数』の集まり」
文字列=「文字の並びで、最期にEOS('\0')」
*/
int main(void) {
printf ( "abc\n" );
printf ( "AAA%sBBB\n", "abc" );
return 0;
}
#include <stdio.h>
/*
文字配列と文字列
文字配列=「文字型の『変数』の集まり」
文字列=「文字の並びで、最期にEOS('\0')」
*/
#define EOS '\0'
int main(void) {
char abc[4];
abc[0] = 'a';
abc[1] = 'b';
abc[2] = 'c';
abc[3] = EOS; /* abc <- { 'a', 'b', 'c', '\0' } */
printf ( "AAA%sBBB\n", abc );
printf ( "AAA%sBBB\n", "abc" );
/*
文字配列を利用して、文字列操作が可能になる
*/
abc[1] = 'B';
printf ( "AAA%sBBB\n", abc );
abc[1] = EOS;
printf ( "AAA%sBBB\n", abc );
abc[1] = 'X';
abc[2] = EOS;
printf ( "AAA%sBBB\n", abc );
return 0;
}
課題プログラム内の「/*名前:ここ*/」の部分を書き換え「/*この部分を完成させなさい*/」の部分にプログラムを追加して、プログラムを完成させます。
なお「名前(P,Q,R,..)」の部分が同じ所には同じものが入ります。
Download : 20151030-01.c ( SJIS 版 )
/*
* 課題 20151023-01
*
* 2015/10/23 20151023-01-QQQQ.c
*
* 浮動小数点数の配列の要素内の数値の総和を求める。
*/
#include <stdio.h>
/*
* 浮動小数点数の配列の要素内の数値の総和を求める。
*
* 利用方法
* コンパイル
* cc -o BASENAME.exe 20151023-01-QQQQ.c
* 実行
* ./BASENAME.exe
*/
#include <stdio.h>
/*
* double dsum ( double ary[], int size )
* 浮動小数点数の配列の要素内の数値の総和を求める関数
* double ary[]; 総和を求める要素を含む配列
* int size; 配列のサイズ
*/
double dsum ( double ary[], int size ) {
double sum = 0.0; /* 総和は最初は 0 */
int i; /* 配列の要素を参照する添字変数 */
for ( i = 0; i < size; i++ ) { /* i = 0 〜 sum - 1 の間.. */
/*
** この部分を完成させなさい
*/
/* 「sum += ary[i]」とも書きける */
}
return sum; /* 結果を返す */
}
/*
* main
*/
#define ARY_SIZE 5
int main( int argc, char *argv[] )
{
double data[ARY_SIZE]; /* 大きさ ARY_SIZE の配列の宣言 */
int i; /* 配列の要素を参照する添字変数 */
double sum; /* 総和の計算結果を保持する */
printf ( "%d 個のデータを入力します。\n", ARY_SIZE );
for ( i = 0; i < ARY_SIZE; i++ ) {
printf ( "%d 番目の数値を入力してください : ", i + 1 );
/*
** この部分を完成させなさい
*/
}
sum = dsum ( data, ARY_SIZE );
printf ( "入力されたデータの総和は %f です。\n", sum );
return 0;
}
2.3 9.1 5.9 2.7 3.2
$ ./20151030-01-QQQQ.exe 5 個のデータを入力します。 1 番目の数値を入力してください : 2.300000 2 番目の数値を入力してください : 9.100000 3 番目の数値を入力してください : 5.900000 4 番目の数値を入力してください : 2.700000 5 番目の数値を入力してください : 3.200000 入力されたデータの総和は 23.200000 です。 $
Download : 20151030-02.c ( SJIS 版 )
/*
* 課題 20151023-02
*
* 20151023 20151023-02-QQQQ.c
*
* 文字列の途中に文字を挿入する
*
* 利用方法
* コンパイル
* cc -o BASENAME.exe 20151023-02-QQQQ.c
* 実行
* ./BASENAME.exe
*/
#include <stdio.h>
/*
*
*/
/*
* main
*
*/
#define CSIZE 10
#define EOS '\0'
int main( int argc, char *argv[] )
{
char cary[CSIZE] = { 'a', 'b', 'c', 'd', 'e', EOS };
/*
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
cary|'a'|'b'|'c'|'d'|'e'|EOS| ? | ? | ? | ? |
*/
int i;
int l;
printf ( "最初の cary = %s\n", cary );
/*
文字列 "abcde" の入った文字配列 cary の
3 文字目 ('c') と 4 文字目 'd' の間に、一文字 'X' を入れる
*/
/* 文字列の長さを求める */
/*
** この部分を完成させなさい
*/
/* cary の中の文字列の長さは、変数 l に入る */
for ( i = l; 3 <= i; i-- ) { /* 後ろからコピーする必要がある */
/*
** この部分を完成させなさい
*/
}
cary[3] = 'X'; /* 空けた場所に 'X' を入れる */
/*
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
cary|'a'|'b'|'c'|'d'|'e'|EOS| ? | ? | ? | ? |
| | | \ \ \
cary|'a'|'b'|'c'|'X'|'d'|'e'|EOS| ? | ? | ? | ? |
*/
printf ( "'X' を挿入した結果 : %s\n", cary );
return 0;
}
123 987 456
$ ./20151030-02-QQQQ.exe 最初の cary = abcde 'X' を挿入した結果 : abcXde $