アプリ版:「スタンプのみでお礼する」機能のリリースについて

次のプログラムを教えてください

乱数で0〜100の整数を50個生成し、平均値以上を合格(passed)、平均値未満を不合格(failed)として表示するプログラムを作れ。実行例を以下に示す。

average = 51.320000
No.1: score = 60, passed
No.2: score = 51, failed
No.3: score = 45, failed
No.4: score = 80, passed
.
.
.

A 回答 (5件)

わからない部分を書くかれないと、回答できません。



>乱数で0〜100の整数を50個生成し、
0〜100の整数乱数を50個生成すれば良いのでは?

>平均値以上を合格(passed)、平均値未満を不合格(failed)として
平均点を求めて、合格(passed)、不合格(failed)を判断すれば良いのでは?

>表示するプログラムを作れ。
結果を表示すれば良いだけでは?

ajmdpさん、どこがわからないのでしょう?
    • good
    • 2

// あんまり面白いプログラムにできなかった。


// なんとか、ループを一カ所にしたかったが

#include <stdio.h>
#include <stdlib.h>

int main()
{
const int num_member = 50;
int member[num_member];
double sum;
double average;

int i;

// 乱数を生成と、平均算出のための合計算出
for(i = 0, sum = 0; i < num_member; i++)
{
member[i] = rand() % 101; // おおよそ一様な乱数になるはず
sum += member[i];
}

average = sum / num_member;
printf("average = %.6f\n", average);

for (int i = 0; i < num_member; i++)
{
char *result;

// 合格・失格の判定をしたのち
if (member[i] >= average)
result = "passed\n";
else
result = "failed\n";

// まとめて表示
printf("No.%2d: score = %3d, %s", i + 1, member[i], result);
}

return 0;
}
    • good
    • 0

// 各機能を関数に分離


// 規模が小さいの効果はなんとも言えないが、main() はすっきりした。

#include <stdio.h>
#include <stdlib.h>

double getAverage(const int a[], int num)
{
double sum = 0;
int i;

for(i = 0; i < num; sum += a[i++]);
return sum / num;
}

char *judge(int score, int average)
{
if(score >= average) return "passed";
else return "failed";
}

int main()
{
const int num_member = 50;
int member[num_member];
double average;

int i;

// 乱数を生成
for(i = 0; i < num_member; i++)
{
member[i] = rand() % 101;
}

// 平均を取得して表示
average = getAverage(member, num_member);
printf("average = %.6f\n", average);

// 成績表示
for (int i = 0; i < num_member; i++)
{
printf("No.%2d: score = %3d, %s\n", i + 1, member[i], judge(member[i], average));
}

return 0;
}
    • good
    • 0

// C++で作ってみる。


// 格好良い(かも)

#include <iostream>
#include <iomanip>
#include <cstdlib>

class average
{
private:
double sum;
int count;

public:
average() : sum(0), count(0) {}
void operator +=(int value) { sum += value; count++;}
double get() { return sum / count; }
};

class judgment
{
private:
double stand;

public:
judgment(double _stand) : stand(_stand) { }
const char *get(int score)
{
if (score >= stand) return "passed";
else return "failed";
}
};

int main()
{
const int num_member = 50;
int member[num_member];
average myAve;

// 乱数を生成と、平均算出のための処理
for(auto& v : member)
{
v = std::rand() % 101;
myAve += v;
}

judgment myJudge(myAve.get());
std::cout << "average = " << std::fixed << std::setprecision(6) << myAve.get() << "\n";

for (auto& v : member)
{
std::cout << "No." << std::setw(2) << (&v - &member[0])+ 1 << ": socore = " << std::setw(3) << v;
std::cout << ", " << myJudge.get(v) << "\n";
}

return 0;
}
    • good
    • 0

さらっと↓程度じゃいかんの?



#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define LowBit 8
#define MaxA (100+1)
#define SizA 50

int a[SizA];

main(){
int i;
double s = 0;

srand(time(NULL));

for(i = 0; i < SizA; i++)
  s += a[i] = (rand() >> LowBit) % MaxA
s /= SizA;
printf("average = %.6f\n", s);

for(i = 0; i < SizA; i++)
  printf("No.%2d: score = %3d, %s\n", i + 1, a[i], (a[i] >= s) ? "passed" : "failed" );
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!