![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
#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]));
}
No.6
- 回答日時:
・構造体の配列を作る
・配列へのインデックスの配列を作る
のどちらか+qsort でいいような気はする>#4.
本質的に同じだけど. 教わっているかどうかは知らん.
No.5
- 回答日時:
おっと、しまった。
Windowsだとpopenじゃなくって_popenかもしれんです。
popenでエラーが出たら_popenに差し替えてみてください。
_popen、_wpopen:
https://docs.microsoft.com/ja-jp/cpp/c-runtime-l …
No.4
- 回答日時:
これね、実は厄介な問題なんですよ。
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](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/1/525078_602385f368ea1/M.png)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
C# Listを使わずに2次元配列の...
-
C言語初心者 ポインタについて...
-
C# 配列の変数宣言について。
-
配列で格納したものをmsgboxで...
-
VBで動的なメモリの確保
-
配列を使わずに、変数名を動的...
-
先頭アドレスとは何ですか?
-
配列をEraseしてもメモリが開放...
-
2次元配列を戻り値とする関数?
-
C言語でcharの足し算
-
市販のビンゴカードについて
-
ExcelVBAで質問です。離れた二...
-
char型配列をString型にしたい
-
Functionの戻り値を2次元配列...
-
配列内の文字間を排他的論理和...
-
C++ vectorに配列をプッシュしたい
-
VBでC言語のポインタみたい...
-
テキストファイルから文字列を...
-
パスカルの三角形
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
配列で格納したものをmsgboxで...
-
C# 配列の変数宣言について。
-
先頭アドレスとは何ですか?
-
【速いブラインドタッチ】手を...
-
C# Listを使わずに2次元配列の...
-
C言語で特定列だけを抽出して配...
-
配列の参照渡しで型が一致しま...
-
【C言語】配列の中に配列を入れ...
-
unsigned char配列への入力の仕方
-
メモリの初期値
-
配列をEraseしてもメモリが開放...
-
テキストファイルから文字列を...
-
ExcelVBAで質問です。離れた二...
-
C++ vectorに配列をプッシュしたい
-
複数の選択範囲の行番号を個別...
-
VB.NET 構造体の配列の検索機能...
-
VBで構造体の配列を関数に渡す...
-
配列を含む構造体の初期値について
おすすめ情報
#include <stdio.h>
int main(void)
{
double height[3];
int i, j;
double k;
printf("3人分の身長を入力してください\n");
for (i = 0; i < 3; i+)
今の所ここまで書きました