広告
↓発売日:2018年09月22日↓
新品価格 |
今回は配列など複数の要素の合計を出します。
#include <stdio.h> int main(){ int ary[5] = {1,2,3,4,5}; int sum = 0; int i; for(i=0;i<5;i++){ sum += ary[i]; } for(i=0;i<5;i++){ printf("%d ",ary[i]); } printf("\n"); printf("sum = %d\n",sum); return 0; }
配列「ary」の全ての要素の合計を普通に出します。
まずは合計を格納する為の変数を用意します。
int sum = 0;
そしてここに繰り返しの「for」文を使って毎回足し合わせるようなカタチで各要素を一つ足して一つ進めてを繰り返します。
for(i=0;i<5;i++){ sum += ary[i]; }
これで合計値の算出は完了です。
#include <stdio.h> int my_sum(int* ,int); int main(){ int ary[5] = {1,2,3,4,5}; int sum = 0; int i; sum = my_sum(ary,sizeof(ary) / sizeof(int)); for(i=0;i<5;i++){ printf("%d ",ary[i]); } printf("\n"); printf("sum = %d\n",sum); return 0; } int my_sum(int* ary,int size){ int sum = 0; int i; for(i=0;i<size;i++){ sum += *(ary + i); } return sum; }
合計値を出す関数を作ります。
int my_sum(int* ary,int size){ int sum = 0; int i; for(i=0;i<size;i++){ sum += *(ary + i); } return sum; }
ここで必要な情報は合計を出す配列とそのサイズなので
int my_sum(int* ary,int size)
引数はこちらになります。
あとは同じように合計を入れるための変数を用意して足し合わせていくだけです。
引数に開始番号、終了番号などを入れるようなカタチにして
int my_sum(int* ary,int start,int end)
その範囲だけを足し合わせるようにすれば
for(i=start;i<end;i++){ sum += *(ary + i); }
部分的な合計値を出す事も可能です。
配列などを渡している時はバッファオーバーしないように配列サイズの監視も重要です。
広告
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> struct STUDENT{ char name[128]; int money; }; struct STUDENT set_data(const char* , int); int my_sum2(struct STUDENT* ,int); int main(){ struct STUDENT student[5]; int sum = 0; int i; student[0] = set_data("tanaka",1000); student[1] = set_data("suzuki",2000); student[2] = set_data("satou",3000); student[3] = set_data("saitou",4000); student[4] = set_data("watanabe",5000); sum = my_sum2(student,sizeof(student) / sizeof(struct STUDENT)); for(i=0;i<5;i++){ printf("name:%s money:%d\n",student[i].name,student[i].money); } printf("sum = %d\n",sum); return 0; } struct STUDENT set_data(const char* name, int money){ struct STUDENT tmp; strcpy(tmp.name,name); tmp.money = money; return tmp; } int my_sum2(struct STUDENT* ary,int size){ int sum = 0; int i; for(i=0;i<size;i++){ sum += (ary + i)->money; } return sum; }
より実用的なプログラムにおいては構造体の特定の要素の合計値を出す事もあるかもしれません。
struct STUDENT{ char name[128]; int money; };
生徒の所持金の合計のような感じで所持金にあたるこちらの構造体のメンバ「money」の合計を出します。
int my_sum2(struct STUDENT* ary,int size){ int sum = 0; int i; for(i=0;i<size;i++){ sum += (ary + i)->money; } return sum; }
今回は構造体の配列を渡すので引数は
int my_sum2(struct STUDENT* ary,int size){ }
構造体のポインタとその配列のサイズになりますね。
後は同じように一つずつ足し合わせていくだけです。
for(i=0;i<size;i++){ sum += (ary + i)->money; }
この時に構造体の各メンバにアクセスするには
(ary + i)->money
ポインタで受け取っているのでアロー演算子になる事に注意です!
広告
↓発売日: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日↓
新品価格 |