C言語講座 第3回 ポインタ、配列.

Slides:



Advertisements
Similar presentations
第 2 章 数値の入力と変数 scanf と変数をやります 第 2 章 数値の入力と変数 1. 以下のプログラムを実行してみよう  C 言語では文の最後に「 ; 」(セミコロン)が付きます 第 2 章 数値の入力と変数 2 #include int main() { int x; x = 3; printf("x.
Advertisements

C 言語講座 第 7 回 ポインター. メモリとアドレス(ポインターの前 に) コンピュータのメモリには 1 バイトずつ 0 番地、 1 番地、 2 番地・・・というように 住所が割り当てられている この住所をアドレスという。 メモリはデータをしまうもので それを引き出すためには メモリに番号(アドレス)を振っておけばよいな.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
プログラミング入門2 第4回 配列 for文 変数宣言 初期化
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
第2章 数値の入力と変数 scanfと変数をやります.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
プログラミング演習(2組) 第12回
C言語講座 第4回 ポインタ.
第5回C言語講座 ~ポインタと配列.
第6章 2重ループ&配列 2重ループと配列をやります.
構造体.
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
構造体 構造体, 構造体とポインタの組み合わせ,.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
Cプログラミング演習 第7回 メモリ内でのデータの配置.
プログラミング序論 2. n人のインディアン.
第10章 これはかなり大変な事項!! ~ポインタ~
プログラミング入門2 第8回 ポインタ 情報工学科 篠埜 功.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
アルゴリズムとデータ構造 補足資料5-2 「サンプルプログラムsetop.c」
プログラミング入門2 第11回 情報工学科 篠埜 功.
今までの練習問題の復習.
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
第11回 プログラミングⅡ 第11回
プログラミング基礎B 文字列の扱い.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
情報理論2 第3回 小林 学 湘南工科大学 2011年10月25日 〒 神奈川県藤沢市辻堂西海岸1-1-25
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
疑似乱数, モンテカルロ法によるシミュレーション
メモリとメモリアドレス, ポインタ変数,関数へのポインタ渡し
プログラミング序論演習.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
プログラミング入門2 第9回 ポインタ 情報工学科 篠埜 功.
ポインタとポインタを用いた関数定義.
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
第13回 ポインタ 1 1.
ネットワーク・プログラミング Cプログラミングの基礎.
第5回 プログラミングⅡ 第5回
精密工学科プログラミング基礎 第7回資料 (11/27実施)
第5章 まだまだ続く反復処理!! ~繰り返しその2 for~
プログラミング入門2 第5回 配列 for文 変数宣言 初期化
ループだよ!難しいよ! 第5章 while(ループ);.
標準入出力、変数、演算子、エスケープシーケンス
cp-3. 計算 (C プログラミング演習,Visual Studio 2019 対応)
第4章 double 小数型の変数;.
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
プログラミング1 プログラミング演習I 第2回.
湘南工科大学 2013年10月22日 情報理論2 湘南工科大学情報工学科 准教授 小林 学.
プログラミング入門2 第5回 配列 変数宣言、初期化について
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第9回(後半第3回) 課題の回答
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
C言語講座第5回 2017 構造体.
岩村雅一 知能情報工学演習I 第13回(後半第7回) 岩村雅一
プログラミング演習I 補講用課題
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

C言語講座 第3回 ポインタ、配列

ポインタとは 変数のメモリ上のアドレスを格 納するもの。 アドレスとは 【名詞】address : 住所, あて名, 所番地 メモリ上の場所のこと。

ポインタの使い方・書き方 #include <stdio.h> int main(){ } int a=3; int* pa;//ポインタpaを宣言 pa=&a;//ポインタpaにaのアドレスを格納 printf(“aの値は %d \n”,*pa);//paが指しているもの(a)の中身を表示 Printf(“aのアドレス(pa)は %d \n\n”,pa);//指しているもののアドレスを表示 return 0; }

