#include <iostream>
using namespace std;

inline int max(int x, int y){x = x>y ? x:y; return x;}

int main()
{
int num1, num2, ans;

cout << "2つの整数を入力して。\n";
cin >> num1 >> num2;

ans = max(num1, num2);

cout << "最大値は" << ans << "です。\n";

return 0;
}
の{x = x>y ? x:y; return x;}の部分の意味が解りません。

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

A 回答 (5件)

inline int max(int x, int y){x = x>y ? x:y; return x;}


これを普通に関数で書くと

int max(int x, int y)
{
x = x>y ? x:y;
return x;
}

です。

x = 部分は右辺の結果が代入されます。これはわかりますよね。
x>y?x:y;
と書くと?より左にある条件式を判定し、その結果が真である場合は:で区切られた左側の値を、偽である場合は右の値を帰します。
x>yが真であればxを、偽であればyを返します。
それが、左辺値xに代入され、関数の戻り値として帰ります。

従って、2つの値をこの関数に入れると、大きいほうの値が帰ることになります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/01/12 13:24

三項演算子と言います

    • good
    • 0
この回答へのお礼

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

お礼日時:2002/01/12 13:23

>finalanswerの回答に補足です。


ああ、「さん」が抜けてしまった…

finalanswerさん、ごめんなさい。
    • good
    • 0

finalanswerの回答に補足です。



>したがって、「x = x>y ? x:y; return x;」は、以下の文と同値です。
>if (x <= y) {
> x = y;
>}
というのは、間を一段階抜かして書いてあります。

省略せずに書くと、…

