#include <iostream>
using namespace std;

int main()
{
const int num = 5;
int test[num];

cout << num << "人の点数を入力して下さい。\n";
for(int i=0; i<num; i++){
cin >> test[i];
}


}
}
}

for(int j=0; j<num; j++){
cout << j+1 << "番目の人の点数は" << test[j]<< "です。\n";
}

return 0;
}
----------

for(int s=0; s<num-1; s++){
for(int t=s+1; t<num; t++){
if(test[t] > test[s]){
int tmp = test[t];
test[t] = test[s];
test[s] = tmp;
の部分が理解できません。
s<num-1 は 0<4; ということでしょうか?

値が5つ入力されその値が
if(test[t] > test[s]){ にどの様に挿入されるのかが
解りません。
 

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>> test[s] test[t]


>>   3    6  交換→6 3 2 7 4 t++
> if(3 > 6) で交換するのでしょうか?

書き方が悪かったですね、test[s]とtest[t]の位置。
プログラムの方は
> if(test[t] > test[s])
となっているので、つまり
  if (6 > 3)
となり、条件が成立する(「真になる」と言います)ので交換されるわけです。
    • good
    • 0
この回答へのお礼

理解できました。ありがとうございました。

お礼日時:2002/01/17 15:47

最初→3 6 2 7 4 だとすると



test[s] test[t]
  3    6  交換→6 3 2 7 4 t++
  6    2  t++
  6    7  交換→7 3 2 6 4 t++
  7    4  ループt END s=1,t=2 ※一番大きい値が左端になる
  3    2  t++
  3    6  交換→7 6 2 3 4 t++
  6    4  ループt END s=2,t=3 ※2番目に大きい値が、左から2番目になる
    :

というような感じになります。

この回答への補足

>test[s] test[t]
  3    6  交換→6 3 2 7 4 t++

なぜ3と6が交換されるのか解りません。
ifというのは、もしその文がそのとうり(正しい)であれば実行されるのですよね。
if(3 > 6) で交換するのでしょうか?

補足日時:2002/01/16 19:54
    • good
    • 0

理解できません、とおっしゃってる部分がソース中にないようですが。


たぶん、真中辺の閉じカッコがたくさんあるあたりでしょうね。

for文の文法はお分かりでしょうか。
これはループ処理になりますが、一回目のループでは
s<num-1 は 0<4 という意味になります。
従って「sの初期値を0として、num-1(つまり4)に達するまで繰り返す。ループの最後ではsに1を足す」という意味です。

二個目のfor文では、「tの初期値をs+1として、num(つまり5)に達するまで繰り返す。ループの最後ではtに1を足す」という意味です。

つまり、1~4番目までの値を順に終わりまで比べていって、その時着目しているものより大きいものがあったらそれと入れ替えています。

 実際に絵を書いて、比べていくと分かりやすいと思いますよ。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2002/01/17 15:28

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q音声出力がない

家で使っているTVは音声の出力端子が無いのですが
スピーカーの音を止めずにイヤホン端子から音声を出力する方法はありませんか?
(多少手が掛かっても可、かなりお金が掛かるのは不可)

Aベストアンサー

 うちのテレビで試したのですが、イヤフォンプラグを浅く差し込むと双方から音声がとれることがあるみたいです。テレビによってはこのような方法ではできないこともあるかと思います。

 普通、イヤフォンプラグを入れるところは、スイッチの機能が付いていて、プラグを入れることによってスピーカーの音声が切れるしくみになっています。ですから内部を改造することなしにご質問のような機能を実現することはできないことになります。

 方法があるとすれば、別のアンプとスピーカを用意しテレビの音声用のラインアウトからつなぎ用意した別のスピーカーから音を出すという方法です。イヤフォンプラグは差しっぱなしになります。外部出力までリモコンでコントロールできる機能が付いている場合はいいですが、そうでなければ手元のリモコンで音の大きさが変えられないという不便をこうむる可能性があります。

 アンプ内蔵のスピーカーはパソコンショップで安価で入手できると思いますが、ステレオミニジャックからステレオピンプラグに変換するアダプターが必要になるかと思います。また、最近のテレビのオーディオは立派なものが多いですので、それを使わないとなると音質が落ちることがあると思います。

 うちのテレビで試したのですが、イヤフォンプラグを浅く差し込むと双方から音声がとれることがあるみたいです。テレビによってはこのような方法ではできないこともあるかと思います。

 普通、イヤフォンプラグを入れるところは、スイッチの機能が付いていて、プラグを入れることによってスピーカーの音声が切れるしくみになっています。ですから内部を改造することなしにご質問のような機能を実現することはできないことになります。

 方法があるとすれば、別のアンプとスピーカを用意しテレビの音声用...続きを読む

Qint nII[10] = { 0 }について

久々にCを使ってプログラムを組んでいるのですが、基本的な構文を思い出せず
いくつか教えていただきたく質問させていただきました。

1)配列すべてを初期化するのに、宣言時に

int nII[10] = { 0 };

で大丈夫だった(全ての要素が0で初期化)と記憶しているのですが、間違いないでしょうか?

2)構造体の初期化は

struct tm tm;
memset(&tm, 0, sizeof(struct tm))

で大丈夫でしょうか?

3)構造体の宣言は

typedef struct{
int a;
}HOGE, *LPHOGE;

HOGE st; // <- struct HOGE stと同じ
LPHOGE pst; // <- struct HOGE* pstと同じ

で問題ないでしょうか?

以上、3つ質問になって申し訳ないのですが、よろしくお願いします。

Aベストアンサー

1)OK
2)たぶんOK
3)HOGEという名前の構造体はない(当該の構造体には名前がない)ので、
// 以下のコメント記述が誤っています。ただし、

