1 / 32

モバイルプログラミング第 2 回

モバイルプログラミング第 2 回. C 言語の基礎 (1). C 言語とは?. 歴史 ケン・トンプソン(ベル研)が 1970 年に、 Unix 開発言語として、 B 言語を開発 翌年デニス・リッチーが改良し C 言語誕生 手続き型高級言語 マシン依存の実行ファイル Java とはことなる. C プログラミングの基礎知識. コンパイルをしてみよう データ型 関数 (引数、返り値) 条件文、繰り返し処理 (if, for, while 文 ) 配列 構造体. C プログラムのコンパイル方法.

merton
Download Presentation

モバイルプログラミング第 2 回

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. モバイルプログラミング第2回 C言語の基礎 (1)

  2. C言語とは? • 歴史 • ケン・トンプソン(ベル研)が1970年に、Unix開発言語として、B言語を開発 • 翌年デニス・リッチーが改良しC言語誕生 • 手続き型高級言語 • マシン依存の実行ファイル • Javaとはことなる

  3. Cプログラミングの基礎知識 • コンパイルをしてみよう • データ型 • 関数 (引数、返り値) • 条件文、繰り返し処理(if, for, while文) • 配列 • 構造体

  4. Cプログラムのコンパイル方法 • mobile2.zip の hello_world.c を使います • c:¥cygwin¥home¥ユーザ名 の下にコピー • $ gcc hello_world.c • ./a.out

  5. C言語の書式 #include <stdio.h> ←標準入出力ライブラリ int main(void){ printf("Hello world!!\n"); return 0; } main関数は実行時に一番初めに呼ばれる特別な関数 整数(int)型の値を返す

  6. データ型 • おさらい • 符号付整数型 • short型(16bit): -32768から32767 • int型(32bit*): -2147483648から 􀃆2147483647 • 浮動小数点型 • float型(一般的に32bit): 単精度 • double型(一般的に64bit): 倍精度 • 文字列 • char型(8bit):

  7. 関数の書式 • 書式 返り値 関数名(引数の型 引数の名前,・・・); • 例 返り値や引数がない場合は int plus(int, int); voidとなる int plus(int a, int b){ return a+b;int four(void){return 4;} }

  8. 実際に関数を作ってみる • func.c のプログラムに以下を追加する • 引き算を行う minus 関数 • 掛け算を行う multiply関数 • 割り算を行う divide関数 • 補足 printf 関数は" "で囲まれた文字を出力する printf("plus: %d + %d is %d\n",a, b, answer); %d は引用符後の変数を表示します \n は改行を表します

  9. 条件文 (if else文) • 書式 if (条件式) { 条件式が正しい場合(真)の実行内容 } else {  条件式が違う場合(偽)の実行内容 } else 文はなくても可です

  10. 条件文 (if else 文) • if.c を実行する scanf(“%d”, &c);←入力された数字を変数Cに代入 if(c < 5){ printf("number is < 5\n"); }else if(c == 5){ printf("number is 5\n"); }else{ printf("number is > 5\n"); }

  11. 条件式 (if else 文) • if.c を改変して、入力した値が奇数か偶数かを判定する • 剰余演算子(%) を用いると簡単にできます • ex) 5%3 = 2 (5 / 3 = 1・・・2) 7%3 = 1 (7 / 3 = 2・・・1)

  12. 繰り返し (for 文) • 書式 for(初期値;条件式; 再初期化値){ 実行内容; }

  13. 繰り返し (for文) • for.c を実行する (1から10までの和、積が表示される) int sum = 0, mul = 1; for (i=1; i<=10; i++) { sum = sum + i; mul = mul * i; } 1が i の初期化値 i が 10以下になるまで{}をループ ループのたびに i が 1ずつ増える

  14. 繰り返し (for文) • for.c を変更して100を割り切れる全整数を表示する 100, 50, 25, 20, 10, 5, 4, 2, 1 • 剰余式を利用

  15. 繰り返し (while文) • 書式 while(条件式){ 実行内容; } • 条件式が真である場合、繰り返し実行 • 条件式が始めから偽である場合は1度も実行されない

  16. 繰り返し (while文) • while.c を実行する (1から10までの和、積が表示される) i = 1; while (i<=10){ sum = sum + i; mul = mul * i; i = i + 1; }

  17. 繰り返し (while文) • while.c を変更して以下のように表示する 0 01 012 0123 01234 012345while 文をネスト 0123456 01234567 012345678 0123456789

  18. 大量のデータを扱う(配列) a[0] 1 a[1] 2 • 同じデータ型を複数並べたもの データ型 配列名 [配列の大きさ]; ex) int array[10] - 10だと4*10=40バイト - array[0] ~array[9] a[2] 3

  19. 配列 • 初期化方法 • int cnt[4] = {6,10,31,76}; • float x,y[] = { 2.1,1.8,4.5 }; • char a[3];a = { x, y, z }; • 実際にarray.cを実行する int cnt[2] = {6,10}; int y[] = {1,2}; x = 3; x = x + y[0]; x = cnt[0] + y[1]; y[1] = y[1] + cnt[1];

  20. 配列 • 新しいファイルarray2.cを作成し、以下のことを実行するプログラムを作成しなさい。 以下のようなデータを持つ配列を用意し、 int data1[6] = { 10, 29, 53, 19, 3, 76 }; int data2[6]; data2 の配列へdata1の順番が逆になるよう、 data2 の配列へデータを格納しなさい。 ex) data2の1番目が76、 data2 の2番目が3、・・・

  21. いろいろなデータを扱う(構造体) • 複数のデータ型を組み合わせて、新しく作るデータ型 struct grade{ int id; char name[20]; double avg; }; struct タグ名 {   データ型 メンバ名; };

  22. 構造体 • struct.c を実行してみる • 構造体の宣言 struct タグ名 変数名の並び; struct grade student1; struct grade student2[20];

  23. 構造体 cont. • 構造体の初期化 • 構造体変数の初期化 { } の間に、メンバ名をカンマで区切る struct grade student1 = {4, "TANAKA", 80.5}; • 構造体変数の初期化 { } の間に、メンバ名をカンマで区切る struct grade student2[20] = {{1, "SUZUKI", 68.1 }, {2, "SAITO", 59.2 }, {3, "NAKATA", 48.4 }, };

  24. 構造体 cont. • 構造体の参照  構造体変数名. メンバ名 printf("%d %s %5.1f\n\n", student1.id, student1.name,student1.avg); printf("%d %s %5.1f\n", student2[i].id, student2[i].name, student2[i].avg); student1.id = 5; sutdent1.name = “HOGE”; のように使用できる

  25. 構造体演習問題 • 新たにstruct2.c というファイルを作成し、以下の処理を行なってください。 以下の表を構造体で表し、平均点を求めてく ださい 番号 国語 数学 化学 英語 平均点 1111 69 50 70 96 71.25 2222 98 39 60 60 64.25 3333 89 78 88 90 86.25 4444 40 50 98 60 62.00 5555 63 60 89 95 76.75

  26. 構造体データ {{ 1111, 69, 50, 70, 96, 0.0 }, { 2222, 98, 39, 60, 60, 0.0 }, { 3333, 89, 78, 88, 90, 0.0 }, { 4444, 40, 50, 98, 60, 0.0 }, { 5555, 63, 60, 89, 95, 0.0 },};

  27. 演習課題 • 提出方法:授業のWebよりアップロード • 提出物 • プログラムのソース • 出力結果 • 感想など(あれば) • 提出期限:4月26日 23:59まで

  28. 演習問題1 • ユークリッド互除法を用い、m、n の最大公約数を求めよ。 euclid.c に追加。 ヒント:整数m, n があったとき、その最大公約数は m-n, n の最大公約数。 m-n, n も同様なことを繰り返し、最終的にm=nとなったときのmが最大公約数になる 2×3 = 6

  29. 演習問題2 • prime.c を改良し、入力された数字が素数かどうかを判断するプログラムを作成しなさい • 素数は1と自分自身以外約数を持たない • ヒント:nが素数かどうかは、n以下の整数で割り切れるかどうかを繰り返せばいい。 • nを√n以上で割っても割り切れないので、開始は√n からでよい。

  30. 演習問題2 • ルート計算は sqrt(int); でできます。 • ex) limit = sqrt(n); • sqrt関数を使用した場合、 gcc –lm prime.c とコンパイルしてください。 • for文は、break で抜けられます。 • ex) for(…){ if( n%i == 0){ break; } }

  31. 演習問題3 • combi.cのファイルを新たに作成し、組み合わせを求める関数を作成せよ。 0 C 0 = 1 1 C 0 = 1 1 C 1 = 1 2 C 0 = 1 2 C 1 = 2 2 C 2 = 1 3 C 0 = 1 3 C 1 = 3 3 C 2 = 3 3 C 3 = 1 4 C 0 = 1 4 C 1 = 4 4 C 2 = 6 4 C 3 = 4 4 C 4 = 1 5 C 0 = 1 5 C 1 = 5 5 C 2 = 10 5 C 3 = 10 5 C 4 = 5 5 C 5 = 1

  32. 演習問題3 • ヒント:組み合わせの公式

More Related