ポインタの使い方・書き方 int* ポインタ変数名   int型ポインタ変数の宣言 &変数名  変数のアドレスを表す & : アドレス演算子

*の使い方 ・・・ a pa メモリ ↓aのアドレスを持っている paの中に入っている アドレス先(a)を見る printf(aの値は %d \n",*pa); ・・・ a pa

次に *pa = 7; printf("paが指しているものの中身は %d \n\n“, a); を追加すると

scanfについて scanf関数も 今まで使っていたこの&はaのアドレスを渡していたと いうことになります。 int a; scanf(“%d” ,&a ); 今まで使っていたこの&はaのアドレスを渡していたと いうことになります。 scanf関数は “アドレスが示す場所” を入力された値に 書き換える関数だったと分かります。

*の使い方 つまり、 *ポインタ変数 はアドレスの先の中身を表す ポインタ変数を使うことで間接的に値を変えることがで きる。 ということです

なぜポインタを使うのか aの値を変えたいのであれば直接変え ればいいのでは?と思うかもしれませ んが関数へ“アドレス渡し”する時に役 に立ちます。(これは次回やります)

ポインタまとめ int* ポインタ変数名 int型のポインタ 変数の宣言 &変数名 変数のアドレスを表す &変数名 変数のアドレスを表す *ポインタ変数名 ポインタ変数の先 の中身を表す ポインタを使うことでより動作の軽いプログラムを作るこ とができる

以上を踏まえて 配列を導入していきます!

配列とポインター int number[]={0,1,2}; main文の中に上のように配列を定義する。 ここでのnumberは&number[0]同じになります なのでprintf(“%d”,*number) とprintf(“%d”,number[0])は同じものを表現していること になります。 ・

・・・さらに 先程の printf(“%d\n”,*number); の下に printf(“%d\n”,*(number+1)); と入力すると Printf(“%d\n”,number[1]);とおなじものをあらわしている ことになります。

配列を用いたポインタ a[b]=*(a+b)

このような実行結果になるようにしてください 演習問題1 5つのint型要素(50,20,35,68,75) をもつ配列をつくり、最大値を出 力するコードを書いてください ※配列の要素はキーボードの標準 入力を用いてください このような実行結果になるようにしてください

演習問題1 解答例 #include<stdio.h> int main(){ int a[5]; 演習問題1 解答例 #include<stdio.h> int main(){ int a[5]; int max; printf("5つの数を入力してください\n"); for (int i = 0; i < 5; i++) { scanf("%d",&a[i]); } max = a[0]; for (int i = 0; i < 5; i++) { if (max < a[i]) max = a[i]; } printf("最大値は%dです\n", max); return 0;

演習問題2 配列v[]に{5,3,9,8,2,6,3,2}をセットする.要 素値がd(の値)の倍数であるものについて, それらの総和および総積を表示してください. なお,int型変数dの値はキーボード(標準入 力)から読み込んでください.

演習問題2 解答例 #include<stdio.h> int main(){ sum += a[i]; int a[] = {5,3,9,8,2,6,3,2}; seki *= a[i]; int sum=0,d,seki=1; } printf("dを入力してください\n"); scanf("%d", &d); printf("総和は%dです\n総積は%d です\n", sum,seki); for (int i = 0; i < 8; i++) { if (a[i] % d == 0)

演習3 (時間余った人用) 3次元ベクトルv={3,4,5}とx={1,2,3}を定義する。 これをポインタpv,pxを用いてベクトルv-xの距離をもとめよ。

演習3 解答例 #include <stdio.h> #include <math.h> main(){ 演習3 解答例 #include <stdio.h> #include <math.h> main(){ int i; double v[3]={3,4,5},x[3]={1,2,3}; double *pv,*px; double sum,dist; pv=v; px=x; sum=0.0; for(i=0; i<N; i++){ sum+=(*(pv+i)-*(px+i))*(*(pv+i)-*(px+i)); } dist=sqrt(sum); printf(“距離は%lf\n”,dist);

お疲れ様でした!!