dポイントプレゼントキャンペーン実施中!

C言語で関数を用いたプログラムを作成しています。内容はA君、B君のボーリングの成績を入力し、その点数をランク付けするというものです。(250以上はS、200以上はA、150以上はB、100以上はC、50以上はD、50未満はFになります。)
それから、このプログラムの条件は
1、main関数は値の入力と関数を呼び出すだけ。
2、関数の引数は入力した2つの値。
3、関数の中で結果を表示。
4、関数の戻り値はなし。
というもので、3番の結果のmain関数以外での結果の表示の仕方がわからず、どうやって結果を表示させていくのかよくわからず、行き詰っています。そのあたりの解説をしていただくとありがたいです。
なお、私が途中まで書いたので、問題点の指摘をおねがいいたします。
#include<stdio.h>
int ia(int x);
int ib(int y);

int main(){
 int a,b;
 printf("A君のスコア");
 scanf("%d",&a);
 printf("B君のスコア");
 scanf("%d",&b);
 }
 int ia(int x);
 char ix;
 if(x>=250){
 ix = 'S';
 }else if(x>=200 && x<250){
 ix = 'A';
 }else if(x>=150 && x<200){
 ix = 'B';
 }else if(x>=100 && x<150){
 ix = 'C';
 }else if(x>=50 && x<100){
 ix = 'D';
 else{
 ix='F';
}
int ib(int y);
 char iy;
 if(y>=250){
 iy = 'S';
 }else if(y>=200 && y<250){
 iy = 'A'; 
 }else if(y>=150 && y<200){
 ix = 'B';
 }else if(y>=100 && y<150){
 iy = 'C';
 }else if(y>=50 && y<100){
 iy = 'D';
 }else{
 iy ='F';
}

A 回答 (6件)

No4です。



おっと、関数の引数は、Aクン、Bクンの得点の2つだ(^^;)。

出力関数
void syutu(Aクンの得点,Bクンの得点)
{
 printf(書式省略,hantei(Aクンの得点));
 printf(    ,hantei(Bクンの得点));
}

main()では、scanfでAクンの得点、Bクンの得点を入力して、syutu()関数を呼び出せば良いかな(^o^)。

#「課題そのものが悪い」なんて、回答に書かないでね(^.-)☆
    • good
    • 0

部分的な実現方法などは他の方も書かれているので、私は全体的な流れのサンプルを。


ご参考になれば...

#include<stdio.h>
// 結果表示
void dispResult(int ia, int ib);

// ランク付け
char ranking(int iscore);

/*
  メイン関数
*/
void main()
{
  int ia; // A君のスコア
  int ib; // B君のスコア

  // A君のスコア取得

  // B君のスコア取得

  // 結果表示
  dispResult(ia, ib);
}

/*
  結果を表示する
*/
void dispResult(int ia, int ib)
{
  char ca; // A君のランク
  char cb; // B君のランク

  // A君のランクを取得
  ca = ranking(ia);

  // B君のランクを取得
  cb = ranking(ib);

  // A君のランクを表示

  // B君のランクを表示

}

/*
  ランク付けをする
*/
char ranking(int iscore)
{
  char crank; // ランク

  // スコアからランクを決定する

  return (crank);
}

こんな感じでいかがでしょうか?
不具合があったらごめんなさい。
あくまでも参考程度に...
    • good
    • 0

回答については、No1殿の言うとおり、printf(これも関数だって判るかな?)の中に移せばよい。


つまり得点判定の関数の中にprintf()やputc()、putchar()を書いて、SとかAとかを出力させればよい。

で、さて、貴兄のプログラムを見ていると、「関数」というものが全然判ってない様ですね。なぜ、Aクンの判定と、Bクンの判定、それぞれにia()とib()を作っているのかな?
(しかもBクンのB判定のところは、変数ixを使っている(^^;))

私だったら、たとえば、hanteiという関数を作って、
hantei(Aクンの得点);
hantei(Bクンの得点);
と、関数の引数にAクン、Bクンの得点を入れてhantei関数を呼び出すのだけどね。

課題にも文句(^^;)があって、こういう場合、関数hantei()の戻り値が、Sとか、Aとかになるのが、綺麗なヤリ方だと思うね(実は、ここは趣味とか個人毎の書き方とかいう以前の問題なのだが)。
つまり、判定の関数のプロトタイプは、「char hantei(int 得点);」というところかな。
そうすると、
printf("Aクンの判定:%c\n",hantei(Aクンの得点));
って書けるよね?

プログラムの勘所って、そういうもんじゃないかと思うのだが。
    • good
    • 0

こんにちは。


ソースコードの{}の位置が若干おかしいところがある気もしますが、コピーする時にずれたのでしょうか。それ以外で気がついた点をいくつか。
main関数以外で出力するのは下の方もいわれているように関数ia,ibの中にprintf文を記述すればよいことです。
また、上記のコードではmain関数の中に関数ia,ibの呼び出し文がないですので、呼び出し記述をしてください。
それから、「4.関数の戻り値はなし」とのことですので、関数がint型なのはおかしいと思います。
それと、「引数は2つ」という問題文からして、関数は一つで、そこに引数を2つ持たせればよい気もします。

参考になりましたら幸いです。
    • good
    • 0

ia 関数とib関数分ける必要ないよね。

一つの関数で間に合うはず。

それとif文の書きかただけど:

iy = 'S';
if (y<50) iy = 'F'
else if (y < 100) iy = 'D';
...
else if (y < 250) iy = 'A';

って書き方でいいでしょ?

で、最後に:
printf("ランク = %c\n", iy);
    • good
    • 0

単純に、mainの中にある、printfを関数ibに移せばいいです。



printfは、main以外の関数の中でも使えます。
    • good
    • 0

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