只今ゼロからプログラミングの勉強をしています。
言語はC言語を習得したいと思ってます。
(将来的にはJavaも!)
す~っごく初歩的な質問で申し訳ないんですが
関数とは何でしょうか?
引数とは何でしょうか?
またその関係について、非常にわかりやすく
簡単に教えていただけないでしょうか?
よろしくお願いします。

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

A 回答 (5件)

関数=電子レンジ


引数=レンジに入れる「弁当」 や 電子レンジの「設定」(例えば3分あたためるの「3」など」

電子レンジ(弁当, 3)
  ↓    ↓  ↓
 関数   引数1 引数2

これを実行した結果としてふさわしい結果は普通は「あったか弁当」の誕生でしょう。
であるとすれば、次のようになります。

電子レンジ(弁当, 3)
───────────
     ↓
この(関数+引数)全体で「あったか弁当」という「値」を返してくれる。
    • good
    • 2
この回答へのお礼

回答ありがとうございました。
とてもわかり易くて理解できました。
更なる飛躍を目指したいと思います!

お礼日時:2001/07/06 19:34

C言語では、関数が基本になります。


その関数へ渡す値が引数です。

C言語はmain関数から始まります。
そのmain関数の中に長々と処理を書いている人もいますが、プログラムの可読性が悪くなります。そこで、纏まった処理は下請けに出します、その下請けが関数です。そのとき必要な部品数を伝えるのが引数です。

簡単な例
/*プロトタイプ宣言*/
int wa(int , int);
int seki(int, int);

/*main関数*/
void main()
{
   int a, b ,c ,d;
   a = 10;
   b = 20;
   c = wa( a , b );
   d = seki( a, b );
}
/*関数*/
int wa(int x, int y)
{
   return x + y;
}
int seki(int x, int y)
{
   return x*y);
}

関数int wa(int x, int y),int seki(a ,b)
実引数 a,b.........実際この引数に値が入って渡される。
仮引数x,y..........こちらは引き受ける引数で、仮にx,yとなっているだけです。

