Google

東海大学理学部物理学科素粒子理論・安江研究室  

ホーム 最新情報 サイトマップ

C言語第6回

上へ C言語第1回 C言語第2回 C言語第3回 C言語第4回 C言語第5回 C言語第6回 C言語第7回 C言語第8回 Visual Studio 2005 VisualC++6.0 C言語教科書

PDFファイルの印刷

【学内】PDFファイルリーダーで印刷可能です。PDFファイルでの配布pdfのリンクをクリックしてください。現われる講義録をで印刷してください。

PDFファイル閲覧・印刷にはPDFファイルリーダーが必要です。
無償で使用できる高性能なPDF作成ソフト

第6回:ポインタと文字列の基礎 (PDFファイルでの配布:c6.pdf(Web版は更新されていません、pdfをご覧下さい)

目次

1.文字列=番地数値

2.文字列の格納

3.文字列自身と番地

プログラム例(repo12.c)

4.文字配列の大きさと文字列の長さ

プログラム例(repo13.c)

5.'A'と"A"

6.文字列操作

例題】文字列複写する

プログラム例(repo14.c)

7.標準文字列操作関数

プログラム例(repo15.c)

第六回目レポート

【1】文字列=番地数値教科書96ページの7・2・3「文字列の終端」参照)

  • 連続した文字の並び
  • NULL文字(¥0)で修了
  • ””は番地数値

コンピュータは「Tokai」を適当な番地、仮に100番地とすると、に格納し、その後は「"Tokai"」で番地数値となる。

目次へ戻る
【2】文字列の格納教科書96ページの7・2・3「文字列の終端」参照)

文字を格納後、最後に

を格納する。いつも文字数より1つ多くなりますので注意しましょう。

文字列:Tokaiを文字型(char)配列に格納するには...

の6文字分用意します。文字型配列名を「s」とします(s for string:文字列の意味)。

文字列の先頭番地は、「Tokai+\0」を格納している「s番地」となる。仮に、それを400番地とすると...

目次へ戻る
【3】文字列自身と番地教科書117ページの9・3・3「配列とポインタの初期化の類似性」参照)

普通の数値(文字コード:'A'=65=0x41)か番地数値か2つの使い方:

プログラムで調べると...

目次へ戻る
【4】文字配列の大きさと文字列の長さ教科書128ページ10・4・4「自作strlen関数」参照)

用意する格納箱の数は、

文字数+¥0

の個数必要であるが、多すぎても問題はない。

 

さて、格納されている文字数を求めてみよう。

なので、

すれば、文字数がわかる。そこで

と順序よく考えればよい。これらを集めてプログラムすれば

目次へ戻る
【5】'A'と"A"教科書128ページ6・4・1「printfの文字表示」参照)

目次へ戻る
【6】文字列操作教科書115ページ9・1「配列と番地表記法」参照)

元の番地はいつも必要。メモリ内で固定番地になっている。固定番地間を動き回る”人”がいる:番地変数(ポインタ)。教科書115ページを参照するとよい。

 

【例題】文字列を格納する文字(char)型の配列Aを"Tokai"で初期化し、同じ大きさの配列Bに複写する

 

 

これらを参考にしてプログラムする事がレポートの3)です。最後に「¥0」も複写しないといけません。つぎに、固定番地間を動き回れる番地変数(ポインタ)を用いたらどうなるか見る。

そこで、順に番地を増やしていき、中身が¥0になったら中止する。

このような番地の増加法を用いた複写法は次のように書ける

目次へ戻る
【7】標準文字列操作関数教科書122ページ10・4「文字列操作関数」参照)

文字列のコピーはよく使うので標準的な命令として用意されている。

string.h

#include」すること。そのほか、文字列の長さや、文字列の結合などいくつか用意されている。

文字列操作では文字列を複写や結合するとき、十分に記憶領域を確保しておくこと。さもないと、コンピュータの予期しない場所にはみ出して書き換えてしまうので、コンピュータが停止したりしてしまう。

strcat関数での例教科書123ページ10・4・1「strcat関数」参照)

目次へ戻る
第六回目レポート(Web上の講義録は最新ではありません。必ずPDFファイルで確認するように)

学生証番号と氏名を明記すること

必ず表紙を付け、このレポート問題を印刷し表紙の次にいれること
(A4レポート用紙)

  • 1)repo12.c
    • プログラム
    • 実行したときの画面コピー
    • for文を用い、格納番地も一緒に、出力例の様に表示させる
      • プログラム
      • 実行したときの画面コピー
      • 最初の番地(この例ではFFF0)ともう1つの番地(この例では00AA)はどんな意味を持っているか?

出力例

wpe2D.jpg (11226 バイト)

以上の3点(計5問)を提出すること。

  • 2)repo13.cでi++と++iを使用しても同じプログラムが作れます。
    • プログラム
    • 実行したときの画面コピー

    i++と++iを使用してもア)イ)のように同じ様なプログラムが作れます。

    • この2つのプログラムから「i++」と「++i」の違いを説明せよ。適当に「printf」を追加し、i がどのように増えていくかモニターするとよい。
    • 「SUUCHI s[ ] = "Tokai";」の代わりに「SUUCHI s[ ] = "A";」 を用いたとき、2つのプログラムはどう振る舞うか説明
    • プログラムア)を以下のような簡潔なプログラムにしたい。「???」はどんなプログラム文なるか答えなさい。

ア)とイ)のプログラム

以上の5点を提出すること。

  • 3)【例題】文字列を格納する文字(char)型の配列Aを"Tokai"で初期化し、同じ大きさの配列Bに複写する」を完成させた
    • プログラム
    • 実行したときの画面コピー

    の2点を提出すること。

  • 4)repo14.cで、
    • プログラム
    • 実行したときの画面コピー

    の2点を提出すること。 また、i++と++iを使用しても同じプログラムが作れます。

    while(*ptrA++=*ptrB++)をwhile(*++ptrA=++*ptrB)に変更するとどんな結果になるか調べ、その

    • プログラム
    • 実行したときの画面コピー
    • なぜそのような表示になるかその理由

    の3点を提出すること。

  • 5)標準文字列操作関数の「strcat」をつかったrepo15.cを参考にして「正しい例」の
    • プログラム
    • 実行したときの画面コピー

    の2点を提出すること。 教科書122ページから124ページを参照するとよい。

目次へ戻る

前へ ホーム 上へ 次へ

このWeb サイトではインターネットエクスプローラVer.3.0あるいはそれ以上が推奨です Internet Explorer
この Web サイト(since 1997年12月1日)に関する質問やコメントについては、Mail.gif (4196 バイト)安江 まで電子メールをお送りください。
Copyright © 1997-2022/10 東海大学理学部物理学科安江研究室 All rights reserved
最終更新日: 2022年10月14日
マイクロソフト Front Page98