ネットワークプログラミング 第3回「C言語の基礎~コマンドライン引数・構造体・ポインタ」

Slides:



Advertisements
Similar presentations
構造体 構造体とは? 複数のデータをパックしたもの。 新しい “ 型 “ として使用できる. 構造体 キーワード struct strcut は構造体を宣言する命令。 struct { double x,y; }a,b,c; ↑ ここまでが宣 言 ← この形式で、構造体 a,b,c, を定 義.
Advertisements

第 10 回 宿題 出題日: 12 月 14 日 締切日: 12 月 21 日. 提出について 以下の場合は、出題日の出席を欠席とする 締切日を過ぎた場合 正解率が 7 割未満の場合 提出は、 PDF ファイルを印刷して、それに答 えを書いて提出すること。
プログラミング入門2 芝浦工業大学情報工学科青木 義満 第11回構造体. プログラミング入門2 2 構造体 5 人分のサッカー選手データ 全てのデータを関数に渡して,処理する場合 char name[5][256]; int assist[5]; int score[5]; void func( char.
C 言語講座第 5 回 構造体. 構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
C 言語講座 第 7 回 ポインター. メモリとアドレス(ポインターの前 に) コンピュータのメモリには 1 バイトずつ 0 番地、 1 番地、 2 番地・・・というように 住所が割り当てられている この住所をアドレスという。 メモリはデータをしまうもので それを引き出すためには メモリに番号(アドレス)を振っておけばよいな.
アルゴリズムとデータ構造 第2回 線形リスト(復習).
ポインタ プログラミング入門2 第10回 芝浦工業大学情報工学科 青木 義満
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
第13回構造体.
課題解説: 関数の引数にポインタを使って2数を入れ替える
解答 1 複素数を構造体として定義し、二つの複素数の積(結果は複素数)を返す 関数 を定義せよ。
第12回構造体.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
基礎プログラミングおよび演習 第9回
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
第2回ネットワークプログラミング 中村 修.
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
12: コマンドライン引数 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
C言語講座 第4回 ポインタ.
構造体.
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
構造体 プログラミング入門2 芝浦工業大学情報工学科 青木 義満
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
第10回 プログラミングⅡ 第10回
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
プログラミング論 関数ポインタ と 応用(qsort)
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
関数とポインタ 値呼び出しと参照呼び出し swapのいろいろ 関数引数 数値積分
ネットワークプログラミング 第4回「C言語の基礎~ポインタと配列」
第11回 宿題 出題日:12月21日 締切日:1月7日(木).
精密工学科プログラミング基礎 第10回資料 (12/18実施)
2005年度 データ構造とアルゴリズム 第3回 「C言語の復習:再帰的データ構造」
第10章 これはかなり大変な事項!! ~ポインタ~
プログラミング 3 構造体(2).
講義では、Cプログラミングの基本を学び 演習では、やや実践的なプログラミングを通して学ぶ
第7回 プログラミングⅡ 第7回
高度プログラミング演習 (08).
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
第11回 プログラミングⅡ 第11回
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
配列変数とポインタ 静的確保と動的確保 ポインタ配列 2次元配列 時間計測 第1回レポートの課題
精密工学科プログラミング基礎Ⅱ 第5回資料 今回の授業で習得してほしいこと: 構造体 (教科書 91 ページ)
C言語 はじめに 2016年 吉田研究室.
プログラミング入門2 第9回 ポインタ 情報工学科 篠埜 功.
地域情報学 C言語プログラミング 第4回 while文、do~while文、switch文、 2次元配列、ポインタ 2017年11月10日
ネットワーク・プログラミング Cプログラミングの基礎.
高度プログラミング演習 (11).
精密工学科プログラミング基礎 第7回資料 (11/27実施)
プログラミング論 構造体
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
モバイルプログラミング第2回 C言語の基礎 (1).
情報処理Ⅱ 2005年11月25日(金).
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報処理Ⅱ 小テスト 2005年2月1日(火).
C言語講座第5回 2017 構造体.
プログラミング演習I 補講用課題
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
12: コマンドライン引数 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
高度プログラミング演習 (10).
Presentation transcript:

ネットワークプログラミング 第3回「C言語の基礎~コマンドライン引数・構造体・ポインタ」 2009年秋学期 Rodney Van Meter

Last Week’s Excitement 2

授業Webページ SFC-SFShttps://vu.sfc.keio.ac.jp/sfc- sfs/ 課題・授業資料などの情報を掲示します 本講義を「MY時間割(仮)」へ登録してください 課題・授業資料などの情報を掲示します 課題は毎回こちらに提出!! 今日の課題締め切り 10/20(月)23:59分まで! 遅れて提出する方は要連絡

今期の授業スケジュール(予定) 第1回:イントロダクション 第2回:C言語の基礎~関数・変数・Makefile 第4回:C言語の基礎~ポインタと配列・リスト構造・file I/O 第5回:ネットワークとプログラミング(1) 第6回:ネットワークとプログラミング(2) 第7回:ネットワークプログラミング実践(1) 第8回:ネットワークプログラミング実践(2) 第9回:応用ネットワークプログラミング(1) 第10回:応用ネットワークプログラミング(2) 第11回以降:ミニプロ

今日のお題 Review last week’s homework コマンドライン引数 ポインタの基礎 構造体

課題1(2) argc,argvを用いて引 数を全て出力する。 実行例/出力例 コマンドライン引数 %./a.out 123 456 789 arg[0]: ./a.out arg[1]: 123 arg[2]: 456 arg[3]: 789  コマンドライン引数 main( int argc, char **argv)‏ main( int argc, char *argv[])‏ argc には引数の数 argv[0] にはコマンド名 argv[1] には1番目の引数 argv[2] には2番目の引数

課題2‏: Homework Prob. 2 浮動小数点のレーンジ (fprange.c)‏ 1. 最小: Write a program that starts with x = 1.0, and divides it by two repeatedly until it becomes zero 2. 最大: Do the same thing getting larger until something happens (what happens?) 3. Do for both “float” and “double”.

課題3 Makefileを作ってください 一行目は: all: hello size fortest cline numbers

コマンドライン引数

コマンドライン引数:argc,argv コマンドの引数を用いるには? % cat –n file % cat file1 file2 file3

コマンドライン引数の利用法 main( int argc, char **argv)‏

引数を出力するプログラム #include <stdio.h> int main(int argc, char *argv[])‏ { int i; for (i=0; i < argc; i++){ printf(“\t%s\n”, argv[i]); } return 0;

ポインタ

ポインタとは? ポインタ変数 int i = 10; int j = 20; int *ptr *の意味 「変数」を指す変数 アドレス ポインタ変数 「変数」を指す変数 int i = 10; int j = 20; int *ptr *の意味 「intへのポインタ型」であると宣言   するための指定子 108 i 104 j 100 ptr 変数とアドレス

ポインタ変数の操作(1)‏ int i = 10; int j = 20; int *ptr = &i アドレス int i = 10; int j = 20; int *ptr = &i printf(“i=%d\n”, &i)‏ printf(“ptr=%d\n”, ptr)‏ printf(“i=%d\n”, i)‏ printf(“*ptr=%d\n”,*ptr)‏ ptrはiをさすポインタ変数 108 i 10 104 j 20 100 ptr 108 変数とアドレス

ポインタ変数の操作(2)‏ int x=1, y=5; int z[10]; int *p; p=&x; /* pはxを指す */ y=*p; /* yに1を代入 */ *p = 0; /* xが0になる */ p=&z[2]; /* pはz[2]を指す */

ポインタと関数(1)‏ #include <stdio.h> void swap(int x, int y)‏ { int temp; temp = x; x = y; y = temp; } int main(){ int a = 5; int b = 3; swap (a,b); printf(“a=%d\n”, a); printf(“b=%d\n”,b); return 0; int型の変数を入れ替えるプログラム

ポインタと関数(2)‏ アドレス #include <stdio.h> void swap(int x, int y)‏ { int temp; temp = x; x = y; y = temp; } int main(){ int a = 5; int b = 3; swap (a,b); printf(“a=%d\n”, a); printf(“b=%d\n”,b); return 0; 108 a 104 b 交換 94 x 5 90 y 3 変数とアドレス

ポインタと関数(3)‏ #include <stdio.h> void swap(int *x, int *y)‏ { int temp; temp = *x; *x = *y; *y = temp; } int main(){ int a = 5; int b = 3; swap (&a,&b); printf(“a=%d\n”, a); printf(“b=%d\n”,b); return 0; int型の変数を入れ替えるプログラム 108 a *x 104 b *y 交換 94 x 108 90 y 104 変数とアドレス

構造体

構造体(structure)‏ 構造体を用いると、複数のデータを1つのまとまりと して取り扱うことができる Ex: 1人の学生に対して学籍番号と成績 struct student{ int id; int score; }; 異なる型も混在できる struct student2{ char name[32];

構造体の定義 struct student{ int id; int score; }; 定義の方法 使用例 struct 構造体名{ 型 メンバ名1; 型 メンバ名2; : }; struct student{ int id; int score; };

構造体を用いた変数 定義した構造体を用いて変数はプリミティブな 型と同じ方法で宣言できる int a; struct student b;

構造体メンバへのアクセス(1)‏ 構造体メンバへのアクセスは.(ドット)演算子を 用いる Ex: struct studentの変数bの点数(メンバ 名:score)を表示する struct student b = {70000000,70}; printf(“bの点数は%dです\n”, b.score);

構造体メンバへのアクセス(2)‏ 構造体へのポインタの変数のメンバへのアクセスは ->演算子を用いる 構造体へのポインタの変数のメンバへのアクセスは ->演算子を用いる Ex: struct studentの変数bの点数(メンバ名:score)を表 示する struct student b = {70000000,70}; struct student *c = &b; printf(“bの点数は%dです\n”, c->score); 構造体へのポインタ変数->メンバ名 は (*構造体へのポインタ変数).メンバ名 と同意

構造体(structure)(使用例1)‏ int main()‏ { int i; struct student{ int id; int score; } students[5] = { {70001234,80}, {70204578,70}, {70157384,60}, {70355678,75}, {70207658,49} }; for(i=0;i<5;i++){ printf("student id:%d, score:%d\n", students[i].id, students[i].score); } 構造体の定義、 構造体変数の宣言 構造体変数の初期化 を同時に行う場合

構造体(structure)(使用例2)‏ struct student{ int id; int score; }; Int main()‏ { int i; struct student students[5] = { {70001234,80}, {70204578,70}, {70157384,60}, {70355678,75}, {70207658,49} }; for(i=0;i<5;i++){ printf("student id:%d, score:%d\n", students[i].id, students[i].score); } 構造体の定義を分け た場合 変数の宣言、初期化 は同時に行っている

構造体(structure)(使用例3)‏ struct student{ int id; int score; }; Int main()‏ { int i; struct student students[5]; for(i=0; i<5; i++){ students[i].id = i; students[i].score = i; } for(i=0;i<5;i++){ printf("student id:%d, score:%d\n", students[i].id, students[i].score); 構造体の定義を分け た場合 初期化は行わずに 代入を行っている。

typedef struct student{ int id; int score; } STUDENT; STUDENT students[5];

【補足2】構造体ポインタ struct student st; struct student *sp; sp = &st; sp->id = 7000123; (*sp).score = 23; sp st 7000123 id score 23 printf(“%d\n”, sp->score);

練習1:構造体の練習 以下の情報をキーボードから入力し、後でまとめて出力する。 学籍番号 ログイン名 名前 %./a.out 80749423 kazuhisa “kazuhisa matsuzono” Number: 7045678 Login name: kazuhisa Name: kazuhisa matsuzono

構造体と関数 #include <stdio.h> struct student{ char name[20]; int math; int jlang; }; void clear(struct student *sei); int main(){ struct student seito; /* clearing data in seito */ clear(&seito); return 0; } void clear(struct student *sei){ strcpy (sei->name, “”); sei->math=0; sei->jlang=0; }

課題 Determine size of struct student Determine size of array of struct student Use memcpy() to copy struct Use assignment to copy struct Use memset() to clear memory

実習(第2回課題)‏ 1. 2つの整数値を入力し,最小公倍数、最大公約 数を出力せよ コマンドライン引数で値を2つ指定 関数を作成すること 2. 2つのint型の変数x,yを受け取り,その和と差 をwa及びsaが指すint型の変数に格納する関数  void calc(int x, int y, int *wa, int *sa)を 作成せよ. つぎのページにヒント

課題2‏ (numbers.c)‏ 1. 2つの整数値を入力し,最小公倍数、最大公約 数を出力せよ コマンドライン引数で値を2つ指定 関数を作成すること 2. 2つのint型の変数x,yを受け取り,その和と差 をwa及びsaが指すint型の変数に格納する関数  void calc(int x, int y, int *wa, int *sa)を 作成せよ. つぎのページにヒント

課題2のヒント 最大公約数を先に求める ユークリッドの互除法 最小公倍数 n * m / (最大公約数)‏

実習ヒント 最大公約数を先に求める ユークリッドの互除法 最小公倍数 n * m / (最大公約数)‏