C言語で「5回、自然数を入力し、その中で最小値と最大値を除いた合計値を出力するプログラム」を作成しています。
その際、
最小値かつ最大値に再度遭遇した場合は、再度遭遇した値の分は加算したい
と考えています。(当部分は投稿後に加筆しています)
下記に、現在のコードの出力結果と完成イメージを記します。
cmd
1【現在】 2str[0] = 1 3str[1] = 1 4str[2] = 3 5str[3] = 5 6str[4] = 5 715 8 9【完成イメージ】 10str[0] = 1 11str[1] = 1 12str[2] = 3 13str[3] = 5 14str[4] = 5 159
【現在】の結果は、下記【ソースコード】の実行結果です。
なのでエラーメッセージは出ていないです。
C
1【ソースコード】 2#include <stdio.h> 3#define YOUSO 5 4int main(void) 5{ 6 int str[YOUSO],min,max; 7 int total = 0; 8 int minFlag = 0; 9 int maxFlag = 0; 10 11 for(int i=0; i<YOUSO; i++) 12 { 13 printf("str[%d] = ",i); 14 scanf("%d",&str[i]); 15 //ずっと「scanf("%d",str);」だと思ってた。確かにscanfはアドレスを欲しがっているのだが、これだとstrの先頭だけ値を入力していることになる。 16 //なので0番目を抜いた1,2,3,4番目にゴミが入る。 17 } 18 19 min = str[0]; 20 max = str[0]; 21 22 for(int i=1; i<YOUSO; i++) 23 { 24 if(str[i] < min) 25 { 26 min = str[i]; 27 } 28 else if(str[i] > max) 29 { 30 max = str[i]; 31 } 32 } 33 34//1,1,3,5,5 35//min 1 max 5 36 for(int i=0; i<YOUSO; i++) 37 { 38 if(str[i] == min && minFlag == 0) //最小の値と初めて遭遇したら 39 { 40 minFlag = 1; 41 } 42 else if(str[i] == max && maxFlag == 0) //最大の値と初めて遭遇したら 43 { 44 maxFlag = 1; 45 } 46 47 48 if(str[i] == min && minFlag == 1) //最小の値と再度遭遇したら 49 { 50 total += str[i]; //足し込む 51 } 52 else if(str[i] == max && maxFlag == 1) //最大の値と再度遭遇したら 53 { 54 total += str[i]; //足し込む 55 } 56 57 58 if(str[i] != min && str[i] != max) //最小、かつ、最大の値と遭遇しなかったら 59 { 60 total += str[i]; //足し込む 61 } 62 } 63 printf("%d",total); 64}
【補足情報】
なし
回答4件