#1
by しゅんたまん » 1年前
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void print_rank(double rank[],int size)
{
puts("Rank Score\n");
for(int t=0;t<size;t++){
printf("%d ・・・ %.1f\n",t+1,rank[t]);
}
}
int main (void)
{
double rank[10] = {1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,2.0,3.0};
int m=0;
int retry;
do{
print_rank(rank,10);
for (int i=1;i<4;i++)
{
int no;
int s;
printf("ターン%d\n",i);
time_t x=0;
srandom(time(NULL));
x=random() % 100+1;
printf("今日は%d~\n",x);
for (int j=1;j<100;j++)
{
printf("第%d回目の予想:",j);
scanf("%d",&no);
s=abs(no-x);
if (s==0)
{
printf("正解!");
printf("%d回目の予想で正解しました\n",j);
m=m+j;
break;
}
else if (s<=5)
{
puts("惜しいな、先に言ってよ");
}
else if (s<=10)
{
puts("もうちょいやったのにな~");
}
else{
puts("全然あかんやん~");
}
}
}
printf("3ターンで%d回の予想をしました\n",m);
printf("平均予想回数は%.4f回です\n",(double)m/3);
if((m/3.0)==1)
{
puts("やるやん");
}
else if((m/3.0)<=2)
{
puts("あほ");
}
else if((m/3.0)<=3)
{
puts("立っとれ");
}
else
{
puts("出ていけ");
}
for (int y=0; y<10; y++){
if((m/3.0)<=rank[y]){
printf("あなたは%d位です\n",y+1);
break;
}
}
if((m/3.0)>3.0){
puts("ランク外です");
}
double score=m/3.0;
rank[9]=score;
for(int z=9; rank[z-1]>rank[z]; z--){
if(rank[z-1]>rank[z]){
double tmp=rank[z];
rank[z]=rank[z-1];
rank[z-1]=tmp;
}
}
print_rank(rank,10);
printf("ゲームを続行しますか?(1:続行 0:終了)_");
scanf("%d",&retry);
}
while (retry==1);
return 0;
}
このコードに改良を加えて
・スコアのランクを求める処理を関数get_rank()として定義する処理
・ランクの更新を関数update_ranking()として定義する処理
の二つの改良を加えたコードを求めてほしいです!
解説付きですとありがたいです!!
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void print_rank(double rank[],int size)
{
puts("Rank Score\n");
for(int t=0;t<size;t++){
printf("%d ・・・ %.1f\n",t+1,rank[t]);
}
}
int main (void)
{
double rank[10] = {1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,2.0,3.0};
int m=0;
int retry;
do{
print_rank(rank,10);
for (int i=1;i<4;i++)
{
int no;
int s;
printf("ターン%d\n",i);
time_t x=0;
srandom(time(NULL));
x=random() % 100+1;
printf("今日は%d~\n",x);
for (int j=1;j<100;j++)
{
printf("第%d回目の予想:",j);
scanf("%d",&no);
s=abs(no-x);
if (s==0)
{
printf("正解!");
printf("%d回目の予想で正解しました\n",j);
m=m+j;
break;
}
else if (s<=5)
{
puts("惜しいな、先に言ってよ");
}
else if (s<=10)
{
puts("もうちょいやったのにな~");
}
else{
puts("全然あかんやん~");
}
}
}
printf("3ターンで%d回の予想をしました\n",m);
printf("平均予想回数は%.4f回です\n",(double)m/3);
if((m/3.0)==1)
{
puts("やるやん");
}
else if((m/3.0)<=2)
{
puts("あほ");
}
else if((m/3.0)<=3)
{
puts("立っとれ");
}
else
{
puts("出ていけ");
}
for (int y=0; y<10; y++){
if((m/3.0)<=rank[y]){
printf("あなたは%d位です\n",y+1);
break;
}
}
if((m/3.0)>3.0){
puts("ランク外です");
}
double score=m/3.0;
rank[9]=score;
for(int z=9; rank[z-1]>rank[z]; z--){
if(rank[z-1]>rank[z]){
double tmp=rank[z];
rank[z]=rank[z-1];
rank[z-1]=tmp;
}
}
print_rank(rank,10);
printf("ゲームを続行しますか?(1:続行 0:終了)_");
scanf("%d",&retry);
}
while (retry==1);
return 0;
}
このコードに改良を加えて
・スコアのランクを求める処理を関数get_rank()として定義する処理
・ランクの更新を関数update_ranking()として定義する処理
の二つの改良を加えたコードを求めてほしいです!
解説付きですとありがたいです!!