2011年12月6日 湘南工科大学 情報理論2 第9回 小林 学 〒251-8511 神奈川県藤沢市辻堂西海岸1-1-25 Tel. 0466-30-0232(直通) Fax. 0466-34-5932 [email protected] 先頭からの一致文字数 Page 2 char str1[5]="abba", str2[5]="abaa"; i str1[i] str2[i] 0 初期値: 繰り返し: (for文) count 0 1 2 3 ‘a’ ‘b’ ‘b’ ‘a’ 1 ‘b’ 2 ‘a’ break(繰り返しを抜ける) if(str1[i]!=str2[i]) break; [前回の課題1]先頭からの一致文字を数えるプログラム を作成しなさい 実行結果 [前回の課題1解答]先頭からの一致文字 #include<stdio.h> void main(void){ char str1[5]="abba", str2[5]="abab"; int i, count = 0; } for(i=0;i<4;i++){ if(str1[i]!=str2[i]) break; count++; } printf("先頭から一致した文字の数:%d\n",count); Page 3 Page 4 途中からの一致文字数 char str1[10]="ababbaaba"; char str2[10]="bbababbab"; str1の1番からとstr2の3番からの一致文字数を求める i str1[1+i] str2[3+i] 初期値: 繰り返し: (for文) 0 1 2 3 4 5 ‘b’ ‘a’ ‘b’ ‘b’ ‘a’ ‘a’ ‘b’ ‘a’ ‘b’ ‘b’ ‘a’ ‘b’ count 0 1 2 3 4 5 break 途中からの一致文字数 Page 5 [前回の課題2]前ページの途中からの一致文字を数える プログラムを作成しなさい 実行結果 [前回の課題2解答]途中からの一致文字数 Page 6 #include<stdio.h> void main(void){ char str1[10]="ababbaaba"; char str2[10]="bbababbab"; int i, count=0; } for(i=0;i<10;i++){ if(str1[1+i]!=str2[3+i]) break; count++; } printf("str1の1からとstr2の3からの一致文字数:%d\n", count); Page 7 前回の課題3 char str1[10]="ababaaaba"; char str2[4]="aba"; str1の中にstr2と完全一致する文字列は何回入ってい るか?またその一致する先頭の位置は? 位置:0 1 2 3 4 5 6 7 8 ababaaaba 一致した先頭位置:0,2,6 一致回数:3回 [前回の課題3]上のプログラムを作成しなさい [前回の課題3解答] #include<stdio.h> void main(void){ char str1[10]="ababaaaba", str2[4]="aba"; int i, j, count=0; } printf("一致した先頭位置:"); for(i=0;i<10;i++){ for(j=0;j<3;j++){ //一致した文字数が j if(str1[i+j]!=str2[j]) break; } if(j==3){ // jが3ならばstr2と一致 count++; printf("%d,",i); } } printf("\n一致回数:%d\n", count); Page 8 P.9 関数 引数(ひきすう): 戻り値(もどりち): 関数が受け取る値 関数が出力する値 関数を使うときの書き方 受け取る値を入れ る変数 戻り値の型 関数名(引数の型 引数,..,引数の型 引数){ 関数の本体 } return(戻り値); 関数が出力する値 関数の使用例 戻り値ansの型 ans の値が a に入る 小林ルール: 関数名の単語の先頭を大 文字にする int Func(int x, int y){ int ans; x に 3が入り, ans = x + y; y に 5 が入る return(ans); } void main(void){ int a; a = Func(3, 5); printf("%d\n",a); } [例題1] 二つの整数 x, y の大きい方の値を計 算する関数 #include<stdio.h> int Max2(int x, int y){ int ans; if(x>y) ans = x; else ans = y; return(ans); } void main(void){ int a; a = Max2(3, 5); printf("最大値:%d\n", a); } P.11 [例題2] 実数 x が0以上ならば1を,xが負ならば-1 を返す関数 Sign #include<stdio.h> int Sign(double x){ if(x>=0) return(1); return(-1); } void main(void){ int a; a = Sign(-3.7); printf("符号:%d\n", a); } 実行結果 P.12 [例題3] nの階乗(n!=1×2×3×…×n) を計算する 関数 Kaijo #include<stdio.h> int Kaijo(int n){ int ans=1, i; for(i=1;i<=n;i++) ans *= i; return(ans); } void main(void){ int a; a = Kaijo(5); printf("5!=%d\n", a); } 実行結果 P.13 [課題1] 1から n までの和を計算する関数SumN #include<stdio.h> ??? SumN(???){ ??? } void main(void){ int a; a = SumN(10); printf("1から10までの和:%d\n", a); } 実行結果 P.14 [課題2] xのy乗を計算して返す関数Beki #include<stdio.h> ??? Beki(???){ 実行結果 ??? } void main(void){ int a; a = Beki(2 , 3); printf("2の3乗は:%d\n", a); } P.15 グローバル変数 #include<stdio.h> char Str[5]="abaa"; //グローバル変数 int ACount(void){ グローバル変数は int i, count=0; //ローカル変数 どの関数でも使え for(i=0;i<5;i++){ て中身は一つ if(Str[i]=='a') count++; 小林ルール: } グローバル変数の return(count); 名前の先頭を大文 } 字にする void main(void){ int ans; //ローカル変数 ローカル変数はそ ans = ACount(); の関数でしか使え printf("'a'の数:%d\n", ans); ない。別の関数で } は別の中身 [課題3]配列Str1とStr2の先頭からの一致文字 数を計算する関数Icchichoのプログラ ムを作成しなさい #include<stdio.h> char Str1[5]="abba", Str2[5]="abab"; ??? Icchicho(???){ ??? } void main(void){ int ans; ans = Icchicho(); printf("先頭から一致した文字の数:%d\n", ans); } Page 17 [課題4]配列Strを左に1つシフトする関数Shift のプログラムを作成しなさい #include<stdio.h> char Str [10]="ababbaaba"; void Shift(???){ //戻り値が無い場合にはvoid ??? } void main(void){ printf("もとのStr:%s\n", Str); Shift(); printf("Shift後のStr:%s\n", Str); } Page 18 [課題5]10進数の数字を2進数で表示する関数を 作成しなさい. #include<stdio.h> void Binary(???){ ??? //ここで2進数を表示する } void main(void){ Binary(100); } Page 19
© Copyright 2024 ExpyDoc