![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# linux C言語について ./ファイル名 入力値 入力値が表示 という風に実行と入力を同時にしたい 3 2022/10/17 16:57
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- 子供・未成年 早生まれ(1月2月3月)の子って4月〜12月生まれの同級生より身長が10センチくらい低いもんですか? 4 2023/01/19 19:11
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列で格納したものをmsgboxで...
-
配列を使わずに、変数名を動的...
-
先頭アドレスとは何ですか?
-
VB.NETでテキストボックスをコ...
-
C# Listを使わずに2次元配列の...
-
C言語でのカンマ区切りについて
-
VBで構造体の配列を関数に渡す...
-
unsigned char配列への入力の仕方
-
配列の参照渡しで型が一致しま...
-
プログラミングの課題で「5人分...
-
なぜ配列は0から始まるのです...
-
配列同士の文字列の比較
-
C# 配列の変数宣言について。
-
c言語の __FILE__ について
-
多次元配列の引渡しについて
-
簡易暗号化プログラム(文字入れ...
-
C言語 変換指定%sについてです。
-
プログラム
-
【VBS】 フォルダ直下のファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
unsigned char配列への入力の仕方
-
ExcelVBAで質問です。離れた二...
-
配列の参照渡しで型が一致しま...
-
パイソンの
-
C# Listを使わずに2次元配列の...
-
C言語で特定列だけを抽出して配...
-
複数の選択範囲の行番号を個別...
-
【C言語】配列の中に配列を入れ...
-
メモリの初期値
-
VBで構造体の配列を関数に渡す...
-
Excel、VBAのユーザーフォーム...
-
配列をEraseしてもメモリが開放...
-
2次元配列を戻り値とする関数?
-
【速いブラインドタッチ】手を...
おすすめ情報
#include <stdio.h>
int main(void)
{
double height[3];
int i, j;
double k;
printf("3人分の身長を入力してください\n");
for (i = 0; i < 3; i+)
今の所ここまで書きました