(このソースをコピー&ペーストで使用できません。理由:可読性をよくするために、全角スペースを入れています)
以上、簡単な説明ですが、ご参考まで(^^;
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
参考ソースまで付けていただいて
よくわかりました。

お礼日時:2001/07/06 19:30

ゼロからプログラムを勉強しているとのことですが、Cプログラミングではmain関数という関数を使います。


プログラムの動作はこのmain関数の中に記述された一連の処理を行うことによって実現します

C言語で最初に作るプログラムの定番はHello.cです。
具体的に記述すると以下のようになります。

#include <stdio.h>
void main(){
printf("Hello World!");
}

このプログラムは画面にHello World と表示するだけの処理をします。

このように、処理が短いときはmain関数だけ使ってプログラムが書けるので、関数や引数を気にする必要はありません。

しかし、処理が長くなったり、複数の人間で分担して作業を行うようになるとmain関数のなかに全部の処理をダラダラっと記述するのは効率上よくありません。
そこで、main以外に関数をつくり、処理の分担を行うのです。

たとえばプログラムで電卓を作りたい場合、電卓の処理を考えると、足し算、引き算、掛け算.....といくつかの処理が考えられます。
そこで、足し算の処理をする関数、引き算の処理をする関数.....といくつかの処理を関数としてまとめておくのです。
足し算関数の例を以下に示します。

int tasizan(int suji1,int suji2){
int ans;//加算の答えを格納
ans=suji1+suji2;//与えられた引数を足した答えをansの中に入れる
return ans;//加算の答えを返す
}

tasizan は関数名で、関数の処理をあらわすような名前を任意で決定できます。(好みで付けてください)
tasizan関数の次の( )内に記述されたsuji1、suji2を引数といいます。
これは、関数のパラメータです....
といってもなんのことかわからないと思うので、もう少し我慢してよんでください。

プログラムの全ての動作はmain内で実行されます。つまり、分けて作ったtasizan関数をmain関数のなかに組み込まなければなりません。
main関数にtasizan関数を組み込むと以下のようになります。

#include <stdio.h>
void main(){
int kaitou;
kaitou = tasizan(3,8);//足し算関数の答えをkaitouの中に格納
printf("3+8=",%d);
}

足し算の処理がtasozan(3,8)の一行で済みました(^^)
足し算関数ではtasizan(引数1、引数2)では引数1と引数2の足し算を返します。
この返される数値を戻り値と言い、tasizan関数内のreturan ...で指定された値を返します。

このように、関数には引数と戻り値があります。(引数も戻り値もない関数もあり処理内容によってさまざまです)
また、プログラム内で同じ処理を頻繁に利用する場合も記述が短くなり、プログラムが整理されます。


以上です。

質問者のプログラミング理解度がわからないので、長々と書いてしまいました。ひまだったし...
厳密に言うと上記の内容で正しくないこともありますが、単純に説明するため難しいことは省いています。

では、がんばって勉強してください。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
もっともっと理解を深めていきたいと思います。

お礼日時:2001/07/06 19:32

> 関数とは何でしょうか?



C言語では、処理の単位が関数になります。一連の処理・操作をひとくくりに
まとめて、名前をつけたものが関数です。

関数には、予め用意されているものもありますが、自分で作ることもできます。


> 引数とは何でしょうか?

引数とは、関数に与えるパラメータ、つまり条件になります。

関数は、何か処理をやってくれるものなので、誰か(これも関数です)が
「処理をよろしく」と、その関数の名前で呼んであげます。そのときに、
その関数次第では 仕事の条件を指定できて、それを引数(ひきすう)と
呼びます。

条件を指定する必要が無い、もしくは、できないという関数を作ることも
できます。そういった関数には、引数がありません。


# 分かり難ければ、補足をしてください
    • good
    • 0
この回答へのお礼

回答ありがとうございました!
よぉ~くわかりました!
どの本を参考にしてもその辺のところの
説明ってあまりされてなくてボヤ~っと
しか理解していなかったので・・・。
ありがとうございました。

お礼日時:2001/07/06 16:37

関数はなにかを


コンピュータにしてもらいときに使うコマンドです。

引数は例えば数学で出てくる“x”
のようなもので、代数ですかね。
あとで、xに1を代入したり2を代入したりと使います。

ところで、ここらへんの事から
聞いているようだと、大変な時間が掛かると思われます。
できれば、もっとよくわかる本などを、買ったほうがいいと思います。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます!
どの本を参考にしてもその辺のところの
説明ってあまりされてなくてボヤ~っと
しか理解していなかったので・・・。
関数と引数の関係ってところが
まだイマイチよくわかりません・・・。
教えて下さい。

お礼日時:2001/07/06 16:40

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

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

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

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

QC言語において、関数とその役割、また、引数とその役割、仮引数、実引数とは?

C言語初心者です。
そもそもPC使うのも苦手ですがよろしくお願いします。
C言語において、関数とその役割、また、引数とその役割、仮引数、実引数の役割を、実例を用いて簡潔に説明していただけると助かります。お願いします。

Aベストアンサー

そんなに一気に理解しようとしても難しいですね。
http://www.kyoto-su.ac.jp/~yamada/ap/parameter_argument.html
を眺めてみてください(仮引数と実引数の意味が書いてある。ただしC言語であんまり仮引数がとか実引数が、という言い方はしないような)。
C言語においては全ての処理のかたまりが「関数」です。関数は何かの処理を行って値を返すことも返さないこともあります。
ここの例でいうとf(int x)は値を返す関数、main()は返さない関数で、ここからプログラムの処理が始まります(そういうルールになっている)。
このページのプログラムはちょっと古い書き方なんで今だと警告が出る可能性があります。

Qプログラミング言語Cとプログラミング言語C++

プログラミング言語Cとプログラミング言語C++の違いって何ですか?
あと、プログラミング言語C++についていくつか質問があります。
#include <iostream>
using namespace std;
void main(){
cout << "Hello world!" << endl;
}
このプログラムについて質問なんですが、iostreamってプログラミング言語Cで言うstdio.hのことですか?
using namespace stdって何ですか?
あと、 cout <<"Hello world!"って何ですか?

Aベストアンサー

> プログラミング言語Cとプログラミング言語C++の違いって何ですか?

C++は、Cのほぼ全ての仕様を含み、クラス、テンプレート、例外処理など大幅に機能拡張した言語です。
細部の違いが知りたければ、下記を参照してください。
http://www.kijineko.co.jp/tech/cpp2c

> このプログラムについて質問なんですが、iostreamってプログラミング言語Cで言うstdio.hのことですか?

違います。
C++にもstdio.hがありますし、cstdioというヘッダもあります。

iostreamヘッダは、cin, cout, cerr, clogとそれらのワイド文字版を宣言するためのものです。
ですので、iostreamヘッダで宣言・定義される関数やクラスを使うだけでは一般的なファイルの操作はできませんし、sprintfやsscanfに相当するものもありません。
また、removeやrenameなど、ストリームとは関係のない操作も含まれていません。

> using namespace stdって何ですか?

「using指令」によって、名前空間stdの中にある名前を大域的名前空間でも使えるようにするものです。
せっかく名前空間を分けているのに、それを無効にしてしまうような機能ですから、安易にusing指令を使うのはお勧めしません。

> あと、 cout <<"Hello world!"って何ですか?

標準出力に対して、文字列"Hello, world!"を出力します。
ちなみに、endlは、改行を出力したあと、バッファにたまった内容を実際に吐き出します(フラッシュします)。単なる改行の出力ではないので要注意です。

C++の仕様は結構大きい方なので、遭遇した記述をひとつひとつ質問していたのではキリがありません。
まずは入門書を一冊読み、わからない用語等については、処理系のリファレンスを読むか、ネットで検索するなどしてください。

> プログラミング言語Cとプログラミング言語C++の違いって何ですか?

C++は、Cのほぼ全ての仕様を含み、クラス、テンプレート、例外処理など大幅に機能拡張した言語です。
細部の違いが知りたければ、下記を参照してください。
http://www.kijineko.co.jp/tech/cpp2c

> このプログラムについて質問なんですが、iostreamってプログラミング言語Cで言うstdio.hのことですか?

違います。
C++にもstdio.hがありますし、cstdioというヘッダもあります。

iostreamヘッダは、cin, cout, cerr, clogとそれらのワイド...続きを読む

QC言語の関数の実引数と仮引数の名前について

 C言語で関数を使う場合、実引数と仮引数の名前(変数名)は、変えなければならないのでしょうか、同じでもいいのでしょうか。C言語のルールでは、どうなっているのでしょうか。よろしくお願い致します。

Aベストアンサー

同じでも構いません。

それぞれの変数の有効範囲(スコープ)が異なりますので、問題ありません。

実引数は定義場所により有効範囲は異なりますが、仮引数はその関数の中でのみ有効です。
両方の範囲が重なった場合はその関数内では仮引数の方が有効になります。

Qプログラミング(配列と関数の引数)

a : ABCDE
a : ABCDEFGH
Len : 8
a : FGHIJ
a : FGH
a : FGH, c : FGH
上記のように表示されるプログラムを作りたいのですが、なかなかできません。下記のようなプログラムを作ったのですがどこが間違っているのかよくわかりません。分かる方、指摘をお願いします。
#include <stdio.h>

void my_strcpy(char s[], char t[]);
int my_strlen(char s[]);
void my_strcat(char s[], char t[]);

int main(){
char a[10];
char b[10] = "ABCDE";
char c[] = "FGH";
int len;

my_strcpy(a, b);
printf("a : %s\n", a);

my_strcat(a, c);
printf("a : %s\n", a);

len = my_strlen(a);
printf("Len : %d\n", len);

my_strcpy(a, "FGHIJ");
printf("a : %s\n", a);

a[3] = '\0';
printf("a : %s\n", a);

if(strcmp(a, c) == 0){
printf("a : %s, c : %s\n", a, c);
}

int i, s, t;
my_strcpy(a, b + 2);
printf("a : %s\n", a);

void my_strcpy(char s[], char t[]){
for (i = 0; t[i] != '\0'; i++){
s[i] = t[i];
}
s[i] = '\0';
}

int my_strlen(char s[]){
int i;
for (i = 0; s[i] != '\0'; i++);
return i;
}
void my_strcat(char s[], char t[]){
int i, j;
for (i = 0; s[i] != '\0'; i++);
for (j = 0; t[j] != '\0'; i++, j++){
s[i] = t[j];
}
s[i] = '\0';
}

}

a : ABCDE
a : ABCDEFGH
Len : 8
a : FGHIJ
a : FGH
a : FGH, c : FGH
上記のように表示されるプログラムを作りたいのですが、なかなかできません。下記のようなプログラムを作ったのですがどこが間違っているのかよくわかりません。分かる方、指摘をお願いします。
#include <stdio.h>

void my_strcpy(char s[], char t[]);
int my_strlen(char s[]);
void my_strcat(char s[], char t[]);

int main(){
char a[10];
char b[10] = "ABCDE";
char c[] = "FGH";
int len;

...続きを読む

Aベストアンサー

コピペしてコンパイルしてみましたが、
エラーメッセージからはわかりにくい問題のようですね。

問題は、main()の括弧閉じ「}」の位置が不適切です。
現在は最後に「}」がありますが、これは本来my_strcpy()の定義の前に
なければなりません。
my_strcpy(), my_strlen(), my_strcat()は独立した関数なので、
main()の定義の外に出さないといけないわけです。

