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

Slides:



Advertisements
Similar presentations
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
Advertisements

復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
ファーストイヤー・セミナーⅡ 第8回 データの入力.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
基礎プログラミングおよび演習 第9回
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
第2回ネットワークプログラミング 中村 修.
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
第6章 2重ループ&配列 2重ループと配列をやります.
構造体.
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
第10回 プログラミングⅡ 第10回
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
第7回 条件による繰り返し.
情報基礎及び演習 プログラミング基礎① 電気・佐藤亮一.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
プログラミング演習 バージョン1 担当教員:綴木 馴.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
繰り返し計算 while文, for文.
関数の定義.
プログラミング応用 printfと変数.
第10回関数 Ⅱ (ローカル変数とスコープ).
第11回 宿題 出題日:12月21日 締切日:1月7日(木).
プログラミング序論 2. n人のインディアン.
プログラミング演習I 2003年5月7日(第4回) 木村巌.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
ネットワークプログラミング 第3回「C言語の基礎~コマンドライン引数・構造体・ポインタ」
第7回 条件による繰り返し.
第7回 プログラミングⅡ 第7回
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
第11回 プログラミングⅡ 第11回
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
C言語 はじめに 2016年 吉田研究室.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
ネットワーク・プログラミング Cプログラミングの基礎.
高度プログラミング演習 (11).
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
精密工学科プログラミング基礎 第7回資料 (11/27実施)
知能情報工学演習I 第8回(後半第2回) 課題の回答
cp-3. 計算 (C プログラミング演習,Visual Studio 2019 対応)
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
第3回簡単なデータの入出力.
プログラミング1 プログラミング演習I 第2回.
情報処理Ⅱ 小テスト 2005年2月1日(火).
printf・scanf・変数・四則演算
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
知能情報工学演習I 第10回( C言語第4回) 課題の回答
プログラミング演習I 補講用課題
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
第1章 文字の表示と計算 printfと演算子をやります.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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

繰り返し (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ずつ増える

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

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

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

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

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

配列 初期化方法 実際にarray.cを実行する 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];

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

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

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

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

構造体 cont. 構造体の参照 構造体変数名. メンバ名 printf("%d %s %5.1f\n\n",  構造体変数名. メンバ名 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”; のように使用できる

構造体演習問題 新たに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

構造体データ {{ 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 },};

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

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

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

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

演習問題3 combi.cのファイルを新たに作成し、組み合わせを求める関数を作成せよ。 0 C 0 = 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

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