HOGE st;
LPHOGE pst;
という定義そのものはOK

QPHONE出力しかない場合のアンプは?

Wurlitzer200というビンテージの
電気ピアノがあります。
この楽器は、非常に、有名なのですが、
出力に、小型内臓スピーカーと、
PHONE端子しかありません。
大出力を得るのに、
アンプをPHONE端子につなぎたいのですが、
この場合の注意点は、なにかありますか。
アンプに種類は、
ギター用?キーボード用?
綺麗にアンプから出力するこつ
、見たいなものを、教えてください。
お願いします。

Aベストアンサー

phone というのはヘッドホン出力ということでいいですね.
通常のステレオヘッドホンを挿して使えていますか?
そのとき,左右に音が別れますか (広がって聞こえますか)?
頭のまん中で鳴るように聞こえるなら,出力はモノラルですが,広がって聞こえるならステレオなので,それを活かそうとすると,アンプが2台,あるいは,PA で2ch使って入れるようにした方がいいでしょう.
この場合は
http://www.audio-technica.co.jp/products/cables/musical.html#henkan

の ATL4A46 のようなケーブルを使います.ヘッドホン端子のサイズによっては ATL4A62 かもしれません.この手のケーブルは大きめの電気屋で似たようなものが売っていますから,メーカーとかはどこでもかまいません.

アンプが1台しかなくて,ヘッドホン出力がステレオならば,片チャンネルの音だけを出すか,両方を混ぜて出すかを決めなくてはいけません.
片チャンネルだけでよければ,上のケーブルを使い,片側だけを使えばそれで十分です.
通常は混ぜた方がいいのですが,その場合は適当なケーブルは見当たりませんね.楽器側のことを考えると,単純なショートではなく,適当な抵抗を入れるべきなのですが,そういうのは見当たりませんでした.
自分なら自作してしまいますので...

アンプはキーボード用でもギター用でもかまわないでしょう.
音色は違いますが,どちらの方がいいというものではないからです.

phone というのはヘッドホン出力ということでいいですね.
通常のステレオヘッドホンを挿して使えていますか?
そのとき,左右に音が別れますか (広がって聞こえますか)?
頭のまん中で鳴るように聞こえるなら,出力はモノラルですが,広がって聞こえるならステレオなので,それを活かそうとすると,アンプが2台,あるいは,PA で2ch使って入れるようにした方がいいでしょう.
この場合は
http://www.audio-technica.co.jp/products/cables/musical.html#henkan

の ATL4A46 のようなケーブルを使います.ヘ...続きを読む

Qstd::cout << p と std::cout << *p の違

std::cout << p と std::cout << *p の違いは?

VC++でコードを書きながらC++を学んでいます。
ポインタで疑問に思ったことがあるので質問させて下さい。

int* p;
int n = 100;
p = &a;

上記のように変数を宣言・代入した場合、
std::cout << p と std::cout << *p のどちらでも"100"と表示されます。
これら二つの違いは何でしょうか?
本来*pとすべきところをpにしてもVC++が気を利かせて
&pのアドレスに入っているデータを表示してくれているということでしょうか?

Aベストアンサー

No.1氏の回答にあるコードを元に答えます。

>この場合&pでもアドレスが表示されると思うのですが、
>「&p」と「p」の違いは何でしょうか?
pはaのアドレス。
&pはpのアドレス。
(「p = &a」では、どこのアドレスを渡しているのか考えてみて下さい)


「&p」と「p」の違いというのが参照とポインタの違いを聞いているのだとしたら、constのポインタ==参照型で良かったと思います。
p = &a; //OK
&a = p; //error
int* const p2 = p;
p2 = &a; //error

QアナログRGB出力端子(ミニD-Sub15ピン)がないのですが

