当日のOHP資料です。
Download : sample-001.c ( SJIS 版 )
/*
* 2011/11/18 sample-001.c
*/
/*
*
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
*
*/
void print_a ( int a0, int a1, int a2 ) {
/*
f.a0 +----+
| 0 | <- m.a0 の値が copy
f.a1 +----+
| 1 | <- m.a1 の値が copy
f.a2 +----+
| 2 | <- m.a2 の値が copy
+----+
main の a1 (m.a1) と print_a の a1(f.a1) は
別の物
*/
/* a0 */
s_print_string ( "a0=" );
s_print_int ( a0 ); // f.a0 の値だが m.a0 と同じ 0 が表示
s_print_newline();
/* a1 */
s_print_string ( "a1=" );
s_print_int ( a1 );
s_print_newline();
/* a2 */
s_print_string ( "a2=" );
s_print_int ( a2 );
s_print_newline();
}
/*
*
*/
int main ( void ) {
int a0 = 0;
/* int ( 4byte)
a0 +----+
+ 0 +
+----+ */
int a1 = 1;
/* a1 +----+
+ 1 +
+----+ */
int a2 = 2;
/* a2 +----+
+ 2 +
+----+ */
print_a ( a0, a1, a2 );
/*
f.a0 +----+
| 0 | <- m.a0 の値が copy
f.a1 +----+
| 1 | <- m.a1 の値が copy
f.a2 +----+
| 2 | <- m.a2 の値が copy
+----+
*/
return 0;
}
/*
*
*/
C:\usr\c\> sample-001 a0=0 a1=1 a2=2 C:\usr\c\>
Download : sample-002.c ( SJIS 版 )
/*
* 2011/11/18 sample-002.c
*/
/*
*
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
*
*/
void print_a ( int a0, int a1, int a2 ) {
/*
f.a0 +----+
| 0 | <- m.a0 の値が copy
f.a1 +----+
| 1 | <- m.a1 の値が copy
f.a2 +----+
| 2 | <- m.a2 の値が copy
+----+
*/
int *pa = &a0;
/*
int *
pa +----+ int
| +---->f.a0 +----+
+----+ | 0 | <- m.a0 の値が copy
pa+1 ----> f.a1 +----+
| 1 | <- m.a1 の値が copy
pa+2 ---> f.a2 +----+
| 2 | <- m.a2 の値が copy
+----+
*/
int i;
for ( i = 0; i < 3; i++ ) {
s_print_string ( "a" );
s_print_int ( i );
s_print_string ( "=" );
s_print_int ( pa[i] );
/*
pa[i] == *(pa + i)
pa + i == pa の番地から 同じ型の変数の
サイズ i 個先
cf.
pa + 0 == 0 個先なので pa と同じ &a0
pa + 1 == 1 個先なので &a1 と同じ
pa + 2 == 2 個先なので &a2 と同じ
pa[0] == *(pa + 0) == *(&a0) == a0
pa[1] == *(pa + 1) == *(&a1) == a1
pa[2] == *(pa + 2) == *(&a2) == a2
*/
s_print_newline();
}
}
/*
*
*/
int main ( void ) {
int a0 = 0;
int a1 = 1;
int a2 = 2;
print_a ( a0, a1, a2 );
return 0;
}
/*
*
*/
C:\usr\c\> sample-002 a0=0 a1=1 a2=2 C:\usr\c\>
Download : sample-003.c ( SJIS 版 )
/*
* 2011/11/18 sample-003.c
*/
/*
*
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
*
*/
void print_a ( int pa[] ) { /* int *pa と書いてもよい */
int i;
for ( i = 0; i < 3; i++ ) {
s_print_string ( "a" );
s_print_int ( i );
s_print_string ( "=" );
s_print_int ( pa[i] );
s_print_newline();
}
}
/*
*
*/
int main ( void ) {
int aa[3] = { 0, 1, 2 }; /* 配列の初期化 */
/*
int aa[3];
'=, int aa[0], int aa[1], int aa[2];
int
aa, aa[0] +---+
| 0 |
aa[1] +---+
| 1 |
aa[2] +---+
| 2 |
+---+
cf.
int a0, a1, a2;
int
a0 +---+
| 0 |
a1 +---+
| 1 |
a2 +---+
| 2 |
+---+
aa[3] = { 0, 1, 2 };
aa[0] = 0;
aa[1] = 1;
aa[2] = 2;
// この配列のまとめ代入は初期化の時しか使えない
*/
/*
途中で
aa = { 3, 4, 5};
などとはできない。
*/
print_a ( aa ); /* 配列名のみ */
/*
int[] == int *
pa +----+
| *----> aa aa[0] +----+
+----+ | 0 |
+----+
aa という配列名が、&aa[0] の値を持つ
print_a ( aa ); の代わりに print_a ( &aa[0] ); としてもよい
&aa[0] == &(aa[0])== &(*(aa+0)) = &(*aa) = (&*)aa == aa
cf. *(&a) == a ( 任意の変数で成立 )
&(*a) == a ( a がポインターの時に成立 )
*/
/*
もし、
print_a ( aa[0], aa[1], aa[2] );
としたら、前と同じ ( 配列としての旨味はない )
*/
return 0;
}
/*
*
*/
C:\usr\c\> sample-003 a0=0 a1=1 a2=2 C:\usr\c\>
Download : sample-004.c ( SJIS 版 )
/*
* 2011/11/18 sample-004.c
*/
/*
*
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
*
*/
int main ( void ) {
int a0;
int a1;
int a2;
a0 = 0;
a1 = 1;
a2 = a0 - a1;
s_print_string ( "a2 = " );
s_print_int ( a2 );
s_print_newline();
return 0;
}
/*
*
*/
C:\usr\c\> sample-004 a2 = -1 C:\usr\c\>
Download : sample-005.c ( SJIS 版 )
/*
* 2011/11/18 sample-005.c
*/
/*
*
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
*
*/
int main ( void ) {
int a[3];
a[0] = 0;
a[1] = 1;
a[2] = a[0] - a[1];
s_print_string ( "a[2] = " );
s_print_int ( a[2] );
s_print_newline();
/*
* sizeof
*/
s_print_string ( "sizeof int = " );
s_print_int ( sizeof(int) );
s_print_newline();
s_print_string ( "sizeof a = " );
s_print_int ( sizeof(a) );
s_print_newline();
return 0;
}
/*
*
*/
C:\usr\c\> sample-005 a[2] = -1 sizeof int = 4 sizeof a = 12 C:\usr\c\>
Download : sample-006.c ( SJIS 版 )
/*
* 2011/11/18 sample-006.c
*/
/*
*
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
*
*/
int main ( void ) {
int a[3];
int i;
for ( i = 0; i < 3; i++ ) {
/*
for ( i = 1; i <= 3; i++ ) {
*/
a[2-i] = i;
/*
a[2-i] == *(a + (2-i)) == *(a+2 -i)
*/
}
for ( i = 0; i < 3; i++ ) {
s_print_string ( "a[" );
s_print_int ( i );
s_print_string ( "]=" );
s_print_int ( a[i] );
s_print_newline();
}
return 0;
}
/*
*
*/
C:\usr\c\> sample-006 a[0]=2 a[1]=1 a[2]=0 C:\usr\c\>
Download : sample-007.c ( SJIS 版 )
/*
* 2011/11/18 sample-007.c
*/
/*
*
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
*
*/
#define ARRAY_SIZE 3
/*
*
*/
void print_a ( int pa[] ) {
int i;
for ( i = 0; i < ARRAY_SIZE; i++ ) { /* 配列のサイズは解らないで 3 で試すと.. */
s_print_string ( "a" );
s_print_int ( i );
s_print_string ( "=" );
s_print_int ( pa[i] );
s_print_newline();
}
}
/*
*
*/
int main ( void ) {
int dummy01 = -1000;
int aa[2] = { 10, 20 }; /* 配列の初期化/サイズは 2 */
int dummy02 = -2000;
/*
dummy01 +------+
|-1000 |
aa aa[0]+------+ <- aa = &aa[0]
| 10 |
aa[1]+------+
| 20 |
dummy02 +------+ <= aa[2]
|-2000 |
+------+
*/
print_a ( aa ); /* 配列名のみ */
return 0;
}
/*
*
*/
C:\usr\c\> sample-007 a0=10 a1=20 a2=-2000 C:\usr\c\>
Download : sample-008.c ( SJIS 版 )
/*
* 2011/11/18 sample-008.c
*/
/*
*
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
*
*/
#define ARRAY_SIZE 3
/*
*
*/
void print_a ( int pa[] ) {
int i;
for ( i = 0; i < ARRAY_SIZE; i++ ) { /* 定数を利用する */
s_print_string ( "a" );
s_print_int ( i );
s_print_string ( "=" );
s_print_int ( pa[i] );
s_print_newline();
}
}
/*
*
*/
int main ( void ) {
int aa[ARRAY_SIZE] = { 1, 20, 300 };
print_a ( aa ); /* 配列名のみ */
return 0;
}
/*
*
*/
C:\usr\c\> sample-008 a0=1 a1=20 a2=300 C:\usr\c\>
Download : sample-009.c ( SJIS 版 )
/*
* 2011/11/18 sample-009.c
*/
/*
*
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
*
*/
#define ARRAY_SIZE 3
typedef int int3D[ARRAY_SIZE]; /* 配列のサイズが記録される */
/*
*
*/
void print_a ( int3D pa ) {
int i;
for ( i = 0; i < sizeof(int3D)/sizeof(int); i++ ) {
s_print_string ( "a" );
s_print_int ( i );
s_print_string ( "=" );
s_print_int ( pa[i] );
s_print_newline();
}
}
/*
*
*/
int main ( void ) {
int3D aa = { 1, 20, 300 }; /* int3D 型の変数 */
print_a ( aa );
return 0;
}
/*
*
*/
C:\usr\c\> sample-009 a0=1 a1=20 a2=300 C:\usr\c\>
Download : sample-010.c ( SJIS 版 )
/*
* 2011/11/18 sample-010.c
*/
/*
*
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
*
*/
#define ARRAY_SIZE 3
/*
*
*/
void print_a ( int pa[], int size ) {
int i;
for ( i = 0; i < size; i++ ) {
s_print_string ( "a" );
s_print_int ( i );
s_print_string ( "=" );
s_print_int ( pa[i] );
s_print_newline();
}
}
/*
*
*/
int main ( void ) {
int aa[ARRAY_SIZE] = { 1, 20, 300 }; /* int3D 型の変数 */
print_a ( aa, ARRAY_SIZE );
return 0;
}
/*
*
*/
C:\usr\c\> sample-010 a0=1 a1=20 a2=300 C:\usr\c\>
Download : sample-011.c ( SJIS 版 )
/*
* 2011/11/18 sample-010.c
*/
/*
*
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
*
*/
void print_a ( int pa[], int size ) {
int i;
for ( i = 0; i < size; i++ ) { /* 配列のサイズを引数で別に指定する */
s_print_string ( "a" );
s_print_int ( i );
s_print_string ( "=" );
s_print_int ( pa[i] );
s_print_newline();
}
}
/*
*
*/
int main ( void ) {
int aa1[2] = { 10, 20 };
int aa2[4] = { 100, 200, 300, 400 };
s_print_string ( "aa1[2]\n" );
print_a ( aa1, 2 );
s_print_string ( "aa2[4]\n" );
print_a ( aa2, 4 );
s_print_string ( "aa2[3]\n" );
print_a ( aa2, 3 );
s_print_string ( "aa2[3]\n" );
print_a ( aa2 + 1, 2 );
/* aa2 はポインター値なので計算もできる */
/* aa2 + 1 = &aa2[1] .. 二つめの要素から二つ表示 */
/*
pa == &aa2[1]
pa[0] = *(pa+0) = *( &aa2[1] + 0 ) = *&(aa2[1]) = aa2[1]
pa[1] = *(pa+1) = *( &aa2[1] + 1 ) = *&(*(aa2+1+1)) = aa2[2]
*/
return 0;
}
/*
*
*/
C:\usr\c\> sample-011 aa1[2] a0=10 a1=20 aa2[4] a0=100 a1=200 a2=300 a3=400 aa2[3] a0=100 a1=200 a2=300 aa2[3] a0=200 a1=300 C:\usr\c\>
Download : 20111118-01.c ( SJIS 版 )
/*
* 20111118-1-QQQQ.c
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
* 5 個の整数値をキーボードから入力し、それを逆順に出す
*/
#define DATA_SIZE 5
/*
*
*/
int main ( void ) {
int data[ DATA_SIZE ]; /* int 型, サイズ 5 の配列 data を宣言 */
int i;
for ( i = 0; i < DATA_SIZE; i++ ) {
s_print_int ( i );
s_print_string ( "番目の数値 = " );
data[i] = s_input_int();
}
/*
** 入力されたデータを逆順に出力
*/
for ( i = 0; i < DATA_SIZE; i++ ) {
s_print_int ( i );
s_print_string ( "番目の数値 = " );
/*
** この部分を完成させなさい
*/
s_print_newline();
}
return 0;
}
/*
*
*/
100 3 84 90 123
C:\usr\c\> 01< 01.in 0番目の数値 = 100 1番目の数値 = 3 2番目の数値 = 84 3番目の数値 = 90 4番目の数値 = 123 0番目の数値 = 123 1番目の数値 = 90 2番目の数値 = 84 3番目の数値 = 3 4番目の数値 = 100 C:\usr\c\>
Download : 20111118-02.c ( SJIS 版 )
/*
* 20111118-2-QQQQ.c
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
* 配列の n 個の要素の総和を求める
* sum_n
*/
int sum_n ( int array[], int size ) {
int sum = 0;
int i;
for ( i = 0; i < size; i++ ) {
/*
** この部分を完成させなさい
*/
}
return sum;
}
#define DATA_SIZE 5
/*
*
*/
int main ( void ) {
int data[ DATA_SIZE ]; /* int 型, サイズ 5 の配列 data を宣言 */
for ( i = 0; i < DATA_SIZE; i++ ) {
s_print_int ( i );
s_print_string ( "番目の数値 = " );
data[i] = s_input_int();
}
s_print_string ( "0 〜 4 までの総和 = " );
s_print_int ( sum_n ( data, 5 ) );
s_print_newline();
s_print_string ( "1 〜 3 までの総和 = " );
/*
** この部分を完成させなさい
*/
s_print_newline();
return 0;
}
/*
*
*/
100 3 84 90 123
C:\usr\c\> 02< 02.in 0番目の数値 = 100 1番目の数値 = 3 2番目の数値 = 84 3番目の数値 = 90 4番目の数値 = 123 0 〜 4 までの総和 = 400 1 〜 3 までの総和 = 177 C:\usr\c\>