<4D F736F F D20438CBE8CEA8D758DC03389F0939A82C282AB2E646F63>

Similar documents
<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

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

Microsoft Word - no11.docx

プログラミング実習I

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

gengo1-11

02: 変数と標準入出力

Microsoft Word - no15.docx

02: 変数と標準入出力

演算増幅器

Microsoft Word - no202.docx

02: 変数と標準入出力

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

Microsoft Word - 3new.doc

講習No.12

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

02: 変数と標準入出力

Microsoft PowerPoint - 11.pptx

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

memo

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

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

#include<math.h> 数学関係の関数群で sin() cos() tan() などの三角関数や累乗の pow() 平方根を求める sqrt() 対数 log() などがあります #include<string.h> 文字列を扱う関数群 コイツもまた後日に 4. 自作関数 実は 関数は自分

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

CプログラミングI

02: 変数と標準入出力

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

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

PowerPoint Presentation

Prog1_10th

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

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

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

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

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

Microsoft PowerPoint - lec10.ppt

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

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

Microsoft Word - no103.docx

1. 関数 scanf() 関数 printf() は変数の値を画面に表示しますが それに対し関数 scanf() はキーボードで入力した値を変数に代入します この関数を活用することで対話式 ( ユーザーの操作に応じて処理を行う ) プログラムを作ることができるようになります 整数の和

演算増幅器

プログラミング基礎

gengo1-12

Microsoft PowerPoint - 5Chap15.ppt

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

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

kiso2-09.key

PowerPoint プレゼンテーション

講習No.9

Prog1_15th

情報処理Ⅰ演習

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

Microsoft Word - no12.doc

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

Microsoft PowerPoint ppt

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

PowerPoint Presentation

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

gengo1-12

cp-7. 配列

ポインタ変数

program7app.ppt

Microsoft Word - no13.docx

数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留

memo

Microsoft Word - 03

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

memo

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

