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

Similar documents
プログラミング基礎

PowerPoint プレゼンテーション

02: 変数と標準入出力

Microsoft Word - no12.doc

02: 変数と標準入出力

プログラミング基礎

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

Microsoft Word - no103.docx

プログラミング実習I

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

02: 変数と標準入出力

Microsoft PowerPoint - 5Chap15.ppt

C 言語第 3 回 2 a と b? 関係演算子 a と b の関係 関係演算子 等しい a==b 等しくない a!=b より大きい a>b 以上 a>=b より小さい a<b 以下 a<=b 状態 真偽 値 条件が満たされた場合 TRUE( 真 ) 1(0 以外 ) 条件が満たされなかった場合 F

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

講習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 Word - no202.docx

PowerPoint プレゼンテーション

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

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

kiso2-09.key

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

Prog1_15th

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

情報処理Ⅰ

ポインタ変数

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

Taro-再帰関数Ⅲ(公開版).jtd

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1

program7app.ppt

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

Microsoft PowerPoint - prog04.ppt

演算増幅器

PowerPoint Presentation

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

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

Microsoft PowerPoint - prog03.ppt

プログラミング実習I

本サンプル問題の著作権は日本商工会議所に帰属します また 本サンプル問題の無断転載 無断営利利用を厳禁します 本サンプル問題の内容や解答等に関するお問 い合わせは 受け付けておりませんので ご了承ください 日商プログラミング検定 STANDARD(C 言語 ) サンプル問題 知識科目 第 1 問 (

Microsoft Word - 3new.doc

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

cp-7. 配列

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

PowerPoint Presentation

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

Microsoft PowerPoint - lec10.ppt

演習課題No12

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

<4D F736F F D20438CBE8CEA8D758DC03389F0939A82C282AB2E646F63>

Microsoft Word - no15.docx

スライド 1

02: 変数と標準入出力

PowerPoint プレゼンテーション

Prog1_10th

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

Microsoft PowerPoint - 第3回目.ppt [互換モード]

初歩のC言語ターミナル_2014_May.pages

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

ポインタ変数

ポインタ変数

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

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

第1回 プログラミング演習3 センサーアプリケーション

PG13-6S

02: 変数と標準入出力

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

Microsoft PowerPoint - å®�æ−•è©¦é¨fi3ㆮ対ç�Œ.pptx

講習No.8

memo

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

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

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

プログラミング基礎

Microsoft Word - no11.docx

プログラミング基礎

PowerPoint プレゼンテーション

計算機プログラミング

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdio.h> #define InFile "data.txt" #define OutFile "sorted.txt" #def

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Microsoft PowerPoint - 11.pptx

Taro-最大値探索法の開発(公開版

今までの復習 プログラムで最低限必要なもの 入力 ( キーボードから ファイルから ) 出力 ( 画面へ ファイルへ ) 条件分岐 : 条件の成立 不成立により 異なる動作をする 繰り返し : 一定の回数の繰返し 条件成立の間の繰返し 関数の定義 関数の呼び出し C ではそれ以外に ポインタ データ

memo

gengo1-8

文字列 2 前回の授業ではコンピュータ内部での文字の取り扱い 文字型の変数 文字型変数への代入方法などを学習した 今回は 前回に引き続き 文字処理を学習する 内容は 標準入出力 ( キーボード ディスプレイ ) での文字処理 文字のファイル処理 文字を取り扱うライブラリ関数である 標準入出力 Lin

PowerPoint プレゼンテーション

02: 変数と標準入出力

フローチャートの書き方

memo

Microsoft Word - no13.docx

ポインタ変数

Microsoft PowerPoint - prog03.ppt

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

PowerPoint Presentation

情報処理演習 B8クラス

CプログラミングI

Microsoft PowerPoint - 説柔5_間勊+C_guide5ï¼›2015ã•’2015æŒ°æŁŽæš’å¯¾å¿œç¢ºèª“æ¸‹ã†¿ã•‚.pptx

Transcription:

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

字下げ 見やすく書こう! #include <stdio.h> int main(void) int a; printf(" 値 =>"); scanf("%d",&a); if(a>10) printf("10 より大きい値です \n"); else printf("10 以下の値です \n"); return 0; #include <stdio.h> int main(void) int a; printf(" 値 =>"); scanf("%d",&a); if(a>10) printf("10 より大きい値です \n"); else printf("10 以下の値です \n"); return 0;

別種の表記 i=i+1 i++ ++i i=i-1 i-- --i i=i+2 i+=2 i=i-2 i-=2 i=i*2 i*=2 i=i/2 i/=2 printf(" 同じです "); puts(" 同じです "); putchar('a'); scanf("%c",&a); a=getchar(); 一部まだ教えていないことがあるので 下の入力編は参考程度に

++i と i++ の違い 下記のプログラムの ++i を i++ に書き換えて試してみよう #include <stdio.h> int main() int i; i=0; if(++i == 0) printf(" 評価時点で 0\n"); else printf(" 評価時点で 0 以外 \n"); return 0;

キャスト 強制的に式の型を変換する方法 int a,b; float c,d; a=10; b=3; c=a/b; d=(float)a/b; // 変換したい場所の前に 括弧で型名を囲って記述する

配列 多数の変数を連続して扱う #include <stdio.h> a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] int main(void) int a[10],i; 変数名アドレスデータ num 0x0000 12 i 0x0002 2 a[0] 0x0004 123 a[1] 0x0006 987 a[2] 0x0008 456 a[3] 0x000A 31 cnt 0x000C 12 メモリ空間を連続的に確保 for(i=0;i<10;i++) printf("a[%d]=?\n=>",i); scanf("%d",&a[i]); for(i=0;i<10;i++) printf("a[%d]=%d\n",i,a[i]); return 0;

文字 C 言語では 文字はそれぞれに番号を振り その番号を変数で保持することで 文字を表している たとえば大文字の A これは 'A' とシングルクオートで囲って書くことで 割り振られた番号を示すことができる これを char 型の変数で保持することで いわゆる文字となる #include <stdio.h> int main() printf("a の番号は %d 16 進数だと %X\n",'A','A'); return 0; 直接値を書くことも可能

文字コード

一文字だけ入力 次の命令 getchar() を利用することで 一文字だけ入力することができる ほかに scanf の場合は %d ではなく %c とすると 一文字だけ入力できる #include <stdio.h> int main() char moji1,moji2; moji1 = getchar(); scanf("%c",&moji2); // 一文字だけ入力 // 同上 printf("%c %c\n",moji1,moji2); // 出力も %c return 0;

文字列 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] c h i b a - u \0 char a[8]="chiba-u"; #include <stdio.h> chiba-u 末端文字 ( バックスラッシュまたは円マーク ) int main() char str[100]; printf(" 文字を入力 =>"); scanf("%s",&str[0]); //scanf("%s",str); // と書いてもよい printf("%s\n",str); //& はいらない! return 0;

文字列操作関数 関数名 使い方 解説 strcpy strcpy( 文字列 1, 文字列 2); 文字列 1に対し 文字列 2をコピーする strncpy strncpy( 文字列 1, 文字列 2, 文字数 ); 文字列 1に対し 文字列 2を文字数分コピーする strcat strcat( 文字列 1, 文字列 2,); 文字列 1の後ろに 文字列 2をコピーする strncat strncat( 文字列 1, 文字列 2, 文字数 ); 文字列 1の後ろに 文字列 2を文字数分コピーする 文字列 1と文字列 2を比較し strcmp 返り値 =strcmp( 文字列 1, 文字列 2); 文字列 1> 文字列 2 なら正の値文字列 1= 文字列 2 なら0 を返す strlen 返り値 =strlen( 文字列 ); 与えられた文字列の終端文字を含まない長さを返す 記述例 char ccsname,str[100]="ccs"; int flg; strcpy(ccsname,str); flg=strcmp(ccsname,"css");

構造体 複数の変数をまとめて扱う #include <stdio.h> student name no struct student char name[30]; int no; ; int main(void) struct student data[10]; int i; struct student char name[30]; int no; ; for(i=0;i<10;i++) data[i].no=i+1; printf(" 名前を入力 \n=>"); scanf("%s",&(data[i].name[0])); for(i=0;i<10;i++) printf("no:%d\n 名前 :%s\n",data[i].no,data[i].name); return 0;

変数の初期値 変数を宣言した瞬間 初期値を入れる事ができる int a=0; //= で書いてやる int data[5]=10,20,12,43,165, // このように 配列も初期値を入れられる data2[]=10,20,12,43,165; // 要素数を指定しないと 適切な要素数を勝手に確保する! char name[]="cisc"; // 文字列もこうやって初期設定可能 struct student char name[100]; int age; ccsmember1="cisc",19; // 構造体もこうやる

課題 1 n 個の値 x(0<n 10) を配列に入力し その合計 平均 最大値 最小値を求めるプログラムを作れ 0 が入力されたり 入力された数が 10 個を超えたら 入力工程を終え計算を行う 入力のループと 計算のループは別にすること 最大値最小値を求めるアルゴリズムは次のとおり 最大値 ( 最小値 ) を保持する変数を設定 この変数と調べたい変数を比較し 最大値 ( 最小値 ) の候補になりうるかを調べる ( 最大値 ( 最小値 ) の変数の初期値はどうすればよい?) さらに 入力された値を昇順に整列して出力せよ ( 任意課題 )

課題 2 文字列 ( 英小文字限定 100 文字以内と自主規制 ) を入力し もっとも使用されているアルファベットを調べて 出力するプログラムを作れ ヒント カウント用の配列 ( 要素数は 26 個 ) を用意して それぞれのアルファベットの数をカウントする 最後にその配列に対し最大値を求め 対応する要素のアルファベットを出力する ループ中のカウント自体はたった 1 行で可能 文字コードは連続している さらに 'a'-'a'=?

課題 3 任意課題 学籍番号 名前 性別をメンバに持つ構造体を定義し 次のデータを入力する その後 学籍番号でソートして表示するプログラムを作れ 学籍番号 名前 性別 09T001 千葉太郎 男 09T043 千葉花子女 09T112 工学太郎男 09T080 福沢漱石男 08T077 夏目諭吉男

課題 3 のヒント 1 strcmp を使う?( 以下使わない方法 ) 文字と数字の変換 今現在われわれが利用している C 言語の環境上で扱う文字コードは すくなくとも '0' から '9' まで連続した値が割り当てられている 一桁なら 引き算一発で変換できる 二桁以上の数も 実は単純な式で変換できる 上位の桁から (= 左側の桁から ) 順に変換していって そのたびに 10 倍してやると

課題 3 のヒント 2 並べ替え ( ソート ) 今回の講座ではまだ一言も触れていないが プログラミングの勉強で ソートとは非常に基本的な 演習のひとつである 今回は 各自が考えた方法や既に知っている方法を使ってよい まったく考え付かない場合は 次項参照

課題 3 のヒント 3 選択ソート未整列の範囲内から もっとも小さい ( 大きい ) 値を見つけ 未整列範囲先頭の要素と交換する すると 未整列の範囲がひとつ狭まる これを最後まで繰り返すと 全体が整列する バブルソート 1 番目と 2 番目を比較し 順番が逆であれば入れ換える 次に 2 番目と 3 番目を比較して入れ換える これを最後まで行うと 最後の数だけが最小または最大の数として確定するので 確定していない部分について 1 つずつ減らしながら繰り返す ( 某所からコピペ )

発展課題リスト構造 配列は 複数のデータを扱えるが すでに整列している状態下では 中間に新しいデータを挿入することが難しい そこで リスト構造という概念を導入する 詳しくは 進度に大きな差があった場合に ホワイトボードにて説明する struct data int nextnum; char str[100] data[0] data[1] data[2] data[3] data[4] 4 0 3 1 2 CICS ほへい フェイス あさげ ねいむ

#include <stdio.h> 課題 1 解答 int main() int n,x[10],i,sum=0,max=0,min=10000; // 入力 for(i=0;i<10;i++) do printf("%d. 値を入力 =>",i+1); scanf("%d",&x[i]); while( x[i]<0 10000<=x[i]); if(x[i]==0) break; n=i; // 個数を代入 // 計算 for(i=0;i<n;i++) sum+=x[i]; if(x[i]>max) max=x[i]; if(x[i]<min) min=x[i]; printf(" 合計 %d 最大値 %d 最小値 %d\n",sum,max,min); printf(" 平均 %f\n",(float)sum/n); return 0;

課題 2 の解答 1 #include <stdio.h> int main() char str[100]; int cnt[26]; int i,flg=0,maxnum=0,maxchar; printf(" 文字列を入力 \n=>"); scanf("%s",str); // カウント用配列の初期化 for(i=0;i<26;i++) cnt[i]=0; for(i=0;i<100 && str[i]!='\0';i++) // 誤処理防止用 if('a'<=str[i] && str[i]<='z') cnt[str[i]-'a']++; else printf(" 不正な文字が発見されました \n"); flg=1; break;

課題 2 の解答 2 for(i=0;i<26;i++) if(maxnum<cnt[i]) maxnum=cnt[i]; maxchar=i+'a'; printf(" 最も使われているアルファベットは \n"); printf("%c 個数 :%d\n",maxchar,maxnum); return 0;