Prog1_15th

Similar documents
Prog1_14th

Prog1_10th

Prog1_12th

2006年10月5日(木)実施

Prog1_6th

PowerPoint Presentation

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

Taro-リストⅠ(公開版).jtd

演算増幅器

プログラミング基礎

Microsoft Word - no12.doc

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

(2) 構造体変数の宣言 文法は次のとおり. struct 構造体タグ名構造体変数名 ; (1) と (2) は同時に行える. struct 構造体タグ名 { データ型変数 1; データ型変数 2;... 構造体変数名 ; 例 : struct STUDENT{ stdata; int id; do

Microsoft PowerPoint - prog04.ppt

DVIOUT

memo

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

Microsoft PowerPoint - 12.ppt [互換モード]

Microsoft Word - Cプログラミング演習(12)

Microsoft Word - no15.docx

02: 変数と標準入出力

Microsoft Word - Cプログラミング演習(10)

02: 変数と標準入出力

PowerPoint プレゼンテーション

Microsoft Word - no204.docx

プログラミング基礎

Microsoft PowerPoint - 13.ppt [互換モード]

02: 変数と標準入出力

02: 変数と標準入出力

ゲームエンジンの構成要素

C言語講座 ~ファイル入出力編~

02: 変数と標準入出力

Microsoft Word - Training10_プリプロセッサ.docx

memo

PowerPoint プレゼンテーション

Microsoft Word - no13.docx

Microsoft PowerPoint - lec10.ppt

Microsoft Word - Cプログラミング演習(7)

情報処理演習 B8クラス

Taro-リストⅢ(公開版).jtd

講習No.12

Microsoft PowerPoint - 12.ppt [互換モード]

Microsoft Word - Cプログラミング演習(9)

Microsoft PowerPoint - 11.pptx

ファイル入出力

ファイル入出力

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft Word - 3new.doc

Microsoft Word - Cプログラミング演習(11)

演算増幅器

Microsoft Word - no202.docx

演習課題No12

Microsoft PowerPoint - kougi9.ppt

Prog1_6th

PowerPoint プレゼンテーション

memo

講習No.12

PowerPoint プレゼンテーション

C 言語講座 Vol 年 5 月 29 日 CISC

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - kougi8.ppt

配列, 関数, 構造体

Microsoft PowerPoint - kougi11.ppt

プログラミング基礎

Taro-ポインタ変数Ⅰ(公開版).j

‚æ4›ñ

DVIOUT

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

ポインタ変数

C 資料 電脳梁山泊烏賊塾 構造体 C++ の構造体 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する 定義と変数宣言 C++ に

1. ファイルにアクセスするには ファイルにアクセスするには 1. ファイルを開く 2. アクセスする 3. ファイルを閉じるという手順を踏まなければなりません 1.1. ファイルを読み込む まずはファイルの内容を画面に表示させるプログラムを作りましょう 開始 FILE *fp char fname

<4D F736F F D20438CBE8CEA8D758DC03389F0939A82C282AB2E646F63>

講習No.9

1. 入力した文字列を得る 1.1. 関数 scanf() を使う まずは関数 scanf() を使ったプログラムを作ってみましょう 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: #include<stdio.h> #define SIZE 128 main(

Microsoft PowerPoint - 5Chap15.ppt

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

講習No.10

PowerPoint Presentation

Microsoft PowerPoint - handout07.ppt [互換モード]

I. Backus-Naur BNF : N N 0 N N N N N N 0, 1 BNF N N 0 11 (parse tree) 11 (1) (2) (3) (4) II. 0(0 101)* (

kiso2-09.key

gengo1-12

PowerPoint プレゼンテーション

02: 変数と標準入出力

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

gengo1-12

Microsoft Word - Cプログラミング演習(8)

Cプログラミング1(再) 第2回

DVIOUT

関数の中で宣言された変数の有効範囲はその関数の中だけです さっきの rectangle _s で宣言されている変数 s は他の関数では使用できません ( 別の関数で同じ名前の変数を宣言することはできますが 全く別の変数として扱われます このように ある関数の中で宣言されている変数のことをその関数の

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

gengo1-12

計算機プログラミング

プログラミング実習I

関数の動作 / printhw(); 7 printf(" n"); printhw(); printf("############ n"); 4 printhw(); 5 関数の作り方 ( 関数名 ) 戻り値 ( 後述 ) void である. 関数名 (

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

Microsoft Word - no11.docx

Microsoft PowerPoint - prog13.ppt

Transcription:

2012 年 7 月 26 日 ( 木 ) 実施構造体と typedef typedef 宣言によって,struct 構造体タグ名という表記を再定義し, データ型名のように扱うことができる 構文は typedef struct 構造体タグ名 再定義名 ; となり, この場合の構造体変数の宣言は, 再定義名を用いて行うことができる なお, ここでは 構造体タグ名は省略可能である 構造体を指すポインタ ポインタ変数の解説の際 ( 第 9 回教材 ) に, 構造体を指すポインタ変数が利用できることを述 べた これは, struct 構造体タグ名 * ポインタ変数名 ; または 再定義名 * ポインタ変数名 ; という宣言によって利用可能である ポインタ変数が構造体を指すには, 例えばポインタ変数名をsp, 構造体変数名をstrとすると, sp = &str; という代入を行えばよい このとき,strにはメンバが存在するが, 例えばメンバの一つが x であるとすると,str.x をポインタ変数で表すには,(*sp).x となる これを *sp.xと書くと,*(sp.x) を意味することとなり, 誤りである なお,(*sp).xは簡潔に sp->x と表記することができる 例題 1( 構造体の再定義名 ; 三角形及び四角形を扱う構造体 ) 次のソースプログラムをテキストエディタで入力して,prog15-1.c の名前を付けて保存する それを翻訳 編集して実行形式のファイルを作成し, 実行せよ /* prog15-1.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> - 1 -

typedef struct char n[7]; /* name */ double s; /* side */ double h; /* height */ double a; /* area */ TRIRECT; /* triangle/rectangle */ TRIRECT getarea(trirect, int); int main(void) TRIRECT figure = "", 0.0, 0.0, 0.0; int type; printf(" 図形が三角形であれば 0, 長方形であれば 1," " 正方形であれば 2 を入力してください :"); scanf(" %d", &type); if (type == 0) printf(" 三角形の底辺の長さ ( 実数値 ) を入力してください :"); scanf(" %lf", &figure.s); printf(" 三角形の高さ ( 実数値 ) を入力してください :"); scanf(" %lf", &figure.h); else if (type == 1) printf(" 長方形の一辺 X の長さ ( 実数値 ) を入力してください :"); scanf(" %lf", &figure.s); printf(" 長方形の一辺 Y の長さ ( 実数値 ) を入力してください :"); scanf(" %lf", &figure.h); else if (type == 2) printf(" 正方形の一辺の長さ ( 実数値 ) を入力してください :"); scanf(" %lf", &figure.s); figure.h = figure.s; else printf(" 入力する数値は 0,1,2 のいずれかです "); exit(1); figure = getarea(figure, type); printf("%s の面積は %f です \n", figure.n, figure.a); return 0; TRIRECT getarea(trirect fig, int t) if (t == 0) - 2 -

strncpy(fig.n, " 三角形 ", 6); fig.a = fig.s * fig.h / 2; else fig.a = fig.s * fig.h; if (t == 1) strncpy(fig.n, " 長方形 ", 6); else strncpy(fig.n, " 正方形 ", 6); return fig; 解説 1.TRIRECT figureは, 宣言の際に初期化を行っている 2.strncpyは, 第 2 引数に書かれた文字列を第 3 引数に書かれた文字数分だけ, 第 1 引数に複写する文字列操作のライブラリ関数である 例題 2( 構造体を指すポインタ変数 ) 次のソースプログラムをテキストエディタで入力して,prog15-2.c の名前を付けて保存する それを翻訳 編集して実行形式のファイルを作成し, 実行せよ /* prog15-2.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 5 #define MAXBUF 256 typedef struct char id[8]; char name[21]; char class[9]; char point[4]; char eval[2]; STUDENT; void dispdata(student *, int); int main(void) STUDENT prog[max]; - 3 -

int i; char temp[maxbuf]; char headln[maxbuf]; FILE *fpr; if (NULL == (fpr = fopen("stprog.csv","r"))) printf("stprog データファイルが開けません \n"); exit(1); fgets(headln, sizeof headln, fpr); printf(" %s", headln); for (i=0; i<max; i++) if (fgets(temp, sizeof temp, fpr) == NULL) break; strcpy(prog[i].id, strtok(temp,",")); strcpy(prog[i].name, strtok(null,",")); strcpy(prog[i].class, strtok(null,",")); strcpy(prog[i].point, strtok(null,",")); strcpy(prog[i].eval, strtok(null,"\n")); dispdata(&prog[i], i); fclose(fpr); return 0; void dispdata(student *data, int i) printf("%d) %s,%s,%s,%s,%s\n", i+1, data->id, data->name, data->class, data->point, data->eval); 解説 prog14-2.c では,strtokで指定した文字列を",\n" として, 各項目がカンマで区切られている場合と項目ごとに改行されている場合,1 レコードの最後の項目の後ろにもカンマが付いている場合に対応していたが, このプログラムでは prog14-1.exe を正しく実行して作成されたファイル stprog.csv の存在を前提としている 演習 1 100 人以内の住所録データを入力し, 出力用のファイル "add.csv" を開いて書き込むプログラム を考える この空欄 1),2),3) を埋めてソースプログラムを完成させ, テキスト - 4 -

エディタで入力して,ex15-1.cの名前を付けて保存する それを翻訳 編集して実行形式のファイルを作成し, 実行せよ ( 提出するファイルはex15-1.cの完成版とする ) なお, このプログラムでは, データの番号を入力する際に空打ちをする ( 文字を打たずに Enter キーを打つ ) ことで, 入力を途中で打ち切ることが可能である /* ex15-1.c */ #include <stdio.h> #include <stdlib.h> #define MAX 100 1) struct char bango[4]; char namae[21]; char furigana[31]; char yubin[9]; char add1[51]; char add2[41]; char tel[13]; ADDRESS; int key_input(2) *); void w_file(address *, int); int main(void) ADDRESS jusho[max]; ADDRESS *ptr = jusho; int i; for(i=0;i<max;i++,ptr++) if(!key_input(ptr)) break; w_file(jusho, i); return 0; int key_input(address *in_data) printf(" データの番号を入力してください :"); gets(in_data->bango); if (in_data->bango[0] == '\0') return 0; printf(" 氏名を入力してください :"); gets(in_data->namae); printf(" ふりがなを入力してください :"); gets(in_data->furigana); printf(" 郵便番号を入力してください :"); gets(in_data->yubin); - 5 -

printf(" 住所を入力してください :"); gets(in_data->add1); printf(" アパート名 部屋番号等を入力してください :"); gets(in_data->add2); printf(" 電話番号を入力してください :"); gets(in_data->tel); return 1; void w_file(address *out_data, int wi) FILE *fout; int j; if(null == (fout=fopen("3) ","w"))) printf(" ファイルが開けません "); exit(1); for(j=0;j<wi;j++,out_data++) fprintf(fout,"%3s,%-s,%-s,%-s,%-s,%-s,%-s\n", out_data->bango,out_data->namae,out_data->furigana, out_data->yubin,out_data->add1,out_data->add2,out_data->tel); fclose(fout); 演習 2( 余裕のある人向け ) ダウンロードした Prog1_15ex.pdf に記述された課題を解き, ダウンロードした解答用ファイル Prog1_15ex_Ans.docx に解答を書き込んで提出せよ - 6 -