PowerPoint プレゼンテーション

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

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(

PowerPoint Presentation

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

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

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

PowerPoint プレゼンテーション

gengo1-12

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

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog06.ppt

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

Taro-ファイル処理(公開版).jtd

C言語7

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

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

6 関数 6-1 関数とは少し長いプログラムを作るようになると 同じ処理を何度も行う場面が出てくる そのたびに処 理を書いていたのでは明らかに無駄であるし プログラム全体の見通しも悪くなる そこで登場す るのが 関数 である 関数を使うことを 関数を呼び出す ともいう どのように使うのか 実際に見て

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

演習課題No12

Microsoft PowerPoint - prog03.ppt

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

PowerPoint Presentation

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

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

Microsoft PowerPoint - 09.pptx

gengo1-8

プログラミング実習I

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

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

Transcription:

C 言語講座第 3 回 キャスト ( 型変換 ) 強制的に式の型を変換する ( 変換したい型名 ) 変換元で記述する int num_a = 10, num_b = 3; float result1, result2; // 結果格納用 // 計算用 result1 = num_a / num_b; // 通常のint/int 割り算 result2 = (float)num_a / num_b;// キャスト ( 型変換 ) printf("num_a / num_b = %f\n", result1 ); printf("(float)num_a / num_b = %f\n", result2 ); 関数とインクルード #include 宣言 #include < ヘッダーファイル名 > ヘッダーファイルの読み込みを行う ヘッダーファイルには関数などが書かれてあるため それらが使えるようになる 例えば <stdio.h> をインクルードすると printf 関数や scanf 関数がつかえるようになるため 今まではこの文は書くものとしていた 関数今まで扱ってきた printf や scanf 等を 関数 という 戻り値の型関数名 ( 引数 ) と書いて で囲んだ中にその動作を書くことで 自分で関数を作ることができる も関数であり C 言語のコンソールプログラムは main 関数から始まるということも出来る 関数のプロトタイプ宣言戻り値関数名 ( 引数 ); と最初に記述しておくこと プログラムにこういう自作関数を使いますよ と教えているようなもの int power( int x, int n); // プロトタイプ宣言 int num, njou, result; // 入力用 1,2 結果用 printf("xのn 乗を算出します \nx = "); scanf("%d", &num); printf("n = "); scanf("%d", &njou); result = power( num, njou); // 自作関数 ( 関数の戻り値を代入 ) printf("%d の %d 乗は %d です \n", num, njou, result); int power( int x, int n) // 実体宣言 (x の n 乗を返す関数 ) // ループ用 int xn = 1; // これにかけていく for( i = 0; i < n; i++) xn *= x; return xn;

ポインタ変数はメモリ上にその値が保存されている 場所 がある その場所 ( アドレス 住所 ) の情報を持てる変数がポインタともいえる 主に後述する変数の値を書き換える関数や配列 文字列などに利用される ポインタ int num; // いつもの変数 int* pnum; // ポインタ pnum = &num; // ポインタ変数に変数 numの場所を教える num = 100; printf(" 変数 num の値は %d\n", num); printf(" ポインタ変数 pnum が指す値は %d です \n\n", *pnum); printf(" 変数 num のメモリ上の住所は %d\n", &num); printf(" ポインタ変数 pnum が指す値のメモリ上の住所は %d です \n\n", pnum); printf(" ポインタ変数 pnum 自体のメモリ上の住所は %d です \n", &pnum); 関数 2( 引数の値を書き換える ) x と y の値を交換する関数 swap を自作したいとする 実は普通に swap ( int x, int y) と宣言して中身を記述しても x の値と y の値は入れ替わりません なぜかというと上記のように書くと x と y の本体ではなく その値のコピーが関数に渡されるから そこで変数本体を渡すにはその変数のアドレスを渡してあげる必要がある scanf 関数で scanf ( "%d", &num ) としていたのもこのため ( &num の部分 ) //xとyを入れ替える関数 int swap( int* px, int* py ) int temp; temp = *px; //xとyの値の交換 *px = *py; *py = temp; int num1, num2; num1 = 10; // 値は適当に num2 = 7; printf("num1 = %d, num2 = %d\n", num1, num2); swap( &num1, &num2); printf("swap 関数を実行しました \n"); printf("num1 = %d, num2 = %d\n", num1, num2); 演習 1 <stdlib.h> には rand 関数 ( 戻り値 : ランダムな数字 引数 : なし ) が宣言されている このファイルをインクルードしてランダムな数字を 10 個表示するプログラムを作れ 演習 2 円の面積を計算する関数を作り キーボードから半径の入力を受け取って その関数を使って円の面積を算出 表示せよ

配列同じ型の多量の変数を一度に扱う方法 int a[ 要素数 ] といった形で宣言する 実際に変数を使うには a[ 0 ] といった形で使用する 例 : 変数 5 個の配列を作った場合 int a[5] = 0,1,2,3,4 ; a[0] a[1] a[2] a[3] a[4] 0 1 2 3 4 配列 文字列 int arr[5]; // 配列宣言 printf(" 値を 5 つ入力してください \n"); for(i = 0;i < 5;i++) scanf("%d", &arr[i]); ただしこの場合 a[0] ~ a[4] の 5 個しか扱ってはいけない a[5] や a[6] 以降は 住所として 存在はするが これらの領域は PC の他の部分が使用している可能性があり 間違ってここに値を書き込んでしまうと重大なエラーにつながる可能性がある for(i = 0;i < 5;i++) printf("arr[%d] の値は %d です \n", i, arr[i]); 文字列 C 言語で言う文字列は char 型の配列を指す 例 : char a[6] = "Hello"; a[0] a[1] a[2] a[3] a[4] a[5] H e l l o 0 #include <string.h> // 文字列操作系の関数がつかえるようになる char string[100] = "Hello World!"; // 文字列 char 型の配列 printf("%s\n", string); //&string[0] と string は同じ意味 このように配列の各 char 型変数に 1 文字ずつが保存されている 最後の 0 は文字列の終わりを表す文字 ( 終端文字 ) で文字列には必ずこれがなくてはいけない ( 文字列の終わりがどこかわからなくなるため ) とはいえ 基本的には勝手に付加されるので気にしなくても問題はない printf(" 文字列を入力してください \n"); scanf("%s", string); //scanfを使った文字列入力 printf(" 入力された文字列は \n%s\nです\n", string); printf(" 文字列の長さは \n%d\nです\n", strlen(string)); 演習 3 int 型の配列と配列の要素の個数を受け取りその配列の全要素の合計を計算する関数を作れ ( 配列の要素の値はなんでもよい ) 例 :int a[5] = 10,20,30,40,50, sum; sum = arr_sum( a, 5 ); // ここで sum == 150 となる上記の arr_sum ような関数を作る

配列を引数に持った関数配列 ( 文字列 ) を引数として関数に渡すにはその配列の最初の要素のアドレスを渡すようにする 宣言 :int function( int *arr) 使用 : int arr[5]; function( arr ); //&arr[0] と同じ この際気をつけなければいけないのは 配列をどこまで使えるか関数は知らないということ ( a[10] と確保したのに a[15] に関数は書き込んでしまえる ) 引数に配列の個数を取るなどして対処する #define #define 置換前置換後 置換前のものを置換後のものにコンパイル時に置き換える ( 正しくはコンパイル前 ) 右のプログラムでは ARR_MAX を 10 に置き換える ファイル分割法自作ヘッダーファイルには関数のプロトタイプ宣言 #define 指令の 2 つを書く 関数の実際の処理などは cpp ファイルに書くことを推奨 自作ヘッダーファイルをインクルードする場合は <> ではなく を使うこと例 :#include mylib.h //mylib.h // 自作関数のプロトタイプ宣言 int mysort( int *arr, int arr_max); //#define 定義 ( 左 右への置き換え 本当に置き換えるだけ ) #define ARR_MAX 10 //mylib.cpp #include "mylib.h" // 自作ヘッダー //mylib.hにプロトタイプ宣言があるmysort 関数の動作を書く // 配列の確保領域外への不正アクセスを防ぐため配列の要素数も受け取っている int mysort( int *arr, int arr_max) int temp; // 変数一時保存用 (swap 関数参照 ) int i,k; // ループ用 for(i = 0; i < arr_max; i++) for( k = i+1; k < arr_max; k++) if( arr[i] > arr[k] )// 昇順なので小さい方が先 temp = arr[k]; arr[k] = arr[i]; arr[i] = temp; //main.cpp // 標準のヘッダーファイル #include "mylib.h" // 自分で作ったヘッダファイルを使う int arr[arr_max] = 20,30,50,90,60,40,70,10,80,0;// 要素は適当に // ループ用 for( i = 0; i < ARR_MAX; i++) printf("a[%d] = %d\n", i, arr[i]); mysort( arr, ARR_MAX);//mylib.h に宣言されている自作関数 printf(" 昇順ソートを行いました \n"); for( i = 0; i < ARR_MAX; i++) printf("a[%d] = %d\n", i, arr[i]);

演習 1: #include <stdlib.h> 演習問題解答 int i, random; for( i = 0; i < 10; i++) random = rand(); printf("%d\n", random); 補足 : このプログラムだと乱数といいつつ毎回同じ結果がでる 実際には最初に srand 関数を使って乱数の 種 を設定してから使う 種 には現在時刻等を用いる このようにコンピューターが発生させている乱数を 擬似乱数 という 乱数の種を設定するには srand( 種にしたい値 ) を使う 演習 2 float calccircle(int r); // プロトタイプ宣言 int r; float area; printf(" 半径を整数で入力してください \n->"); scanf("%d", &r); area = calccircle(r); printf(" 半径 %d の円の面積は %f です \n", r, area); float calccircle(int r) float result; result = r*r*3.141592f; return result;

演習 3 int arr_sum(int *arr, int arr_max); int a[5] = 1,2,3,4,5 ; int b[7] = 10,20,30,40,50,60,70,; int sum_a, sum_b; // 結果 for(i = 0; i < 5;i++) printf(" a[%d]=%d\n", i, a[i]); printf("\n"); for(i = 0; i < 7;i++) printf(" b[%d]=%d\n", i, b[i]); // 数値は適当 sum_a = arr_sum( a, 5 ); sum_b = arr_sum( b, 7 ); // 自作関数 // 自作関数 printf("\nsum_a=%d\naum_b=%d\n", sum_a, sum_b); int arr_sum(int *arr, int arr_max) int sum = 0; for(i = 0; i < arr_max; i++) sum += arr[i]; return sum;