関数の問題で疑問点+分からない演習課題
関数の問題で疑問点+分からない演習課題
まず 画面に「こんにちは。」と表示して改行を行う関数
void hello(void){/*・・・・*/}を作成せよ。という問題がまったく分からないです。
次に二乗値を返すプログラムで、入力する(int main)の部分はいいのですが
int sqr(int x)
{
return(x*x);
}
ここまでは教科書で与えられています。
演習問題
int型整数の三乗値を返す関数
int cube(int x){/*・・・*/}を作成せよ。
という問題を
int cube(int x)
{
return(x*x*x);
}
と持ってきました。
合っているのか分からない前にsqrとcubeの違いが分からないです。
もう1つの演習で
int型の整数の4乗値を返す関数
int pow4(int x){/*・・・*/}を作成せよ
ただし関数sqrを利用すること。
という問題で
int sqr(int x)
{
return(x*x*x*x);
}
こう持ってきましたが
int pow4(int x)を持ってきていないから違うと思うし、演習2題ともやっていることが単純すぎるので違うと思うのですが、先が見えてきません。
すべてint xの部分はscanfで持ってきます。(int main )の中で。
これらすべての問題でライブラリ関数は使用禁止とされています。使用していいのは<stdio.h>
聞きたいことが分かりにくいと思うのですがお願いします。
void hello(void){/*・・・・*/}を作成せよ。という問題がまったく分からないです。
次に二乗値を返すプログラムで、入力する(int main)の部分はいいのですが
int sqr(int x)
{
return(x*x);
}
ここまでは教科書で与えられています。
演習問題
int型整数の三乗値を返す関数
int cube(int x){/*・・・*/}を作成せよ。
という問題を
int cube(int x)
{
return(x*x*x);
}
と持ってきました。
合っているのか分からない前にsqrとcubeの違いが分からないです。
もう1つの演習で
int型の整数の4乗値を返す関数
int pow4(int x){/*・・・*/}を作成せよ
ただし関数sqrを利用すること。
という問題で
int sqr(int x)
{
return(x*x*x*x);
}
こう持ってきましたが
int pow4(int x)を持ってきていないから違うと思うし、演習2題ともやっていることが単純すぎるので違うと思うのですが、先が見えてきません。
すべてint xの部分はscanfで持ってきます。(int main )の中で。
これらすべての問題でライブラリ関数は使用禁止とされています。使用していいのは<stdio.h>
聞きたいことが分かりにくいと思うのですがお願いします。
Re:関数の問題で疑問点+分からない演習課題
根本的に関数がわかっていないのでしょうか。
> まず 画面に「こんにちは。」と表示して改行を行う関数
> void hello(void){/*・・・・*/}を作成せよ。という問題がまったく分からないです。
分割してみます。
・関数がどうこうを無視して「こんにちは。」と表示するプログラムを書ける
・そのプログラムに何もしない関数helloを追加することができる
・そのプログラムが何もしない関数helloを呼び出すようにすることができる
・関数helloが「こんにちは。」を表示するように変更することができる
あなたはどこまでできますか?
> 合っているのか分からない前にsqrとcubeの違いが分からないです。
見てわかるとおり,sqrはx * xを計算し,cubeはx * x * xを計算します。
というか自分で書いておいて違いがわからないのはなぜ?
> int pow4(int x)を持ってきていないから違うと思うし、演習2題ともやっていることが単純すぎるので違うと思うのですが、先が見えてきません。
xの4乗は(xの2乗)の2乗であるという数学的な部分はわかっていますか?
これがわかれば,sqrを使って書くのは難しくないと思いますが……。
> まず 画面に「こんにちは。」と表示して改行を行う関数
> void hello(void){/*・・・・*/}を作成せよ。という問題がまったく分からないです。
分割してみます。
・関数がどうこうを無視して「こんにちは。」と表示するプログラムを書ける
・そのプログラムに何もしない関数helloを追加することができる
・そのプログラムが何もしない関数helloを呼び出すようにすることができる
・関数helloが「こんにちは。」を表示するように変更することができる
あなたはどこまでできますか?
> 合っているのか分からない前にsqrとcubeの違いが分からないです。
見てわかるとおり,sqrはx * xを計算し,cubeはx * x * xを計算します。
というか自分で書いておいて違いがわからないのはなぜ?
> int pow4(int x)を持ってきていないから違うと思うし、演習2題ともやっていることが単純すぎるので違うと思うのですが、先が見えてきません。
xの4乗は(xの2乗)の2乗であるという数学的な部分はわかっていますか?
これがわかれば,sqrを使って書くのは難しくないと思いますが……。
Re:関数の問題で疑問点+分からない演習課題
まだまだ自分も突っ込めるLvじゃないと思いますが、ちょっと突っ込みを
突っ込みに突っ込みをしてくれる方は大募集していますw
> まず 画面に「こんにちは。」と表示して改行を行う関数
> void hello(void){/*・・・・*/}を作成せよ。という問題がまったく分からないです。
これ以外に難しく見えて簡単でしたw自分もまだC初めて1ヶ月ぐらいですけどググるとよく出てきます
C言語 自作関数 などで検索すると1ページ目に結構あります。
プログラムは上から順番に読み込んでいくということを頭にやってみるといいかも知れません。
また全てはmain関数が始まりであり終わりであると言うことも忘れずに。
関数を作るって言う響きが結構難しく感じますがYuOさんが段階わけしてくださったようにできるか確かめると
どこまでわかっててどこまでわからないかがわかると思います。
(自分もわからないところだらけなんですがねw)
> 合っているのか分からない前にsqrとcubeの違いが分からないです。
YuOさんが仰られている通り2乗3乗でしょう
sqrはスクウェア square
cubeはキュービックもしくはキューブ cubic cube
だと思います
>int pow4(int x){/*・・・*/}を作成せよ
>ただし関数sqrを利用すること。
ヒントはreturn のところにあるような
(数学的に表現してます)
(x*x*x*x) = (x^2) * (x^2) *x^○はxの○乗の意
コレで(sqr*sqr)で出来ると思います。
まだ初心者の域を脱してない自分が偉そうに言うのもアレなんで「ちゃんとした説明などが出来る」他の方にお任せします
そもそもここに書くなという声があがりそうだorz
突っ込みに突っ込みをしてくれる方は大募集していますw
> まず 画面に「こんにちは。」と表示して改行を行う関数
> void hello(void){/*・・・・*/}を作成せよ。という問題がまったく分からないです。
これ以外に難しく見えて簡単でしたw自分もまだC初めて1ヶ月ぐらいですけどググるとよく出てきます
C言語 自作関数 などで検索すると1ページ目に結構あります。
プログラムは上から順番に読み込んでいくということを頭にやってみるといいかも知れません。
また全てはmain関数が始まりであり終わりであると言うことも忘れずに。
関数を作るって言う響きが結構難しく感じますがYuOさんが段階わけしてくださったようにできるか確かめると
どこまでわかっててどこまでわからないかがわかると思います。
(自分もわからないところだらけなんですがねw)
> 合っているのか分からない前にsqrとcubeの違いが分からないです。
YuOさんが仰られている通り2乗3乗でしょう
sqrはスクウェア square
cubeはキュービックもしくはキューブ cubic cube
だと思います
>int pow4(int x){/*・・・*/}を作成せよ
>ただし関数sqrを利用すること。
ヒントはreturn のところにあるような
(数学的に表現してます)
(x*x*x*x) = (x^2) * (x^2) *x^○はxの○乗の意
コレで(sqr*sqr)で出来ると思います。
まだ初心者の域を脱してない自分が偉そうに言うのもアレなんで「ちゃんとした説明などが出来る」他の方にお任せします
そもそもここに書くなという声があがりそうだorz
Re:関数の問題で疑問点+分からない演習課題
YuO様
そのプログラムが何もしない関数helloを呼び出すようにすることができる
・関数helloが「こんにちは。」を表示するように変更することができる
ここから分からないです。
YuO様、ひろろ軍曹様
下の関数の部分は理解できました。ありがとうございます。
そのプログラムが何もしない関数helloを呼び出すようにすることができる
・関数helloが「こんにちは。」を表示するように変更することができる
ここから分からないです。
YuO様、ひろろ軍曹様
下の関数の部分は理解できました。ありがとうございます。
Re:関数の問題で疑問点+分からない演習課題
あー、自分も良くわからなくなってきた('A`) 日本語を勉強しないと・・・orz
プロトタイプ宣言にするにしろmain関数を後に書くにしろ
>・関数helloが「こんにちは。」を表示するように変更することができる
というのを
・さっき呼び出した何もしない関数helloで「こんにちは」と表示させるプログラムに変更することができる
と自分は勝手に変換してました(ぁ
多分あってるとは思いますが戻り値・引数のあたりが自分は微妙なのでなんともorz
こんなLvで質問に答えていいのやら・・・自分の勉強も兼ねて答えてみたのですがマズそうだったら削除お願いしますorz
>・関数がどうこうを無視して「こんにちは。」と表示するプログラムを書ける #include <stdio.h> int main(void) { printf("こんちわ\n"); return 0; } >・そのプログラムに何もしない関数helloを追加することができる #include <stdio.h> void hello(void) { return 0; } int main(void) { printf("こんちわ\n"); return 0; } >・そのプログラムが何もしない関数helloを呼び出すようにすることができる #include <stdio.h> void hello(void) { return 0; } int main(void) { hello(); } >・関数helloが「こんにちは。」を表示するように変更することができる #include <stdio.h> void hello(void) { //「こんにちは。」を表示する return 0; } int main(void) { hello(); }ってことだと思います
プロトタイプ宣言にするにしろmain関数を後に書くにしろ
>・関数helloが「こんにちは。」を表示するように変更することができる
というのを
・さっき呼び出した何もしない関数helloで「こんにちは」と表示させるプログラムに変更することができる
と自分は勝手に変換してました(ぁ
多分あってるとは思いますが戻り値・引数のあたりが自分は微妙なのでなんともorz
こんなLvで質問に答えていいのやら・・・自分の勉強も兼ねて答えてみたのですがマズそうだったら削除お願いしますorz
Re:関数の問題で疑問点+分からない演習課題
横レスですが…
void hello(void)
{
//「こんにちは。」を表示する
return 0;
}
void型の関数で、戻り値を設定するのはマズイのではないでしょうか?
void hello(void)
{
//「こんにちは。」を表示する
return 0;
}
void型の関数で、戻り値を設定するのはマズイのではないでしょうか?
Re:関数の問題で疑問点+分からない演習課題
同じく横レスすみまそ・・
この問題、もうほとんど答えができてるような気がしますが・・
void hello(void) { //「こんにちは。」を表示する return 0; }私は、voidの場合はreturnはつけませんなぁ。
この問題、もうほとんど答えができてるような気がしますが・・
Re:関数の問題で疑問点+分からない演習課題
最初の下の問題も解決できていませんでした。
こんな感じなのかなと作ってみましたがエラーがかかってしまいます
#include<stdio.h>
int sqr(int x)
{
return(x*x);
}
int pow4(int x)
{
return(sqr*sqr);
}
int main()
{
int a;
printf("整数を入力してください\n");
printf("整数:");scanf("%d",&a);
printf("入力された値の4乗は%dです",pow4(a));
return(0);
}
逆にvoid hello(void)の方はプログラムができました。
こんな感じなのかなと作ってみましたがエラーがかかってしまいます
#include<stdio.h>
int sqr(int x)
{
return(x*x);
}
int pow4(int x)
{
return(sqr*sqr);
}
int main()
{
int a;
printf("整数を入力してください\n");
printf("整数:");scanf("%d",&a);
printf("入力された値の4乗は%dです",pow4(a));
return(0);
}
逆にvoid hello(void)の方はプログラムができました。
Re:関数の問題で疑問点+分からない演習課題
ん~厳密にはどうなんでしょうかねぇ・・・・
自分はvoid型の関数にはEOF(エンドオブファンクション)の意味でreturn;をつけてますが・・・
引数、返り値がないvoid型なのでreturnだけにしてつけてますが付いてても付いてなくても一緒なのかしら
それともreturn;自体がマズいのでしょうかねぇ・・・
ちょっと調べてみます(・w・)ノ
自分はvoid型の関数にはEOF(エンドオブファンクション)の意味でreturn;をつけてますが・・・
引数、返り値がないvoid型なのでreturnだけにしてつけてますが付いてても付いてなくても一緒なのかしら
それともreturn;自体がマズいのでしょうかねぇ・・・
ちょっと調べてみます(・w・)ノ
Re:関数の問題で疑問点+分からない演習課題
#include<stdio.h> int pow4(int x) { int sqr = x*x; return (sqr*sqr); } int main(void) { int a; printf("整数を入力してください\n"); printf("整数:"); scanf("%d",&a); printf("入力された値の4乗は%dです",pow4(a)); return 0; }これでできましたがどうなんだろうか。。。ちょっと自信ないですわ
return (sqr*sqr);
これがポインタの扱いされます
sqrが何をあらわしているか定義されてない為だと思われます
このままだと整数以外のアルファベットや記号入力されたときにその対応しているアスキーコードの数で4乗されてしまうような
Re:関数の問題で疑問点+分からない演習課題
>>徹夜さん
どのようなエラーかも書くと答える側からしても答えやすいと思いますよ(^-^)
この部分、引数が指定されずにsqr関数を呼び出しているのが原因だと思います。
>>ひろろ軍曹さん
出力される答えは合っていると思いますが…
>int型の整数の4乗値を返す関数
>int pow4(int x){/*・・・*/}を作成せよ
>ただし関数sqrを利用すること。
問題文のこの箇所を満たせていないですね…惜しいです(^_^;)
どのようなエラーかも書くと答える側からしても答えやすいと思いますよ(^-^)
int pow4(int x) { return (sqr * sqr); }
この部分、引数が指定されずにsqr関数を呼び出しているのが原因だと思います。
>>ひろろ軍曹さん
出力される答えは合っていると思いますが…
>int型の整数の4乗値を返す関数
>int pow4(int x){/*・・・*/}を作成せよ
>ただし関数sqrを利用すること。
問題文のこの箇所を満たせていないですね…惜しいです(^_^;)
Re:関数の問題で疑問点+分からない演習課題
Σ(゜Д゜)
とんでもない前提条件を見落としてたorz
なので問題の部分は削除しましたw
*void型はreturn;でも問題ないとどっかのサイトに書いてありましたorz
とんでもない前提条件を見落としてたorz
#include<stdio.h> int sqr(int x) { return(x*x); } int pow4(int x) { return (ここにある答えが入ります); return( sqr(x) * sqr(x) ); } int main(void) { int a; printf("整数を入力してください\n"); printf("整数:"); scanf("%d",&a); printf("入力された値の4乗は%dです",pow4(a)); return 0; }これでいかがなもんでしょうか・・ってオレがやってどうするorz
なので問題の部分は削除しましたw
*void型はreturn;でも問題ないとどっかのサイトに書いてありましたorz
Re:関数の問題で疑問点+分からない演習課題
横レスですが。
>void型はreturn;でも問題ないとどっかのサイトに書いてありましたorz
そのサイトに書かれている通り、戻り値が voidなら関数の最後に "return;"が
有っても無くても同じです。
ちなみに私もつけない方です。結果が同じなら書かない方が楽なので。
で、他はどうかなぁ、とちょっといくつか手持ちのソースコードで
戻り値が voidの時 returnをつけているかどうか、
それぞれ1,2ファイルずつチョイスして調べてみました。
MSVC7.1 crt・・・なし
BCC5.5.1 のStdLib・・・なし
dmalloc・・・なし
COLLADA・・・なし
irrlicht・・・なし
DxLib・・・なし
DirectX9.0cのサンプル・・・なし
zlib・・・なし
unrar・・・なし
ICU・・・なし
xerces・・・ほとんどなし(1つだけあった)
tinyxml・・・なし
Adobe Acrobat SDKのサンプル・・・なし
Adobe Photoshop SDK 6.0のサンプル・・・なし
Camellia・・・有ったり無かったり
libvorbis・・・なし
DVDコンバータ・・・なし
Quake3・・・なし
ToHeart2(PC)・・・なし
う~ん、圧倒的になしが多いようですね。
何かの慣習なんでしょうかね。
>void型はreturn;でも問題ないとどっかのサイトに書いてありましたorz
そのサイトに書かれている通り、戻り値が voidなら関数の最後に "return;"が
有っても無くても同じです。
ちなみに私もつけない方です。結果が同じなら書かない方が楽なので。
で、他はどうかなぁ、とちょっといくつか手持ちのソースコードで
戻り値が voidの時 returnをつけているかどうか、
それぞれ1,2ファイルずつチョイスして調べてみました。
MSVC7.1 crt・・・なし
BCC5.5.1 のStdLib・・・なし
dmalloc・・・なし
COLLADA・・・なし
irrlicht・・・なし
DxLib・・・なし
DirectX9.0cのサンプル・・・なし
zlib・・・なし
unrar・・・なし
ICU・・・なし
xerces・・・ほとんどなし(1つだけあった)
tinyxml・・・なし
Adobe Acrobat SDKのサンプル・・・なし
Adobe Photoshop SDK 6.0のサンプル・・・なし
Camellia・・・有ったり無かったり
libvorbis・・・なし
DVDコンバータ・・・なし
Quake3・・・なし
ToHeart2(PC)・・・なし
う~ん、圧倒的になしが多いようですね。
何かの慣習なんでしょうかね。
Re:関数の問題で疑問点+分からない演習課題
return は、ニュアンスとしては、
・関数の途中から強制的に抜ける(これは、一般的な意味では、良くない設計のと見なされる)
・読み出し元に値を返す
という用途に使うので、返値が void の関数の場合、return は無いことが多いですね。
・関数の途中から強制的に抜ける(これは、一般的な意味では、良くない設計のと見なされる)
・読み出し元に値を返す
という用途に使うので、返値が void の関数の場合、return は無いことが多いですね。
Re:関数の問題で疑問点+分からない演習課題
> ・関数の途中から強制的に抜ける(これは、一般的な意味では、良くない設計のと見なされる)
えーっと,なぜ「一般的な意味では、良くない設計と見なされる」のでしょうか。
処理が終了した時点で関数から抜けるのは当然だと思いますが。
# ガード節をreturnしなかったら,ネストが深くてやってられなくなる。
えーっと,なぜ「一般的な意味では、良くない設計と見なされる」のでしょうか。
処理が終了した時点で関数から抜けるのは当然だと思いますが。
# ガード節をreturnしなかったら,ネストが深くてやってられなくなる。
Re:関数の問題で疑問点+分からない演習課題
>> ・関数の途中から強制的に抜ける(これは、一般的な意味では、良くない設計のと見なされる)
> えーっと,なぜ「一般的な意味では、良くない設計と見なされる」のでしょうか。
「一般的な意味では」というのは、「そうなっていたら、処理の流れを検討せずに何となく書いたという可能性がある」という意味です。
ですから、うまく設計した上で、途中で抜けるのがベストという判断があれば、「一般的な意味では」に相当しません。
ちょうど、「一般的な意味では、goto は良くない設計の兆候である」というのと同じです。
これも、goto を回避するあまり、かえってわかりにくくなるのは本末転倒ですから。
これに限らず、「一般的には」という前置きは、「当てはまらない例は山ほどある」ということですから。
> えーっと,なぜ「一般的な意味では、良くない設計と見なされる」のでしょうか。
「一般的な意味では」というのは、「そうなっていたら、処理の流れを検討せずに何となく書いたという可能性がある」という意味です。
ですから、うまく設計した上で、途中で抜けるのがベストという判断があれば、「一般的な意味では」に相当しません。
ちょうど、「一般的な意味では、goto は良くない設計の兆候である」というのと同じです。
これも、goto を回避するあまり、かえってわかりにくくなるのは本末転倒ですから。
これに限らず、「一般的には」という前置きは、「当てはまらない例は山ほどある」ということですから。