C言語プログラム応用 第4回 2014.5.8 • 関数 List6-1 (教科書115ページ~) List6-2 List6-4 • 関数の設計 List6-7 (教科書122ページ) • 演習課題4-1 ★ 提出 • 演習課題4-2 ★ 提出 1 関数(function) • main関数 プログラムに必ず1つはmain関数が必要 • ライブラリ関数 printf関数 scanf関数 puts関数 putchar関数 これらの関数は stdio.h で定義されている #include <stdio.h> • 関数を自分で作成する プログラムが簡潔でわかりやすくなる 2 function のタイプ • return文で値を返す – List 6-1, 6-2, 6-4, 6-11 • 値を返さない関数 – List 6-7 3 List 6-1 二つの整数の大きい方の値を返す関数 フローチャート main関数 start a,bを入力 maxof 関数 int maxof(x,y) max=maxof(a,b) max ← 戻り値(整数) maxを出力 x>y no yes return(x) return(y) end 4 List 6-1 関数定義と関数呼出し 二つの整数の大きい方の値を返す関数 #include <stdio.h> int maxof( int x, int y) { [ 関数の定義] 返却値型 関数名 仮引数の宣言 if ( x > y ) int maxof ( int x, int y) return (x) ; /* 返却値(戻り値) x */ else [ 関数呼び出し] return (y); /* 返却値(戻り値) y */ 関数名 実引数の宣言 } maxof (na, nb) int main (void) { int na, nb; puts(“二つの整数を入力してください。"); na, nb main 関数 printf ("整数1:"); scanf ("%d",&na); printf ("整数2:"); scanf ("%d",&nb); maxof 関数 int x, int y printf(“大きい方の値は%dです。¥n”, maxof (na, nb) ); return(0); } 5 List 6-2 三つの整数の最大値を返す関数 フローチャート main関数 start a,b,cを入力 max3 関数 int max3(x,y,z) max = x no y > max yes max3(a,b,c) 最大値(戻り値:整数) 最大値を出力 max = y z > max yes no max = z end return(max) 6 List 6-2 三つの整数の最大値を返す関数 #include <stdio.h> /*三つの整数の最大値を返す*/ int max3 ( int x, int y, int z) { int max=x; if ( y > max ) max = y; if ( z > max ) max = z; return (max); /*返却値*/ main 関数 na, nb, nc max3関数 x, y, z } int main (void) { int na,nb,nc; puts("三つの整数を入力してください。"); printf("整数1:"); scanf("%d",&na); printf("整数2:"); scanf("%d",&nb); printf("整数3:"); scanf("%d",&nc); printf(“最も大きい値は%dです。¥n”, max3 (na, nb, nc) ); return(0); } 7 List 6-4 べき乗( xn )を計算する関数 フローチャート main関数 start power 関数 xとnを入力 double power(dx,no) power(x,n) xn (戻り値:実数) dxをno回乗算する. 結果はtmpに保存 計算値を出力 return(tmp) end 8 List 6-4 べき乗( xn )を計算する関数 #include <stdio.h> /* dx の no 乗を返す */ double power ( double dx, int no) { int i; double tmp = 1.0; for ( i=1; i <= no; i++) tmp *= dx; /* tmp=dx*dx*・・・ */ int main(void) { int n; double x; puts(“実数を入力してください:”); scanf (“ %lf ", &x); puts(“整数を入力してください:”); scanf ( “ %d ", &n); return (tmp); } printf(“%.2fの%d乗は%.2fです。¥n”, x, n, power(x,n) ); return(0); } /*返却値*/ main 関数 x, n power関数 dx, no 返却値:実数 9 List6-7 直角三角形(n段で左下が直角の三角形)を表示するプログラム フローチャート 値を返さない関数 main関数 start 段数(n段) を入力 i=1 void put_star(no) put_star(i) i++ put_stars 関数 改行 (戻り値なし) *をno個 表示する yes i<n no end end 10 関数の設計 (値を返さない関数) #include <stdio.h> List6-7 直角三角形(左下が直角)を表示 int main (void) { int i, ln; printf ("何段ですか:"); scanf ("%d",&ln); for ( i=1; i <= ln ; i++ ) { put_stars ( i ); putchar (‘¥n’); } return (0); } /* *をno個連続表示 */ void put_stars (int no) リターン文が無い { 返却値型 void while (no-- >0 ) putchar(‘*’); } while (no >0) { no--; putchar(‘*’); } と同じ 出力例 何段ですか:4 * ** *** **** 11 関数型宣言(プロトタイプ宣言) List 6-1 #include <stdio.h> int maxof( int x, int y) { if ( x > y ) return (x) ; else return (y); } int main (void) { int na,nb; puts(“二つの整数を入力してください。"); printf ("整数1:"); scanf ("%d",&na); printf ("整数2:"); scanf ("%d",&nb); printf(“大きい方の値は%dです。¥n”, maxof(na,nb) ); return(0); } 同じ 関数型宣言 これをmain関数の前に宣言してお けば、関数は後ろにおいてもよい. セミコロン;を忘れないこと! #include <stdio.h> maxof 関数を定義します.詳しく int maxof( int x, int y); はmain関数の後で述べますとい int main (void) { う意味 int na,nb; puts(“二つの整数を入力してください。"); printf ("整数1:"); scanf ("%d",&na); printf ("整数2:"); scanf ("%d",&nb); printf(“大きい方の値は%dです。¥n”, maxof (na,nb) ); return(0); } int maxof( int x, int y) { if ( x > y ) return (x) ; else return (y); } 12 演習課題 4-1 ・ 三つのint型整数の最大値を返す関数と最小値を返す関数 を作成し,main関数には下記のように,関数を呼び出し, 表示させるプログラムについて,次の2種類を作成せよ. (1)関数をmain関数の前に記述するプログラム (2)プロトタイプ宣言をして関数はmain関数の後ろに記述する ・ ソースと実行結果をwordに貼り付け提出せよ. int main(void){ int na,nb,nc; puts("三つの整数を入力してください。"); printf("整数1:"); scanf("%d",&na); printf("整数2:"); scanf("%d",&nb); printf("整数3:"); scanf("%d",&nc); printf(“最も大きい値は%dです。¥n”,max3 (na, nb, nc) ); printf(“最も小さい値は%dです。¥n”,min3 (na, nb, nc) ); return(0); } 13 演習課題 4-2 以下に示すプログラムの誤りを直して実行せよ. #inclue<stdi0.h> #defined MAX 100 void diffMAX(int x) int main(void){ int no; printf("整数:"); scamf(“&d",%na); printf(“その整数と%dとの差は&dです¥n”,diffMAX,diff(no) ); return(0); } void diffMAX(int x) { if (x>MAX) return(MAX-x); eles rerutn(x); } 14 演習課題 4-2 ヒント 以下に示すプログラムの誤りを直して実行せよ. #inclue<stdi0.h> #defined MAX 100 void diffMAX(int x) //2箇所 //1箇所 //2箇所 int main(void){ int no; printf(“整数:”); scamf(“&d”,%na); //4箇所 printf(“その数と%dとの差は&dです¥n”,diffMAX,diff(no) ); //3箇所 return(0); } void diffMAX(int x) { //1箇所 if (x>MAX) return(MAX-x); { //1箇所 eles rerutn(x); //3箇所 } 15
© Copyright 2025 ExpyDoc