配列
code:c
int main(void){
// Your code here!
//配列の使い方
//宣言と初期化方法
//型名 配列名要素数={0番の数値,1番の数値,2番の数値,・・・}; //変数宣言
int i; //ループ用変数
int a5 = {1,2,3}; //配列の宣言と初期化処理 //配列の要素数よりも少ない場合、残りにはすべて0が代入される。
for(i=0;i<5;i++){ //5回ループ
printf("a%d=%d\n",i,ai); //aの配列の値を出力 }
//配列は宣言の時以外で、1度に複数の値を代入することはできない。
//下記bを有効にすると、エラーになる。
//宣言の時の要素数の省略
int c[]={4,5,6}; //宣言の時に要素数を省略できる。
for(i=0;i<=2;i++){ //3回ループ
printf("c%d=%d\n",i,ci); //aの配列の値を出力 }
}
平均
要素数の求め方
code:c
int main(void){
// Your code here!
//要素数を求める。
//変数の宣言
int a[] = {7,8,9}; //配列を宣言
int i; //ループ用変数
//sizeof:データ型の大きさを求める単項の演算子
int b = sizeof(a); //配列a(全ての合計)のデータの大きさを求める。
int c = sizeof(a0); //配列1個当たり(a0)のデータの大きさを求める。 int d = b/c; //配列の要素数を求める。
//int は4byte
printf("配列a(全ての合計)のデータの大きさ:%d\n",b);
printf("配列1個当たり(a0)のデータの大きさ:%d\n",c); printf("配列aの要素数:%d個\n",d);
for(i=0;i<d;i++){ //要素数の数だけループする。
printf("a%d=%d\n",i,ai); //配列aの値を列挙する。 }
}
参考:
要素数を出す関数の作成
code:c
//#defieで配列の要素数を設定する関数の作成
#define elc(num) sizeof(num)/sizeof(num0) int main(void){
// Your code here!
//要素数を求める。
//変数の宣言
int a[] = {7,8,9}; //配列を宣言
int i; //ループ用変数
//sizeof:データ型の大きさを求める単項の演算子
int b = sizeof(a); //配列a(全ての合計)のデータの大きさを求める。
int c = sizeof(a0); //配列1個当たり(a0)のデータの大きさを求める。 int d = b/c; //配列の要素数を求める。
int e = elc(a);
printf("配列a(全ての合計)のデータの大きさ:%d\n",b);
printf("配列1個当たり(a0)のデータの大きさ:%d\n",c); printf("配列aの要素数(通常):%d個\n",d); //計算結果
printf("配列aの要素数(関数):%d個\n",e); //elc関数の出力
for(i=0;i<d;i++){ //要素数の数だけループする。
printf("a%d=%d\n",i,ai); //配列aの値を列挙する。 }
}
2重配列の確認
code:c
int main(void){
// Your code here!
//変数の宣言
int i,j;
//宣言方法: 型 変数名要素数1要素数2 = {"要素1","要素2",・・・} //文字列の場合 char a35 = {"12345","TEST2","TEST3"}; char b37 = {"12345","TEST2","TEST3"}; //宣言方法: 型 変数名要素数1要素数2 = {{要素1_1,要素1_2,・・・},{要素2_1,要素2_2・・・},・・・} //数値の場合
int c24 = {{1,2,3,4},{5,6,7,8}}; //sizeof:データ型の大きさを求める単項の演算子
int size_a = sizeof(a); //配列a(全ての合計)のデータの大きさを求める。
int size_a0 = sizeof(a0); //配列1個当たり(a0)のデータの大きさを求める。 int size_num = size_a/size_a0; //配列の要素数を求める。
printf("配列a(全ての合計)のデータの大きさ:%d\n",size_a);
printf("配列1個当たり(a0)のデータの大きさ:%d\n",size_a0); printf("配列aの要素数:%d個\n",size_num);
size_a = sizeof(b); //配列b(全ての合計)のデータの大きさを求める。
size_a0 = sizeof(b0); //配列1個当たり(b0)のデータの大きさを求める。 size_num = size_a/size_a0; //配列の要素数を求める。
printf("配列b(全ての合計)のデータの大きさ:%d\n",size_a);
printf("配列1個当たり(b0)のデータの大きさ:%d\n",size_a0); printf("配列bの要素数:%d個\n",size_num);
for(i=0;i<3;i++){
//文字列(char型配列)の末尾には、NULL文字'\0'があるため、データの大きさが5だと足りていない。
printf("a%d=%s\n",i,ai); //配列aの値を出力 //printf("a%d=%s\n",i,ai0); //これはエラー printf("b%d=%s\n",i,bi); //配列bの値を出力 #if 1 //printfが見にくかったら0に変更 for(j=0;j<6;j++){
printf("a%d%d=%c\n",i,j,aij); //配列aのi1番目の文字を出力 printf("b%d%d=%c\n",i,j,bij); //配列aのi1番目の文字を出力 //printf("a%d%d=%c\n",i,j,ai5); //配列aのi1番目の文字を出力 }
}
//printf("c=%d\n",c); //これはエラー
printf("c=%d\n\n",c00); //00の場所:1を出力 for(i=0;i<2;i++){
for(j=0;j<4;j++){
printf("c%d%d=%d\n",i,j,cij); //00の場所:1を出力 }
}
}
2重配列の確認、要素の省略
code:c
int main(void){
// Your code here!
//要素数を求める。
//変数の宣言
//char a[] = "TEST"; //配列を宣言 1次元確認用
// char a[][] = {"TEST1","TEST2","TEST3"}; //これはエラーになる。
char a[]5 = {"TEST1","TEST2","TEST3"}; char b[]6 = {"TEST1","TEST2","TEST3"}; //sizeof:データ型の大きさを求める単項の演算子
int size_a = sizeof(a); //配列a(全ての合計)のデータの大きさを求める。
int size_a0 = sizeof(a0); //配列1個当たり(a0)のデータの大きさを求める。 int size_num = size_a/size_a0; //配列の要素数を求める。
printf("配列a(全ての合計)のデータの大きさ:%d\n",size_a);
printf("配列1個当たり(a0)のデータの大きさ:%d\n",size_a0); printf("配列aの要素数:%d個\n",size_num);
size_a = sizeof(b); //配列b(全ての合計)のデータの大きさを求める。
size_a0 = sizeof(b0); //配列1個当たり(a0)のデータの大きさを求める。 size_num = size_a/size_a0; //配列の要素数を求める。
printf("配列b(全ての合計)のデータの大きさ:%d\n",size_a);
printf("配列1個当たり(b0)のデータの大きさ:%d\n",size_a0); printf("配列bの要素数:%d個\n",size_num);
printf("a=%s\n",a); //配列aの値を出力
printf("b=%s\n",b); //配列bの値を出力
// printf("x=%s",x);
}
参考:
配列の要素数は、ポインタを使って引き渡すので、求められない。
code:c
//要素数を出力する関数
int Elm1(int *num);
int main(void){
// Your code here!
//要素数を求める。
//変数の宣言
//char a[] = "TEST"; //配列を宣言
int a[] = {2,4,5};
//char x[]6 = {"TEST1","TEST2","TEST3"}; int i;
printf("num=%d\n",a0); //配列aの値を列挙する。 Elm1(a);
//sizeof:データ型の大きさを求める単項の演算子
int b = sizeof(a); //配列a(全ての合計)のデータの大きさを求める。
int c = sizeof(a0); //配列1個当たり(a0)のデータの大きさを求める。 int d = b/c; //配列の要素数を求める。
printf("\n"); //改行
printf("配列a(全ての合計)のデータの大きさ:%d\n",b);
printf("配列1個当たり(a0)のデータの大きさ:%d\n",c); printf("配列aの要素数:%d個\n",d);
//printf("a=%s\n",a); //配列aの値を列挙する。
}
//要素数を出力する関数
int Elm1(int *num){
int numsizeall;
int numsizeone;
int numelm;
numsizeall = sizeof(num);
numsizeone = sizeof(num0); numelm = numsizeall/numsizeone;
printf("関数Elm1の出力:num=%d\n",num0); //配列aの値を列挙する。 printf("配列a(全ての合計)のデータの大きさ:%d\n",numsizeall);
printf("配列1個当たり(a0)のデータの大きさ:%d\n",numsizeone); printf("配列aの要素数:%d個\n",numelm);
}
2重配列へのアクセス確認
code:c
//最後尾に1要素目を追加し、ズラス
int main(void){
// Your code here!
int arr[]3 = {{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15}}; //要素数計算
int len = sizeof(arr) / sizeof(arr0); // 1番目の要素を一時的な配列tempに保存し、全ての要素を1つずつ右にずらす。
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < 3; j++) {
if (i == 0) {
//printf("temp=%d\n",tempj); }
}
}
printf("最後尾を保存\n");
// 一時的な配列tempを最後の要素に追加する。
for (int i = 0; i < 3; i++) {
}
printf("\n------\n");
//配列表示
for(int i =0;i<len;i++){
for(int j=0;j<3;j++){
}
printf("\n");
}
}
code:c
//行を入れ替える関数
int main() {
int arr[]3 = {{1,2,3,4},{5,6,7},{8,9},{10,11,12},{13,14,15},{16,17,18}}; // 一時的な変数tempにarr0をコピーしてから、arr5の要素をarr0にコピーし、tempの要素をarr5にコピーする。 for (int i = 0; i < 3; i++) {
}
// 一時的な変数tempにarr1をコピーしてから、arr4の要素をarr1にコピーし、tempの要素をarr4にコピーする。 for (int i = 0; i < 3; i++) {
}
// 一時的な変数tempにarr2をコピーしてから、arr3の要素をarr2にコピーし、tempの要素をarr3にコピーする。 for (int i = 0; i < 3; i++) {
}
// 配列を表示する
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 3; j++) {
}
}
printf("\n");
}
return 0;
}
code:c
//行を入れ替える関数(上の処理を関数化)
void swapRows(int arr[]3, int row1, int row2) { for (int i = 0; i < 3; i++) {
}
}
int main() {
int arr[]3 = {{1,2,3,4},{5,6,7},{8,9},{10,11,12},{13,14,15},{16,17,18}}; // 行を入れ替える
swapRows(arr, 0, 5);
swapRows(arr, 1, 4);
swapRows(arr, 2, 3);
// 配列を表示する
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 3; j++) {
}
}
printf("\n");
}
return 0;
}
多重配列による文字列の作成
code:c
int main(void){
// Your code here!
char st[]1012 = {{"TEST1","TEST2","TEST3"}, {"TES4","TESt5","testtete6"}
};
//格納した文字列を表示する。
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
printf("c%d%d=%s\n",i,j,stij); }
}
}
code:c
int main(void){
// Your code here!
char st[]1012 = {{"TEST1","TEST2","TEST3"}, {"TES4","TESt5","testtete6"}
};
char st[]1012 = {{"TEST1","TEST2","TEST3"} ,{"TES4","TESt5","testtete6"}
,{"TES4","TESt5","te"}
,{"TES4","TESt5","te","test","aa"}
};
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
printf("c%d%d=%s\n",i,j,stij); }
}
int len1,len2,len3,len4;
len1 = sizeof(st);
printf("stlen=%d\n",len1);
printf("stlen2=%d\n",len2);
printf("stlen3=%d\n",len3);
printf("stlen4=%d\n",len4);
int len_n1 = len1/len2;
printf("フォルダ数:%d\n",len_n1);
printf("stlen2=%d\n",len2);
}
code:c
int main(void){
int StElm,St1Elm,St2Elm,St3Elm,St4Elm;
// Your code here!
const char st1[]12 = {"TEST1","TEST2","TEST3"}; const char st2[]12 = {"TEST4","TEST5","TEST6","TES7"}; const char st3[]12 = {"TEST8","TEST9"}; const char st4[]12 = {"TEST10","TEST11","TEST12"}; const char (*const st[])12 = { };
St1Elm = Elm(st1);
St2Elm = Elm(st2);
St3Elm = Elm(st3);
St4Elm = Elm(st4);
StElm = Elm(st);
printf("st1lem=%d\n",St1Elm);
printf("st2lem=%d\n",St2Elm);
printf("st3lem=%d\n",St3Elm);
printf("st4lem=%d\n",St4Elm);
printf("stlem=%d\n",StElm);
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
printf("c%d%d=%s\n",i,j,stij); }
}
}
文字数の違う場合の配列の要素算出
code:c
int main(void){
// Your code here!
const char st1[]12 = {"TEST1","TEST2","TEST3"}; const char st2[]12 = {"TEST4","TEST5","TEST6","TES7"}; const char st3[]12 = {"TEST8","TEST9"}; const char st4[]12 = {"TEST10","TEST11","TEST12"}; const char (*const st[])12 = { };
for(int i=0;i<StElm0;i++){ for(int j=0;j<StElmi+1;j++){ printf("st[
}
}
}
if文確認
その他