
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件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
No4です。
おっと、関数の引数は、Aクン、Bクンの得点の2つだ(^^;)。
出力関数
void syutu(Aクンの得点,Bクンの得点)
{
printf(書式省略,hantei(Aクンの得点));
printf( ,hantei(Bクンの得点));
}
main()では、scanfでAクンの得点、Bクンの得点を入力して、syutu()関数を呼び出せば良いかな(^o^)。
#「課題そのものが悪い」なんて、回答に書かないでね(^.-)☆
No.5
- 回答日時:
部分的な実現方法などは他の方も書かれているので、私は全体的な流れのサンプルを。
ご参考になれば...
#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);
}
こんな感じでいかがでしょうか?
不具合があったらごめんなさい。
あくまでも参考程度に...
No.4
- 回答日時:
回答については、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クンの得点));
って書けるよね?
プログラムの勘所って、そういうもんじゃないかと思うのだが。
No.3
- 回答日時:
こんにちは。
ソースコードの{}の位置が若干おかしいところがある気もしますが、コピーする時にずれたのでしょうか。それ以外で気がついた点をいくつか。
main関数以外で出力するのは下の方もいわれているように関数ia,ibの中にprintf文を記述すればよいことです。
また、上記のコードではmain関数の中に関数ia,ibの呼び出し文がないですので、呼び出し記述をしてください。
それから、「4.関数の戻り値はなし」とのことですので、関数がint型なのはおかしいと思います。
それと、「引数は2つ」という問題文からして、関数は一つで、そこに引数を2つ持たせればよい気もします。
参考になりましたら幸いです。
No.2
- 回答日時:
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);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
最早開始時間と最遅完了時刻を...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
【C++】関数ポインタの使い方
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
(マルチスレッド)_beginthrea...
-
C言語での奇数の和
-
CStringの配列要素を関数で受け...
-
未解決の外部シンボル _printf...
-
C言語でのプログラム
-
int16_t の _t は何?
-
PowerShellがうまくいかない
-
式は定数値が必要です」という...
-
if と配列の組み合わせ
-
2次元配列とポインタの引数受け...
-
C言語のプログラム作成について
-
【C++】行列データの読み込み
-
数字列を3桁ごとにカンマで区切...
-
部分行列の抜き出し(C言語)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
複数桁10進数の*桁目だけを抽出...
-
return 1L
-
if と配列の組み合わせ
-
ラップ関数とはどんなものですか?
-
式は定数値が必要です」という...
-
数字列を3桁ごとにカンマで区切...
-
実数の整数部,小数部の取得
-
C言語でDxlibを使って3x3の奇数...
-
プログラムについて(UNIX)
-
acceptをalarmでタイムアウトさ...
-
C言語の課題です
-
エラー 添字が付けられた値が、...
-
CStringの配列要素を関数で受け...
-
最早開始時間と最遅完了時刻を...
-
入力された数字を大きい順に並...
おすすめ情報