- ベストアンサー
C言語の簡単な質問です。
#include "stdio.h" int tasizan(int a,int b){ int c; c=a+b; return c; } int main(void){ int a,b,c; a=1; b=1; c=tasizan(a,b); printf("%d+%d=%d",a,b,c); return 0; } と、あるとします。この文を読み込む順番を教えてください。 文の左に行番号みたいに順番を書き込んでください。 例 (例が間違ってたらすみません) 1 #include "stdio.h" 2 int main(void){ 3 int a,b,c; 4 a=1; 5 b=2; 6 c=a+b; 7 printf("%d+%d=%d",a,b,c); 8 return 0; }
- mitsudai328
- お礼率55% (41/74)
- C・C++・C#
- 回答数5
- ありがとう数5
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>つまりこの画像http://imgur.com/gsPTatj.jpgであってるということですか? 実行の順番のことです。 惜しいけど、間違っている。 実行の順番は、以下の通り。 x:int tasizan(int a,int b){ x: 5:int c; ⇐ 最初に変数cの領域を確保して 6: a+b; ⇐ 足し算を行ってから 7:c= ⇐ 結果をcに代入 8: c;⇐ 最後にcを取り出してから 9:return ⇐ cを破棄してから、cの値を持って呼び出し元に戻る x:} x:int main(void){ x: 1:int a,b,c; 2:a=1; 3:b=1; 4: tasizan(a,b); ⇐ tasizannの呼び出し 10:c= ⇐ 呼び出し結果をcに代入 11:printf("%d+%d=%d",a,b,c); 12:return 0; x:} 4番と10番のように「1つの行」の途中で、間に5~9番が入り込む。 また、6番と7番のように「行の左右で順番が入れ替わる」こともある。 更に、8番と9番のように、1つのステートメントで色々な事をする。 なので、行単位では「実行順」は議論できない。 あと「x:」になっている行は「特に実行する事がない」ので「x:」としてある。
その他の回答 (4)
- Tacosan
- ベストアンサー率23% (3656/15482)
関数 tasizan の本体の実行は, main における c=tasizan(a,b); の実行の途中に行われます. なので, 行単位で実行順序を考えるのは不適切.
お礼
間違いのご指摘ありがとうございました。
- kngj1740
- ベストアンサー率18% (197/1052)
文を読み込む順番の定義ですがコンパイラーは最初の行から順に読み込みます。int tasizan(int a,int b){・・・がmainより前にあるのはそのためです。mainの後におく場合は関数の宣言文だけをmainの前に置かなければなりません。実行の順番はmainの先頭から行われます。関数呼び出しのところで関数が呼び出されて実行され、呼び出したところの次にに戻ります。
お礼
ちょっと難しかったです^^
補足
つまりこの画像http://imgur.com/gsPTatj.jpgであってるということですか? 実行の順番のことです。
- hitomura
- ベストアンサー率48% (325/664)
1: ……(中略)…… n: n + 1: { n + 2: int a,b,c; n + 3: a=1; n + 4: b=1; n + 5: a または b n + 6: a または b n + 7: { n + 8: int c; n + 9: a+b; n + 10: c=(11: の結果) n + 11: return c; n + 12: } n + 13: c=(12: の結果) n + 14: a,b, またはc n + 15: a,b, またはc n + 16: a,b, またはc ……(中略:printf の呼び出し・内部・後処理)…… m + 1: return 0; m + 2: } m + 3: ……(中略)…… k:
お礼
^^;
補足
初心者なので意味が分かりませんがhttp://imgur.com/gsPTatj.jpg([修正](2)はint tasizan(int a,int b)まで含める) 大胆に描くとこんな感じでいいのでしょうか?
関連するQ&A
- C言語の質問です。
#include"stdio.h" int main(void){ int a, b, add; scanf_s("%d%d", &a, &b); add = a+b; printf("add=%d\n", add); return 0; } と、------------------------------------------------------------------------------ #include"stdio.h" int tasizan(int x, int y); int main(void){ int a, b, add; scanf_s("%d%d", &a, &b); add = tasizan(a, b); printf("add=%d\n", add); return 0; } int tasizan(int x, int y){ int aa; aa = x + y; return aa; } の違いを教えてください。
- ベストアンサー
- C・C++・C#
- 現在、C言語を習っています。
現在、C言語を習っています。 今、関数を勉強しているんですがわからない文があるので正解の文を教えてください。 #include <stdio.h> int main (void) { int a=123; doubke b=4.5; printf("%d\n○○" ,a,b); return 0; } ○に入る言語や文が間違っていたら教えてください。
- ベストアンサー
- その他(OS)
- 現在、私はC言語を学んでいます。
現在、私はC言語を学んでいます。 プログラミングの初期の初期の問題なんですが、 「Hello World」という有名なプログラムがありますよね? それについての質問です。 #include<stdio.h> main() { printf("Hello World"); return 0; } も #include<stdio.h> main(void) { printf("Hello World"); return 0; } も #include<stdio.h> int main() { printf("Hello World"); } もちゃんと表示できます。 ここで質問です。 int main(void) int main() main() main(void) はどう違うんですか? あと、 return 0; はあっても無くてもいいようなんですが どういう意味があるんでしょうか?
- ベストアンサー
- その他(インターネット・Webサービス)
- c言語についての質問です。
#include<stdio.h> int main(void){ int a; printf("1文字たいぷしてください。\n"); scanf("%d",&a); if(a>=65 && a<=90){ printf("大文字です。\n"); } else if(a>=97 && a<=122){ printf("小文字です。\n"); } else{ printf("大文字でも小文字でもありません\n"); } return 0; } このプログラムは正しくなくて、 intをchar %dを%cにかえなければなりません。 なぜintはダメなんでしょうか? できれば丁寧に教えてください。 お願いします。
- ベストアンサー
- C・C++・C#
- C言語で困っています
C言語で 100:1 99:2 98:3 .......ループ 1:100とやりたいんですが このやりかたがわかりません goto文などを使うのでしょうか? 一応コードは #include <stdio.h> int main(void) { int i,a; for(i=100; i>=1; i--){ for(a=1; a<=100; a++){ printf("%d:\n",i); break; printf("%d",a); } } return 0; } です まったくこれだと右側が出力されなくてだめみたいです どなたかお知恵をください お願いします
- 締切済み
- C・C++・C#
- C言語の初心者です。これを実行してみてください。
「a」って打ち込んだら「a」ってでましたか? #include<stdio.h> int main(void){ char a; printf("aaa\n"); scanf_s("%c", &a); printf("%c", a); return 0; }
- ベストアンサー
- C・C++・C#
- C言語の問題で困っています。
C言語の問題で困っています。 誰か教えてください。 下の問題ですが、intがiだけでプログラムするにはどうしたら良いでしょうか? (a)から(d)に入るプログラムをすいませんが教えてください。 お願いします。 【問題】 1以上10以下の整数を昇順に区切って表示するプログラムです。 実行例 1 2 3 4 5 #include <stdio.h> int main (void) { int i; (A) while ((b)){ (c); (d); } printf("¥n"); return(0); }
- ベストアンサー
- C・C++・C#
- C言語の参照はずしについて
ソートのプログラムなんですが #include <stdio.h> #include <stdlib.h> int comp(const void *, const void *); int main() { int i; int test[6] = {10, 8, 2, 6, 4, 0}; qsort(test, (size_t)6, sizeof(int), comp); printf("\n"); for (i = 0; i < 6; i++) printf("%d\n", test[i]); return 0; } int comp(const void *a, const void *b) { static int i = 1; printf("%02d--%d,%d\n", i, *(int *)a, *(int *)b); i++; return (*(int *)a - *(int *)b); } 最後のreturnの()の中身がよくわかりません。「参照はずし」という事をしてるらしいんですが「参照はずし」とは何ですか意味も教えてください。
- ベストアンサー
- C・C++・C#
- C言語 ハノイの塔
#include<stdio.h> void hanoi(int n,char a,char b,char c); int main(void) { int n=3; printf("円板の枚数 ⇒ " ); hanoi(n,'a','b','c'); return 0; } void hanoi(int n,char a,char b,char c) { if(n > 0){ hanoi(n - 1,a,c,b); printf("%d番の板を %c から %c に移動\n",n,a,b); hanoi(n - 1,c,b,a); } } このときの再帰の処理がわかりません。。 再帰の間にprintfがあるのでどこがつながっているのか順番がわかりません。 具体的な数値の手順を教えてください。
- ベストアンサー
- その他(ソフトウェア)
お礼
そうゆう結果がほしかったんです!ありがとうございました!