ID非公開ID非公開さん2022/6/23 13:4844回答c言語について質問です写真の問題を配列を使って解こうと思うんですが、ほかにいい方法はありませんか??c言語について質問です写真の問題を配列を使って解こうと思うんですが、ほかにいい方法はありませんか?? switch文を使おうと思ったのですが、うまくいきません。ヒントや簡単なコードを教えてくださると嬉しいです。わかる方いましたらよろしくお願いします。ちなみにこのあとmain関数で連続で何回かacc()を呼び出してprintfすることになっています…続きを読むC言語関連 | プログラミング・90閲覧共感したベストアンサーhttps://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q132637334030san********san********さん2022/6/23 14:29ローカル変数をstaticで宣言するだけ staticを付けると再宣言されずにそのまま残る switchだけでは「○以上×未満」みたいな判定ができない 負値を記録するような文言がないので考慮しない 要件としては配列等に過去の数値を記録する必要がない 現在の合計値だけで良いから int acc(int n){ static int arr[100]={0}; static int sum=0; static int ct=0; int i; if(n<-2) return -1; esle{ switch(n){ case -2: return ct; case -1: return sum; default: arr[ct++]=n; return sum+=n; } }ナイス!
ベストアンサーhttps://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q132637334030san********san********さん2022/6/23 14:29ローカル変数をstaticで宣言するだけ staticを付けると再宣言されずにそのまま残る switchだけでは「○以上×未満」みたいな判定ができない 負値を記録するような文言がないので考慮しない 要件としては配列等に過去の数値を記録する必要がない 現在の合計値だけで良いから int acc(int n){ static int arr[100]={0}; static int sum=0; static int ct=0; int i; if(n<-2) return -1; esle{ switch(n){ case -2: return ct; case -1: return sum; default: arr[ct++]=n; return sum+=n; } }ナイス!
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q132637334030ID非公開ID非公開さん2022/6/23 14:16いや、配列なんか要らないでしょ。静的変数で、呼ばれた回数と、それまでの正数の合計値を覚えておけば良いだけですから。 switch文だけだと「0以上」と「-3以下」の両方を判定する事が出来ないので、if文で判定するのが簡単かつ妥当です。ナイス!
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q132637334030anarkaanarkaさん2022/6/23 14:02int acc (int n) { static int result,count; if (n <= -3) { return -1; } else if (n == -2) { return count; } else if (n == -1) { return result; } else if (n >= 0) { result += n; return result; } } 配列だと上限を仕様で先に決めておく必要がある。 -3と0で範囲指定が入るからswitchは厳しい。どちらか一つならできるのだが。 合計とカウントのリセットが示されていないのでそのままにしてある。必要なら適宜挿入されたい。ナイス!
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q132637334030匿匿さんカテゴリマスター2022/6/23 14:02#include <stdio.h> int acc(int x) { static int sum = 0, cnt = 0; if (x < -2) { return -1; } if (x == -1) { return sum; } if (x == -2) { return cnt; } sum += x; cnt++; return sum; }ナイス!