あとmy_strcpy()でint iの宣言が抜けてるようですが、
これはコンパイルエラーからすぐわかるので
たいした問題ではないでしょう。

Qプログラミングは独学で習得できるか。

質問タイトルのとおりなのですが、これから、プログラミングをやってみたいと思っている者です。
C言語やJavaを学びたいと思っているのですが、市販の書籍を
何冊か買ってきて一通りの基本的な事項というのは独習・体得できるものなのでしょうか。
良書を調べたりもしていますが、結構、初心者には熟読しても難しい概念が多いですよね。
応用や発展的な技術はたしかに、長い期間をかけての実際の仕事現場での経験、積み重ねが必要であるとは思いますが、変数、関数、クラス、条件分岐などの基礎的な概念や、文法は理解できるのだろうかと思ったりもしました。
プログラミングをマスターしている方というのは、だいたい本を見て独学でやられてきたのですか。
それとも、よくある大学や、「WAVE」「インディーフォルダ(元アウズ)」「ヒューマンアカデミー」などのスクールに通われて身に付けた方も多いのでしょうか。
私も体験入学などしてきましたが、「わからないところを質問できる」、「お金を払ってまで通うのであるから、なまけたり、挫折しないで学習を持続できる心理的な強制力がある」との利点はあるものの、それ以外での実際の学習内容は、一般の書籍と中身は大して変わらないのかなと思ったのですが。
たしかに自己管理をなかなかできない場合は、学費も大きいけれども、長い目で自分に投資するという観点から見た場合、非常に大きな払うだけの価値があるのかもしれませんが。
学費を払うだけの価値があるのかなと思い、迷っています。
もし、何かしらのアドバイスをいただけたら、ありがたく思います。