…以下の文と同値です。
if ( x > y ){
 x = x;
}else{
 x = y;
}
return x;
しかし、最初の複文の中では何もやっていないので、この部分を省略し、
if (x <= y) { …

…となります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/01/12 13:24

「x = 条件 ? A : B」という文法は、if-else文の特殊な用法で、


if (条件) {
 x = A;
} else {
 x = B;
}
と同値です。
したがって、「x = x>y ? x:y; return x;」は、以下の文と同値です。
if (x <= y) {
 x = y;
}
return x;
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/01/12 13:25

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

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

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

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

Q英語版 Windows XP Proffesional x64 Edition からの日本語入力の問題

イギリスの大学の研究室で使用しているコンピュータから日本語入力、また日本語で書かれたPDFの閲覧ができないので大変不便で困っています。このコンピュータのOSは Windows XP Proffesional x64 Editionで、もちろん海外使用です。 また、Microsoft Office 2007 がインストールされています。
Office XP Tool: Japanese Language Pack と Office XP Tool: Global IME (Japanese)というのをインストールしようと思ったのですが、これはWindows XP Proffesional x64 Editionに対応していないようです。
どなたかこのようなことにお詳しい方がいらっしゃれば是非解決方法を教えてください。

ちなみにこの文章は自分のノートパソコンから入力したものです。

Aベストアンサー

Win XP Pro 64 英語版 日本語 入出力 site:microsoft.com
としてサーチすると
Multilingual User Interface Pack: MUI があり、これを追加する形の方が良いのではと思われます。

個人向けではなく、Volume license形式で会社対応とされていますが、個人でも3-5license単位から買えるようです。

http://technet.microsoft.com/ja-jp/library/cc835604.aspx
Windows XP Professional の多言語機能

http://www.geocities.jp/hpt_user99/vl.html
ボリュームライセンス

英国でも入手可能なはずですから、64bit版に対応しているか等確認のうえ購入されるのが良いと思います。
値段もそんなに高くないはずです。

 

Q#include #include void *Run()

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

void *Run(){
printf("run¥n");


int main(){

(*Run)();
Run();

return 0;


実行結果
run
run

この場合、(*Run)()とRun()は何故同じ結果になるのでしょうか。

なお、このプログラムはWindowsで実行した場合、関数ポインタのところでno return statement in function returning non-voidという 警告(warning)が発生しましたが、Linuxで実行した時は何事もありませんでした。

Aベストアンサー

関数名だけのときは、その関数へのポインタという扱いになる
つまり
Run == &Run
です。
(* Run )() → (* (& Run) )() → Run()
です。


なお、
void * Run ()
と定義したものは
「void * (void型へのポインタ)」を返す関数 Run
であって
「void 型関数へのポインタ」の変数Run
ではありません。

void * を返す、と宣言しているのに、実際にはreturn が無いので、その警告が出ています。
「voidでない(値を返す)関数なのに、(値を返すための)return文が無い」という意味です。

> Linuxで実行した時は何事もありませんでした

(実行ではなく、コンパイルですよね?)
単に、警告表示レベルが低く設定されていて、表示されなかっただけです。
-Wall 等で warning: control reaches end of non-void function [-Wreturn-type] が表示されます。

QPCI EXPRESS X8で使えるビデオカード

自分のマシンには、PCI EXPRESS X8のポートがあります。ここにビデオカードを挿したいのですが、売っているビデオカードはどれも「PCI EXPRESS X16」用みたいなのです。X8に使えるビデオカードってありますでしょうか?よろしくお願いいたします。

Aベストアンサー

コネクタがx16と同じものなら、#1でも記載のように、x16用のビデオカードが動作する可能性が高いです。

x8専用のコネクタなら、x1用のビデオカードが使用できます。

参考例
http://www.watch.impress.co.jp/akiba/hotline/20061007/etc_pciex1r13.html
http://www.watch.impress.co.jp/akiba/hotline/20051008/etc_g550pcie.html
http://ascii.jp/elem/000/000/049/49131/

尚、x8のコネクタに、ビデオカード側のカードエッジを切断して無理矢理動作させたって話しもありましたが・・・。

http://www.watch.impress.co.jp/akiba/hotline/20060520/etc_pcie16to8.html

PCI Express x4/x8コネクタ対応のビデオカードも一応存在しますが、今でも入手できるかは不明

http://www.watch.impress.co.jp/akiba/hotline/20050709/etc_xenteragt4.html
http://akiba.ascii24.com/akiba/news/2005/07/08/656863-000.html

コネクタがx16と同じものなら、#1でも記載のように、x16用のビデオカードが動作する可能性が高いです。

x8専用のコネクタなら、x1用のビデオカードが使用できます。

参考例
http://www.watch.impress.co.jp/akiba/hotline/20061007/etc_pciex1r13.html
http://www.watch.impress.co.jp/akiba/hotline/20051008/etc_g550pcie.html
http://ascii.jp/elem/000/000/049/49131/

尚、x8のコネクタに、ビデオカード側のカードエッジを切断して無理矢理動作させたって話しもありましたが・・・。

http://...続きを読む

QC言語のプログラムで#includeを使わず#includeだけで

C言語のプログラムで#include<math.h>を使わず#include<stdio.h>だけで√(sqrt)を表現することは可能でしょうか?

Aベストアンサー

ご自分で sqrt 関数を作れば可能です。
こんな感じでしょうか。

#include <stdio.h>

static double
sqrt (double s)
{
 double x = s / 2.0;
 double last_x = 0.0;

 while (x != last_x)
 {
  last_x = x;
  x = (x + s / x) / 2.0;
 }

 return (x);
}

int
main (int argc, char * argv[])
{
 printf ("sqrt (%f) = %f\n", 3.0, sqrt (3.0));
}

QNever feed your hamster raw potatoes. (Similarly/A

Never feed your hamster raw potatoes. (Similarly/As well), never feed it rhubarb leaves.
正解はSimilarlyですがどちらも同様にのような意味なのですが、As wellは副詞句なので文頭、文中、文末にも置けそうですし。なぜSimilarlyが正解か教えてください。

Aベストアンサー

as well というのは、
A as well as B で「B と同様に A も」がもとにあって、
as B が自明で(とか前にあるので)省略された形です。

だから、A as well で「A も同様に」という表現です。
つまり、「~も」という同様となる「~」が as well の前に来ないといけません。

QC++での とusingnamespaceの関係等を教えてください。

どうでもいい質問なのですが…

C++で色々とソースを打っていると気づいたのです。
#include <iostream.h>とするとusing namespace std;の一文を書かなくてもコンパイルエラーになりません。
また、逆に#include <iostream>とするとusing namespace std;の一文が必要になります。

だから、h(ヘッダファイル)の.hは必要なのかな?と思い、#include <cstdlib.h>とするとコンパイルエラーになります。

なにか理屈がわかりません。コンパイラはVC++6.0です。よろしくご回答の方お願いいたします。

Aベストアンサー

完全な法則、理屈があるというよりも、歴史的経緯によるものです。

<iostream.h>は、namespace stdがまだ決まってなかった頃の名残、「古いヘッダ」です。
VC6は言語仕様が正式に固まるより古い代物なので、
<iostream.h>という過渡期の遺物がついてます。
この頃は、namespace stdがまだなかったので、
<iostream.h>内の関数はusingしなくても使えます。

但し、今の言語仕様ではnamespace stdが導入されてますので、
あくまで互換性のためのものと思います。
新規に書くなら<iostream>を使うべきです。

一方、<iostream>の方は現行言語仕様通りのヘッダです。
こちらは、namespace std内の定義に正しくなっているため、
namespaceを指定して使う必要があります。

 using namespace std;や、using std::cout;の他、
 std::cout << "foo";などもできますので、
 必ずしもusing directiveやusing declarationが必要とは限りませんが。
 少なくとも、ヘッダなどで *むやみに* usingはnamespaceの意義を損ない好ましくないと思います(使い方次第)。

> h(ヘッダファイル)の.hは必要なのかな?と思い、

ちなみに、C++としては、単にヘッダであり、ファイルとは限りません。

> #include <cstdlib.h>とするとコンパイルエラーになります。

「c…」なヘッダには原則、対応するC言語のヘッダがあります。
「c…」というヘッダは、そのC言語のヘッダのC++版であり、
もし<cstdlib.h>に相当するものがあるとすれば、それは単に<stdlib.h>です。
C言語にはnamespaceがありませんので、<stdlib.hにもnamespace stdはありません。

<iostream>はC言語にはない、C++独自のヘッダであり、
<cstdlib>はC言語の<stdlib.h>のC++版なので、そのような挙動の違いになります。
<cstdio>と<stdio.h>とか、<cstring>と<string.h>とか、
もともと対応するC言語のヘッダがあるものは「c…」という名前になってます。

完全な法則、理屈があるというよりも、歴史的経緯によるものです。

<iostream.h>は、namespace stdがまだ決まってなかった頃の名残、「古いヘッダ」です。
VC6は言語仕様が正式に固まるより古い代物なので、
<iostream.h>という過渡期の遺物がついてます。
この頃は、namespace stdがまだなかったので、
<iostream.h>内の関数はusingしなくても使えます。

但し、今の言語仕様ではnamespace stdが導入されてますので、
あくまで互換性のためのものと思います。
新規に書くなら<iostream>を使うべきです...続きを読む

Qbeautifulの言葉の真意。

ここか、別カテゴリーかで悩んだのですが。
言葉そのものの意味を知りたかったので、こちらで質問させていただきます。
私は時々、白人男性に、beautifulと言われますが、日本人男性には(比較的若い人)、可愛いと言われます。また、白人女性には、「Are you Japanese?」といわれるのですが。
私は、言葉どおりに受け取っていたのですが
(キレイ、とあなた日本人なの?という意味合い)
例えば、日本人だと、かなり年取ったおじーちゃんにも、あんたは美人だねえ、と言われるけど、
女性の美しさを形容する時のこのbeautifulって、何を持ってキレイだって言っている場合が多いのでしょうか?
というのも、海でシュノーケルやダイビングとかしてても言われるので、
うん? と思ってしまったんです。
嬉しいことには変わりはないけど。
主にネイティブレベルの方にお聞きしたいのですが。
くだらない質問ですみません。
are you japanese? も、なんだろー?とか思っちゃってます。

Aベストアンサー

経験から話しますと、顔だけではないと思います。
私は決して美人タイプではないのでそれはたしかだと思います。
その人の振舞い方とか、装いとかがその人と場所にあってる時に、ふっと目を奪われるとか、そんな感じでしょうか。たとえば快晴の日に自分のお気に入りの服を着て、大好きな曲を聴きながら歩いてたりとか、女友達と心のそこから笑ってるときなど ”beautiful!"
とか"gorgeous!"など、からっと 声を掛けられます。そんないい気分の時にはにっこり笑って、thank you~~ と言うようにしてます。 ちなみに深刻に言ってくる人からは逃げたほうがいいです。付きまとわれたりしますので。

ちなみに私は"you are NOT japanese, are you?????" と言われ、日本人だと言うと、"NO~~" と言われました。よくあることなので慣れました。I'm so tempted to say, "I'm half Japanese, quarter Argentina and quarter Thai.".. I'm guessing that people would believe me more!!

経験から話しますと、顔だけではないと思います。
私は決して美人タイプではないのでそれはたしかだと思います。
その人の振舞い方とか、装いとかがその人と場所にあってる時に、ふっと目を奪われるとか、そんな感じでしょうか。たとえば快晴の日に自分のお気に入りの服を着て、大好きな曲を聴きながら歩いてたりとか、女友達と心のそこから笑ってるときなど ”beautiful!"
とか"gorgeous!"など、からっと 声を掛けられます。そんないい気分の時にはにっこり笑って、thank you~~ と言うようにしてます。 ちな...続きを読む

Q#include

#include <stdio.h>

struct st
{
char a[3];
short b;
char c[7];
long d;
char e[5];
};

int main(void)
{
printf("%d\n",sizeof(struct st));
return 0;
}

コンパイルオプションでアライメントを変化させながら(1,2,4,…)
sizeof(struct st)の変化を見たいのですが、コンパイルする時に
どのようにすれば良いのでしょうか?当方、gccを使用しております。

あと、ついでなんですが、警告オプションは-Wと-Wallしかないのでしょうか?

Aベストアンサー

GCCのマニュアル
http://gcc.gnu.org/onlinedocs/index.html
日本語訳は古いバージョンのしか見つからなかった。

> アライメントを変化させながら
http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable-Attributes

コンパイラオプションでやるなら、-Dでマクロを使うなりして。
インテルプロセッサだと
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options

> -mpreferred-stack-boundary=num
> -mincoming-stack-boundary=num
というあたりも関係あるかも

>警告オプションは-Wと-Wallしかないのでしょうか
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/Warning-Options.html#Warning-Options

GCCのマニュアル
http://gcc.gnu.org/onlinedocs/index.html
日本語訳は古いバージョンのしか見つからなかった。

> アライメントを変化させながら
http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable-Attributes

コンパイラオプションでやるなら、-Dでマクロを使うなりして。
インテルプロセッサだと
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options

> -mpreferred-stack-boundary=num
> -mincoming-stack-boundary=num
とい...続きを読む

QJapanese-made camera

日本製のカメラをJapanese-made cameraと言いますよね。ふと思ったんですが、Japan-made cameraとは言わないのでしょうか?

複合語 "X-made" のXのところには、例えばslightly-made man(体つきのほっそりした男性)のように副詞がくる場合は理解できます。でも、形容詞がくるというのがピンときません。むしろJapan-made cameraのようにXに名詞が来るというのならわかる気がするのですが。

どなたか説明していただけませんでしょうか。

Aベストアンサー

補足がありましたので思いついたことを追加します。

私はGoogleでいろんなパターンを確認していましたが、Japan-made productというのは試していませんでしたね。

結局のところ好みの問題だと思うのですが、UK、USAは政治的境界と地理的境界が、UK-British、USA-Americanでずれがあるのでそういった使い分けもあるでしょう。

形容詞-made(準動詞) 名詞のパターンが多いのは、誤解を避けるという意味合いもあるのかもしれません。

名詞-準動詞-名詞の並びだと、たとえばこんな文で
Do you know(any)Japan made camera like this?
Do you know(any)"Japan made camera" like this?
ではなく、anyがないと特に
Do you know that Japan made (a) camera like this?
のようにJapan made cameraの部分が主語-述語-目的語に感じられたり、そうでなくてもJapan(名詞)の部分で文章の要素が出そろってしまい、made以下がJapanの修飾語(Japan which is made・・・)のように思えることもあるでしょう。

そういった意味では、Japanese made cameraなら、前に主語述語があって無意識に目的語を探しているときにJapaneseで引っかかることなく形容詞→形容詞→目的語
と到達できそうです。
もちろんこれしきの複合形容詞で引っかかることはないでしょうし、話し言葉では明らかに文の切れ目が違うので、ややこじつけがある説明だと思います。

Japanese-made cameraは、japanese cameraに補足的に、単なる日本製品ではなく「日本で製造された」という意味を出すために、madeを補っていると考えれば、形容詞-made cameraでも不自然ではないと思います。Japanese (製造は:made)camera
foreign-owned businessesも、foreign (資本的には:owned)businessesということではないでしょうか?

こじつけてきな文法的説明は可能ですが、特にこの手のハイフンで結んで長い形容詞を作るものに明確なルールはないと思います(ハイフンすら省略可能ですので)ので、好みの部分が大きいのではないかと思います。

余談:
私もfwkk8769さんと同じくJapaneseは「日本人」を表わす名詞ではなく形容詞だと思います。
Turkish-made craft とは言いますが、Turk-made craftというのは???です。
(Turkey:トルコ(国名)、Turkish:トルコの(形容詞)、Turk:トルコ人)

補足がありましたので思いついたことを追加します。

私はGoogleでいろんなパターンを確認していましたが、Japan-made productというのは試していませんでしたね。

結局のところ好みの問題だと思うのですが、UK、USAは政治的境界と地理的境界が、UK-British、USA-Americanでずれがあるのでそういった使い分けもあるでしょう。

形容詞-made(準動詞) 名詞のパターンが多いのは、誤解を避けるという意味合いもあるのかもしれません。

名詞-準動詞-名詞の並びだと、たとえばこんな文で
Do you know(...続きを読む

Qtry{}catch(){}とデストラクタの関係を教えてください。

try-catchでメモリ確保を含むクラスをスローした場合、デストラクタはどの時点で働くのか、教えてください。たとえば、↓の使いかたは大丈夫でしょうか?

【1】
try{
 throw(CError(100, "エラー情報"));
}catch(CError& err){
 //ここでerrを参照しても問題ないのでしょうか?
}

【2】
try{
 CError err(100, "エラー情報");
 throw(err); // (1)
}catch(CError& err){
 //ここでerrを参照しても問題ないのでしょうか?
 //まだデストラクタはちゃんと動作するのでしょうか?
 //catchが呼び出し元のメンバであったりしても大丈夫なのでしょうか?
}

宜しくお願いします。

Aベストアンサー

【1】【2】どちらの場合も問題がありません。
コンパイラが必要に応じてerrオブジェクトのコピーを作成します。
デストラクタが呼び出されるタイミングはコンパイラに依存するところもあると思いますが、
例えばVC7.1では【2】は以下のように動作します。
(1) errオブジェクトのコンストラクタが呼び出される
(2) CErrorクラスのテンポラリオブジェクト(以下a)のコピーコンストラクタが呼び出される。
(3) errオブジェクトのデストラクタが呼び出される
(4) catch文まで到達
(5) aオブジェクトのデストラクタが呼び出される。

VC7.1では、【1】は以下のように動作します。
(1) errオブジェクトのコンストラクタが呼び出される
(2) catch文まで到達
(3) errオブジェクトのデストラクタが呼び出される。

コンパイラがオブジェクトのコピーを省略しているようです。


人気Q&Aランキング

おすすめ情報