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

名前:A, B, Cの3人の身長を入力し、身長の低い人から順番に名前を出力して、同時に平均身
長を表示するプログラムを作りたいのですが、どう書けばよいかわからないです。
教えていただけると幸いです

質問者からの補足コメント

  • #include <stdio.h>
    int main(void)
    {
    double height[3];
    int i, j;
    double k;

    printf("3人分の身長を入力してください\n");
    for (i = 0; i < 3; i+)
    今の所ここまで書きました

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/02/08 22:13

A 回答 (8件)

上記は参考までに並べ替えるの部分

    • good
    • 0

#include <stdio.h>


int main(void)
{
double height[3];
int i, j;
double k;

printf("3人分の身長を入力してください\n");
scanf("%lf %lf %lf",&(height[0]),&(height[1]),&(height[2]));
for (i = 0; i < 3; i++)
{
for (j=2; j > i; j--)
{
if ((k = height[j]) < height[j-1]) {
height[j] = height[j-1];
height[j-1] = k;
}
}
}
printf("%lf %lf %lf\n",(height[0]),(height[1]),(height[2]));
}
    • good
    • 1

・構造体の配列を作る


・配列へのインデックスの配列を作る
のどちらか+qsort でいいような気はする>#4.

本質的に同じだけど. 教わっているかどうかは知らん.
    • good
    • 1

おっと、しまった。



Windowsだとpopenじゃなくって_popenかもしれんです。
popenでエラーが出たら_popenに差し替えてみてください。

_popen、_wpopen:
https://docs.microsoft.com/ja-jp/cpp/c-runtime-l …
    • good
    • 0

これね、実は厄介な問題なんですよ。



Cのstdlib.hと言うヘッダーファイルに、ソーティング(並べ替え)用の関数、qsortってのが実はあるんですが。
この問題の場合適さない。
何故かと言うと、

> 名前:A, B, Cの3人の身長を入力し、身長の低い人から順番に名前を出力して

ってのが厄介。
これが実は要求してるのは、まずは名前と入力された身長を紐付けないとならないんですよね。
って事は、対象が二次元配列になる。
何故なら、配列内配列で名前と身長を持たせなアカンですからね(そして仕様上それが出来ない・笑)。
原則的に、qsortってのは単なる配列対象での並べ替えしか出来ないんで、そうなるとそもそもソーティングの関数を専用で作らないとならない。
メンド臭い。クッソメンド臭いのです。

どの辺までCの学習が進んでるか分からないんですが、一つの手としては、自分で連結リストを実装してみて、配列じゃなくってそれをソートする関数を書く。構造体やポインタが出てくるんで、初心者だとこれはムズいですよね。
もう一つの手が外部ライブラリを探してインストールして使ってみる、事。
ただ、これも、ネット上で転がってるC言語用のライブラリってのは、UNIX系のモノが圧倒的に多いのです。
仮にWindowsのVisual C++に付いてるコンパイラ使ってこいつら利用しよう、ってぇのならほぼ不可能でしょう。ネット上だとUNIX系のコンパイラ、gccやclangがデファクトスタンダードになってるんですが、こいつらをWIndowsに導入するとなるとちとメンド臭い。出来なくはないですが、それこそC初心者に対してだと敷居が高いかもしんない。

さぁて、どうすんべ、となるわけですが。
ちとインチキしますか。っつーか、かなりインチキします(笑)。見た目だとこれで上手く行くでしょう。
まず、Cプログラムを次のように書きます。

/* ここから */

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

int main(void) {
 FILE* fp;
 char buffer[1024];

 if ((fp = popen("./penguin__01.py", "r")) != NULL) { /* 外部プログラムを呼び出す */
  while (fgets(buffer, sizeof(buffer), fp) != NULL) {
   printf("%s", buffer);
  }
  pclose(fp);
  return EXIT_SUCCESS;
 }
 return EXIT_FAILURE;
}

/* ここまで */

取り敢えず外部プログラムとしてpenguin__01.pyと言うのを指定します。
次。
Pythonと言うプログラミング言語をインストールします。

Windows 環境のPython:
https://www.python.jp/install/windows/index.html

一応、Windowsを使ってる、って仮定で話を進めていますが。
適当なテキストエディタを開いて、次のコードをファイルとして保存します。

#!/usr/bin/env python3 # Windowsだとpython、でイイかもしれない

if __name__ == '__main__':
 print("3人分の身長を入力してください\n")
 lst = sorted([(name, int(input()))for name in ['A', 'B', 'C']], key = lambda x: x[1])
 [print(i[0]) for i in lst]
 print("{0}".format(sum([i[1] for i in lst])/len(lst)))

# ここまで

ファイルの保存場所はCのファイルが置いてある場所で良いです。
取り敢えず"penguin__01.py"と名前を付けて保存しておく。
そして、最初のCのファイルをコンパイルします。

特に名付けなければ、例によってa.outと言う名前で実行ファイルへとコンパイルされるでしょう。
あとは、いつものように端末でa.outを実行すれば、貴方が望んだような動作をするトコが見れるでしょう。

ただし、もう一回言っておきますが「インチキ」です(良心の呵責・笑)。
「C言語のプログラムについての質問です」の回答画像4
    • good
    • 1

for (i = 0; i < 3; i+)


ではなく
for (i = 0; i < 3; i++)
    • good
    • 1

C言語、構造体、平均身長、サンプルとかで参考のものが出てきますよ。

    • good
    • 1

どこまで書けましたか?

この回答への補足あり
    • good
    • 0

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