PC上の映像をTVで見るためのダウンスキャンコンバータを使ってみたいのですが、
PCからの入力にはアナログRGB出力端子(ミニD-Sub15ピン)が必要なようです。
使用しているPCにはアナログRGB出力端子(ミニD-Sub15ピン)がついていないようです。
USB1.1、IEEE 1394、カードスロットがついています。
ビデオ端子はついていません。

この環境で使用するのは無理なのでしょうか?もし方法があれば教えてください。

Aベストアンサー

PCのモニターにつながってるヤツがそれです。
そこでどうするかですが

1.PCのモニターをはずしてダウンスキャンコンバータに接続しTVで確認しながら操作する。

2.モニター切替器を使用する。

3.2系統出力のあるビデオカードに交換する。

などの方法があります。
1は出費がありませんが、映らなかったときにちと面倒ですね。
お薦めは2です。モニター切替器は↓のディスプレイ分配器とVGA切替器がそうです。


 

参考URL:http://www2.elecom.co.jp/cable/switcher/index.asp

Qchar AA[]{"全角文字"};から"全"という一字を取り出したい

 今晩は、Cの初心者です、宜しくお願いします。
 全角文字の入ったchar AA[]{"全角文字"};から"全"という文字一字を取り出す時にAA[0]とかくとエラーになります。
 どのようにしたら取り出せるのでしょう。
 ポインタを使う方法と使わない方法を教えて下さい。
 宜しくお願いします。

Aベストアンサー

お疲れ様です。

まずお伺いしたのがOSおよび開発するためのコンパイラです。

ロケール等の話は分かりませんが、昔のC言語で日本語を扱う場合には全角文字1文字で2個つのchar領域を使用していました。
(マルチバイト文字セットと言います。)

詳細は参考URLを参照の事。

windowsでVCと仮定した場合、charを使われていると言うことは、多分、shift-jis(シフトJIS)で文字列を扱っていると思われます。

結論として全角文字1文字だけを取り出したいという場合は、結局char2個分のデータを取り出す必要があります。

>char AA[]={'全','角'};

char AA[]="全角";
とし
>printf("%s%s\n" , AA[0],AA[1] ) ;

printf("%c%c\n" , AA[0],AA[1] ) ;
とすれば、「全」だけを表示する事が可能と思われます。

日本語を文字列で表示する為の文字コードについては
Shift-JISだけでなく、UnicodeやUTF・EUC・JISなどがあります。

もう少し詳しく記載してあるホームページはないか探してみましたが、ちょっと無理でした。

参考URL:http://marupeke296.com/CPP_charUnicodeWideChar.html

お疲れ様です。

まずお伺いしたのがOSおよび開発するためのコンパイラです。

ロケール等の話は分かりませんが、昔のC言語で日本語を扱う場合には全角文字1文字で2個つのchar領域を使用していました。
(マルチバイト文字セットと言います。)

詳細は参考URLを参照の事。

windowsでVCと仮定した場合、charを使われていると言うことは、多分、shift-jis(シフトJIS)で文字列を扱っていると思われます。

結論として全角文字1文字だけを取り出したいという場合は、結局char2個分のデータを取り出...続きを読む

Q地デジチューナーで赤白黄色コードでない出力のものありませんか?

まだまだ使えるアナログテレビがあり
地デジチューナーを噛ましてひとまず寿命までと思っています。
地デジチューナーの出力は
赤白黄コード(コンポジット?)が主流のようですが
アンテナ線(同軸ケーブル)で出力できる製品はありませんか?
少しネットで探してみたのですが見つかりませんでした。

今の配線は
 壁→アンテナ線→ビデオ→アンテナ線→テレビ
という配線になっています。

今後は
 壁→アンテナ線→地デジチューナ→赤白黄コード→テレビ
とするとビデオが使えなくなるな~と思いまして。

そもそもVHSビデオもアナログということもあり
アナログテレビとアナログビデオを同時に移行するのは
やはり無理な話なのでしょうか?

Aベストアンサー

勘違いされています。
>壁→アンテナ線→ビデオ→アンテナ線→テレビ
これはビデオの映像をアンテナ線で出しているわけではありません。
内部ではアンテナで受信した信号をスルーしてテレビへ出しています。
したがって、テレビ側から見ると 壁→アンテナ線→テレビ と同じことです。
仮に、地デジチューナーにアンテナ出力があったとしても、テレビがアナログである限りは意味がありません。

地デジチューナーとビデオデッキを併用するなら、
壁→アンテナ線→地デジチューナー→AVケーブル→ビデオ→AVケーブル→テレビ
となります。
録画とか、地デジチューナーとビデオデッキの両方で予約しないとダメなのですっごい面倒ですよ。

