配列
code:c
#include <stdio.h>
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の配列の値を出力
}
#if 0
//配列は宣言の時以外で、1度に複数の値を代入することはできない。
//下記bを有効にすると、エラーになる。
int b3;
b3 = {1,2,3}
#endif
//宣言の時の要素数の省略
int c[]={4,5,6}; //宣言の時に要素数を省略できる。
for(i=0;i<=2;i++){ //3回ループ
printf("c%d=%d\n",i,ci); //aの配列の値を出力
}
}
結果:https://paiza.io/projects/S695zS_FukH1xz6NXPMGQQ?language=c
https://paiza.io/projects/GskCCJUxLMhGHjijiI2Lgg?language=c
平均
https://paiza.io/projects/QcO8ckXmJQLa8gMguc42cw?language=c
要素数の求め方
code:c
#include <stdio.h>
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の値を列挙する。
}
}
実行結果:https://paiza.io/projects/9_CqzTWx_0MlYAB8XeI0pg?language=c
参考:
https://9cguide.appspot.com/13-02.html
https://dianxnao.com/c初級%EF%BC%9A文字配列での2次元配列イメージ/
要素数を出す関数の作成
code:c
#include <stdio.h>
//#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の値を列挙する。
}
}
結果:https://paiza.io/projects/ZRchx8RPMrSNQlpfALSX-g
2重配列の確認
code:c
#include <stdio.h>
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番目の文字を出力
}
#endif
}
//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を出力
}
}
}
計算結果:https://paiza.io/projects/f0YxurQ76fThDCkR4ILWmA?language=c
2重配列の確認、要素の省略
code:c
#include <stdio.h>
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);
}
実行結果:https://paiza.io/projects/nIsKPefvDhHnHdWxd4E18Q?language=c
参考:
https://www.javadrive.jp/cstart/array/index5.html
https://qiita.com/t-yama-3/items/e3304cc4dce2193f9300
配列の要素数は、ポインタを使って引き渡すので、求められない。
code:c
#include <stdio.h>
//要素数を出力する関数
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);
#if 1
//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の値を列挙する。
#endif
}
//要素数を出力する関数
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);
}
実行結果:https://paiza.io/projects/QEwq7WOqq85QlhQxLohTRw?language=c
参考:https://programming-place.net/ppp/contents/c/rev_res/array000.html
2重配列へのアクセス確認
code:c
//最後尾に1要素目を追加し、ズラス
#include <stdio.h>
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 temp3;
//要素数計算
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) {
tempj = arrij;
//printf("temp=%d\n",tempj);
}
arrij = arri+1j;
printf("%d\n",arrij);
}
}
printf("最後尾を保存\n");
// 一時的な配列tempを最後の要素に追加する。
for (int i = 0; i < 3; i++) {
arrlen-1i = tempi;
printf("%d",arrlen-1i);
}
printf("\n------\n");
//配列表示
for(int i =0;i<len;i++){
for(int j=0;j<3;j++){
printf("%d ",arrij);
}
printf("\n");
}
}
結果:https://paiza.io/projects/Wp2vFeE_BFluOLu7C0psTw?language=c
code:c
//行を入れ替える関数
#include <stdio.h>
int main() {
int arr[]3 = {{1,2,3,4},{5,6,7},{8,9},{10,11,12},{13,14,15},{16,17,18}};
int temp3;
// arr0とarr5の要素を入れ替える
// 一時的な変数tempにarr0をコピーしてから、arr5の要素をarr0にコピーし、tempの要素をarr5にコピーする。
for (int i = 0; i < 3; i++) {
tempi = arr0i;
arr0i = arr5i;
arr5i = tempi;
}
// arr1とarr4の要素を入れ替える
// 一時的な変数tempにarr1をコピーしてから、arr4の要素をarr1にコピーし、tempの要素をarr4にコピーする。
for (int i = 0; i < 3; i++) {
tempi = arr1i;
arr1i = arr4i;
arr4i = tempi;
}
// arr2とarr3の要素を入れ替える
// 一時的な変数tempにarr2をコピーしてから、arr3の要素をarr2にコピーし、tempの要素をarr3にコピーする。
for (int i = 0; i < 3; i++) {
tempi = arr2i;
arr2i = arr3i;
arr3i = tempi;
}
// 配列を表示する
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 3; j++) {
if (arrij != 0) {
printf("%d ", arrij);
}
}
printf("\n");
}
return 0;
}
結果:https://paiza.io/projects/l_wBiN5aLsrNzvrnRYN9Fw?language=c
code:c
//行を入れ替える関数(上の処理を関数化)
#include <stdio.h>
void swapRows(int arr[]3, int row1, int row2) {
int temp3;
for (int i = 0; i < 3; i++) {
tempi = arrrow1i;
arrrow1i = arrrow2i;
arrrow2i = tempi;
}
}
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++) {
if (arrij != 0) {
printf("%d ", arrij);
}
}
printf("\n");
}
return 0;
}
結果:https://paiza.io/projects/iFYpXTRlDgHF0PMZR7vyzg?language=c
多重配列による文字列の作成
code:c
#include <stdio.h>
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);
}
}
}
結果:https://paiza.io/projects/UZunkOjqZrqah18tmU9K3A?language=c
code:c
#include <stdio.h>
int main(void){
// Your code here!
#if 0
char st[]1012 = {{"TEST1","TEST2","TEST3"},
{"TES4","TESt5","testtete6"}
};
#endif
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);
len2 = sizeof(st0);
printf("stlen2=%d\n",len2);
len3 = sizeof(st00);
printf("stlen3=%d\n",len3);
len4 = sizeof(st000);
printf("stlen4=%d\n",len4);
int len_n1 = len1/len2;
printf("フォルダ数:%d\n",len_n1);
len2 = sizeof(st1)1;
printf("stlen2=%d\n",len2);
}
結果:https://paiza.io/projects/6YQfS9fgaOwE35K9VsJCAQ?language=c
code:c
#include <stdio.h>
#define Elm(d) sizeof(d)/sizeof(d0)
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 = {
&st10,
&st20,
&st30,
&st40
};
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);
}
}
}
結果:https://paiza.io/projects/obHRshZpzxz3X4mYHYL-Mg?language=c
文字数の違う場合の配列の要素算出
code:c
#include <stdio.h>
#define Elm(d) sizeof(d)/sizeof(d0)
#define FOLDERMAX 30
int main(void){
int StElmFOLDERMAX;
// 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 = {
&st10,
&st20,
&st30,
&st40
};
StElm0 = Elm(st);
StElm1 = Elm(st1);
StElm2 = Elm(st2);
StElm3 = Elm(st3);
StElm4 = Elm(st4);
for(int i=0;i<StElm0;i++){
for(int j=0;j<StElmi+1;j++){
printf("st[
%d]%d=%s\n",i,j,stij);
}
}
}
結果:https://paiza.io/projects/DxSEYflHqFRpkAc8VKcgHw?language=c
code:c
#include <stdio.h>
const char st1[] = "TEST1";
const char st2[] = "TEST4";
const char st3[] = "TEST8";
const char st4[] = "TEST10";
const char *const am1[] = {
st1,
st2,
};
const char *const am2[] = {
st3,
st4,
};
const char *const *const st_t[] = {
am1,
am2,
};
int main(void) {
printf("st=%s\n", st_t00); // st_t00は"TEST1"を指す
printf("st=%s\n", st_t11); // st_t11は"TEST10"を指す
return 0;
}
https://paiza.io/projects/123htsNc7ek4ZlbfXlmlFg?language=c
https://paiza.io/projects/g1_ViezRro1mlEQkbpxUPQ?language=c
https://paiza.io/projects/6LNiVkTU6XeIGyxdMO4PxA?language=c
if文確認
https://paiza.io/projects/fz75I7Yfsv_hCENfScGYAA
http://www9.plala.or.jp/sgwr-t/lib/strcmp.html
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1329387508
https://www.sejuku.net/blog/25303
その他
STM32勉強日記(2021/7/11):AD変換を行う
文字列の保存
code:c
#include <stdio.h>
#define STRMAX 10
void func(const char *str){
const char *strSetSTRMAX;
static int cnt = 0;
strSetcnt = str;
printf("%s\n",strSetcnt);
cnt++;
cnt = (cnt>STRMAX) ? 0:cnt;
for(int i=0;i<cnt;i++){
printf("%s\n",strSeti);
}
}
int main(void){
// Your code here!
//宣言方法: 型 変数名要素数1要素数2 = {要素1,要素2,・・・}
char a[]6 = {"TEST1","TEST2","TEST3"};
printf("1:\n");
func(a0);
printf("2:\n");
func(a1);
printf("3:\n");
func(a2);
}
https://paiza.io/projects/vg_QNKPfaL6H4sD3x-_4ZA?language=c