質問タイトルのとおりなのですが、これから、プログラミングをやってみたいと思っている者です。
C言語やJavaを学びたいと思っているのですが、市販の書籍を
何冊か買ってきて一通りの基本的な事項というのは独習・体得できるものなのでしょうか。
良書を調べたりもしていますが、結構、初心者には熟読しても難しい概念が多いですよね。
応用や発展的な技術はたしかに、長い期間をかけての実際の仕事現場での経験、積み重ねが必要であるとは思いますが、変数、関数、クラス、条件分岐などの基礎的な概念...続きを読む

Aベストアンサー

nobulinさんがプログラミングを何のために勉学するのかによります。
つまり、情報科学科の学生さんで学業のため、就職のため、趣味のためなど。

就職のためなら、自分に投資しても体系的に勉強する価値はあります。
学業なら、学校の先生や先輩に本や勉強法を伺うのもよいでしょう。
趣味ならば、その言語を使って何か製作したいソフトウェアを
考えて、それを作るにはどうやればよいか調べていくのも手です。

勉強するときは、まずはサンプルプログラムのソースコードが
書いてある本を見ながら自分でまったく同じプログラムをつくったり、
それをちょっとずつ改造・改変しながら応用していき、コマンドを
覚えるのが早道だと思います。

1つのプログラム言語を覚えれば、2つ目からは前に覚えた言語との
違い、コマンドの名前、引数の使い方の違いを覚えていけばよいと
思いますよ。

私は大学卒業後SEの道に進みました(今はSEを辞めぜんぜん違う仕事をしています)が、
学生時代は、大学の授業で今は無きMacのHyperTalkからスタートし、
会社に就職してからは会社の新人研修や実JOBで
COBOL→C言語→VB(VBA)→HTML/Perl→Oracle PL/SQLと
覚えていきました。
(覚えた順番はその時代およびお客様のシステムに関係する上、
すべての言語をパーフェクトに覚えたわけではありませんが)

また、できるだけ同じ言語を勉強している友達を見つけて
情報交換をしてみてください。

nobulinさんがプログラミングを何のために勉学するのかによります。
つまり、情報科学科の学生さんで学業のため、就職のため、趣味のためなど。

就職のためなら、自分に投資しても体系的に勉強する価値はあります。
学業なら、学校の先生や先輩に本や勉強法を伺うのもよいでしょう。
趣味ならば、その言語を使って何か製作したいソフトウェアを
考えて、それを作るにはどうやればよいか調べていくのも手です。

勉強するときは、まずはサンプルプログラムのソースコードが
書いてある本を見ながら自分で...続きを読む


人気Q&Aランキング

おすすめ情報