Qint kosuu; とstruct tanka_kosuu kosuu[10]; の関係は

同プログラムの内容で現在3個の質問をしておりますが!
 その質問を解決する上で4つ目の質問をさせていただきます。
 悪しからず・・・
 さて
以下のサイトのプログラムで 些細な疑問がございます。
https://oshiete.goo.ne.jp/qa/9062058.html
 で
 struct tanka_kosuu {
int tanka; 
int kosuu; 
int kingaku; /
以上の中にあるkosuuと
 struct tanka_kosuu kosuu[10];のkosuu[10]とは直接関係がありますか?
 馬鹿な質問ばかりで申し訳ございませんがよろしくお願いいたします。

Aベストアンサー

#No.1です。

>kosuu[10];をakb[10];変えたところ 以下の errorでてコンパイルできません!?
> example10.c(15) : error C2065: 'kosuu' : 定義されていない識別子です。


宣言している変数名を変更したら、その変数を利用している場所(エラーメッセージで15行目と書かれています)の変数名も変更する必要があると思いませんか?

下の例で、1行目も変数をaからbに変えたら、2行目,3行目のaも、bに変える必要があのはご理解いただけますよね?
01: int a;
02: a = 10;
03: printf("a=%d\n", a);

QC ファイル出力で、フォルダがない場合でも作成する方法

先日、皆さんに教えていただき

Cで出力ファイルを指定のフォルダに出す方法が上手く出来ました。
具体的には、↓こうやって指定しました。
sprintf( buff, "%s\\%s", path, filename );

やっていて思ったのですが、
この方法だと、指定フォルダが最初から無いとエラーが出てしまいます。
フォルダが無かったら、作成し、その中にファイルを出力していってくれる。という方法はできるものなのでしょうか?

もしできるようなら教えて下さい!!
よろしくお願いします!

Aベストアンサー

★回答ではないが余談。
・koko_u_ さんありがとう。
 気づくとアンダーバーの関数名で置き換わっているみたいですね。
 他にも気づくといろいろ置き換わっていますね。
 C 関数、最近使っていないのでアンダーバーの関数名で調べてみます。
・ありがとうございました。

●質問者さんへ。
・_mkdir() 関数が使える場合はその関数でもフォルダ(ディレクトリ)が作成できます。
 それでは。

参考URL:http://www5c.biglobe.ne.jp/~ecb/c/12_14.html

Qint i, int i[1];

C++で、
 int i;
と、
 int i[1];
は、どっちで宣言をしても、iは同じ振るまいですか?

Aベストアンサー

配列、ポインタなどよりももっと基礎的な概念である「右辺値」、「左辺値」を理解しましょう。

int i ;
この形で宣言されたiは代入式の右辺(代入する値)にも左辺(代入される領域)にも使うことが出来ます。
int a ;
a = i ;
i = 10 ;

C言語でも他のほとんどの言語でも「変数は右辺の時と左辺の時とでは解釈が違う」という原則があります。

代入式の右辺に配置出来るのは『値』です。
変数であっても良いし定数であっても、式であってもかまいません。
左辺がポインタ変数の場合は右辺はアドレス値(またはアドレス式)です。
代入式の右に配置可能な値を右辺値といいます。

代入式の左に配置出来るのは『領域』です。
変数であっても良いし、配列要素でもかまいません。
また、領域を示す式(int i[1]のときの*iなど)でもかまいません。
配列名(int i[1]のときのi)や定数は領域を持たないため、左辺に配置することが出来ません。
代入式の左に配置可能な領域を左辺値といいます。

int i[1] ;
この形で宣言されたiは右辺値に利用できます。
int *a ;
a = i ;
しかし、iだけでは領域を持たないため左辺値になりえません。
i = 1 ; //コンパイルエラーが出る。

コンパイル時に「有効な左辺値でない」と言う意味のエラーが出るのは「領域を示さない値を左辺値として使っている時」です。

どちらかと言うと「基礎理論」の部類なのでプログラム言語の本などには書いてないのですが、実は最も大切なのが「基礎理論」です。
頑張って勉強してください。

配列、ポインタなどよりももっと基礎的な概念である「右辺値」、「左辺値」を理解しましょう。

int i ;
この形で宣言されたiは代入式の右辺(代入する値)にも左辺(代入される領域)にも使うことが出来ます。
int a ;
a = i ;
i = 10 ;

C言語でも他のほとんどの言語でも「変数は右辺の時と左辺の時とでは解釈が違う」という原則があります。

代入式の右辺に配置出来るのは『値』です。
変数であっても良いし定数であっても、式であってもかまいません。
左辺がポインタ変数の場合は右辺はアドレス...続きを読む


人気Q&Aランキング