広告
↓発売日:2018年09月22日↓
新品価格 |
今回は配列など複数の要素の最大(最少)値を出します。
#include <stdio.h> int main(){ int ary[5] = {1,25,3,8,10}; int max = 0; int i = 0; max = ary[0]; for(i=1;i<5;i++){ if(max < ary[i]){ max = ary[i]; } } for(i=0;i<5;i++){ printf("%d ",ary[i]); } printf("\n"); printf("max = %d\n",max); return 0; }
配列「ary」の全ての要素の最大値を普通に出します。
まずは最大値を格納する為の変数を用意します。
int max = 0;
そして調べたい配列などの最初の要素をこの変数に保存します。
max = ary[0];
後は配列の残りの要素と比べていき、もしこの要素より大きい要素が現れた場合はその要素に入れ替え、これを最後まで行います。
for(i=1;i<5;i++){ if(max < ary[i]){ max = ary[i]; } }
これで最大値の算出は完了です。
最小値の場合も等号が変わるだけで同じ事を行います。
int min = 0; min = ary[0]; for(i=1;i<5;i++){ if(min > ary[i]){ min = ary[i]; } }
これで変数「min」に最小値が格納されます。
#include <stdio.h> int my_max(int* ,int); int main(){ int ary[5] = {1,25,3,8,10}; int max = 0; int i; max = my_max(ary,sizeof(ary) / sizeof(int)); for(i=0;i<5;i++){ printf("%d ",ary[i]); } printf("\n"); printf("max = %d",max); return 0; } int my_max(int* ary,int size){ int max = 0; int i; max = *ary; for(i=1;i<size;i++){ if(max < *(ary + i)){ max = *(ary + i); } } return max; }
最大値を出す関数を作ります。
int my_max(int* ary,int size){ int max = 0; int i; max = *ary; for(i=1;i<size;i++){ if(max < *(ary + i)){ max = *(ary + i); } } return max; }
ここで必要な情報は最大値を出す配列とそのサイズなので
int my_max(int* ary,int size)
引数はこちらになります。
あとは同じように最大値を入れるための変数を用意して渡された配列の最初の要素を保存、残りの要素と比べていくだけです。
配列が引数の場合はその先頭アドレスが渡されるのでそのまま
max = *ary;
「*ary」こちらが先頭の要素になります。
配列などを渡している時はバッファオーバーしないように配列サイズの監視も重要です。
広告
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> struct STUDENT{ char name[128]; int score; }; struct STUDENT set_data(const char* , int); int my_max2(struct STUDENT* ,int); int main(){ struct STUDENT student[5]; int max = 0; int i; student[0] = set_data("tanaka",385); student[1] = set_data("suzuki",212); student[2] = set_data("satou",445); student[3] = set_data("saitou",500); student[4] = set_data("watanabe",293); max = my_max2(student,sizeof(student) / sizeof(struct STUDENT)); for(i=0;i<5;i++){ printf("name:%s score:%d\n",student[i].name,student[i].score); } printf("max = %d\n",max); return 0; } struct STUDENT set_data(const char* name, int score){ struct STUDENT tmp; strcpy(tmp.name,name); tmp.score = score; return tmp; } int my_max2(struct STUDENT* ary,int size){ int max = 0; int i; max = ary->score; for(i=1;i<size;i++){ if(max < (ary + i)->score){ max = (ary + i)->score; } } return max; }
より実用的なプログラムにおいては構造体の特定の要素の最大値を出す事もあるかもしれません。
struct STUDENT{ char name[128]; int score; };
生徒のテストの得点の最大値のような感じでテストの得点にあたるこちらの構造体のメンバ「score」の最大値を出します。
int my_max2(struct STUDENT* ary,int size){ int max = 0; int i; max = ary->score; for(i=1;i<size;i++){ if(max < (ary + i)->score){ max = (ary + i)->score; } } return max; }
今回は構造体の配列を渡すので引数は
int my_max2(struct STUDENT* ary,int size){ }
構造体のポインタとその配列のサイズになりますね。
後は同じように先頭の要素を保存、他の要素と比べていくだけです。
max = ary->score; for(i=1;i<size;i++){ if(max < (ary + i)->score){ max = (ary + i)->score; } }
この時に構造体の各メンバにアクセスするには
(ary + i)->score
ポインタで受け取っているのでアロー演算子になる事に注意です!
広告
↓発売日:2016年02月29日↓
12歳からはじめる ゼロからのC言語 ゲームプログラミング教室 新品価格 |
↓発売日:2018年06月22日↓
新品価格 |
↓発売日:2018年03月09日↓
新品価格 |
↓発売日:2017年06月14日↓
新品価格 |
↓発売日:2018年05月21日↓
新品価格 |
↓発売日:2017年12月07日↓
新品価格 |
↓発売日:2017年02月08日↓
新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ) 新品価格 |
↓発売日:2017年09月26日↓
新品価格 |